diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cdd04e32c364..41cd2923af08 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -146,6 +146,28 @@ The previous code made compliant: code ``` +### Do not compare boolean values to TRUE or FALSE + +Do not compare boolean values to TRUE or FALSE. For TRUE you should just check if there's a value in that address. For FALSE you should use the ! operator. An exception is made to this when working with JS or other external languages. If a function/variable can contain more values beyond null/0 or TRUE, use numbers and defines instead of true/false comparisons. + +```dm +// Bad +var/thing = pick(list(TRUE, FALSE)) +if(thing == TRUE) + return "bleh" +var/other_thing = pick(list(TRUE, FALSE)) +if(other_thing == FALSE) + return "meh" + +// Good +var/thing = pick(list(TRUE, FALSE)) +if(thing) + return "bleh" +var/other_thing = pick(list(TRUE, FALSE)) +if(!other_thing) + return "meh" +``` + ### User Interfaces All new user interfaces in the game must be created using the TGUI framework. Documentation can be found inside the [`tgui/docs`](../tgui/docs) folder, and the [`README.md`](../tgui/README.md) file. This is to ensure all ingame UIs are snappy and respond well. An exception is made for user interfaces which are purely for OOC actions (Such as character creation, or anything admin related) @@ -154,6 +176,19 @@ All new user interfaces in the game must be created using the TGUI framework. Do The use of the `:` operator to override type safety checks is not allowed. You must cast the variable to the proper type. +### Do not access return value vars directly from functions + +The use of the pointer operator, `.`, should not be used to access the return values of functions directly. This can cause unintended behavior and is difficult to read. + +```dm +//Bad +var/our_x = get_turf(thing).x + +//Good +var/turf/our_turf = get_turf(thing) +var/our_x = our_turf.x +``` + ### Type paths must begin with a / eg: `/datum/thing`, not `datum/thing` @@ -354,7 +389,7 @@ This is clearer and enhances readability of your code! Get used to doing it! ### Player Output -Due to the use of "Goonchat", Paradise requires a special syntax for outputting text messages to players. Instead of `mob << "message"`, you must use `to_chat(mob, "message")`. Failure to do so will lead to your code not working. +Due to the use of "TGchat", Paradise requires a special syntax for outputting text messages to players. Instead of `mob << "message"`, you must use `to_chat(mob, "message")`. Failure to do so will lead to your code not working. ### Use early returns @@ -753,7 +788,7 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c `Headcoders` are the overarching "administrators" of the repository. People included in this role are: * [farie82](https://github.com/farie82) -* [Fox P McCloud](https://github.com/Fox-McCloud) +* [Charliminator](https://github.com/hal9000PR) * [SteelSlayer](https://github.com/SteelSlayer) --- @@ -762,7 +797,6 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c * [AffectedArc07](https://github.com/AffectedArc07) -* [Charliminator](https://github.com/hal9000PR) * [lewcc](https://github.com/lewcc) * [S34N](https://github.com/S34NW) @@ -776,6 +810,8 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c * [Contrabang](https://github.com/Contrabang) * [Burzah](https://github.com/Burzah) * [DGamerL](https://github.com/DGamerL) +* [Warriorstar](https://github.com/warriorstar-orion) +* [Henri215](https://github.com/Henri215) --- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 2d17e96659c2..56aff08b4fbb 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -4,8 +4,8 @@ blank_issues_enabled: false contact_links: - name: Feature Request - url: https://www.paradisestation.org/forum/60-suggestions/ - about: Please place all feature requests at the following link. (Paradise Station Forums) + url: https://discord.com/channels/1097181193939730453/1181261198096875670 + about: Запросы новых фич следует оставлять на форуме ss13-трекер в дискорде. - name: Exploit Reports - url: https://www.paradisestation.org/forum/179-exploit-reports/ - about: If your issue is an ingame exploit that allows players to gain an unfair advantage, or an issue which could affect server stability or security, please file it here so that it is safe from prying eyes. (Paradise Station Forums) + url: https://github.com/ss220club/Paradise-SS220/security + about: Критические баги, которые могут быть использованы со злыми намерениями следует оставлять по ссылке. diff --git a/.github/ISSUE_TEMPLATE/issue_report.yml b/.github/ISSUE_TEMPLATE/issue_report.yml index fd271a6f14b6..5374a25322e7 100644 --- a/.github/ISSUE_TEMPLATE/issue_report.yml +++ b/.github/ISSUE_TEMPLATE/issue_report.yml @@ -12,65 +12,55 @@ # name: "Issue Report" #title: "[Bug]: " | if you want to have a have it automatically say [Bug] when they start the form -description: "File an issue report to make us aware of a bug or issue." -#labels: [Bug] | Auto labels the post, as we do not use this, commenting out, purely as reference +description: "Доложите о проблемах или багах, что бы мы могли их исправить." +#labels: "Баг" body: - type: markdown attributes: - value: Thanks for taking the time to fill out this issue report! Don't forget to give it a meaningful title so users can find the report easily. - - type: checkboxes - id: not_an_exploit - attributes: - label: Exploit Reports - description: "[If your issue is an ingame exploit that allows players to gain an unfair advantage, or an issue which could affect server stability or security, please file it at this link so that it is safe from prying eyes.](https://www.paradisestation.org/forum/179-exploit-reports/)" - options: - - label: I confirm this issue is not an exploit. (Required) - required: true + value: Спасибо за оставленный отчёт! Не забудьте дать ему соответствующее проблеме название для упрощения работы другим. - type: input id: version attributes: label: BYOND Version - description: "What BYOND version were you using when the issue occured? (Find this by pressing the cog in the top-right of the main BYOND menu, then 'About BYOND...') (Required)" - validations: - required: true + description: "На какой версии BYOND встретился баг. (Если уверены, что не связано - можно пропустить.)" - type: textarea id: description attributes: - label: Issue Description - description: What is the problem? (Required) - placeholder: I tried buckling myself to a chair but ended up on lavaland! + label: Описание проблемы + description: В чем состоит суть проблемы? (Обязательное поле) + placeholder: Я сел на стул, от чего взорвался, а мой мозг оказался в душе на ЦК! validations: required: true - type: textarea id: what-expected attributes: - label: What did you expect to happen? - description: Why do you think this is an issue? - placeholder: I expected to be strapped to a chair. + label: Что должно было произойти? + description: Почему вы считаете это проблемой? + placeholder: Я ожидал, что я просто сяду на стул и буду сидеть. - type: textarea id: what-happened attributes: - label: What happened instead? - description: How is what happened different from what you expected? - placeholder: I got sent to lavaland and died. + label: Что случилось вместо этого? + description: Как произошедшее отличается от ваших ожиданий? + placeholder: Я умер и оказался на ЦК. - type: textarea id: why-bad attributes: - label: Why is this bad/What are the consequences? - description: Why do you think this is an important issue? - placeholder: People sitting in chairs on the station should not end up being devoured by drakes. + label: Почему это плохо/Какие последствия? + description: Почему вы считаете эту проблему значительной? + placeholder: Игроки должны иметь возможность сидеть на стульях, не взрываясь. - type: textarea id: how-to-reproduce attributes: - label: Steps to reproduce the issue. - description: The most important section. Review everything you did leading up to causing the issue. (Required) + label: Шаги для повторения проблемы. + description: Самая важная часть. Опишите ВСЁ, что вы делали, что бы встретиться с проблемой. (Обязательное поле) placeholder: Find a chair, buckle yourself into it, be eaten by dragon. validations: required: true @@ -78,22 +68,22 @@ body: - type: textarea id: when-problem-start attributes: - label: When did the problem start happening? - description: If your report is about something that used to work but no longer does, when was the last time you remember it working? (Required) - placeholder: I could sit fine last week, so sometime around then. + label: Когда проблема началась? + description: Если отчет связан с тем, что раньше работало иначе, опишите последний раз, когда механика работала корректно. (Обязательное поле) + placeholder: Я мог садиться на стулья без проблем неделю назад, так что примерно тогда. validations: required: true - type: textarea id: extra-information attributes: - label: Extra information - description: Anything else you can tell us. - placeholder: "I think this issue was introduced in the following PR https://github.com/ParadiseSS13/Paradise/pull/18477" + label: Дополнительная информация + description: Всё, что вы считаете важным/относящимся к проблеме. + placeholder: "Я думаю, что проблема начала появляться после этого PR https://github.com/ss220club/Paradise-SS220/pull/583" - type: textarea id: logs attributes: - label: Relevant log output/runtime error - description: Please copy and paste any relevant log output or runtime if you have access to this. Please censor any ckeys or IP addresses. + label: Связанные логи + description: Пожалуйста, предоставьте связанные логи или рантаймы, если имеете к ним доступ(Лучше цензурить IP адреса). render: DM diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c853b70ade8d..031ba9f6b122 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,16 +5,18 @@ - + ## Почему это хорошо для игры ## Изображения изменений + ## Тестирование + ## Changelog diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5652bd39f35f..a294c4b493c4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/SpacemanDMM key: ${{ runner.os }}-spacemandmm @@ -38,10 +38,13 @@ jobs: python tools/ci/illegal_dme_files.py ${GITHUB_WORKSPACE} python -m tools.ci.check_icon_conflicts python -m tools.maplint.source --github - ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 + DREAMCHECKER_EXIT_CODE=0 + ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 || DREAMCHECKER_EXIT_CODE=$? + echo 'DREAMCHECKER_ANNOTATED=1' >> "$GITHUB_ENV" + exit $DREAMCHECKER_EXIT_CODE - name: Annotate Lints uses: yogstation13/DreamAnnotate@v2 - if: always() + if: ${{ always() && env.DREAMCHECKER_ANNOTATED == '1' }} with: outputFile: output-annotations.txt @@ -63,7 +66,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/BYOND key: ${{ runner.os }}-byond @@ -72,7 +75,7 @@ jobs: tools/ci/install_byond.sh source $HOME/BYOND/byond/bin/byondsetup tools/ci/generate_maplist.sh - tools/ci/dm.sh -DCIMAP paradise.dme + DreamMaker -DMULTIINSTANCE -DCIMAP paradise.dme unit_tests_and_sql: name: Unit Tests + SQL Validation @@ -93,7 +96,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: $HOME/BYOND key: ${{ runner.os }}-byond @@ -112,7 +115,7 @@ jobs: run: | tools/ci/install_byond.sh '${{ matrix.byondtype }}' source $HOME/BYOND/byond/bin/byondsetup - tools/ci/dm.sh -DCIBUILDING paradise.dme + DreamMaker -DMULTIINSTANCE -DCIBUILDING paradise.dme echo '${{ matrix.maptype }}' > data/next_map.txt tools/ci/run_server.sh diff --git a/.vscode/extensions.json b/.vscode/extensions.json index b5147f210dd7..8046f3196652 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,6 +7,7 @@ "eamodio.gitlens", "usernamehw.errorlens", "anturk.dmi-editor", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "arcanis.vscode-zipfs" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 9c4c5f94ab1f..e6261aec1a1a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,16 @@ ], // ESLint settings: "eslint.workingDirectories": [ - "tgui/" + "./tgui" ], + "search.exclude": { + "**/.yarn": true, + "**/.pnp.*": true + }, + "eslint.nodePath": "tgui/.yarn/sdks", + "prettier.prettierPath": "tgui/.yarn/sdks/prettier/index.cjs", + "typescript.tsdk": "tgui/.yarn/sdks/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, "eslint.rules.customizations": [ // We really want to fail the CI builds on styling errors, // but it's better to show them as yellow squigglies in IDE @@ -22,5 +30,6 @@ }, "[scss]": { "editor.rulers": [80] - } + }, + "editor.formatOnSave": true } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index dca695c03ccc..47c848d24001 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -14,7 +14,7 @@ "type": "shell", "command": "tgui/bin/tgui-build", "windows": { - "command": ".\\tgui\\bin\\tgui-build.bat" + "command": ".\\tgui\\bin\\tgui.bat" }, "problemMatcher": [ "$tsc", @@ -37,18 +37,5 @@ "label": "tgui: run dev server" } , - { - "type": "shell", - "command": "tgui/bin/tgui-formatting", - "windows": { - "command": ".\\tgui\\bin\\tgui-formatting.bat" - }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], - "group": "build", - "label": "tgui: run prettier formatting" - } ] } diff --git a/README.md b/README.md index 8e91c5e0afc9..dd18e2cb1885 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Paradise WyccStation SS220 -[![CI](https://github.com/ParadiseSS13/Paradise/workflows/CI/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3ACI) -[![Render Nanomaps](https://github.com/ParadiseSS13/Paradise/workflows/Render%20Nanomaps/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3A%22Render+Nanomaps%22) -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Average time to resolve an issue") -[![Percentage of issues still open](http://isitmaintained.com/badge/open/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Percentage of issues still open") +[![CI](https://github.com/ss220club/Paradise-SS220/workflows/CI/badge.svg)](https://github.com/ss220club/Paradise-SS220/actions?query=workflow%3ACI) +[![Render Nanomaps](https://github.com/ss220club/Paradise-SS220/workflows/Render%20Nanomaps/badge.svg)](https://github.com/ss220club/Paradise-SS220/actions?query=workflow%3A%22Render+Nanomaps%22) +[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/ss220club/Paradise-SS220.svg)](https://isitmaintained.com/project/ss220club/Paradise-SS220 "Average time to resolve an issue") +[![Percentage of issues still open](http://isitmaintained.com/badge/open/ss220club/Paradise-SS220.svg)](https://isitmaintained.com/project/ss220club/Paradise-SS220 "Percentage of issues still open") [![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](http://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/contains-technical-debt.svg)](http://forthebadge.com) diff --git a/_build_dependencies.sh b/_build_dependencies.sh index d146ad1c518d..058f897b55b6 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -2,15 +2,15 @@ # For dreamchecker export SPACEMANDMM_TAG=suite-1.7.1 # For TGUI -export NODE_VERSION=18 +export NODE_VERSION=20 # Stable Byond Major export STABLE_BYOND_MAJOR=515 # Stable Byond Minor -export STABLE_BYOND_MINOR=1620 +export STABLE_BYOND_MINOR=1630 # Beta Byond Major export BETA_BYOND_MAJOR=515 # Beta Byond Minor -export BETA_BYOND_MINOR=1620 +export BETA_BYOND_MINOR=1630 # Python version for mapmerge and other tools export PYTHON_VERSION=3.11.6 # RUSTG version diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index e8c0cb77cd02..4dae54a2a4f3 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -19,6 +19,31 @@ }, /turf/space, /area/station/maintenance/auxsolarstarboard) +"abD" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"abM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) "abQ" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/starboard2) @@ -120,7 +145,7 @@ "acC" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "acE" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -176,7 +201,7 @@ /area/station/security/execution) "adb" = ( /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "add" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_1) @@ -208,11 +233,11 @@ /area/station/hallway/primary/central) "adt" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 + dir = 4 }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "adu" = ( /obj/machinery/atmospherics/portable/canister/air, /obj/machinery/atmospherics/unary/portables_connector{ @@ -220,7 +245,7 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "adx" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -247,7 +272,7 @@ /area/shuttle/pod_1) "adN" = ( /turf/simulated/wall/r_wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "adO" = ( /obj/item/radio/intercom{ name = "east bump"; @@ -258,23 +283,40 @@ }, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_1) +"adU" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos/distribution) +"adX" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "adZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aea" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aeb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aec" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -284,7 +326,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "aed" = ( /obj/docking_port/mobile/pod{ id = "pod1"; @@ -312,7 +354,14 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"aek" = ( +/obj/structure/table, +/obj/machinery/kitchen_machine/microwave, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "aet" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/structure/lattice, @@ -326,13 +375,13 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aez" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aeA" = ( /obj/machinery/light/small{ dir = 4 @@ -341,13 +390,17 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aeC" = ( /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"aeF" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/wood, +/area/station/medical/psych) "aeI" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -355,14 +408,14 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aeJ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aeK" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 8 @@ -375,10 +428,10 @@ "aeM" = ( /obj/machinery/door/airlock/external, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "aeN" = ( /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aeO" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -390,13 +443,13 @@ pixel_x = 28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aeP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aeQ" = ( /obj/docking_port/mobile/pod{ dir = 4; @@ -423,7 +476,7 @@ "afb" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "afc" = ( /obj/structure/sign/pods{ pixel_x = -32 @@ -432,7 +485,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "afd" = ( /obj/machinery/status_display{ pixel_y = 32 @@ -454,7 +507,7 @@ pixel_x = -28 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afg" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/auxsolarstarboard) @@ -463,7 +516,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "afj" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/stripes/line{ @@ -474,26 +527,26 @@ pixel_x = 28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "afk" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afl" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afm" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afn" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -543,7 +596,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afB" = ( /obj/structure/cable{ d1 = 2; @@ -556,7 +609,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afC" = ( /obj/structure/cable{ d1 = 4; @@ -570,7 +623,7 @@ dir = 4; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "afJ" = ( /obj/machinery/status_display{ pixel_x = -32 @@ -579,7 +632,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "afL" = ( /turf/simulated/floor/plasteel/white, /area/station/science/misc_lab) @@ -630,20 +683,22 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "age" = ( /obj/structure/sign/vacuum{ pixel_x = -32 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "agg" = ( /obj/machinery/status_display{ pixel_x = -32 @@ -655,7 +710,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "agh" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -671,7 +726,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "agk" = ( /obj/structure/window/reinforced, /obj/structure/shuttle/engine/heater{ @@ -682,6 +737,11 @@ }, /turf/simulated/floor/plating/airless, /area/shuttle/arrival/station) +"ago" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "agp" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -697,7 +757,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "agq" = ( /obj/structure/cable{ d1 = 1; @@ -708,7 +768,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "agA" = ( /obj/structure/sign/vacuum{ pixel_x = -32 @@ -717,7 +777,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "agB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -726,7 +786,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "agC" = ( /obj/structure/sign/vacuum{ pixel_x = 32 @@ -738,7 +798,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "agD" = ( /turf/simulated/wall/mineral/titanium/nodiagonal, /area/shuttle/arrival/station) @@ -754,7 +814,7 @@ dir = 4; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "agJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -765,7 +825,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "agT" = ( /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/suit/storage/hazardvest, @@ -797,17 +857,29 @@ /obj/machinery/cell_charger, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) -"ahg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +"agZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluefull" + }, +/area/station/medical/storage/secondary) +"ahg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "ahh" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -826,10 +898,20 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"ahm" = ( +/obj/structure/table/glass, +/obj/machinery/computer/med_data/laptop, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "ahz" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -839,7 +921,7 @@ locked = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "ahA" = ( /obj/machinery/door/airlock/external{ name = "Arrival Airlock" @@ -848,7 +930,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "ahB" = ( /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock" @@ -862,6 +944,21 @@ "ahC" = ( /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) +"ahD" = ( +/obj/machinery/atmospherics/trinary/filter{ + dir = 8; + filter_type = 2 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "ahE" = ( /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock" @@ -880,7 +977,22 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"ahQ" = ( +/obj/machinery/airlock_controller/air_cycler{ + pixel_y = -25; + vent_link_id = "enginen_vent"; + ext_door_link_id = "enginen_door_ext"; + int_door_link_id = "enginen_door_int"; + ext_button_link_id = "enginen_btn_ext"; + int_button_link_id = "enginen_btn_int" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + autolink_id = "enginen_vent" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/west) "ahV" = ( /obj/item/kirbyplants, /turf/simulated/floor/mineral/titanium/blue, @@ -897,7 +1009,7 @@ /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "ail" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 @@ -919,16 +1031,13 @@ /obj/item/kirbyplants, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aip" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "ait" = ( /obj/machinery/economy/atm{ pixel_y = -32 @@ -939,15 +1048,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aiE" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aiF" = ( /obj/structure/chair{ dir = 8 @@ -955,7 +1069,7 @@ /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "aiG" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/ppflowers, @@ -969,14 +1083,20 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aiI" = ( /obj/structure/chair{ dir = 8 }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"aiL" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "aiX" = ( /obj/structure/chair{ dir = 4 @@ -984,17 +1104,17 @@ /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "ajd" = ( /obj/item/radio/beacon, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "ajf" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "ajq" = ( /obj/structure/cable{ d2 = 4; @@ -1007,7 +1127,7 @@ /obj/item/kirbyplants, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "ajD" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -1091,7 +1211,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aka" = ( /obj/machinery/light{ dir = 1 @@ -1106,15 +1226,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) -"aki" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) +/area/station/hallway/secondary/entry/east) "akw" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -1147,13 +1259,13 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "akQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ name = "Supply Break Room" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plating, /area/station/supply/office) "akY" = ( @@ -1186,19 +1298,29 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "als" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "alt" = ( /obj/structure/sign/vacuum{ pixel_x = 32 @@ -1207,7 +1329,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "alv" = ( /obj/machinery/light/small{ dir = 1 @@ -1221,10 +1343,20 @@ "alx" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aly" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -1240,7 +1372,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "alG" = ( /obj/machinery/status_display{ pixel_x = -32 @@ -1257,7 +1389,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "alH" = ( /obj/structure/computerframe, /turf/simulated/floor/mineral/titanium/blue, @@ -1404,24 +1536,41 @@ icon_state = "redyellowfull" }, /area/station/maintenance/fore2) +"amu" = ( +/obj/structure/morgue, +/obj/effect/landmark/spawner/rev, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "amz" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/important/directional/west, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "amA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "amB" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "amC" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -1479,18 +1628,23 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "amM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "amN" = ( /obj/structure/sign/pods, /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "amP" = ( /obj/structure/cable{ d1 = 1; @@ -1559,22 +1713,22 @@ "ani" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plasteel{ - dir = 8; + dir = 9; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "ank" = ( -/turf/simulated/floor/plasteel/white/corner{ - dir = 4 +/turf/simulated/floor/plasteel{ + icon_state = "purplefull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/primary/aft/south) "anl" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "ann" = ( /obj/machinery/light{ dir = 1 @@ -1583,13 +1737,8 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anp" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, /obj/machinery/camera{ c_tag = "Arrivals Hall Center" }, @@ -1597,11 +1746,12 @@ d2 = 2; icon_state = "0-2" }, +/obj/machinery/power/apc/important/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anr" = ( /obj/structure/cable{ d2 = 4; @@ -1624,27 +1774,31 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "ant" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "arrival" +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/area/station/hallway/secondary/entry) +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "anv" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "any" = ( /turf/simulated/wall/r_wall, /area/station/science/explab/chamber) @@ -1655,14 +1809,14 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anA" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/meat/slab{ +/obj/item/food/snacks/meat/slab{ pixel_x = 6; pixel_y = 11 }, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) @@ -1701,35 +1855,49 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anL" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1742,10 +1910,15 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1753,10 +1926,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/firealarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1764,19 +1947,34 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel/white/corner{ dir = 8 }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anR" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1784,10 +1982,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anU" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1797,10 +2000,15 @@ dir = 4 }, /obj/effect/landmark/lightsout, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anW" = ( /obj/machinery/camera{ c_tag = "Arrivals Hall Starboard"; @@ -1812,10 +2020,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anX" = ( /obj/structure/extinguisher_cabinet{ name = "south bump"; @@ -1827,30 +2040,30 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anY" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "anZ" = ( /turf/simulated/floor/plasteel{ dir = 6; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aoa" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -1886,7 +2099,7 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aof" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/white/side, @@ -1951,13 +2164,13 @@ dir = 8; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aow" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aox" = ( /obj/structure/closet/crate/freezer, /obj/item/reagent_containers/iv_bag/blood/random, @@ -1976,13 +2189,13 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aoB" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aoC" = ( /turf/simulated/wall, /area/station/security/checkpoint/secondary) @@ -2092,7 +2305,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "apa" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -2173,15 +2386,15 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "apj" = ( /obj/machinery/ai_status_display, /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "apk" = ( /obj/machinery/status_display, /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "apl" = ( /obj/structure/filingcabinet, /obj/machinery/firealarm{ @@ -2276,17 +2489,22 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "apv" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "apw" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -2423,11 +2641,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "apV" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -2487,7 +2701,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqa" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -2498,21 +2712,21 @@ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqb" = ( /obj/structure/chair/comfy/brown, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqc" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqd" = ( /obj/structure/chair/comfy/brown, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2520,14 +2734,14 @@ }, /obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqe" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqg" = ( /obj/machinery/hologram/holopad, /obj/structure/cable{ @@ -2558,11 +2772,7 @@ }, /area/station/security/checkpoint/secondary) "aqj" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -2822,25 +3032,30 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqV" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqW" = ( /turf/simulated/floor/carpet, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aqY" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -2856,7 +3071,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "ara" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -2914,11 +3129,7 @@ /area/station/maintenance/fore2) "arg" = ( /obj/structure/chair/stool, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -3070,10 +3281,7 @@ /turf/simulated/floor/plasteel/grimy, /area/station/public/vacant_office) "arE" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/wood, /area/station/public/vacant_office) @@ -3188,7 +3396,7 @@ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "arP" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -3198,7 +3406,22 @@ dir = 4 }, /turf/simulated/floor/carpet, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) +"arQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/landmark/spawner/nukedisc_respawn, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/virologist, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "arS" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -3319,10 +3542,15 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -3331,7 +3559,7 @@ dir = 4 }, /turf/simulated/floor/carpet, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "ask" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -3342,7 +3570,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asl" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -3443,14 +3671,19 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asC" = ( /obj/structure/cable{ d1 = 1; @@ -3467,16 +3700,21 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asE" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asG" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -3622,20 +3860,25 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asY" = ( /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "asZ" = ( /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "ata" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -3759,7 +4002,7 @@ /area/station/maintenance/fore) "att" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood{ icon_state = "wood-broken" }, @@ -3860,7 +4103,7 @@ }, /obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "atD" = ( /obj/item/kirbyplants, /obj/machinery/newscaster{ @@ -3869,7 +4112,7 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "atE" = ( /obj/structure/chair/comfy/brown{ dir = 1 @@ -3879,13 +4122,13 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "atF" = ( /obj/structure/table/wood, /obj/item/folder, /obj/item/pen, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "atG" = ( /obj/structure/closet/wardrobe/red, /obj/machinery/newscaster/security_unit{ @@ -4174,10 +4417,7 @@ /area/station/maintenance/electrical_shop) "auo" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -4311,7 +4551,7 @@ dir = 8 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "auI" = ( /turf/simulated/floor/greengrid, /area/station/engineering/controlroom) @@ -4323,6 +4563,11 @@ /area/station/maintenance/fore2) "auK" = ( /obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plating, /area/station/engineering/controlroom) "auL" = ( @@ -4426,14 +4671,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "avc" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "avd" = ( /obj/structure/cable{ d1 = 1; @@ -4457,7 +4702,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "avh" = ( /obj/machinery/light{ dir = 4 @@ -4465,7 +4710,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "avi" = ( /obj/structure/closet/firecloset, /obj/effect/decal/cleanable/dirt, @@ -4579,7 +4824,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/meson, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avz" = ( /obj/structure/cable{ @@ -4590,7 +4835,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avA" = ( /obj/structure/cable{ @@ -4611,7 +4859,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avB" = ( /obj/structure/cable{ @@ -4622,7 +4876,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avC" = ( /obj/machinery/light/small{ @@ -4631,13 +4888,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avE" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avF" = ( /obj/structure/cable{ @@ -4646,24 +4906,12 @@ }, /turf/simulated/floor/plating, /area/station/engineering/controlroom) -"avG" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" - }, -/area/station/engineering/controlroom) -"avI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) "avK" = ( /obj/structure/table/reinforced, /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/tank/internals/emergency_oxygen/engi, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "avL" = ( /obj/structure/sign/barsign{ @@ -4927,7 +5175,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4943,11 +5191,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4955,14 +5208,19 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable{ - d1 = 4; + d1 = 1; d2 = 8; - icon_state = "4-8" + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awk" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4981,7 +5239,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awl" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -5000,7 +5258,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awm" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall15a"; @@ -5023,7 +5281,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5034,7 +5292,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5042,7 +5300,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "awp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5050,7 +5308,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aws" = ( /obj/structure/cable{ d1 = 1; @@ -5171,28 +5429,10 @@ /obj/item/clothing/glasses/meson, /obj/item/analyzer, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"awH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "awI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "awJ" = ( /obj/structure/cable{ @@ -5200,33 +5440,9 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, -/area/station/engineering/controlroom) -"awL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, -/area/station/engineering/controlroom) -"awN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "awO" = ( /obj/structure/cable{ @@ -5234,18 +5450,10 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/greengrid, -/area/station/engineering/controlroom) -"awP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/turf/simulated/floor/greengrid, /area/station/engineering/controlroom) "awQ" = ( /obj/structure/cable{ @@ -5256,9 +5464,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "awR" = ( /obj/structure/cable{ @@ -5266,35 +5472,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/controlroom) -"awS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, -/area/station/engineering/controlroom) -"awT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "awU" = ( /obj/structure/table/reinforced, @@ -5311,7 +5489,7 @@ icon_state = "2-8" }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "awV" = ( /obj/machinery/door/airlock/maintenance, @@ -5389,14 +5567,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "axi" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "axj" = ( /obj/structure/cable{ d1 = 1; @@ -5419,7 +5597,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "axl" = ( /obj/effect/spawner/window/reinforced/plasma, /turf/simulated/floor/plating, @@ -5629,10 +5807,7 @@ }, /area/station/maintenance/disposal) "axE" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/light/small{ dir = 4 }, @@ -5654,13 +5829,13 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "axG" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axI" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5669,7 +5844,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axJ" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5677,16 +5852,15 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/turf_decal/stripes/corner, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axK" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axL" = ( /obj/machinery/light, @@ -5694,14 +5868,14 @@ dir = 4 }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axM" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axN" = ( /obj/item/radio/intercom{ @@ -5712,7 +5886,7 @@ dir = 4 }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axO" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5721,7 +5895,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axP" = ( /obj/structure/sign/electricshock{ @@ -5730,10 +5904,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axQ" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5745,10 +5916,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axS" = ( /obj/structure/sign/nosmoking_2{ @@ -5760,17 +5928,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axT" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axU" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5779,17 +5946,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"axV" = ( -/obj/machinery/atmospherics/trinary/filter{ - dir = 4; - filter_type = "o2"; - on = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axW" = ( /obj/item/kirbyplants, @@ -5802,7 +5959,7 @@ icon_state = "1-2" }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "axY" = ( /obj/structure/grille, @@ -5855,11 +6012,7 @@ }, /area/station/maintenance/fore) "ayh" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/closet/jcloset, /obj/structure/cable{ d2 = 2; @@ -5958,12 +6111,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) -"ayy" = ( -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "ayz" = ( /obj/structure/sign/directions/evac{ pixel_y = -8 @@ -5987,7 +6135,7 @@ "ayF" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayG" = ( /obj/structure/lattice, @@ -6008,28 +6156,19 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) -"ayI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) "ayJ" = ( /obj/machinery/atmospherics/binary/pump{ dir = 1; name = "Gas to Loop" }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayK" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayL" = ( /obj/machinery/ai_status_display, @@ -6056,13 +6195,11 @@ dir = 6 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayR" = ( /obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayT" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -6071,7 +6208,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayV" = ( /obj/structure/cable/yellow{ @@ -6083,7 +6220,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "ayW" = ( /obj/effect/spawner/random_spawners/oil_maybe, @@ -6249,7 +6387,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "azw" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -6466,13 +6604,8 @@ /turf/simulated/floor/plating, /area/station/engineering/engine/supermatter) "azU" = ( -/obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/obj/machinery/atmospherics/trinary/tvalve, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "azV" = ( /obj/structure/cable/yellow{ @@ -6480,11 +6613,10 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "azW" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -6493,7 +6625,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "azY" = ( /obj/structure/window/plasmareinforced{ @@ -6554,9 +6686,6 @@ /turf/space, /area/space/nearstation) "aAf" = ( -/obj/machinery/atmospherics/unary/thermomachine/heater/on{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Supermatter West"; dir = 4; @@ -6564,13 +6693,10 @@ pixel_y = -22 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"aAg" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" +/obj/machinery/atmospherics/unary/thermomachine/heater/on{ + dir = 4 }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aAi" = ( /obj/structure/lattice/catwalk, @@ -6591,7 +6717,7 @@ /area/station/maintenance/fore) "aAk" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -6646,17 +6772,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "aAr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/secondary/entry) +/turf/simulated/wall, +/area/station/hallway/secondary/entry/south) "aAs" = ( /obj/item/reagent_containers/glass/bucket, /obj/item/mop, @@ -6716,7 +6833,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aAB" = ( /obj/machinery/firealarm{ dir = 8; @@ -6745,10 +6862,7 @@ }, /area/station/public/toilet) "aAD" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -6798,7 +6912,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aAI" = ( /obj/structure/table/wood, /obj/item/storage/fancy/crayons, @@ -7016,11 +7130,6 @@ d2 = 4; icon_state = "2-4" }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -7029,7 +7138,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "aBf" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ id_tag = "engsm" @@ -7048,13 +7157,6 @@ /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) -"aBh" = ( -/obj/machinery/atmospherics/unary/thermomachine/freezer{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) "aBi" = ( /obj/structure/window/plasmareinforced{ dir = 4 @@ -7086,7 +7188,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aBk" = ( /obj/structure/window/plasmareinforced{ dir = 8 @@ -7114,7 +7216,7 @@ icon_state = "1-2" }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aBm" = ( /obj/structure/disposalpipe/segment{ @@ -7126,7 +7228,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aBn" = ( /obj/effect/turf_decal/arrows/black{ dir = 8 @@ -7145,10 +7247,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "aBp" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/light/small, /obj/structure/cable, /turf/simulated/floor/plasteel{ @@ -7361,7 +7460,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aBV" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -7378,7 +7477,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/visible, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aBX" = ( /obj/machinery/atmospherics/supermatter_crystal, @@ -7432,7 +7531,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aCf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7463,20 +7562,11 @@ }, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) -"aCi" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) "aCj" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/atmospherics/portable/scrubber, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aCk" = ( /obj/structure/sign/securearea, @@ -7511,7 +7601,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aCr" = ( /obj/structure/reagent_dispensers/watertank, @@ -7708,7 +7799,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aCT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -7727,27 +7819,16 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"aCV" = ( -/obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aCW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aCY" = ( /obj/machinery/atmospherics/meter, @@ -7773,33 +7854,28 @@ "aDc" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aDd" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aDe" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aDf" = ( -/obj/item/wrench, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aDh" = ( /obj/machinery/light{ @@ -7810,14 +7886,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aDi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7865,9 +7939,9 @@ /obj/structure/table, /obj/item/seeds/poppy/lily, /obj/item/seeds/poppy/geranium, -/obj/item/reagent_containers/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, /obj/item/grown/corncob, -/obj/item/reagent_containers/food/snacks/grown/apple, +/obj/item/food/snacks/grown/apple, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/abandoned_garden) @@ -7889,9 +7963,9 @@ /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/reagent_containers/food/snacks/grown/tea, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/tea, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/cherries, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/abandoned_garden) @@ -7962,7 +8036,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aDA" = ( /obj/structure/cable{ d1 = 1; @@ -7970,7 +8044,7 @@ icon_state = "1-2" }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aDB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -7982,11 +8056,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aDC" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -8005,11 +8084,16 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aDH" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -8119,17 +8203,6 @@ }, /turf/space, /area/station/maintenance/auxsolarport) -"aEd" = ( -/obj/machinery/atmospherics/trinary/filter{ - dir = 1; - filter_type = "n2"; - name = "nitrogen filter"; - on = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, -/area/station/engineering/controlroom) "aEe" = ( /obj/machinery/light{ dir = 8 @@ -8139,18 +8212,17 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aEf" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aEg" = ( /turf/simulated/floor/plasteel{ @@ -8161,11 +8233,7 @@ /obj/machinery/atmospherics/binary/pump{ name = "Gas to Filter" }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_x = -24; +/obj/machinery/power/apc/critical/directional/west{ shock_proof = 1 }, /obj/structure/cable/yellow{ @@ -8188,7 +8256,7 @@ "aEj" = ( /obj/machinery/atmospherics/binary/pump, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aEk" = ( /obj/structure/cable/yellow{ @@ -8204,20 +8272,12 @@ "aEl" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8; - name = "Nitrogen to Loop" + name = "Pure to Engine" }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"aEm" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aEn" = ( /obj/structure/cable/yellow{ @@ -8232,7 +8292,8 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aEo" = ( /obj/machinery/atmospherics/unary/portables_connector{ @@ -8244,7 +8305,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/portable/scrubber, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aEp" = ( /obj/structure/lattice, @@ -8294,7 +8355,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aEy" = ( /obj/structure/cable{ d1 = 4; @@ -8328,10 +8389,7 @@ /turf/simulated/floor/plasteel, /area/station/service/janitor) "aED" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -8343,7 +8401,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aEG" = ( /obj/structure/cable{ d1 = 1; @@ -8481,15 +8539,13 @@ dir = 1; name = "Gas to Thermo" }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFe" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -8503,22 +8559,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"aFf" = ( -/obj/machinery/atmospherics/trinary/filter{ - dir = 8; - filter_type = "n2" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFg" = ( /obj/structure/sign/fire, @@ -8538,15 +8579,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFj" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFk" = ( /obj/machinery/atmospherics/unary/portables_connector{ @@ -8558,22 +8597,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) -"aFl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFm" = ( /obj/machinery/hydroponics/soil, @@ -8631,7 +8655,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aFs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8685,29 +8709,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "aFC" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; pixel_x = 30 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aFD" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ @@ -8739,7 +8757,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aFI" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -8806,18 +8824,15 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFW" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFX" = ( /obj/machinery/atmospherics/binary/pump{ @@ -8838,7 +8853,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aFY" = ( /obj/machinery/camera{ @@ -8846,10 +8861,6 @@ network = list("SS13","Engineering") }, /obj/machinery/atmospherics/pipe/manifold/visible, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -8858,8 +8869,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, -/area/station/engineering/engine/supermatter) +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "aFZ" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -8876,7 +8887,7 @@ name = "north bump"; pixel_y = 28 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGa" = ( /obj/machinery/atmospherics/meter, @@ -8889,13 +8900,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGb" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -8909,14 +8919,9 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGc" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -8927,7 +8932,10 @@ icon_state = "1-8" }, /obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 + }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGd" = ( /obj/structure/table/reinforced, @@ -8938,7 +8946,7 @@ }, /obj/item/tank/internals/plasma, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGe" = ( /obj/structure/sink{ @@ -8971,9 +8979,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGh" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -8982,20 +8988,18 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGi" = ( /obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aGj" = ( /obj/structure/cable{ @@ -9081,11 +9085,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/bar) "aGw" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/light/small{ dir = 1 }, @@ -9153,7 +9153,7 @@ }, /obj/structure/table/wood, /obj/item/book/manual/barman_recipes, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/machinery/requests_console{ department = "Bar"; @@ -9195,11 +9195,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/bar) "aGH" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -9208,7 +9204,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aGI" = ( /obj/structure/cable{ d1 = 1; @@ -9225,7 +9221,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aGJ" = ( /obj/machinery/alarm{ dir = 8; @@ -9236,7 +9232,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aGK" = ( /turf/simulated/wall, /area/station/supply/office) @@ -9296,14 +9292,6 @@ icon_state = "neutralfull" }, /area/station/security/permabrig) -"aGW" = ( -/obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/turf/space, -/area/space/nearstation) "aGY" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/auxsolarport) @@ -9348,7 +9336,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aHd" = ( /obj/item/kirbyplants, @@ -9356,16 +9345,22 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/abandoned_garden) "aHe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) +"aHg" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, /turf/simulated/floor/plasteel{ - icon_state = "yellowfull" + dir = 8; + icon_state = "whiteblue" }, -/area/station/engineering/controlroom) +/area/station/medical/storage) "aHh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -9373,9 +9368,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aHj" = ( /obj/machinery/hydroponics/soil, @@ -9392,32 +9385,16 @@ icon_state = "yellowfull" }, /area/station/engineering/control) -"aHl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, -/area/station/engineering/controlroom) "aHn" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aHo" = ( /obj/machinery/atmospherics/binary/pump{ @@ -9427,7 +9404,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aHp" = ( /obj/structure/cable{ @@ -9438,14 +9415,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aHq" = ( /obj/structure/table, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/item/shovel/spade, /obj/item/reagent_containers/glass/bottle/nutrient/rh{ pixel_x = -4; @@ -9618,7 +9592,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aHT" = ( /obj/machinery/conveyor{ dir = 4; @@ -9906,20 +9880,20 @@ /turf/simulated/floor/plasteel/dark, /area/station/maintenance/incinerator) "aIy" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, +/obj/structure/table/reinforced, +/obj/item/clipboard, +/obj/item/folder/yellow, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/incinerator) "aIz" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/incinerator) "aIA" = ( @@ -9940,7 +9914,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aIC" = ( /obj/structure/cable{ @@ -9949,7 +9923,7 @@ icon_state = "2-4" }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aID" = ( /obj/structure/cable{ @@ -9958,7 +9932,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aIE" = ( /obj/machinery/light, @@ -9971,7 +9945,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aIF" = ( /obj/machinery/firealarm{ @@ -9985,7 +9959,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aIG" = ( /obj/structure/cable{ @@ -9996,7 +9970,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aIH" = ( /obj/structure/cable{ @@ -10011,7 +9985,7 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aII" = ( /obj/structure/cable{ @@ -10020,7 +9994,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/corner, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aIM" = ( /obj/structure/barricade/wooden, @@ -10137,7 +10111,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aJd" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -10203,7 +10177,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aJt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -10260,7 +10234,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aJE" = ( /obj/machinery/conveyor/south{ @@ -10277,7 +10251,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aJG" = ( /obj/structure/table/reinforced, @@ -10288,7 +10262,7 @@ pixel_y = -4 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aJH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -10297,9 +10271,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aJI" = ( /obj/machinery/power/terminal{ @@ -10330,11 +10302,6 @@ /area/station/maintenance/auxsolarport) "aJN" = ( /obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -10366,7 +10333,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -10378,24 +10344,32 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "aJR" = ( /obj/machinery/power/terminal{ dir = 1 }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 1 }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -10406,11 +10380,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -10631,7 +10601,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aKu" = ( /obj/machinery/hologram/holopad, /obj/structure/cable{ @@ -10645,7 +10615,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aKv" = ( /obj/machinery/light{ dir = 1 @@ -10674,7 +10644,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aKx" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -10758,6 +10728,17 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"aKQ" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/regular, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "aKR" = ( /obj/machinery/status_display{ pixel_y = 32 @@ -10852,10 +10833,7 @@ }, /area/station/maintenance/incinerator) "aLc" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -10884,22 +10862,23 @@ }, /area/station/maintenance/incinerator) "aLg" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 +/obj/machinery/atmospherics/binary/pump{ + name = "Mix to Turbine"; + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/maintenance/incinerator) "aLh" = ( -/obj/machinery/atmospherics/binary/pump{ - name = "Mix to Turbine" - }, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -10910,6 +10889,15 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Port to Turbine" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -10925,17 +10913,16 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/maintenance/incinerator) "aLk" = ( /obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -10949,6 +10936,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -10960,6 +10950,9 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -10971,7 +10964,7 @@ /area/station/engineering/controlroom) "aLq" = ( /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "aLs" = ( /obj/effect/turf_decal/stripes/line{ @@ -10996,18 +10989,23 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/obj/item/multitool, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aLw" = ( -/obj/machinery/power/terminal, /obj/structure/cable/yellow, +/obj/machinery/power/terminal{ + dir = 4 + }, /obj/structure/cable/yellow{ d1 = 1; - d2 = 4; - icon_state = "1-4" + d2 = 2; + icon_state = "1-2" }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, @@ -11321,37 +11319,33 @@ "aMv" = ( /turf/simulated/wall/r_wall, /area/station/security/execution) -"aMw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"aMx" = ( +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 30 }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/area/station/medical/medbay) -"aMx" = ( -/obj/machinery/power/terminal, +/obj/structure/cable, /obj/structure/extinguisher_cabinet{ name = "east bump"; pixel_x = 30 }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 30 }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/simulated/floor/plasteel, +/obj/machinery/power/smes, +/turf/simulated/floor/plasteel/dark, /area/station/engineering/controlroom) "aMz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11374,43 +11368,47 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "aMC" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "aMF" = ( /obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "aMG" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "Port to Turbine" +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "aMH" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) -"aMI" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, -/area/station/maintenance/incinerator) -"aMJ" = ( -/obj/structure/sign/vacuum, -/turf/simulated/wall/r_wall, -/area/station/maintenance/incinerator) "aMK" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/delivery/hollow, @@ -11430,6 +11428,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aMM" = ( +/obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -11486,43 +11485,31 @@ pixel_y = -32 }, /obj/machinery/computer/monitor{ - dir = 1; + dir = 4; name = "Engineering Power Monitoring Console" }, /obj/structure/cable, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/light/small{ + dir = 8 }, -/turf/simulated/floor/plasteel/dark, +/turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aMT" = ( -/obj/machinery/light/small, -/obj/machinery/power/smes, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" +/obj/machinery/power/terminal{ + dir = 4 }, -/turf/simulated/floor/plasteel/dark, +/obj/structure/cable/yellow, +/turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aMU" = ( -/obj/machinery/power/smes, -/obj/structure/sign/nosmoking_2{ - pixel_x = 32 - }, /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" +/obj/structure/cable, +/obj/machinery/power/smes, +/obj/structure/sign/electricshock{ + pixel_x = 32 }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/controlroom) @@ -11710,6 +11697,13 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/sorting) +"aNB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10; + initialize_directions = 10 + }, +/turf/simulated/floor/plating, +/area/station/medical/coldroom) "aND" = ( /obj/structure/cable{ d1 = 1; @@ -11904,6 +11898,11 @@ /area/station/engineering/controlroom) "aOa" = ( /obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "caution" @@ -11925,14 +11924,10 @@ /area/station/service/bar) "aOd" = ( /obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, +/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -11940,11 +11935,6 @@ icon_state = "neutralfull" }, /area/station/maintenance/incinerator) -"aOe" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/engineering/atmos) "aOf" = ( /obj/machinery/conveyor{ id = "cargodisposals" @@ -11964,10 +11954,6 @@ /obj/structure/sign/fire, /turf/simulated/wall/r_wall, /area/station/engineering/atmos) -"aOl" = ( -/obj/structure/sign/electricshock, -/turf/simulated/wall/r_wall, -/area/station/engineering/atmos) "aOo" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -11995,11 +11981,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/gambling_den) "aOt" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -12047,11 +12029,7 @@ /turf/simulated/floor/plasteel/grimy, /area/station/service/theatre) "aOC" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/light{ dir = 1 }, @@ -12285,10 +12263,6 @@ /obj/structure/sign/vacuum{ pixel_y = -32 }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, @@ -12296,22 +12270,26 @@ dir = 8; luminosity = 2 }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, /turf/simulated/floor/engine, /area/station/maintenance/incinerator) "aPm" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/power/compressor{ comp_id = "incineratorturbine"; dir = 4; luminosity = 2 }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/engine, /area/station/maintenance/incinerator) "aPn" = ( @@ -12319,18 +12297,18 @@ id = "Incinerator"; luminosity = 2 }, -/obj/structure/cable{ +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, /turf/simulated/floor/engine, /area/station/maintenance/incinerator) "aPp" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" @@ -12338,14 +12316,14 @@ /turf/simulated/floor/engine, /area/station/maintenance/incinerator) "aPr" = ( -/obj/structure/cable{ +/obj/machinery/atmospherics/binary/valve{ + name = "Exhaust Reuse" + }, +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/binary/valve{ - name = "Exhaust Reuse" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -12357,6 +12335,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -12367,10 +12348,10 @@ name = "Exhaust Disposal" }, /obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; +/obj/structure/cable/yellow{ + d1 = 4; d2 = 8; - icon_state = "1-8" + icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -12401,10 +12382,6 @@ /obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel, /area/station/public/storage/art) -"aPx" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plasteel/dark, -/area/station/engineering/atmos) "aPy" = ( /obj/machinery/light{ dir = 1 @@ -12433,6 +12410,11 @@ /area/station/service/theatre) "aPB" = ( /obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ dir = 4; @@ -12461,17 +12443,14 @@ c_tag = "Supermatter Entrance"; network = list("SS13","Engineering") }, -/obj/machinery/suit_storage_unit/atmos, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aPF" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -12547,11 +12526,7 @@ }, /area/station/service/janitor) "aPS" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -12607,11 +12582,11 @@ /area/station/service/bar) "aQc" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -12620,7 +12595,7 @@ /area/station/service/bar) "aQd" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -12631,11 +12606,7 @@ icon_state = "0-4" }, /obj/structure/table, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/stack/packageWrap, /obj/item/hand_labeler, /turf/simulated/floor/plasteel{ @@ -12723,15 +12694,6 @@ icon_state = "neutralfull" }, /area/station/supply/storage) -"aQo" = ( -/obj/structure/chair/comfy/lime{ - dir = 4 - }, -/obj/machinery/computer/med_data/laptop{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/station/medical/psych) "aQq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12913,10 +12875,6 @@ /turf/simulated/floor/engine, /area/station/maintenance/incinerator) "aQQ" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/yellow, -/obj/item/reagent_containers/patch/silver_sulf, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -12927,9 +12885,6 @@ }, /area/station/maintenance/incinerator) "aQR" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, /obj/machinery/newscaster{ dir = 1; name = "south bump"; @@ -12995,40 +12950,41 @@ dir = 1 }, /obj/machinery/computer/atmos_alert, -/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/station/engineering/atmos) "aQX" = ( -/obj/structure/table/reinforced, +/obj/structure/rack, +/obj/item/painter, +/obj/item/painter, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, /obj/structure/window/reinforced{ dir = 1 }, -/obj/item/wrench, -/obj/item/crowbar, -/obj/item/clothing/mask/gas, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/station/engineering/atmos) "aQY" = ( -/obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 1 }, /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, +/obj/structure/rack, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/item/extinguisher, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" @@ -13042,28 +12998,24 @@ }, /area/station/engineering/atmos) "aRa" = ( -/obj/structure/extinguisher_cabinet{ - name = "west bump"; - pixel_x = -30 - }, /obj/machinery/shower{ dir = 4 }, +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aRb" = ( -/obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/window/reinforced{ dir = 1 }, -/obj/item/airalarm_electronics, -/obj/item/airalarm_electronics, -/obj/item/firealarm_electronics, -/obj/item/firealarm_electronics, +/obj/structure/reagent_dispensers/watertank/high, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" @@ -13079,6 +13031,10 @@ }, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, +/obj/item/firealarm_electronics, +/obj/item/firealarm_electronics, +/obj/item/firealarm_electronics, +/obj/item/firealarm_electronics, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" @@ -13131,6 +13087,7 @@ }, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, +/obj/item/toy/figure/crew/atmos, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" @@ -13269,7 +13226,7 @@ /area/station/service/bar) "aRC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/cheesiehonkers, +/obj/item/food/snacks/cheesiehonkers, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -13296,16 +13253,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) -"aRK" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aRL" = ( /obj/structure/table, /obj/machinery/firealarm{ @@ -13421,7 +13369,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aRX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -13442,17 +13390,6 @@ "aSb" = ( /turf/simulated/wall, /area/station/supply/qm) -"aSc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "aSd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet, @@ -13465,7 +13402,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aSh" = ( /obj/machinery/computer/security{ dir = 4; @@ -13547,6 +13484,24 @@ icon_state = "red" }, /area/station/security/permabrig) +"aSu" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "aSw" = ( /obj/machinery/conveyor/west{ id = "QMLoad2" @@ -13611,16 +13566,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"aSF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "aSG" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -13812,7 +13757,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aTa" = ( /obj/structure/cable{ d1 = 4; @@ -13823,7 +13768,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aTb" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -13925,7 +13870,7 @@ dir = 4 }, /turf/simulated/floor/plasteel/goonplaque, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aTk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -14058,11 +14003,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" @@ -14287,9 +14228,6 @@ }, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" @@ -14299,9 +14237,6 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -14315,39 +14250,6 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"aUa" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "Port to Turbine" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"aUb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "Port to Filter" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "aUc" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -14428,7 +14330,7 @@ }, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "aUj" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -14501,11 +14403,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aUw" = ( /obj/structure/chair/stool{ dir = 1 @@ -14531,11 +14438,16 @@ dir = 8; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aUB" = ( /obj/structure/chair/stool{ dir = 1 @@ -14607,6 +14519,7 @@ }, /area/station/service/bar) "aUM" = ( +/obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) @@ -14702,11 +14615,7 @@ icon_state = "0-2" }, /obj/structure/table, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/item/paper_bin, /turf/simulated/floor/plasteel{ dir = 1; @@ -14844,6 +14753,13 @@ /obj/machinery/computer/supplycomp{ dir = 8 }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -15087,15 +15003,6 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"aVG" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "aVH" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 @@ -15105,47 +15012,10 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"aVI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "caution" - }, -/area/station/engineering/atmos) -"aVJ" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics North"; - dir = 1; - network = list("SS13","Engineering") - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "caution" - }, -/area/station/engineering/atmos) "aVK" = ( /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, /area/station/maintenance/fore) -"aVL" = ( -/obj/structure/sign/nosmoking_2{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "caution" - }, -/area/station/engineering/atmos) "aVM" = ( /obj/structure/cable{ d1 = 1; @@ -15156,7 +15026,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "caution" + icon_state = "neutralfull" }, /area/station/engineering/atmos) "aVN" = ( @@ -15221,18 +15091,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) -"aVY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/fore) "aVZ" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, @@ -15248,7 +15106,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aWb" = ( /obj/structure/rack, /obj/item/clothing/gloves/color/yellow/fake, @@ -15268,14 +15126,14 @@ /area/station/supply/miningdock) "aWg" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plasteel{ icon_state = "bar" }, /area/station/service/bar) "aWh" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -15284,7 +15142,7 @@ /area/station/service/bar) "aWi" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -15302,17 +15160,21 @@ }, /area/station/service/bar) "aWl" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" + icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/starboard/west) "aWm" = ( /obj/structure/disposalpipe/junction{ dir = 1; @@ -15323,16 +15185,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aWn" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/plasteel{ @@ -15373,7 +15231,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aWr" = ( /obj/structure/cable{ d1 = 4; @@ -15621,12 +15479,12 @@ }, /area/station/supply/qm) "aWJ" = ( -/obj/structure/sign/poster/official/random{ - pixel_x = 32 - }, /obj/machinery/computer/card/minor/qm{ dir = 8 }, +/obj/machinery/keycard_auth{ + pixel_x = 25 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -15804,20 +15662,16 @@ /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) "aXi" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) -"aXj" = ( -/obj/machinery/atmospherics/unary/thermomachine/heater{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "aXk" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ @@ -15827,49 +15681,14 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"aXl" = ( -/obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"aXm" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"aXn" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall, -/area/station/engineering/atmos) "aXo" = ( /turf/simulated/wall, /area/station/engineering/atmos) "aXq" = ( -/obj/machinery/status_display, -/turf/simulated/wall, -/area/station/engineering/atmos) -"aXr" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 }, +/obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -15929,7 +15748,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "aXA" = ( /obj/machinery/camera{ c_tag = "Service Hall Middle"; @@ -15939,7 +15758,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aXB" = ( /obj/structure/table/wood, /obj/item/staff/broom, @@ -16096,13 +15915,11 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aYa" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -16133,7 +15950,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "aYe" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -16145,7 +15962,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "aYf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16193,7 +16010,6 @@ }, /obj/item/gps/mining, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/keycard_auth, /obj/item/toy/figure/crew/qm, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -16203,6 +16019,9 @@ /obj/machinery/computer/security/mining{ dir = 8 }, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -16239,12 +16058,7 @@ }, /area/station/security/permabrig) "aYt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -16268,15 +16082,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"aYz" = ( -/obj/machinery/atmospherics/unary/thermomachine/heater/on{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "aYA" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 @@ -16306,13 +16111,12 @@ }, /area/station/service/kitchen) "aYD" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/lightreplacer, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/atmospherics/unary/thermomachine/heater/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" }, -/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "aYE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -16322,59 +16126,6 @@ icon_state = "redfull" }, /area/station/service/kitchen) -"aYF" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "caution" - }, -/area/station/engineering/atmos) -"aYG" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"aYH" = ( -/obj/structure/table/reinforced, -/obj/item/wrench, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/machinery/newscaster{ - dir = 8; - name = "east bump"; - pixel_x = 28 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "caution" - }, -/area/station/engineering/atmos) -"aYI" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "aYJ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -16501,9 +16252,6 @@ dir = 8; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; @@ -16515,21 +16263,19 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aYY" = ( /obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "aYZ" = ( /turf/simulated/wall, /area/station/service/kitchen) @@ -16568,11 +16314,16 @@ c_tag = "Fore Hallway South"; dir = 4 }, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "aZe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -16640,9 +16391,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -16715,11 +16471,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/camera{ c_tag = "Cargo Dock SouthWest"; dir = 4 @@ -16811,6 +16563,10 @@ icon_state = "brown" }, /area/station/supply/qm) +"aZE" = ( +/obj/effect/spawner/random_spawners/fungus_maybe, +/turf/simulated/wall, +/area/station/medical/storage) "aZG" = ( /obj/machinery/camera{ c_tag = "Perma-Brig Hallway Port"; @@ -16935,12 +16691,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -16994,7 +16745,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "bad" = ( /obj/structure/cable{ d1 = 4; @@ -17040,10 +16791,10 @@ /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) "bam" = ( -/obj/machinery/atmospherics/unary/portables_connector{ +/obj/structure/chair/stool{ dir = 4 }, -/obj/effect/turf_decal/delivery/hollow, +/obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -17053,33 +16804,6 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"bao" = ( -/obj/machinery/atmospherics/meter, -/obj/item/wrench, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"bap" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, -/obj/machinery/atmospherics/portable/canister, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) -"baq" = ( -/obj/structure/closet/secure_closet/atmos_personal, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "bar" = ( /obj/structure/cable{ d1 = 1; @@ -17092,14 +16816,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) -"bas" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/suit_storage_unit/atmos, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/hallway/primary/fore/east) "bau" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -17201,7 +16918,6 @@ /area/station/service/hydroponics) "baG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -17212,11 +16928,14 @@ d2 = 8; icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "baH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/welded, @@ -17243,7 +16962,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "baM" = ( /obj/structure/kitchenspike, /obj/effect/turf_decal/delivery/hollow, @@ -17323,7 +17042,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "baV" = ( /obj/machinery/light{ dir = 8 @@ -17651,10 +17370,7 @@ }, /area/station/security/permabrig) "bby" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -17698,7 +17414,7 @@ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bbD" = ( /obj/machinery/light/small, /obj/structure/sign/securearea{ @@ -17720,7 +17436,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "bbF" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -17815,42 +17531,14 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"bbP" = ( -/obj/effect/landmark/start/atmospheric, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "bbQ" = ( /obj/machinery/atmospherics/trinary/filter{ - dir = 1; - filter_type = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"bbR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 + dir = 1 }, -/obj/structure/closet/secure_closet/atmos_personal, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) -"bbS" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"bbT" = ( -/obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "bbU" = ( /obj/effect/mapping_helpers/airlock/windoor/access/any/security/forensics{ dir = 4 @@ -17863,9 +17551,6 @@ /area/station/security/detective) "bbV" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -17948,18 +17633,25 @@ /turf/simulated/floor/plasteel, /area/station/service/hydroponics) "bck" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "bcl" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -17978,7 +17670,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bcp" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -18051,13 +17743,13 @@ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bcC" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bcD" = ( /obj/machinery/light{ dir = 8 @@ -18124,7 +17816,7 @@ dir = 5; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bcN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18133,10 +17825,10 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bcP" = ( /turf/simulated/wall, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bcV" = ( /obj/structure/rack, /obj/item/clothing/suit/straight_jacket, @@ -18286,26 +17978,6 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"bdq" = ( -/obj/structure/closet/secure_closet/atmos_personal, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) -"bdr" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"bds" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/suit_storage_unit/atmos, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "bdt" = ( /obj/structure/window/reinforced{ dir = 4 @@ -18372,7 +18044,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bdB" = ( /obj/structure/cable{ d1 = 4; @@ -18453,7 +18125,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bdH" = ( /obj/structure/cable{ d1 = 4; @@ -18470,7 +18142,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bdJ" = ( /obj/structure/cable{ d1 = 4; @@ -18584,30 +18256,34 @@ /area/station/service/kitchen) "bdU" = ( /turf/simulated/wall, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bdV" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/obj/machinery/light{ - dir = 8 - }, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 }, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bdW" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bdX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18617,13 +18293,13 @@ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bdY" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bdZ" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18640,7 +18316,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "beb" = ( /obj/effect/turf_decal/arrows/black{ dir = 1 @@ -18652,7 +18328,7 @@ dir = 4; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bec" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -18663,7 +18339,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bed" = ( /obj/effect/turf_decal/delivery/partial{ dir = 1 @@ -18798,42 +18474,15 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"beK" = ( -/obj/structure/table/reinforced, -/obj/item/analyzer, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) -"beL" = ( -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/closet/secure_closet/atmos_personal, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "beM" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/binary/pump{ + dir = 1; + name = "Port Mix to Starboard Ports" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"beO" = ( -/obj/structure/table/reinforced, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "beP" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow, /obj/effect/turf_decal/stripes/line{ @@ -18919,10 +18568,7 @@ }, /area/station/service/hydroponics) "beZ" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "greenblue" @@ -18963,7 +18609,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "bfd" = ( /obj/machinery/light/small{ dir = 4 @@ -19003,10 +18649,7 @@ }, /area/station/service/kitchen) "bfh" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ @@ -19051,11 +18694,11 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bfq" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bfr" = ( /obj/structure/chair{ dir = 4 @@ -19065,7 +18708,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bft" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -19073,12 +18716,12 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bfu" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bfv" = ( /obj/structure/cable{ d1 = 1; @@ -19155,7 +18798,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bfF" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -19173,7 +18816,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bfH" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -19242,6 +18885,17 @@ icon_state = "vault" }, /area/station/security/permabrig) +"bfW" = ( +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "bfZ" = ( /obj/effect/landmark/start/shaft_miner, /obj/effect/turf_decal/delivery/partial{ @@ -19275,18 +18929,6 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"bgd" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "Port Mix to Starboard Ports" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "bge" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/line{ @@ -19331,10 +18973,13 @@ }, /area/station/engineering/atmos) "bgj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, +/obj/machinery/atmospherics/binary/pump{ + dir = 0; + name = "Pure to Engine" + }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) "bgl" = ( @@ -19410,7 +19055,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bgx" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -19418,7 +19063,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bgy" = ( /obj/machinery/light{ dir = 8 @@ -19430,16 +19075,16 @@ }, /area/station/service/kitchen) "bgA" = ( -/obj/structure/table/reinforced, /obj/item/storage/bag/tray, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/station/service/kitchen) "bgB" = ( -/obj/structure/table/reinforced, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -19449,13 +19094,13 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bgD" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bgE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -19470,7 +19115,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bgF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19485,13 +19130,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bgG" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bgH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19506,7 +19151,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bgJ" = ( /turf/simulated/wall, /area/station/command/office/ce) @@ -19630,35 +19275,12 @@ /obj/structure/rack, /turf/simulated/floor/plasteel, /area/station/security/armory/secure) -"bhj" = ( -/obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "bhk" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "caution" - }, -/area/station/engineering/atmos) -"bhl" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "caution" + icon_state = "neutralfull" }, /area/station/engineering/atmos) "bhm" = ( @@ -19672,24 +19294,18 @@ /turf/simulated/floor/plasteel, /area/station/public/storage/tools) "bhn" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ +/obj/machinery/atmospherics/binary/pump{ dir = 1; - icon_state = "caution" + name = "Air to Ports" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" }, /area/station/engineering/atmos) "bho" = ( -/obj/structure/extinguisher_cabinet{ - name = "north bump"; - pixel_y = 30 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics South"; - network = list("SS13","Engineering") - }, +/obj/machinery/atmospherics/pipe/simple/visible/purple, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "caution" + icon_state = "neutralfull" }, /area/station/engineering/atmos) "bhp" = ( @@ -19699,7 +19315,9 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bhr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) "bht" = ( @@ -19786,7 +19404,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bhH" = ( /obj/machinery/smartfridge, /turf/simulated/floor/plasteel, @@ -19818,9 +19436,9 @@ }, /area/station/service/kitchen) "bhN" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -19830,7 +19448,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bhP" = ( /obj/structure/cable{ d1 = 1; @@ -19846,22 +19464,27 @@ /obj/structure/disposalpipe/junction{ dir = 1 }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bhQ" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/dough, +/obj/item/food/snacks/dough, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, /area/station/service/kitchen) "bhR" = ( -/obj/structure/table/reinforced, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -19876,11 +19499,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bhT" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -19892,12 +19520,12 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bhU" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bhV" = ( /obj/structure/cable{ d1 = 4; @@ -19930,19 +19558,19 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bhX" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "bhY" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bhZ" = ( /obj/structure/cable{ d1 = 1; @@ -20294,7 +19922,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "biK" = ( /turf/simulated/floor/engine/n20, /area/station/engineering/atmos) @@ -20322,63 +19950,51 @@ icon_state = "escape" }, /area/station/engineering/atmos) -"biO" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "Pure to Ports" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "biP" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "Mix to Ports" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) "biQ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "Air to Ports" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/railing/cap{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) "biR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/railing/cap, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -20390,20 +20006,30 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) "biT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -20417,12 +20043,20 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/effect/turf_decal/delivery/hollow, -/obj/effect/turf_decal/delivery/hollow, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -20431,14 +20065,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10; + initialize_directions = 10 }, /obj/structure/cable{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -20595,7 +20231,7 @@ dir = 8; icon_state = "greenblue" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bjo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -20607,7 +20243,7 @@ dir = 4; icon_state = "whitehall" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bjq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -20663,21 +20299,6 @@ icon_state = "redfull" }, /area/station/service/kitchen) -"bju" = ( -/obj/structure/table, -/obj/structure/window/reinforced{ - dir = 8; - pixel_x = -4 - }, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/item/clipboard, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "bjw" = ( /obj/effect/landmark/start/chef, /turf/simulated/floor/plasteel{ @@ -20704,16 +20325,21 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bjC" = ( /obj/structure/chair{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bjD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -20736,7 +20362,7 @@ dir = 4; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bjG" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -20858,7 +20484,11 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) +"bka" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "bkd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -20966,10 +20596,7 @@ "bkn" = ( /obj/structure/table/wood, /obj/item/folder/red, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/light/small{ dir = 4 }, @@ -21052,48 +20679,50 @@ }, /turf/simulated/floor/engine/n20, /area/station/engineering/atmos) -"bkz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "bkA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkB" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkC" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/obj/machinery/atmospherics/portable/pump, +/obj/structure/railing{ + dir = 8 + }, /obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/meter, +/obj/machinery/atmospherics/meter, +/obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/atmospherics/portable/scrubber, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkF" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/purple{ + dir = 1 }, -/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkG" = ( @@ -21117,39 +20746,28 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "bkI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/manifold4w/visible/purple, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 }, /obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) "bkK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 }, /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel, @@ -21167,13 +20785,18 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bkO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple, +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 9 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -21183,10 +20806,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/binary/pump{ - dir = 0; - name = "Pure to SM" - }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) "bkQ" = ( @@ -21239,24 +20859,17 @@ /turf/simulated/floor/plasteel, /area/station/service/hydroponics) "blc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "greenblue" +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/station/hallway/primary/fore) +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "bld" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "red" +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/station/hallway/primary/fore) +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "ble" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -21282,13 +20895,13 @@ /turf/simulated/floor/plasteel, /area/station/service/kitchen) "bli" = ( -/obj/structure/table/reinforced, /obj/item/storage/box/papersack, /obj/item/storage/box/papersack, /obj/item/storage/box/papersack, /obj/item/storage/box/papersack, /obj/item/storage/box/papersack, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -21302,9 +20915,8 @@ /turf/simulated/floor/plasteel, /area/station/service/kitchen) "blk" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/mint, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/food/snacks/mint, +/obj/item/reagent_containers/condiment/enzyme, /obj/machinery/reagentgrinder, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, @@ -21327,13 +20939,13 @@ /turf/simulated/floor/plasteel, /area/station/service/kitchen) "blo" = ( -/obj/structure/table/reinforced, /obj/item/clipboard, /obj/item/toy/figure/crew/chef, /obj/effect/turf_decal/delivery/hollow, /obj/item/eftpos/register{ dir = 1 }, +/obj/structure/table, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "blq" = ( @@ -21346,11 +20958,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "blr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -21363,8 +20980,13 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bls" = ( /obj/structure/table, /obj/item/stack/packageWrap, @@ -21372,11 +20994,13 @@ /obj/machinery/light{ dir = 8 }, +/obj/structure/cable, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "blt" = ( /obj/structure/chair{ dir = 1 @@ -21384,12 +21008,12 @@ /turf/simulated/floor/plasteel{ icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "blu" = ( /turf/simulated/floor/plasteel{ icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "blv" = ( /obj/structure/window/reinforced{ dir = 8 @@ -21405,10 +21029,15 @@ "blw" = ( /obj/item/kirbyplants, /obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24; + name = "south bump" + }, /turf/simulated/floor/plasteel{ icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "blx" = ( /obj/structure/cable{ d1 = 4; @@ -21438,7 +21067,7 @@ /turf/simulated/floor/plasteel{ icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "blB" = ( /obj/structure/table/reinforced, /obj/machinery/firealarm{ @@ -21485,11 +21114,7 @@ }, /obj/structure/table, /obj/item/storage/firstaid/regular, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/light, /turf/simulated/floor/plasteel{ dir = 6; @@ -21532,7 +21157,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "blN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/arrows/black{ @@ -21610,7 +21235,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "blZ" = ( /obj/structure/table, /obj/item/taperecorder, @@ -21691,11 +21316,16 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bmh" = ( /obj/structure/cable{ d2 = 4; @@ -21837,85 +21467,93 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 5 }, -/obj/effect/turf_decal/delivery/hollow, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmw" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 1 + dir = 4 }, -/obj/effect/turf_decal/delivery/hollow, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) -"bmy" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"bmz" = ( +"bmy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 8; initialize_directions = 11 }, -/obj/effect/turf_decal/delivery/hollow, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"bmA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 +"bmz" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/obj/machinery/atmospherics/portable/pump, +/obj/structure/railing{ + dir = 8 }, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"bmA" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) "bmB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +/obj/machinery/atmospherics/unary/portables_connector{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "caution" +/obj/machinery/atmospherics/portable/scrubber, +/obj/structure/railing{ + dir = 4 }, +/obj/effect/turf_decal/delivery/hollow, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmC" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "caution" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/area/station/engineering/atmos) -"bmD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +/obj/machinery/atmospherics/pipe/manifold/visible/purple{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "caution" - }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10; - initialize_directions = 10 +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "caution" +/obj/machinery/light, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 6 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -21926,25 +21564,16 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) -"bmH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "bmI" = ( /obj/structure/table/reinforced, /obj/item/stack/rods{ @@ -21953,11 +21582,10 @@ /obj/item/stack/sheet/glass{ amount = 50 }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 +/obj/machinery/camera{ + dir = 10; + name = "Atmospherics South" }, -/obj/effect/turf_decal/delivery/hollow, -/obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmJ" = ( @@ -21975,11 +21603,6 @@ name = "south bump"; pixel_y = -28 }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/hollow, -/obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bmK" = ( @@ -21991,23 +21614,8 @@ /obj/structure/sign/poster/official/do_not_question{ pixel_y = -32 }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/hollow, -/obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"bmL" = ( -/obj/item/kirbyplants, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/engineering/atmos) "bmM" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 5 @@ -22114,7 +21722,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bmY" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -22141,10 +21749,10 @@ /turf/simulated/wall, /area/station/service/kitchen) "bnc" = ( -/obj/structure/table/reinforced, /obj/item/clothing/suit/chef, /obj/item/kitchen/rollingpin, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/table, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "bnd" = ( @@ -22159,13 +21767,13 @@ pixel_y = 8 }, /turf/simulated/wall, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "bne" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, /obj/item/kitchen/knife, /obj/effect/turf_decal/delivery, +/obj/structure/table, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "bnf" = ( @@ -22280,11 +21888,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -22299,7 +21903,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bnz" = ( /turf/simulated/floor/plasteel{ dir = 9; @@ -22390,7 +21994,7 @@ }, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bnT" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 @@ -22398,7 +22002,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bnU" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 @@ -22406,55 +22010,11 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bnW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/atmos) -"bnX" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical, -/obj/item/flashlight, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" - }, -/area/station/engineering/atmos) -"bnY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"bnZ" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/toy/figure/crew/atmos, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" - }, -/area/station/engineering/atmos) -"boa" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bob" = ( /obj/structure/cable{ d1 = 1; @@ -22469,6 +22029,18 @@ }, /area/station/engineering/atmos) "boc" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, +/obj/machinery/atmospherics/binary/pump{ + name = "Air to External Air Ports"; + on = 1; + target_pressure = 101 + }, /obj/machinery/light{ dir = 4 }, @@ -22479,6 +22051,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bod" = ( @@ -22574,7 +22153,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bom" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -22591,7 +22170,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bon" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -22638,7 +22217,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "boq" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -22655,7 +22234,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bos" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -22691,7 +22270,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bou" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -22725,7 +22304,7 @@ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "box" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -22742,7 +22321,7 @@ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "boy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -22759,7 +22338,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "boz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -22783,7 +22362,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "boA" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -22819,7 +22398,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "boD" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, @@ -23063,7 +22642,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bpm" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ @@ -23149,7 +22728,7 @@ dir = 9; icon_state = "green" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpz" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8; @@ -23161,7 +22740,7 @@ dir = 1; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpA" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 10 @@ -23170,7 +22749,7 @@ dir = 1; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpB" = ( /obj/machinery/atmospherics/binary/pump{ name = "Pure to Mix" @@ -23179,123 +22758,96 @@ dir = 1; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpE" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 6 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpF" = ( +/obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 }, -/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bpG" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/black, +/obj/machinery/suit_storage_unit/atmos/secure, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" - }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bpH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 + dir = 9 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bpI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/purple{ - dir = 4 - }, -/obj/effect/landmark/start/atmospheric, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"bpJ" = ( -/obj/structure/table/reinforced, -/obj/item/weldingtool, -/obj/item/clothing/head/welding, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" +/obj/structure/closet/secure_closet/atmos_personal, +/obj/structure/closet/fireaxecabinet{ + pixel_y = 32 }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bpK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/visible/purple, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"bpL" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Air to External Air Ports"; - on = 1; - target_pressure = 101 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) "bpM" = ( /obj/structure/sign/poster/official/work_for_a_future{ pixel_x = 32 }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10; - initialize_directions = 10 +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bpN" = ( @@ -23338,14 +22890,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bpU" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bpV" = ( /obj/machinery/light/small{ dir = 1 @@ -23363,7 +22915,7 @@ dir = 1; icon_state = "yellow" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bpW" = ( /obj/structure/cable{ d1 = 4; @@ -23377,7 +22929,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bpY" = ( /obj/structure/cable{ d1 = 4; @@ -23526,7 +23078,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bqn" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall3"; @@ -23538,7 +23090,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bqp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23555,7 +23107,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bqq" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -23563,27 +23115,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) -"bqr" = ( -/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/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central/north) "bqt" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall15"; @@ -23600,7 +23132,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bqu" = ( /obj/structure/cable{ d1 = 4; @@ -23610,7 +23142,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bqv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23619,7 +23151,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bqx" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -23630,12 +23162,21 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) -"bqA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/area/station/hallway/primary/central/north) +"bqy" = ( +/obj/structure/window/reinforced{ dir = 4 }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"bqA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -23645,11 +23186,12 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bqB" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -23833,10 +23375,7 @@ /obj/structure/reagent_dispensers/peppertank{ pixel_x = 32 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/vehicle/secway, /obj/item/key/security, @@ -23887,7 +23426,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "brv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -23918,7 +23457,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "brB" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible/green, @@ -23926,7 +23465,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "brC" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 9 @@ -23935,7 +23474,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "brD" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 8 @@ -23944,7 +23483,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "brE" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4; @@ -23955,64 +23494,43 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "brF" = ( /obj/machinery/atmospherics/pipe/manifold/visible/purple{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "brG" = ( -/obj/structure/table/reinforced, -/obj/item/wrench, -/obj/item/crowbar, -/obj/item/clothing/mask/gas, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6; - initialize_directions = 6 - }, +/obj/machinery/suit_storage_unit/atmos/secure, +/obj/machinery/power/apc/directional/west, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "brH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4; - initialize_directions = 11 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"brI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/purple{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/engineering/atmos) -"brJ" = ( -/obj/structure/table/reinforced, -/obj/item/storage/belt/utility, -/obj/item/t_scanner, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "brK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -24082,13 +23600,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "brV" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "brW" = ( /turf/simulated/wall, /area/station/engineering/tech_storage) @@ -24146,7 +23664,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bsg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24154,7 +23672,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bsh" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -24162,7 +23680,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "bsi" = ( /obj/machinery/light{ dir = 8 @@ -24171,7 +23689,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bsj" = ( /obj/machinery/door/firedoor, /obj/structure/sign/poster/official/nanotrasen_logo{ @@ -24181,7 +23699,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bsl" = ( /obj/machinery/hologram/holopad, /obj/effect/landmark{ @@ -24192,7 +23710,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bsm" = ( /turf/simulated/floor/plasteel{ icon_state = "neutral" @@ -24208,7 +23726,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bso" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -24233,7 +23751,19 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) +"bss" = ( +/obj/machinery/bodyscanner{ + dir = 2 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "bst" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -24247,7 +23777,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bsv" = ( /turf/simulated/wall, /area/station/hallway/primary/central) @@ -24297,7 +23827,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bsE" = ( /obj/structure/cable{ d1 = 4; @@ -24327,7 +23857,7 @@ name = "south bump"; pixel_y = -28 }, -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -24511,7 +24041,7 @@ dir = 10; icon_state = "green" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bth" = ( /obj/machinery/atmospherics/binary/pump{ dir = 1 @@ -24523,7 +24053,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bti" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 1 @@ -24532,7 +24062,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "btj" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 9 @@ -24540,7 +24070,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "btk" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -24557,11 +24087,16 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "btm" = ( /obj/machinery/light{ dir = 8 @@ -24571,22 +24106,21 @@ name = "west bump"; pixel_x = -24 }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/suit_storage_unit/atmos/secure, +/obj/machinery/light{ + dir = 8 + }, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" +/obj/machinery/light{ + dir = 8 }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "btn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 10 - }, +/obj/effect/spawner/window/reinforced, /obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "caution" - }, +/obj/effect/turf_decal/delivery/hollow, +/turf/simulated/floor/plating, /area/station/engineering/atmos) "bto" = ( /obj/machinery/atmospherics/binary/pump{ @@ -24693,7 +24227,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "btz" = ( /obj/structure/cable{ d1 = 1; @@ -24709,13 +24243,9 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "btA" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -24724,7 +24254,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "btD" = ( /obj/structure/table/glass, /obj/machinery/light{ @@ -24744,7 +24274,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "btF" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable{ @@ -24760,7 +24290,7 @@ "btH" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "btJ" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, @@ -24793,13 +24323,13 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "btV" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "btX" = ( /turf/simulated/floor/plasteel{ dir = 9; @@ -24822,7 +24352,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bud" = ( /obj/machinery/power/treadmill, /obj/machinery/treadmill_monitor{ @@ -24880,10 +24410,7 @@ }, /area/station/security/brig) "buj" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/item/kirbyplants, /obj/machinery/firealarm{ dir = 8; @@ -24943,7 +24470,7 @@ dir = 9; icon_state = "arrival" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bup" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ @@ -24954,7 +24481,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "buq" = ( /obj/machinery/atmospherics/binary/pump{ name = "Mix to Distro" @@ -24962,14 +24489,14 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bur" = ( /obj/machinery/atmospherics/unary/thermomachine/heater, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bus" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer{ dir = 4 @@ -24978,7 +24505,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "but" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 @@ -24987,28 +24514,24 @@ name = "east bump"; pixel_x = 28 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "buu" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/portable/pump, /obj/structure/sign/nosmoking_2{ pixel_y = -32 }, -/turf/simulated/floor/plasteel{ - icon_state = "arrival" - }, +/obj/machinery/economy/vending/atmosdrobe, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "buv" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/portable/pump, /obj/machinery/camera{ c_tag = "Atmospherics Storage"; dir = 1 @@ -25018,32 +24541,11 @@ name = "south bump"; pixel_y = -28 }, -/turf/simulated/floor/plasteel{ - icon_state = "arrival" - }, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "buw" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/portable/scrubber, -/turf/simulated/floor/plasteel{ - icon_state = "escape" - }, -/area/station/engineering/atmos) -"bux" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/portable/scrubber, -/turf/simulated/floor/plasteel{ - icon_state = "escape" - }, +/obj/structure/closet/secure_closet/atmos_personal, +/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "buy" = ( /obj/machinery/light/small, @@ -25053,6 +24555,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/machinery/firealarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "buz" = ( @@ -25061,12 +24568,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) @@ -25146,7 +24653,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "buJ" = ( /obj/structure/cable{ d1 = 1; @@ -25160,7 +24667,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "buK" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -25170,7 +24677,7 @@ dir = 4; icon_state = "escape" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "buL" = ( /obj/structure/sign/electricshock, /turf/simulated/wall/r_wall, @@ -25288,7 +24795,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bvl" = ( /obj/machinery/computer/shuttle/labor, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -25309,7 +24816,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bvr" = ( /obj/structure/table, /obj/item/storage/box/evidence, @@ -25364,11 +24871,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bvx" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/computer/prisoner{ dir = 8 }, @@ -25444,7 +24947,7 @@ dir = 10; icon_state = "arrival" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvE" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 @@ -25453,7 +24956,7 @@ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvF" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4; @@ -25464,7 +24967,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvG" = ( /obj/machinery/alarm{ dir = 1; @@ -25480,34 +24983,41 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvH" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold4w/visible, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvI" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4; name = "Air to Waste"; target_pressure = 101 }, +/obj/machinery/firealarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvJ" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 }, +/obj/machinery/power/apc/directional/east, +/obj/structure/cable, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "caution" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "bvK" = ( /obj/machinery/status_display, /turf/simulated/wall/r_wall, @@ -25571,12 +25081,12 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bvV" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bvW" = ( /obj/structure/rack, /obj/item/circuitboard/robotics{ @@ -25648,10 +25158,10 @@ /obj/item/seeds/wheat, /obj/item/seeds/potato, /obj/item/seeds/pumpkin, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/tomato, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) @@ -25678,6 +25188,26 @@ "bwf" = ( /turf/simulated/wall/r_wall, /area/station/command/bridge) +"bwh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/east) +"bwl" = ( +/obj/structure/chair/sofa/corner{ + color = "#6ae226" + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "bwm" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -25724,7 +25254,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bwA" = ( /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -25793,7 +25323,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "bwM" = ( /obj/structure/window/reinforced{ dir = 8 @@ -25817,7 +25347,7 @@ "bwQ" = ( /obj/machinery/ai_status_display, /turf/simulated/wall/r_wall, -/area/station/engineering/break_room) +/area/station/engineering/atmos/distribution) "bwR" = ( /obj/structure/cable{ d1 = 1; @@ -25838,12 +25368,12 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bwS" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/break_room) +/area/station/engineering/atmos/distribution) "bwT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -25853,7 +25383,7 @@ /obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/engineering/break_room) +/area/station/engineering/atmos/distribution) "bwV" = ( /obj/structure/sign/poster/official/help_others{ pixel_x = -32 @@ -25962,7 +25492,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "bxf" = ( /obj/structure/cable{ d1 = 1; @@ -25973,7 +25503,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bxg" = ( /obj/structure/table, /obj/machinery/light{ @@ -25985,7 +25515,7 @@ dir = 4; icon_state = "caution" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bxh" = ( /turf/simulated/wall/r_wall, /area/station/engineering/tech_storage) @@ -25993,7 +25523,7 @@ /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bxj" = ( /obj/machinery/light/small{ dir = 8 @@ -26028,7 +25558,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bxm" = ( /obj/machinery/computer/card, /turf/simulated/floor/plasteel{ @@ -26177,7 +25707,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bxA" = ( /obj/structure/cable{ d1 = 4; @@ -26191,7 +25721,7 @@ dir = 4 }, /turf/simulated/floor/plasteel/dark, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bxC" = ( /obj/structure/cable{ d1 = 4; @@ -26244,11 +25774,7 @@ /turf/simulated/floor/greengrid, /area/station/command/vault) "bxG" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -26259,7 +25785,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bxK" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -26271,7 +25797,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bxM" = ( /obj/structure/window/reinforced{ dir = 8 @@ -26353,17 +25879,7 @@ dir = 4; icon_state = "brown" }, -/area/station/hallway/secondary/entry) -"byb" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/station/medical/reception) +/area/station/hallway/secondary/entry/east) "byc" = ( /obj/machinery/ai_slipper, /obj/structure/cable{ @@ -26583,7 +26099,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "byG" = ( /obj/structure/cable{ d1 = 1; @@ -26597,7 +26113,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "byH" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -26611,7 +26127,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "byJ" = ( /obj/structure/cable{ d1 = 1; @@ -26657,10 +26173,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "byM" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/carpet, /area/station/public/pet_store) @@ -26674,7 +26187,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "byO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -26687,7 +26200,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "byQ" = ( /obj/machinery/light{ dir = 4 @@ -26696,10 +26209,14 @@ c_tag = "Central Ring Hallway West"; dir = 8 }, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "byR" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/regular, @@ -26744,17 +26261,15 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "byX" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -26797,7 +26312,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bzb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -26808,7 +26323,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bzc" = ( /obj/structure/sign/electricshock, /turf/simulated/wall/r_wall, @@ -26829,7 +26344,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bzh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26864,7 +26379,7 @@ dir = 9 }, /obj/structure/displaycase{ - start_showpiece_type = /obj/item/reagent_containers/food/snacks/donut/sprinkles + start_showpiece_type = /obj/item/food/snacks/donut/sprinkles }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -26887,6 +26402,10 @@ icon_state = "darkred" }, /area/station/security/main) +"bzu" = ( +/obj/effect/spawner/window, +/turf/simulated/floor/plating, +/area/station/medical/medbay) "bzv" = ( /obj/machinery/status_display, /turf/simulated/wall/r_wall, @@ -26986,11 +26505,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "bzI" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -27122,6 +26637,7 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/clothing/mask/breath, /obj/item/clothing/mask/breath, +/obj/item/toy/figure/crew/atmos, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "caution" @@ -27148,7 +26664,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bAf" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -27158,7 +26674,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bAg" = ( /obj/structure/table/reinforced, /obj/item/plant_analyzer, @@ -27374,7 +26890,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bAO" = ( /obj/structure/cable{ d1 = 4; @@ -27439,6 +26955,23 @@ icon_state = "darkred" }, /area/station/security/brig) +"bBb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreen"; + dir = 1 + }, +/area/station/medical/virology) "bBc" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ @@ -27625,11 +27158,7 @@ /area/station/engineering/break_room) "bBF" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/light{ dir = 1 }, @@ -27710,6 +27239,7 @@ /area/station/engineering/atmos) "bBM" = ( /obj/structure/table/reinforced, +/obj/item/clipboard, /obj/item/folder/yellow, /obj/item/pen, /turf/simulated/floor/plasteel{ @@ -27750,7 +27280,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bBP" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -27798,6 +27328,13 @@ /obj/item/aicard, /turf/simulated/floor/plasteel/dark, /area/station/engineering/tech_storage) +"bBV" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "bBW" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -27901,7 +27438,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bCg" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -28217,7 +27754,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bCD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28233,7 +27770,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bCE" = ( /obj/machinery/camera{ c_tag = "Central Ring Hallway East"; @@ -28260,7 +27797,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bCG" = ( /obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel/dark, @@ -28293,7 +27830,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "bCL" = ( /obj/structure/cable{ d1 = 1; @@ -28389,11 +27926,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -28697,17 +28230,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) -"bDD" = ( -/obj/structure/chair, -/obj/machinery/camera{ - c_tag = "Psych Foyer" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/port/north) "bDE" = ( /obj/item/kirbyplants, /obj/machinery/status_display{ @@ -28736,7 +28259,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bDH" = ( /obj/structure/rack{ dir = 8; @@ -28844,11 +28367,7 @@ /obj/item/stack/rods, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -28872,7 +28391,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bDS" = ( /obj/structure/table/reinforced, /obj/item/crowbar, @@ -28918,7 +28437,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bEb" = ( /obj/structure/window/reinforced, /obj/structure/cable{ @@ -29016,7 +28535,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bEp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -29031,7 +28550,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bEr" = ( /obj/machinery/firealarm{ dir = 1; @@ -29063,7 +28582,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bEx" = ( /turf/simulated/wall/r_wall, /area/station/security/warden) @@ -29120,13 +28639,6 @@ icon_state = "vault" }, /area/station/engineering/gravitygenerator) -"bEH" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/hallway/primary/central) "bEI" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -29455,7 +28967,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bFx" = ( /obj/machinery/light_switch{ dir = 1; @@ -29490,10 +29002,7 @@ }, /area/station/command/bridge) "bFC" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -29651,7 +29160,19 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) +"bFY" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/iv_drip, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreen"; + dir = 1 + }, +/area/station/medical/virology) "bGb" = ( /obj/machinery/light/small{ dir = 1 @@ -29926,8 +29447,11 @@ /area/station/engineering/break_room) "bGD" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/starkist, +/obj/item/reagent_containers/drinks/cans/starkist, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/recharger{ + pixel_x = 5 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -30091,7 +29615,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bGP" = ( /obj/machinery/hologram/holopad, /obj/structure/cable{ @@ -30139,23 +29663,24 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bGR" = ( /obj/machinery/light{ dir = 4 }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + name = "east bump" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bGS" = ( /obj/structure/table/reinforced, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/folder/yellow, /obj/structure/cable{ d2 = 4; @@ -30303,7 +29828,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bHj" = ( /turf/simulated/wall/r_wall, /area/station/command/meeting_room) @@ -30325,7 +29850,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bHn" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -30429,12 +29954,15 @@ "bHx" = ( /turf/simulated/wall/r_wall, /area/station/command/office/captain) -"bHA" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 +"bHy" = ( +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 }, +/turf/simulated/floor/plasteel/dark, +/area/station/engineering/atmos) +"bHA" = ( +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -30443,7 +29971,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bHC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -30467,7 +29995,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bHD" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable{ @@ -30519,11 +30047,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/security/detective) "bHM" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/table/wood, /obj/item/taperecorder, /obj/item/restraints/handcuffs, @@ -30606,7 +30130,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bHT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -30615,7 +30139,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bHU" = ( /obj/structure/cable{ d1 = 4; @@ -30641,7 +30165,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bHW" = ( /obj/structure/cable{ d1 = 4; @@ -30860,7 +30384,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bII" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -30944,6 +30468,11 @@ /obj/item/stack/sheet/glass, /obj/item/stack/sheet/glass, /obj/item/stack/sheet/glass, +/obj/machinery/requests_console{ + department = "Tech Storage"; + name = "Tech Storage Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/tech_storage) "bIS" = ( @@ -31015,11 +30544,7 @@ /turf/simulated/floor/wood, /area/station/command/meeting_room) "bJc" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -31037,7 +30562,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bJe" = ( /obj/machinery/newscaster/security_unit{ dir = 1; @@ -31207,11 +30732,7 @@ /area/station/security/detective) "bJC" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -31227,7 +30748,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bJG" = ( /obj/machinery/flasher{ id = "Cell 1"; @@ -31241,18 +30762,6 @@ icon_state = "darkredcorners" }, /area/station/security/prison/cell_block) -"bJH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/aft) "bJL" = ( /turf/simulated/wall, /area/station/security/warden) @@ -31451,6 +30960,9 @@ /area/station/aisat) "bJZ" = ( /obj/structure/closet/emcloset, +/obj/structure/sign/vacuum{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -31464,7 +30976,7 @@ dir = 10; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bKb" = ( /obj/structure/cable{ d1 = 1; @@ -31612,6 +31124,10 @@ icon_state = "yellow" }, /area/station/engineering/break_room) +"bKt" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/primary/central/north) "bKu" = ( /obj/structure/rack{ dir = 8; @@ -31689,7 +31205,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bot" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bKF" = ( /obj/structure/table/wood, /obj/item/clothing/mask/cigarette/cigar{ @@ -31808,6 +31324,17 @@ }, /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai_upload) +"bKW" = ( +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/closet/secure_closet/medical3, +/obj/effect/turf_decal/delivery/white/hollow, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "bKY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -31880,11 +31407,7 @@ }, /area/station/public/storage/tools/auxiliary) "bLj" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -31978,6 +31501,28 @@ }, /turf/simulated/floor/carpet, /area/station/security/detective) +"bLv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) "bLw" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/camera{ @@ -32013,7 +31558,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bLz" = ( /obj/machinery/light{ dir = 4 @@ -32026,7 +31571,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bLA" = ( /turf/simulated/wall/r_wall, /area/station/security/brig) @@ -32237,7 +31782,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bMb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -32248,7 +31793,7 @@ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "bMc" = ( /obj/machinery/camera{ c_tag = "Primary Security Hallway North"; @@ -32259,26 +31804,31 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bMe" = ( /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) "bMf" = ( @@ -32446,14 +31996,6 @@ /obj/item/multitool, /turf/simulated/floor/plasteel/dark, /area/station/engineering/tech_storage) -"bMD" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_y = 5 - }, -/obj/item/pen/multi, -/turf/simulated/floor/plasteel/white, -/area/station/hallway/primary/central) "bME" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -32512,7 +32054,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bMM" = ( /obj/machinery/photocopier, /obj/structure/cable{ @@ -32845,7 +32387,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bNy" = ( /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/plating, @@ -32923,7 +32465,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bNL" = ( /obj/machinery/camera{ c_tag = "AI Chamber South"; @@ -32963,6 +32505,12 @@ }, /area/station/engineering/ai_transit_tube) "bNX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) "bNY" = ( @@ -33055,7 +32603,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bOi" = ( /obj/structure/sign/securearea, /turf/simulated/wall, @@ -33113,7 +32661,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bOp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -33242,7 +32790,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bOE" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, @@ -33281,14 +32829,6 @@ }, /turf/simulated/floor/carpet, /area/station/command/meeting_room) -"bOK" = ( -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) "bOL" = ( /obj/structure/cable{ d1 = 1; @@ -33376,7 +32916,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bOX" = ( /obj/structure/chair/comfy/brown, /obj/structure/cable{ @@ -33407,10 +32947,7 @@ /turf/simulated/wall, /area/station/command/office/ntrep) "bPa" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/wood, /area/station/command/office/captain) @@ -33437,7 +32974,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bPd" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, @@ -33553,7 +33090,7 @@ "bPp" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /turf/simulated/floor/carpet, /area/station/security/detective) "bPq" = ( @@ -33584,6 +33121,27 @@ icon_state = "redcorner" }, /area/station/security/checkpoint) +"bPt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) "bPu" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -33773,6 +33331,20 @@ "bPS" = ( /turf/simulated/wall, /area/space/nearstation) +"bPV" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Monkey Pen" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "bPY" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -33944,7 +33516,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bQy" = ( /obj/structure/table/reinforced, /obj/machinery/kitchen_machine/microwave, @@ -33961,7 +33533,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bQA" = ( /obj/structure/cable{ d1 = 1; @@ -34121,7 +33693,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bQS" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ @@ -34389,10 +33961,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/dark, /area/station/aisat) -"bRw" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) "bRx" = ( /obj/structure/showcase{ density = 0; @@ -34415,6 +33983,27 @@ icon_state = "grimy" }, /area/station/turret_protected/aisat) +"bRA" = ( +/obj/machinery/door/airlock/medical/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/break_room) "bRB" = ( /obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -34429,11 +34018,6 @@ icon_state = "grimy" }, /area/station/turret_protected/aisat) -"bRF" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "bRG" = ( /obj/structure/window/reinforced{ dir = 1; @@ -34497,12 +34081,18 @@ c_tag = "AI Transit Tube Access"; network = list("SS13","Engineering") }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) "bRU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) @@ -34669,7 +34259,7 @@ /turf/simulated/floor/plasteel{ icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bSl" = ( /obj/item/storage/box/donkpockets, /obj/structure/table, @@ -34716,7 +34306,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bSx" = ( /obj/structure/cable{ d1 = 1; @@ -34727,13 +34317,13 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bSy" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bSz" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -34748,7 +34338,7 @@ dir = 6; icon_state = "brown" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bSD" = ( /obj/machinery/camera{ c_tag = "Central Ring Hallway West"; @@ -34757,7 +34347,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bSE" = ( /turf/simulated/wall/r_wall, /area/station/command/office/hop) @@ -34795,11 +34385,7 @@ /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai_upload) "bSK" = ( -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /obj/structure/cable, /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai_upload) @@ -34887,7 +34473,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bSW" = ( /obj/machinery/firealarm{ name = "north bump"; @@ -34900,7 +34486,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bSX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34909,7 +34495,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bSY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -34920,7 +34506,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bTb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34929,7 +34515,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bTc" = ( /obj/machinery/power/terminal{ dir = 1 @@ -34978,7 +34564,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bTj" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -34988,7 +34574,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bTk" = ( /obj/structure/cable{ d1 = 1; @@ -35000,14 +34586,10 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bTm" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -35072,6 +34654,23 @@ icon_state = "vault" }, /area/station/aisat) +"bTt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "bluefull" + }, +/area/station/medical/storage) "bTu" = ( /obj/structure/cable{ d1 = 2; @@ -35349,14 +34948,14 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bUa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bUc" = ( /obj/structure/window/reinforced{ dir = 8 @@ -35533,7 +35132,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bUB" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=engi2"; @@ -35558,7 +35157,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bUC" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall4"; @@ -35578,7 +35177,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bUD" = ( /obj/structure/cable{ d1 = 1; @@ -35591,6 +35190,9 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/station/turret_protected/aisat) +"bUE" = ( +/turf/simulated/wall, +/area/station/medical/cryo) "bUG" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -35602,7 +35204,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bUJ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -35647,7 +35249,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bUL" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall4a"; @@ -35656,7 +35258,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bUM" = ( /obj/machinery/light{ dir = 4 @@ -35664,13 +35266,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bUO" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, /turf/simulated/floor/plasteel/dark, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bUP" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "transitlock"; @@ -35783,7 +35385,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bVd" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall13"; @@ -35793,7 +35395,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bVe" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall11"; @@ -35823,7 +35425,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bVf" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -35854,7 +35456,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bVi" = ( /obj/structure/cable{ d1 = 4; @@ -35864,13 +35466,11 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bVj" = ( /obj/machinery/camera{ c_tag = "Minisat Teleporter Room"; @@ -35908,7 +35508,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bVl" = ( /obj/structure/cable{ d1 = 1; @@ -35925,7 +35525,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bVm" = ( /obj/structure/cable{ d1 = 1; @@ -35946,14 +35546,14 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bVo" = ( /obj/structure/cable{ d1 = 2; @@ -35974,7 +35574,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bVp" = ( /obj/item/radio/beacon, /obj/machinery/navbeacon{ @@ -35996,7 +35596,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bVq" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -36006,7 +35606,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bVr" = ( /obj/structure/closet/secure_closet/engineering_chief, /obj/machinery/camera{ @@ -36029,27 +35629,16 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, /turf/space, /area/space/nearstation) "bVt" = ( -/obj/structure/sign/vacuum{ - pixel_x = -32 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - autolink_id = "stationai_vent" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, +/turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) "bVB" = ( /obj/machinery/door/firedoor, @@ -36068,7 +35657,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bVD" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -36078,7 +35667,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bVH" = ( /obj/structure/window/reinforced, /obj/machinery/light/small{ @@ -36212,10 +35801,7 @@ /area/station/aisat) "bVX" = ( /obj/structure/window/reinforced, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel/dark, /area/station/aisat) @@ -36267,10 +35853,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/command/office/ce) "bWm" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -36370,7 +35953,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bWA" = ( /obj/structure/cable{ d1 = 1; @@ -36380,7 +35963,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bWC" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -36395,27 +35978,27 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bWG" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bWH" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bWI" = ( /obj/machinery/alarm{ dir = 8; name = "east bump"; pixel_x = 24 }, -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -36432,7 +36015,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bWK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -36443,7 +36026,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bWN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36504,15 +36087,17 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bXc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bXf" = ( /obj/machinery/alarm{ dir = 1; @@ -36529,21 +36114,23 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bXi" = ( /obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bXj" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 @@ -36551,7 +36138,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bXk" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36559,7 +36146,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bXl" = ( /obj/structure/cable{ d1 = 1; @@ -36574,7 +36161,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bXm" = ( /obj/machinery/camera{ c_tag = "Minisat Power Station"; @@ -36598,7 +36185,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bXp" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -36615,7 +36202,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bXt" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -36660,7 +36247,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bXB" = ( /obj/structure/cable{ d1 = 1; @@ -36687,7 +36274,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bXD" = ( /obj/machinery/camera{ c_tag = "Primary Security Hallway" @@ -36699,7 +36286,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bXE" = ( /obj/machinery/camera{ c_tag = "Engineering Break Room"; @@ -36835,9 +36422,9 @@ }, /area/station/legal/magistrate) "bXY" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/fire, /obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/unary/portables_connector, +/obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plasteel, /area/station/engineering/control) "bYa" = ( @@ -36856,7 +36443,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bYf" = ( /obj/structure/cable{ d1 = 1; @@ -36866,12 +36453,12 @@ /turf/simulated/floor/plasteel{ icon_state = "yellow" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bYg" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "bYi" = ( /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -36960,6 +36547,17 @@ }, /turf/simulated/floor/wood, /area/station/command/office/hop) +"bYs" = ( +/obj/machinery/camera{ + c_tag = "Medbay East Hallway"; + dir = 6; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "bYu" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -37016,7 +36614,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bYD" = ( /turf/simulated/wall, /area/station/command/office/captain/bedroom) @@ -37034,7 +36632,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bYG" = ( /obj/structure/sign/directions/evac{ pixel_y = -8 @@ -37057,10 +36655,10 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 + dir = 10 }, /turf/space, /area/space/nearstation) @@ -37088,7 +36686,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "bYM" = ( /turf/simulated/wall, /area/station/legal/lawoffice) @@ -37214,6 +36812,12 @@ /obj/structure/window/reinforced{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) @@ -37309,13 +36913,12 @@ /turf/simulated/wall/r_wall, /area/station/engineering/control) "bZs" = ( -/obj/machinery/atmospherics/portable/canister/air, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, /turf/simulated/floor/plasteel, /area/station/engineering/control) "bZt" = ( @@ -37488,7 +37091,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bZU" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -37502,7 +37105,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bZW" = ( /obj/machinery/status_display, /turf/simulated/wall/r_wall, @@ -37706,7 +37309,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "caw" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -37734,7 +37337,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "caA" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -37852,7 +37455,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "caP" = ( /obj/structure/cable{ d1 = 2; @@ -38023,6 +37626,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cbn" = ( @@ -38076,22 +37680,11 @@ }, /area/station/engineering/control) "cbr" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" +/obj/structure/railing{ + dir = 8 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel/white, /area/station/medical/reception) "cbs" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -38202,7 +37795,7 @@ }, /area/station/maintenance/port) "cbz" = ( -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /obj/machinery/light{ dir = 1 }, @@ -38241,34 +37834,6 @@ /obj/effect/landmark/start/librarian, /turf/simulated/floor/plasteel/dark, /area/station/service/library) -"cbH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cbI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) "cbJ" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -38317,7 +37882,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "cbQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -38325,7 +37890,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "cbR" = ( /obj/structure/cable{ d1 = 1; @@ -38356,11 +37921,7 @@ /turf/simulated/floor/carpet, /area/station/command/office/hop) "cbU" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/camera{ c_tag = "Head of Personnel's Office"; dir = 8 @@ -38387,7 +37948,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bot" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "cbW" = ( /obj/machinery/keycard_auth{ pixel_x = -24; @@ -38445,8 +38006,8 @@ /area/station/command/office/ntrep) "cca" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood, /area/station/command/office/ntrep) "ccb" = ( @@ -38636,10 +38197,7 @@ /area/station/legal/courtroom) "ccx" = ( /obj/structure/table/reinforced, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -38767,25 +38325,21 @@ }, /area/station/legal/magistrate) "ccL" = ( -/obj/structure/closet, /obj/machinery/light/small{ dir = 8 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/security/evidence) "ccM" = ( -/obj/structure/closet, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -38811,7 +38365,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/legal/courtroom) "ccP" = ( -/obj/structure/closet, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -39141,7 +38695,7 @@ /area/station/command/office/ntrep) "cdN" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/item/storage/fancy/donut_box, /turf/simulated/floor/wood, /area/station/command/office/ntrep) @@ -39185,7 +38739,7 @@ /area/station/command/office/blueshield) "cdT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) @@ -39228,10 +38782,7 @@ /area/station/command/office/captain/bedroom) "cdY" = ( /obj/structure/table/wood, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/window/reinforced{ dir = 8 }, @@ -39312,6 +38863,12 @@ icon_state = "red" }, /area/station/legal/courtroom) +"cel" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) "cem" = ( /obj/machinery/light_switch{ dir = 4; @@ -39455,7 +39012,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "ceH" = ( /obj/machinery/light/small{ dir = 8 @@ -39675,15 +39232,11 @@ /obj/machinery/computer/atmos_alert{ dir = 1 }, -/obj/machinery/power/apc{ - name = "south bump Engineering"; - pixel_y = -24; - shock_proof = 1 - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, +/obj/machinery/power/apc/critical/directional/south, /turf/simulated/floor/plasteel/dark, /area/station/engineering/smes) "cfk" = ( @@ -39752,18 +39305,6 @@ /obj/effect/landmark/start/assistant, /turf/simulated/floor/wood, /area/station/service/library) -"cfw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) "cfx" = ( /obj/machinery/photocopier, /obj/structure/extinguisher_cabinet{ @@ -39850,11 +39391,7 @@ /turf/simulated/floor/wood, /area/station/command/office/ntrep) "cfM" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -39907,7 +39444,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "cfX" = ( /obj/structure/table/wood, /obj/item/gavelblock, @@ -39989,7 +39526,6 @@ /turf/simulated/floor/carpet, /area/station/legal/magistrate) "cgg" = ( -/obj/structure/closet, /obj/machinery/alarm{ name = "north bump"; pixel_y = 24 @@ -40000,6 +39536,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -40022,10 +39559,7 @@ /area/station/legal/magistrate) "cgj" = ( /obj/machinery/light, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/disposal, /obj/structure/cable, /obj/structure/disposalpipe/trunk{ @@ -40066,11 +39600,11 @@ }, /area/station/security/brig) "cgo" = ( -/obj/structure/closet, /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -40094,12 +39628,12 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/closet, /obj/machinery/light_switch{ dir = 1; name = "south bump"; pixel_y = -24 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -40137,7 +39671,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "cgF" = ( /obj/machinery/flasher{ id = "hopflash"; @@ -40146,7 +39680,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bot" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "cgI" = ( /obj/machinery/ai_status_display{ pixel_y = -32 @@ -40247,16 +39781,6 @@ icon_state = "whitepurple" }, /area/station/science/xenobiology) -"cha" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/reception) "chb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -40266,7 +39790,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "chc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -40279,11 +39803,11 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "chd" = ( /obj/machinery/status_display, /turf/simulated/wall, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "chf" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -40360,9 +39884,9 @@ /area/station/command/office/blueshield) "chs" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "cht" = ( @@ -40525,6 +40049,11 @@ /area/station/legal/lawoffice) "chP" = ( /obj/structure/filingcabinet/security, +/obj/machinery/requests_console{ + department = "Internal Affairs Office"; + name = "Internal Affairs Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/wood, /area/station/legal/lawoffice) "chS" = ( @@ -40753,7 +40282,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "ciB" = ( /turf/simulated/wall, /area/station/command/office/hop) @@ -40863,7 +40392,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "ciO" = ( /obj/structure/cable{ d1 = 1; @@ -40948,7 +40477,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "ciX" = ( /obj/machinery/status_display{ pixel_y = -32 @@ -41178,6 +40707,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cjH" = ( @@ -41266,18 +40796,14 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "cjO" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 4; - name = "east bump"; - pixel_x = 24; - shock_proof = 1 - }, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" }, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 + }, /turf/simulated/floor/plasteel, /area/station/engineering/control) "cjP" = ( @@ -41376,15 +40902,6 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port) -"ckg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "ckh" = ( /obj/structure/cable{ d1 = 2; @@ -41423,7 +40940,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "ckm" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -41432,7 +40949,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "ckn" = ( /obj/structure/dresser, /turf/simulated/floor/carpet, @@ -41479,11 +40996,7 @@ /turf/simulated/floor/plasteel, /area/station/command/teleporter) "ckB" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/table, /obj/item/hand_tele, /obj/structure/cable{ @@ -41544,15 +41057,6 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"ckJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/reception) "ckK" = ( /obj/structure/chair{ dir = 4 @@ -41616,27 +41120,13 @@ }, /area/station/legal/courtroom) "ckR" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, /turf/simulated/floor/wood, /area/station/legal/lawoffice) -"ckS" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/reception) "ckT" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -41908,7 +41398,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "clB" = ( /obj/structure/cable{ d1 = 1; @@ -42054,7 +41544,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "clS" = ( /obj/structure/cable{ d1 = 4; @@ -42065,7 +41555,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "clT" = ( /obj/structure/cable{ d1 = 2; @@ -42085,7 +41575,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "clU" = ( /obj/machinery/camera{ c_tag = "Central Ring Hallway Center" @@ -42099,7 +41589,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "clV" = ( /obj/structure/cable{ d1 = 1; @@ -42113,7 +41603,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "clW" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, @@ -42263,7 +41753,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cmo" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -42281,9 +41771,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) -"cmt" = ( -/turf/simulated/floor/plasteel/white, -/area/station/hallway/primary/central) "cmv" = ( /obj/structure/cable{ d1 = 1; @@ -42291,6 +41778,8 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cmx" = ( @@ -42304,11 +41793,7 @@ /turf/simulated/floor/plating, /area/station/turret_protected/aisat) "cmy" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -42588,11 +42073,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cnh" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -42714,7 +42195,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "cny" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42723,7 +42204,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cnz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42750,7 +42231,6 @@ /turf/simulated/floor/plasteel, /area/station/command/teleporter) "cnC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -42758,10 +42238,13 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "cnD" = ( /obj/machinery/light, /obj/machinery/alarm{ @@ -42836,11 +42319,7 @@ }, /area/station/legal/courtroom) "cnN" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -42856,7 +42335,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cnP" = ( /turf/simulated/wall, /area/station/public/locker) @@ -42873,27 +42352,30 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) "cnV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cnW" = ( /turf/simulated/floor/plasteel{ icon_state = "bot" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "cnX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/structure/railing{ + dir = 5 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) +/obj/structure/table/glass, +/obj/item/reagent_containers/drinks/mug, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "cnY" = ( /obj/structure/lattice, /obj/structure/window/reinforced, @@ -43085,7 +42567,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "coE" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -43093,7 +42575,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "coF" = ( /obj/machinery/door_control{ id = "teleportershutter"; @@ -43247,12 +42729,6 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) -"cpc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) "cpd" = ( /obj/structure/window/reinforced{ dir = 1; @@ -43284,7 +42760,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bot" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "cpg" = ( /obj/item/wrench, /turf/simulated/floor/plating/airless, @@ -43548,20 +43024,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/wood, /area/station/service/library) -"cpJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) -"cpK" = ( -/obj/structure/table/wood, -/obj/machinery/recharger, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) "cpM" = ( /obj/structure/table/wood, /obj/item/storage/bag/books, @@ -43590,7 +43052,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cpO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43604,14 +43066,14 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "cpP" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "cpR" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -43631,7 +43093,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cpS" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -43648,30 +43110,9 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) -"cpT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cpU" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -43691,7 +43132,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cpW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43718,7 +43159,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cpX" = ( /obj/structure/sign/poster/official/nanotrasen_logo{ pixel_y = 32 @@ -43738,7 +43179,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cpY" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -43755,7 +43196,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cqb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43784,26 +43225,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) -"cqc" = ( -/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/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cqd" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -43820,7 +43242,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cqe" = ( /obj/structure/sign/poster/official/nanotrasen_logo{ pixel_y = 32 @@ -43843,7 +43265,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cqf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43873,7 +43295,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cqh" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -43894,7 +43316,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cqn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43958,7 +43380,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cqr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -44313,7 +43735,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cru" = ( /obj/structure/cable{ d1 = 1; @@ -44340,7 +43762,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crw" = ( /obj/machinery/camera{ c_tag = "Central Ring Hallway Center"; @@ -44350,14 +43772,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crA" = ( /obj/structure/cable{ d1 = 1; @@ -44368,7 +43790,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crB" = ( /obj/structure/chair/stool{ dir = 8 @@ -44377,6 +43799,20 @@ icon_state = "neutralfull" }, /area/station/public/locker) +"crC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "crE" = ( /obj/structure/chair/comfy/black, /obj/machinery/navbeacon{ @@ -44386,7 +43822,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crF" = ( /obj/item/radio/beacon, /obj/structure/cable{ @@ -44397,7 +43833,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crG" = ( /obj/structure/chair/comfy/black, /obj/effect/landmark/start/assistant, @@ -44408,13 +43844,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crH" = ( /obj/structure/table/wood, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crJ" = ( /obj/structure/chair/stool{ dir = 1 @@ -44432,7 +43868,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -44444,7 +43880,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crO" = ( /obj/machinery/light, /obj/machinery/camera{ @@ -44457,7 +43893,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "crS" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -44469,7 +43905,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "crT" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -44484,7 +43920,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "crW" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -44533,10 +43969,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "cse" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/table, /obj/structure/cable, /turf/simulated/floor/plating, @@ -44802,7 +44235,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "csP" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -44813,15 +44246,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) -"csQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "csR" = ( /obj/machinery/hologram/holopad, /obj/structure/cable{ @@ -44833,15 +44258,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) -"csS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "csT" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -44852,7 +44269,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "csU" = ( /obj/machinery/light{ dir = 4 @@ -44863,7 +44280,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "csV" = ( /turf/simulated/wall/r_wall, /area/station/service/expedition) @@ -44873,36 +44290,10 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/central/south) -"ctb" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "ctc" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) -"ctd" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "ctf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -44910,22 +44301,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) -"ctj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/area/station/hallway/primary/starboard/south) "ctl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44981,14 +44357,6 @@ icon_state = "neutralfull" }, /area/station/public/locker) -"ctr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "cts" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plasteel{ @@ -45015,28 +44383,6 @@ icon_state = "neutralfull" }, /area/station/legal/courtroom) -"ctv" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) -"ctw" = ( -/obj/machinery/door/airlock/virology/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) "ctx" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -45063,21 +44409,6 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) -"ctD" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/classic/normal{ - name = "Medbay Desk" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, -/obj/item/paper_bin, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) "ctE" = ( /obj/machinery/door/poddoor/shutters{ density = 0; @@ -45099,7 +44430,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "ctF" = ( /obj/structure/table/reinforced, /obj/structure/extinguisher_cabinet{ @@ -45171,7 +44502,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ctR" = ( /obj/structure/table/reinforced, /obj/item/stack/cable_coil/random, @@ -45179,10 +44510,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) "ctS" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, /area/station/maintenance/port) @@ -45242,7 +44570,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cub" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -45254,7 +44582,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cuc" = ( /obj/structure/chair/comfy/black{ dir = 1 @@ -45268,7 +44596,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cud" = ( /obj/structure/cable{ d1 = 1; @@ -45283,7 +44611,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cue" = ( /obj/structure/chair/comfy/black{ dir = 1 @@ -45296,7 +44624,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cuf" = ( /obj/item/kirbyplants, /obj/structure/cable{ @@ -45307,7 +44635,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cug" = ( /obj/structure/cable{ d1 = 4; @@ -45318,7 +44646,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cuk" = ( /obj/structure/table, /obj/item/radio, @@ -45328,11 +44656,7 @@ /turf/simulated/floor/plasteel, /area/station/service/expedition) "cul" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -45367,7 +44691,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cuo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -45389,7 +44713,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cus" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -45401,7 +44725,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cut" = ( /obj/machinery/light, /obj/structure/sign/securearea{ @@ -45424,7 +44748,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cuv" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -45441,7 +44765,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cuw" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -45726,7 +45050,7 @@ /turf/simulated/floor/plasteel, /area/station/service/expedition) "cuY" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/machinery/ai_status_display{ pixel_y = 32 }, @@ -45739,7 +45063,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/item/radio/intercom{ name = "north bump"; pixel_y = 28 @@ -45748,7 +45072,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "cva" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/machinery/status_display{ pixel_y = 32 }, @@ -45880,7 +45204,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cvt" = ( /obj/structure/table/reinforced, /obj/machinery/firealarm{ @@ -45919,11 +45243,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) "cvx" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -45963,29 +45283,13 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) -"cvE" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) -"cvF" = ( -/turf/simulated/floor/plasteel{ - icon_state = "neutral" - }, -/area/station/hallway/primary/central/south) -"cvG" = ( -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cvH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cvJ" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/metal/fifty, @@ -46044,16 +45348,6 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/rnd) -"cvU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "cvV" = ( /obj/machinery/door/airlock/glass{ name = "Cabin" @@ -46067,7 +45361,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cvX" = ( /obj/machinery/alarm{ dir = 1; @@ -46089,7 +45383,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cvY" = ( /obj/structure/table, /turf/simulated/floor/plasteel, @@ -46163,55 +45457,11 @@ }, /turf/simulated/wall, /area/station/public/fitness) -"cwo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) -"cwp" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "cwq" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/white, /area/station/maintenance/port2) -"cwr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "cws" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/simulated/floor/plasteel{ @@ -46423,7 +45673,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cwS" = ( /obj/structure/cable{ d1 = 1; @@ -46489,7 +45739,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) "cwY" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) @@ -46584,7 +45834,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cxn" = ( /turf/simulated/wall, /area/station/public/toilet/lockerroom) @@ -46707,8 +45957,12 @@ /area/station/engineering/control) "cxF" = ( /obj/structure/table/reinforced, -/obj/item/storage/fancy/donut_box, /obj/effect/turf_decal/delivery, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/fancy/donut_box, /turf/simulated/floor/plasteel, /area/station/engineering/control) "cxG" = ( @@ -46788,7 +46042,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cxP" = ( /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, @@ -47065,7 +46319,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cyA" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -47082,7 +46336,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cyB" = ( /obj/machinery/shower{ dir = 4 @@ -47114,11 +46368,7 @@ /turf/simulated/floor/plasteel, /area/station/public/toilet/lockerroom) "cyH" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/camera{ c_tag = "Restrooms" }, @@ -47224,11 +46474,7 @@ }, /area/station/public/locker) "cyS" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/closet/wardrobe/pink, /obj/structure/cable{ d2 = 8; @@ -47247,13 +46493,9 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "cyU" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -47277,12 +46519,7 @@ /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "cyX" = ( -/obj/machinery/power/apc{ - cell_type = 15000; - dir = 1; - name = "Cryo and Arrivals Super APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/important/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -47494,13 +46731,6 @@ }, /turf/simulated/floor/plasteel/grimy, /area/station/service/library) -"czB" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "czC" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/dark, @@ -47520,7 +46750,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/hollow, @@ -47534,11 +46764,7 @@ }, /area/station/ai_monitored/storage/eva) "czJ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -47620,7 +46846,7 @@ /area/station/science/robotics/showroom) "czO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -48026,6 +47252,14 @@ icon_state = "yellowfull" }, /area/station/engineering/hardsuitstorage) +"cAM" = ( +/obj/item/reagent_containers/glass/beaker/waterbottle, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/glass/reinforced/plasma, +/turf/simulated/floor/wood, +/area/station/medical/psych) "cAP" = ( /obj/effect/landmark/spawner/xeno, /turf/simulated/floor/plasteel{ @@ -48134,13 +47368,21 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) +"cBf" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "cBg" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "cBh" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -48150,7 +47392,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cBi" = ( /obj/item/kirbyplants, /obj/machinery/light{ @@ -48752,7 +47994,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "cDa" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/delivery/hollow, @@ -48761,7 +48003,7 @@ "cDb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ - name = "MiniSat External Access" + name = "MiniSat Access" }, /obj/effect/mapping_helpers/airlock/access/all/science/minisat, /obj/structure/cable{ @@ -48788,7 +48030,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cDe" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -49209,16 +48451,13 @@ /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/r_wall, /area/station/engineering/control) -"cEC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" +"cEB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/area/station/medical/medbay) +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "cED" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/ai_status_display{ @@ -49247,22 +48486,12 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) -"cEL" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, /area/station/hallway/primary/central) -"cEM" = ( -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, +"cEL" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -49311,7 +48540,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cET" = ( /obj/machinery/firealarm{ name = "north bump"; @@ -49321,7 +48550,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cEU" = ( /obj/structure/extinguisher_cabinet{ name = "north bump"; @@ -49331,7 +48560,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cEV" = ( /obj/structure/cable{ d1 = 1; @@ -49342,13 +48571,13 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cEW" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cEY" = ( /obj/structure/extinguisher_cabinet{ name = "north bump"; @@ -49358,7 +48587,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cEZ" = ( /obj/machinery/light{ dir = 1 @@ -49370,7 +48599,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cFa" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -49387,9 +48616,9 @@ /turf/simulated/floor/plasteel, /area/station/public/toilet/lockerroom) "cFc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -49398,25 +48627,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) -"cFd" = ( -/obj/structure/chair, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/hallway/primary/central) -"cFe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) +/area/station/hallway/primary/central/se) "cFg" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -49438,6 +48649,7 @@ "cFk" = ( /obj/structure/table, /obj/effect/decal/cleanable/cobweb2, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cFl" = ( @@ -49490,23 +48702,6 @@ icon_state = "neutral" }, /area/station/public/fitness) -"cFo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "cFp" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -49514,7 +48709,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cFq" = ( /obj/structure/cable{ d1 = 4; @@ -49596,24 +48791,6 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/public/fitness) -"cFA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) -"cFB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "cFD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49725,10 +48902,7 @@ }, /area/station/security/brig) "cFR" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -50217,7 +49391,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cGA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall7"; @@ -50227,7 +49401,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cGB" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall9"; @@ -50236,7 +49410,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cGD" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall9a"; @@ -50246,7 +49420,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cGF" = ( /obj/structure/cable{ d1 = 4; @@ -50263,28 +49437,9 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/hallway/primary/central) -"cGI" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 + icon_state = "neutralcorner" }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) +/area/station/hallway/primary/central/se) "cGJ" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -50298,40 +49453,24 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) -"cGN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 10 }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) +"cGN" = ( /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/maintenance/starboard) -"cGO" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cGP" = ( /obj/structure/bedsheetbin, /obj/structure/table, @@ -50545,7 +49684,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cHC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50566,7 +49705,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cHE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50587,7 +49726,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50604,7 +49743,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHH" = ( /obj/machinery/light, /obj/machinery/camera{ @@ -50626,7 +49765,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -50643,7 +49782,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHJ" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -50654,10 +49793,15 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50673,7 +49817,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHL" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -50690,7 +49834,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50709,27 +49853,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) -"cHO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "bluecorner" - }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50737,9 +49861,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/junction{ +/obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/stripes/corner, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50748,7 +49873,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cHQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -50760,6 +49885,9 @@ dir = 8; icon_state = "pipe-c" }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -50768,16 +49896,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) -"cHV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) +/area/station/hallway/primary/central/se) "cHW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -50786,6 +49905,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" @@ -50804,8 +49924,6 @@ /area/station/maintenance/port2) "cHZ" = ( /obj/machinery/iv_drip, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "cIa" = ( @@ -51065,7 +50183,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cIP" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) @@ -51082,7 +50200,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cIU" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -51091,11 +50209,11 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cIV" = ( /obj/structure/sign/science, /turf/simulated/wall, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cIW" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -51191,10 +50309,6 @@ }, /turf/simulated/wall, /area/station/medical/reception) -"cJg" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/medbay) "cJh" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -51204,12 +50318,6 @@ /obj/machinery/status_display, /turf/simulated/wall, /area/station/medical/reception) -"cJj" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/station/medical/reception) "cJk" = ( /obj/structure/sign/greencross, /turf/simulated/wall, @@ -51236,15 +50344,6 @@ icon_state = "neutral" }, /area/station/maintenance/starboard2) -"cJo" = ( -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/maintenance/starboard) -"cJp" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cJq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -51254,69 +50353,6 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics/chargebay) -"cJr" = ( -/obj/structure/table/glass, -/obj/item/tank/internals/emergency_oxygen/nitrogen{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/tank/internals/emergency_oxygen/nitrogen{ - pixel_x = 5 - }, -/obj/item/tank/internals/emergency_oxygen/plasma{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/tank/internals/emergency_oxygen/plasma{ - pixel_x = -5 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cJt" = ( -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/obj/structure/closet/secure_closet/medical3, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cJu" = ( -/obj/structure/extinguisher_cabinet{ - name = "north bump"; - pixel_y = 30 - }, -/obj/structure/closet/radiation, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cJv" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cJw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/maintenance/starboard) -"cJx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cJz" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -51401,10 +50437,6 @@ }, /turf/simulated/floor/plasteel, /area/station/public/fitness) -"cJL" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cJO" = ( /obj/machinery/light/small{ dir = 4 @@ -51467,13 +50499,10 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) "cJY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cJZ" = ( /obj/machinery/light/small{ dir = 1 @@ -51605,17 +50634,12 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"cKy" = ( -/obj/item/kirbyplants, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) "cKz" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cKA" = ( /obj/structure/chair/sofa/corp/right, /obj/effect/landmark/start/assistant, @@ -51646,10 +50670,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"cKE" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) "cKF" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -51684,20 +50704,21 @@ /turf/simulated/wall, /area/station/science/research) "cKM" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 4 - }, /obj/machinery/light{ dir = 8 }, +/obj/structure/table/glass, +/obj/item/book/random{ + pixel_x = 2; + pixel_y = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" }, /area/station/medical/reception) "cKN" = ( -/obj/structure/chair/sofa/corp/left, -/obj/effect/landmark/start/assistant, +/obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -51710,18 +50731,7 @@ }, /area/station/medical/medbay) "cKP" = ( -/obj/structure/chair/comfy/teal, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cKQ" = ( -/obj/structure/table/holotable, -/obj/item/reagent_containers/food/drinks/coffee{ - pixel_x = -6; - pixel_y = 6 - }, +/obj/structure/chair/office, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -51731,38 +50741,17 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/chair/comfy/teal, +/obj/structure/table/glass, +/obj/item/grown/sunflower, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" }, /area/station/medical/reception) -"cKS" = ( -/obj/structure/table/tray, -/obj/item/stack/medical/bruise_pack/advanced{ - pixel_x = -7; - pixel_y = 7 - }, -/obj/item/stack/medical/ointment/advanced{ - pixel_x = 4; - pixel_y = 5 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) "cKT" = ( /obj/structure/railing, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"cKU" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) "cKV" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -51770,20 +50759,18 @@ }, /area/station/medical/medbay) "cKW" = ( -/obj/structure/chair/comfy/teal, -/obj/effect/landmark/start/assistant, +/obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" }, /area/station/medical/reception) "cKX" = ( -/obj/structure/table, +/obj/structure/table/glass, /obj/item/storage/firstaid/regular, -/obj/machinery/alarm{ - dir = 8; +/obj/item/radio/intercom{ name = "east bump"; - pixel_x = 24 + pixel_x = 28 }, /turf/simulated/floor/plasteel{ dir = 4; @@ -51793,126 +50780,6 @@ "cKY" = ( /turf/simulated/wall, /area/station/medical/medbay) -"cLd" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/camera{ - c_tag = "Medbay Storage Room"; - dir = 4; - network = list("SS13","Medical") - }, -/obj/structure/table/glass, -/obj/item/storage/box/autoinjectors{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/box/iv_bags, -/obj/item/storage/box/pillbottles{ - pixel_x = -5; - pixel_y = -5 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cLe" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/storage) -"cLf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/storage) -"cLg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cLi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) -"cLk" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) -"cLl" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) "cLm" = ( /obj/structure/cable{ d1 = 4; @@ -51945,6 +50812,10 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cLo" = ( @@ -52091,6 +50962,17 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) +"cLL" = ( +/obj/machinery/newscaster{ + name = "north bump"; + pixel_y = 28 + }, +/obj/structure/closet/wardrobe/coroner, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "cLM" = ( /obj/structure/cable{ d1 = 4; @@ -52113,11 +50995,7 @@ /area/station/maintenance/electrical) "cLO" = ( /obj/structure/table/reinforced, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -52221,7 +51099,7 @@ }, /area/station/science/research) "cMo" = ( -/obj/structure/chair/sofa/corp/right{ +/obj/structure/chair/comfy/teal{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -52230,25 +51108,16 @@ }, /area/station/medical/reception) "cMp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay) +/area/station/medical/reception) "cMq" = ( /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) -"cMr" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cMs" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/reception) "cMt" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -52257,71 +51126,19 @@ }, /area/station/medical/reception) "cMv" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 1; + dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay) -"cMw" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) +/area/station/medical/paramedic) "cMz" = ( /turf/simulated/wall, /area/station/medical/storage) -"cMA" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/radiation, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cMB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) -"cMC" = ( -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) -"cMG" = ( -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) "cMH" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/starboard) -"cMI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) -"cMJ" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/maintenance/starboard) "cML" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -52363,7 +51180,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "cMR" = ( /obj/structure/chair{ dir = 4 @@ -52610,14 +51427,19 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cNO" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cNP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -52628,7 +51450,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cNQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -52643,80 +51465,38 @@ /turf/simulated/floor/plasteel, /area/station/medical/reception) "cNR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/computer/crew{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/area/station/medical/medbay) -"cNS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/plasteel/white/side{ dir = 4 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) -"cNT" = ( +/area/station/medical/paramedic) +"cNS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whiteblue" + dir = 10 }, -/area/station/medical/reception) -"cNU" = ( -/obj/structure/rack/holorack, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 + dir = 10 }, /turf/simulated/floor/plasteel/white, /area/station/medical/reception) -"cNV" = ( -/obj/item/kirbyplants, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plasteel/white, +"cNU" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, /area/station/medical/reception) "cNW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/chair/office{ + dir = 8 }, /turf/simulated/floor/plasteel{ dir = 4; @@ -52724,14 +51504,20 @@ }, /area/station/medical/reception) "cNY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/power/apc/directional/south, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/structure/chair/office{ + dir = 8 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/obj/effect/landmark/start/paramedic, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/paramedic) "cNZ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -52747,115 +51533,26 @@ /turf/space, /area/space/nearstation) "cOa" = ( -/obj/structure/chair/office/light{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/obj/machinery/door_control{ - id = "psychfoyer"; - layer = 3.3; - name = "Psych Foyer Doors"; - normaldoorcontrol = 1; - pixel_x = -25; - pixel_y = -6 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/obj/effect/landmark/start/psychiatrist, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cOb" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_y = 5 +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/obj/item/pen/multi, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cOc" = ( -/obj/machinery/light{ - dir = 4 +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" }, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cOd" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) -"cOe" = ( -/obj/item/reagent_containers/food/snacks/badrecipe, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) +/area/station/medical/paramedic) "cOg" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/medical/storage) -"cOh" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/fire{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/firstaid/fire{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/fire{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cOi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) -"cOj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) -"cOk" = ( -/obj/structure/table/glass, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/toxin{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) "cOl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -52874,19 +51571,11 @@ }, /turf/space, /area/space/nearstation) -"cOn" = ( -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) "cOp" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, -/obj/item/reagent_containers/food/snacks/pie, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/item/food/snacks/pie, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -52911,11 +51600,7 @@ "cOr" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -52995,12 +51680,11 @@ /area/station/maintenance/electrical) "cOB" = ( /obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" }, -/turf/simulated/floor/plasteel, /area/station/engineering/atmos) "cOC" = ( /obj/structure/table/reinforced, @@ -53157,15 +51841,6 @@ /obj/structure/sign/biohazard, /turf/simulated/wall, /area/station/science/xenobiology) -"cPa" = ( -/obj/effect/mob_spawn/human/corpse/charredskeleton, -/obj/effect/rune{ - cultist_desc = "an imitation of the real thing with no power."; - desc = "An odd collection of symbols drawn in what seems to be very old and dry blood."; - name = "old smeared rune" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cPb" = ( /obj/structure/table/reinforced, /obj/item/storage/box/beakers, @@ -53262,10 +51937,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark/lightsout, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cPA" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -53277,22 +51957,19 @@ /turf/simulated/wall/r_wall, /area/station/maintenance/starboardsolar) "cPD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/railing{ + dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 10; + dir = 4; icon_state = "whiteblue" }, /area/station/medical/reception) "cPE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel/white, +/obj/structure/flora/ausbushes/stalkybush, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/rock/jungle, +/turf/simulated/floor/grass, /area/station/medical/reception) "cPG" = ( /obj/structure/girder, @@ -53301,21 +51978,11 @@ icon_state = "neutral" }, /area/station/maintenance/fsmaint) -"cPH" = ( -/obj/effect/landmark/lightsout, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/reception) "cPI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/white, +/obj/structure/flora/ausbushes/sunnybush, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, /area/station/medical/reception) "cPJ" = ( /obj/structure/disposalpipe/segment{ @@ -53339,39 +52006,9 @@ }, /turf/space, /area/space/nearstation) -"cPL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cPM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"cPO" = ( -/obj/effect/spawner/window/reinforced/polarized{ - id = "Psych" - }, -/turf/simulated/floor/plating, -/area/station/medical/psych) "cPQ" = ( /turf/simulated/floor/wood, /area/station/medical/psych) -"cPR" = ( -/obj/structure/sign/poster/random{ - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) "cPT" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -53381,25 +52018,6 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port2) -"cPU" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/brute{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/firstaid/brute{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/brute{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) "cPV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -53407,31 +52025,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/port2) -"cPW" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/o2{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/firstaid/o2{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/o2{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/requests_console{ - department = "Medbay"; - departmentType = 1; - name = "Medbay Requests Console"; - pixel_x = 30 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) "cPX" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -53475,6 +52068,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cQe" = ( @@ -53544,10 +52138,6 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) -"cQs" = ( -/obj/item/reagent_containers/food/snacks/candy/candybar, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cQu" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ @@ -53555,10 +52145,6 @@ icon_state = "neutral" }, /area/station/maintenance/port) -"cQv" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cQx" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -53813,7 +52399,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cRd" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -53846,7 +52432,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cRj" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -53854,140 +52440,6 @@ icon_state = "whitebluecorner" }, /area/station/medical/reception) -"cRk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) -"cRl" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cRm" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cRn" = ( -/obj/machinery/door_control{ - id = "medbayfoyer"; - layer = 3.3; - name = "Medbay Foyer Doors"; - normaldoorcontrol = 1; - pixel_x = -25 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cRo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cRp" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cRq" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cRr" = ( -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/obj/item/kirbyplants, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cRt" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/syringes, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/item/crutches, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cRu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/storage) -"cRv" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/storage) -"cRw" = ( -/obj/structure/table/glass, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/clothing/accessory/stethoscope, -/obj/item/clothing/accessory/stethoscope, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) -"cRx" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Toilet" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/station/medical/break_room) "cRy" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 @@ -54003,14 +52455,11 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cRA" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -54384,77 +52833,12 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"cSx" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cSy" = ( -/obj/structure/table, -/obj/item/folder/white, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cSz" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) "cSA" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitebluecorner" }, /area/station/medical/medbay) -"cSB" = ( -/obj/item/kirbyplants, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cSD" = ( -/obj/structure/bed/roller, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cSE" = ( -/obj/machinery/light, -/obj/structure/sign/chemistry{ - pixel_y = -32 - }, -/obj/machinery/camera{ - c_tag = "Medbay Lobby"; - dir = 1; - network = list("Medical","SS13") - }, -/obj/structure/bed/roller, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) "cSF" = ( /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" @@ -54471,36 +52855,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) -"cSI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cSJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) -"cSK" = ( -/obj/machinery/ai_status_display{ - pixel_x = 32 - }, -/obj/structure/closet/secure_closet/psychiatrist, -/obj/item/clipboard{ - pixel_x = -5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) "cSL" = ( /obj/structure/cable{ d1 = 4; @@ -54541,44 +52895,21 @@ /turf/space, /area/station/maintenance/starboardsolar) "cSO" = ( -/obj/structure/sign/greencross, -/turf/simulated/wall, -/area/station/medical/storage) -"cSR" = ( -/obj/structure/urinal{ - pixel_y = 28 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/medical/break_room) -"cSS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/medical/break_room) -"cST" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 12 +/obj/structure/rack, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical{ + pixel_x = 3; + pixel_y = -3 }, -/obj/machinery/light/small{ - dir = 1 +/obj/item/storage/belt/medical{ + pixel_x = 6; + pixel_y = -6 }, -/obj/effect/decal/cleanable/vomit, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plasteel{ - icon_state = "neutralfull" + dir = 1; + icon_state = "whiteblue" }, -/area/station/medical/break_room) +/area/station/medical/storage) "cSW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, @@ -54633,15 +52964,6 @@ icon_state = "neutralfull" }, /area/station/public/fitness) -"cTg" = ( -/obj/machinery/defibrillator_mount/loaded{ - pixel_y = 30 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) "cTh" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 @@ -54876,7 +53198,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cTT" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; @@ -54902,7 +53224,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cTW" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -54911,172 +53233,10 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cTX" = ( /turf/simulated/wall/r_wall, /area/station/medical/medbay) -"cTY" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "chemdesk1"; - name = "Chemistry Desk Shutters" - }, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plating, -/area/station/medical/reception) -"cUb" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "chemdesk1"; - name = "Chemistry Desk Shutters" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plating, -/area/station/medical/reception) -"cUe" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cUf" = ( -/obj/machinery/camera{ - c_tag = "Medbay Entrance Hall"; - dir = 8; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cUg" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/camera{ - c_tag = "Psychiatrist's Office"; - dir = 4; - network = list("Medical","SS13","Security") - }, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/structure/cable, -/turf/simulated/floor/carpet, -/area/station/medical/psych) -"cUi" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/carpet, -/area/station/medical/psych) -"cUk" = ( -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cUl" = ( -/obj/structure/table/wood, -/obj/machinery/kitchen_machine/microwave, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cUn" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/medbay) -"cUo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutral" - }, -/area/station/medical/break_room) -"cUp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cUq" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cUr" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/exam_room) -"cUs" = ( -/obj/structure/table/glass, -/obj/item/stack/medical/ointment/advanced{ - pixel_x = 5 - }, -/obj/item/stack/medical/bruise_pack/advanced{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/light_switch{ - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) "cUu" = ( /obj/structure/cable{ d1 = 2; @@ -55094,6 +53254,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cUv" = ( @@ -55101,7 +53262,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cUw" = ( /obj/structure/cable{ d1 = 4; @@ -55397,7 +53558,7 @@ icon_state = "pipe-y" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cVd" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery/hollow, @@ -55469,11 +53630,7 @@ /turf/simulated/floor/plasteel, /area/station/science/xenobiology) "cVo" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/table/reinforced, /obj/machinery/light{ dir = 4 @@ -55555,28 +53712,13 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cVD" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "chemdesk2"; - name = "Chemistry Desk Shutters" - }, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plating, -/area/station/medical/chemistry) -"cVF" = ( -/obj/structure/table/glass, -/obj/item/clipboard, -/obj/item/toy/figure/crew/chemist, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteyellow" +/obj/machinery/chem_master, +/obj/machinery/light{ + dir = 8 }, +/turf/simulated/floor/engine, /area/station/medical/chemistry) "cVG" = ( /obj/machinery/camera{ @@ -55587,158 +53729,27 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) -"cVH" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/landmark/start/chemist, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) -"cVI" = ( -/obj/machinery/chem_dispenser, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) "cVL" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) -"cVM" = ( -/obj/machinery/computer/med_data{ - dir = 4 - }, -/obj/machinery/computer/guestpass{ - pixel_x = -28 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cVN" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cVO" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/machinery/door_control{ - id = "medbayfoyer"; - layer = 3.3; - name = "Medbay Foyer Doors"; - normaldoorcontrol = 1; - pixel_x = 28; - pixel_y = 27 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cVP" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cVQ" = ( -/turf/simulated/floor/carpet, -/area/station/medical/psych) -"cVR" = ( -/obj/structure/bed/psych, -/turf/simulated/floor/carpet, -/area/station/medical/psych) -"cVS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cVT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"cVU" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cVV" = ( -/obj/item/kirbyplants, -/obj/machinery/defibrillator_mount/loaded{ - pixel_y = 30 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cVW" = ( -/obj/machinery/newscaster{ - dir = 4; - name = "west bump"; - pixel_x = -28 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cVY" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "redbluefull" - }, -/area/station/medical/break_room) "cWa" = ( /obj/machinery/camera{ c_tag = "Port Hallway South" }, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "cWb" = ( /obj/machinery/light{ dir = 1 @@ -55751,10 +53762,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"cWc" = ( -/obj/effect/spawner/random_spawners/wall_rusted_always, -/turf/simulated/wall, -/area/station/medical/break_room) "cWd" = ( /turf/simulated/wall, /area/station/medical/break_room) @@ -55862,11 +53869,7 @@ }, /area/station/maintenance/port) "cWs" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -56136,199 +54139,50 @@ }, /turf/simulated/floor/plasteel, /area/station/science/research) -"cXd" = ( -/obj/machinery/camera{ - c_tag = "Central Hallway South 1"; - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "orangecorner" - }, -/area/station/hallway/primary/aft) "cXe" = ( /turf/simulated/wall/r_wall, /area/station/medical/chemistry) "cXf" = ( -/obj/structure/closet/secure_closet/reagents, -/obj/structure/disaster_counter/chemistry{ - pixel_x = -32 +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "imnotmakingyoulubepissoff"; + name = "Chemistry Privacy Shutter" }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteyellow" +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, +/turf/simulated/floor/plating, /area/station/medical/chemistry) "cXg" = ( /turf/simulated/floor/plasteel/white, /area/station/medical/chemistry) "cXh" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) -"cXi" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/effect/spawner/window/reinforced, +/obj/structure/sign/chemistry, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "imnotmakingyoulubepissoff"; + name = "Chemistry Privacy Shutter" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/station/medical/chemistry) "cXj" = ( -/obj/structure/window/reinforced, -/obj/structure/closet/secure_closet/medical1, -/obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) -"cXm" = ( -/obj/item/radio/intercom{ - name = "west bump"; - pixel_x = -28 - }, -/obj/machinery/computer/crew{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cXn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) -"cXo" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) -"cXp" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cXq" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cXy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) -"cXz" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) -"cXA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) -"cXB" = ( -/obj/machinery/camera{ - c_tag = "Medbay Public Exam Room"; - dir = 8; - network = list("SS13","Medical") - }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 4; - name = "east bump"; - pixel_x = 24; - shock_proof = 1 - }, -/obj/structure/table, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cXC" = ( -/obj/structure/chair/stool, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutral" - }, -/area/station/medical/break_room) -"cXD" = ( -/obj/structure/closet/crate, -/obj/item/retractor, -/obj/effect/spawner/lootdrop/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) -"cXF" = ( -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "redbluefull" +/obj/structure/railing{ + dir = 9 }, -/area/station/medical/break_room) -"cXG" = ( +/obj/structure/table/glass, +/obj/item/toy/plushie/slimeplushie, /turf/simulated/floor/plasteel{ - icon_state = "redbluefull" + dir = 1; + icon_state = "whitebluecorner" }, -/area/station/medical/break_room) +/area/station/medical/medbay) "cXI" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -56423,6 +54277,11 @@ /area/station/maintenance/port) "cYh" = ( /obj/structure/closet/wardrobe/yellow, +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Locker Room Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -56497,119 +54356,36 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/white, /area/station/science/rnd) -"cYC" = ( -/turf/simulated/floor/plasteel{ - icon_state = "orangecorner" - }, -/area/station/hallway/primary/aft) "cYD" = ( -/obj/structure/table/glass, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whiteyellow" +/obj/structure/sink{ + dir = 8; + pixel_x = -12 }, -/area/station/medical/chemistry) -"cYE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/camera{ + c_tag = "Chemistry North"; + dir = 4; + network = list("Medical","SS13") }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whiteyellowcorner" + icon_state = "whiteyellow" }, /area/station/medical/chemistry) "cYF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/light{ dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) -"cYG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) -"cYH" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, +/obj/effect/landmark/start/chemist, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteyellow" }, /area/station/medical/chemistry) -"cYI" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall, -/area/station/medical/chemistry) -"cYJ" = ( -/obj/structure/table/glass, -/obj/machinery/light/small, -/obj/item/clipboard, -/obj/item/toy/figure/crew/md, -/obj/machinery/camera{ - c_tag = "Medbay Front Desk"; - dir = 1; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cYL" = ( -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/reception) -"cYM" = ( -/obj/structure/table, -/obj/machinery/light/small, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) -"cYN" = ( -/obj/structure/closet/wardrobe/coroner, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "cYO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -56624,20 +54400,6 @@ "cYP" = ( /turf/simulated/wall, /area/station/medical/psych) -"cYR" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/status_display{ - pixel_y = 32 - }, -/turf/simulated/floor/plasteel/freezer, -/area/station/medical/medbay) -"cYS" = ( -/obj/structure/curtain/open/shower, -/obj/machinery/shower, -/turf/simulated/floor/noslip, -/area/station/medical/medbay) "cYU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -56647,62 +54409,6 @@ }, /turf/space, /area/station/maintenance/starboardsolar) -"cYV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) -"cYW" = ( -/obj/structure/extinguisher_cabinet{ - name = "east bump"; - pixel_x = 30 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cYX" = ( -/obj/structure/table/wood, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cYY" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "redbluefull" - }, -/area/station/medical/break_room) -"cYZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "redbluefull" - }, -/area/station/medical/break_room) "cZb" = ( /obj/machinery/sleeper{ dir = 4 @@ -56719,7 +54425,7 @@ dir = 1; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZc" = ( /obj/structure/rack, /obj/item/clothing/accessory/stethoscope, @@ -56740,6 +54446,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cZe" = ( @@ -56751,12 +54458,12 @@ dir = 1; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZf" = ( /obj/machinery/iv_drip, /obj/structure/bed/roller, /turf/simulated/floor/plating, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZg" = ( /obj/structure/table/glass, /obj/structure/sign/nosmoking_2{ @@ -56771,7 +54478,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZh" = ( /obj/machinery/iv_drip, /obj/structure/bed/roller, @@ -56780,7 +54487,7 @@ dir = 4; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZi" = ( /obj/structure/mirror{ icon_state = "mirror_broke"; @@ -56791,7 +54498,7 @@ dir = 4; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZj" = ( /obj/machinery/constructable_frame/machine_frame, /obj/effect/decal/cleanable/cobweb2, @@ -56803,7 +54510,7 @@ dir = 4; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "cZk" = ( /obj/machinery/door/airlock/maintenance{ name = "Gambling Den" @@ -56836,15 +54543,6 @@ /obj/structure/rack, /turf/simulated/floor/plating, /area/station/maintenance/port) -"cZp" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) "cZq" = ( /obj/machinery/atmospherics/binary/valve, /obj/structure/sign/nosmoking_2{ @@ -56857,11 +54555,7 @@ /area/station/maintenance/electrical) "cZs" = ( /obj/structure/table/reinforced, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/folder/white, /obj/item/stock_parts/cell/high, /obj/item/stack/sheet/glass, @@ -56929,43 +54623,6 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/science/xenobiology) -"cZD" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/door_control{ - id = "chemdesk2"; - name = "Secondary Chemistry Shutters"; - pixel_x = -26; - pixel_y = -5 - }, -/obj/machinery/door_control{ - id = "chemdesk1"; - name = "Primary Chemistry Shutters"; - pixel_x = -26; - pixel_y = 5 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteyellow" - }, -/area/station/medical/chemistry) -"cZE" = ( -/obj/machinery/chem_master, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) "cZF" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -56982,54 +54639,14 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"cZJ" = ( -/obj/structure/extinguisher_cabinet{ - name = "west bump"; - pixel_x = -30 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"cZL" = ( -/turf/simulated/floor/plasteel/freezer, -/area/station/medical/medbay) -"cZM" = ( -/obj/item/kirbyplants, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) "cZN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) -"cZO" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"cZQ" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "cZR" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -57038,20 +54655,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) -"cZS" = ( -/obj/machinery/sleeper, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) +/area/station/hallway/primary/aft/south) "cZT" = ( /obj/structure/cable{ d1 = 2; @@ -57068,85 +54672,31 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, /area/station/maintenance/starboard) -"cZU" = ( -/obj/structure/chair/stool, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cZV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutral" - }, -/area/station/medical/break_room) -"cZW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) -"cZX" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 4; - name = "east bump"; - pixel_x = 24; - shock_proof = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) "cZY" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) -"daa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) +/area/station/maintenance/starboard) "dab" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dac" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dad" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -57170,11 +54720,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "dah" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/table/wood, /obj/item/clothing/gloves/color/fyellow, /obj/item/storage/toolbox/electrical, @@ -57296,16 +54842,21 @@ }, /area/station/maintenance/port) "dat" = ( -/obj/machinery/chem_heater, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/smartfridge/medbay, +/obj/machinery/door/window/classic/reversed, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "imnotmakingyoulubepissoff"; + name = "Chemistry Privacy Shutter" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel/white, /area/station/medical/chemistry) "dau" = ( /turf/simulated/floor/plasteel{ @@ -57323,17 +54874,6 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"dax" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "daz" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -57449,34 +54989,18 @@ /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, -/area/station/hallway/primary/aft) -"daO" = ( -/obj/structure/sign/chemistry{ - pixel_x = 32; - pixel_y = 32 - }, -/turf/simulated/floor/plasteel{ - icon_state = "orangecorner" - }, -/area/station/hallway/primary/aft) -"daP" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/turf/simulated/floor/plasteel{ - icon_state = "orangefull" - }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "daR" = ( /obj/item/crowbar, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "daS" = ( /obj/item/kirbyplants, /turf/simulated/floor/plating, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "daT" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -57496,16 +55020,6 @@ }, /turf/space, /area/station/maintenance/starboardsolar) -"daU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "daW" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -57518,37 +55032,6 @@ icon_state = "whiteyellowcorner" }, /area/station/medical/medbay) -"daZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dba" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dbb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "dbc" = ( /obj/machinery/power/solar{ name = "Aft Starboard Solar Panel" @@ -57559,32 +55042,25 @@ }, /area/station/maintenance/starboardsolar) "dbd" = ( -/obj/machinery/chem_dispenser, +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper/precision, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 5 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/medical/chemistry) "dbg" = ( /obj/machinery/ai_status_display, /turf/simulated/wall, /area/station/science/robotics) -"dbi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) -"dbl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dbm" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -57606,51 +55082,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, /area/station/maintenance/starboard) -"dbr" = ( -/obj/effect/decal/cleanable/fungus, -/turf/simulated/wall, -/area/station/medical/surgery) -"dbs" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/exam_room) -"dbt" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/exam_room) -"dbu" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/exam_room) -"dbv" = ( -/obj/structure/sign/greencross{ - pixel_x = 32 - }, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/exam_room) "dbw" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/apmaint) @@ -57670,17 +55107,6 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) -"dbA" = ( -/obj/item/hemostat, -/obj/structure/table/tray, -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/medical/surgery) "dbB" = ( /obj/structure/cable{ d1 = 4; @@ -57730,14 +55156,10 @@ /turf/simulated/floor/plasteel/dark, /area/station/maintenance/abandonedbar) "dbF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Observation Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/rock/jungle, +/turf/simulated/floor/grass, /area/station/medical/medbay) "dbG" = ( /obj/item/kirbyplants, @@ -57906,293 +55328,93 @@ /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, -/area/station/hallway/primary/aft) -"dcf" = ( -/turf/simulated/floor/plasteel{ - icon_state = "orangefull" - }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dcg" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel/white, /area/station/medical/chemistry) "dch" = ( -/obj/structure/chair/office/light{ +/obj/structure/chair/stool{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /obj/effect/landmark/start/chemist, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/medical/chemistry) -"dci" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dcj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall8"; location = "hall7c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) -"dcm" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteyellow" - }, -/area/station/medical/medbay) -"dcn" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dco" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dcp" = ( -/obj/machinery/door/airlock/external{ - id_tag = "stationai_door_ext"; - locked = 1; - name = "Minisat Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/engineering/ai_transit_tube) -"dcr" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/effect/landmark/lightsout, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) +/area/station/hallway/primary/aft/south) "dcs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) -"dct" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dcv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + dir = 6 }, /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) -"dcw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dcx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dcy" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-y" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/area/station/medical/chemistry) "dcz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" + icon_state = "neutralfull" }, -/area/station/medical/medbay) +/area/station/hallway/primary/central/ne) "dcA" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" }, /area/station/maintenance/apmaint) -"dcB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) "dcC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, /area/station/maintenance/starboard) "dcE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, -/area/station/medical/exam_room) +/area/station/medical/medbay) "dcF" = ( /obj/machinery/door/airlock/maintenance{ locked = 1; @@ -58208,38 +55430,48 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dcG" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dcH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dcI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dcJ" = ( /obj/structure/dresser, /obj/effect/decal/cleanable/cobweb, @@ -58306,7 +55538,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dcT" = ( /obj/structure/chair/wood, /turf/simulated/floor/wood, @@ -58321,13 +55553,10 @@ /turf/simulated/floor/wood, /area/station/maintenance/abandonedbar) "dcV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dcW" = ( /obj/effect/landmark/spawner/xeno, /turf/simulated/floor/plating, @@ -58409,7 +55638,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dde" = ( /obj/machinery/economy/vending/coffee, /turf/simulated/floor/wood, @@ -58461,13 +55690,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) "ddm" = ( /obj/machinery/light, /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ddn" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -58475,7 +55704,7 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ddr" = ( /obj/machinery/camera{ c_tag = "Research and Development"; @@ -58548,6 +55777,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/recharger{ + pixel_y = 5 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -58638,108 +55870,27 @@ /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, -/area/station/hallway/primary/aft) -"ddK" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "orangefull" - }, -/area/station/hallway/primary/aft) -"ddM" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/area/station/hallway/primary/aft/north) "ddN" = ( -/obj/structure/reagent_dispensers/fueltank/chem{ - pixel_y = -32 - }, /obj/structure/table/glass, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteyellow" - }, -/area/station/medical/chemistry) -"ddO" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteyellow" - }, -/area/station/medical/chemistry) -"ddP" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/closet/secure_closet/chemical, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteyellow" - }, -/area/station/medical/chemistry) -"ddQ" = ( -/obj/machinery/light_switch{ - dir = 1; - name = "south bump"; - pixel_y = -24 +/obj/machinery/door_control{ + desc = "A remote control switch for the medbay foyer."; + id = "imnotmakingyoulubepissoff"; + name = "Chemistry Privacy Shutter Control"; + pixel_x = 26 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/item/reagent_containers/dropper{ + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/clothing/glasses/science{ + pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_y = -3 }, /turf/simulated/floor/plasteel{ - dir = 6; + dir = 4; icon_state = "whiteyellow" }, /area/station/medical/chemistry) @@ -58747,60 +55898,22 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/plating, -/area/station/medical/surgery) -"ddS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteyellowcorner" - }, -/area/station/medical/medbay) -"ddU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) +"ddV" = ( +/obj/structure/railing/corner{ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; + dir = 1; icon_state = "whitebluecorner" }, /area/station/medical/medbay) -"ddV" = ( -/obj/structure/table/glass, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Chemistry"; - dir = 8; - network = list("Medical","SS13") - }, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/reagent_containers/glass/bottle/charcoal, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/obj/item/reagent_containers/dropper, -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteyellow" - }, -/area/station/medical/chemistry) "ddW" = ( /obj/structure/cable{ d1 = 1; @@ -58815,19 +55928,6 @@ icon_state = "neutral" }, /area/station/maintenance/apmaint) -"ddX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "ddY" = ( /obj/structure/cable{ d1 = 1; @@ -58841,71 +55941,11 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) "ddZ" = ( -/obj/machinery/chem_master, -/obj/structure/extinguisher_cabinet{ - name = "south bump"; - pixel_y = -30 - }, -/obj/structure/sign/nosmoking_2{ - pixel_x = -32; - pixel_y = -32 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/medical/chemistry) -"dea" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/medbay) -"deb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"ded" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) -"deh" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dej" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "dek" = ( /obj/structure/rack, /obj/item/roller, @@ -58923,25 +55963,36 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "dem" = ( /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "deo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dep" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "deq" = ( /obj/machinery/door/airlock/maintenance{ locked = 1; @@ -58949,26 +56000,17 @@ }, /obj/structure/barricade/wooden, /turf/simulated/floor/plasteel, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "der" = ( /obj/machinery/shower{ dir = 4 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) -"des" = ( -/obj/effect/spawner/random_spawners/wall_rusted_maybe, -/turf/simulated/wall, -/area/station/medical/break_room) +/area/station/maintenance/starboard) "det" = ( /obj/machinery/space_heater, /turf/simulated/floor/plating, @@ -59193,10 +56235,6 @@ icon_state = "neutral" }, /area/station/maintenance/port) -"deV" = ( -/obj/structure/sign/examroom, -/turf/simulated/wall, -/area/station/medical/exam_room) "deW" = ( /obj/structure/cable{ d1 = 1; @@ -59261,6 +56299,16 @@ "dff" = ( /turf/simulated/wall/r_wall, /area/station/command/office/rd) +"dfl" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "dfm" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -59278,29 +56326,16 @@ /turf/simulated/floor/plating, /area/station/science/robotics/chargebay) "dfq" = ( -/obj/machinery/chem_heater, -/obj/machinery/requests_console{ - department = "Medbay"; - departmentType = 1; - name = "Chemistry Requests Console"; - pixel_y = -30 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/plasteel, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, /area/station/medical/chemistry) -"dfr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/ai_status_display{ - pixel_y = -32 - }, -/obj/machinery/light, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dft" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -59308,27 +56343,16 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dfu" = ( /turf/simulated/wall, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dfv" = ( /turf/simulated/wall, /area/station/medical/paramedic) -"dfx" = ( -/turf/simulated/wall/r_wall, -/area/station/medical/cloning) "dfy" = ( /turf/simulated/wall, /area/station/medical/cloning) -"dfz" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/cloning) -"dfA" = ( -/obj/structure/sign/greencross, -/turf/simulated/wall, -/area/station/medical/cloning) "dfB" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -59337,29 +56361,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) -"dfC" = ( -/obj/machinery/iv_drip, -/obj/machinery/newscaster{ - dir = 8; - name = "east bump"; - pixel_x = 28 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/medbay) -"dfE" = ( -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/machinery/light, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) +/area/station/hallway/primary/aft/north) "dfH" = ( /obj/structure/cable{ d1 = 1; @@ -59368,6 +56370,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" @@ -59426,13 +56429,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/abandonedbar) -"dfQ" = ( -/obj/structure/closet/l3closet/virology, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dfR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -59560,51 +56556,6 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"dgw" = ( -/obj/machinery/door/firedoor, -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/aft) -"dgx" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dgy" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dgB" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "dgC" = ( /obj/machinery/light{ dir = 8 @@ -59613,128 +56564,37 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dgD" = ( /turf/simulated/wall/r_wall, /area/station/medical/paramedic) "dgF" = ( -/obj/machinery/computer/crew, /turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whiteblue" + dir = 8; + icon_state = "whiteyellow" }, -/area/station/medical/paramedic) +/area/station/medical/chemistry) "dgG" = ( -/obj/structure/closet/secure_closet/paramedic, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, +/turf/simulated/floor/plasteel/white, /area/station/medical/paramedic) "dgH" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/extinguisher_cabinet{ - name = "north bump"; - pixel_y = 30 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, /obj/structure/cable{ + d1 = 1; d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whiteblue" - }, -/area/station/medical/paramedic) -"dgI" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/clonepod, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/cloning) -"dgJ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/sign/nosmoking_2{ - pixel_y = 32 - }, -/obj/machinery/computer/cloning, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/station/medical/cloning) -"dgK" = ( -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/dna_scannernew, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" - }, -/area/station/medical/cloning) -"dgL" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/station/medical/cloning) -"dgM" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/cloning) -"dgN" = ( -/obj/structure/table/glass, -/obj/item/storage/box/bodybags{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/bodybags, -/obj/item/pen, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + icon_state = "1-2" }, -/area/station/medical/cloning) -"dgO" = ( -/obj/machinery/power/apc{ +/obj/structure/disposalpipe/segment{ dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/book/manual/medical_cloning, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" + icon_state = "pipe-c" }, -/area/station/medical/cloning) +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) "dgP" = ( /obj/structure/girder, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -59746,17 +56606,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"dgQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "dgR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -59766,44 +56615,31 @@ icon_state = "neutral" }, /area/station/maintenance/apmaint) -"dgS" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "dgT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/rack, +/obj/item/storage/box/patch_packs{ + pixel_x = 3; + pixel_y = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) -"dgU" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/item/storage/box/beakers{ + pixel_y = 2 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dgV" = ( -/obj/structure/table, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = -4; - pixel_y = 4 +/obj/item/storage/box/syringes{ + pixel_x = -3 }, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 3 +/obj/item/storage/box/pillbottles{ + pixel_x = -6; + pixel_y = -2 }, -/obj/item/screwdriver, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "dgW" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -59821,53 +56657,31 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dgZ" = ( -/obj/machinery/camera{ - c_tag = "Patient Room West"; - dir = 4; - network = list("Medical","SS13") - }, -/obj/structure/closet/wardrobe/pjs, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "cmo" + dir = 1; + icon_state = "whitegreen" }, /area/station/medical/medbay) "dhc" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/machinery/newscaster{ - dir = 4; - name = "west bump"; - pixel_x = -28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) -"dhd" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) -"dhe" = ( -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, /area/station/medical/medbay) -"dhf" = ( -/obj/machinery/camera{ - c_tag = "Patient Room East"; - dir = 8; - network = list("Medical","SS13") +"dhh" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/structure/closet/wardrobe/pjs, /turf/simulated/floor/plasteel{ - icon_state = "cmo" + icon_state = "neutralfull" }, -/area/station/medical/medbay) +/area/station/hallway/secondary/entry/south) "dhi" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -60156,13 +56970,6 @@ icon_state = "neutral" }, /area/station/maintenance/apmaint) -"dil" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dim" = ( /obj/structure/table, /obj/machinery/light{ @@ -60231,11 +57038,7 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics/chargebay) "dis" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -60268,47 +57071,35 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "diw" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "diy" = ( /obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /turf/simulated/floor/plasteel/white, -/area/station/medical/paramedic) +/area/station/medical/chemistry) "diz" = ( /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) +"diC" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/area/station/medical/paramedic) -"diB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 1; + dir = 8; icon_state = "whitebluecorner" }, -/area/station/medical/cloning) -"diC" = ( -/turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) +/area/station/medical/medbay) "diD" = ( /obj/structure/cable{ d1 = 4; @@ -60325,99 +57116,16 @@ icon_state = "blue" }, /area/station/maintenance/apmaint) -"diE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) -"diF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" - }, -/area/station/medical/cloning) -"diG" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"diI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" +"diN" = ( +/obj/effect/spawner/window/reinforced/polarized/grilled{ + id = "CMO" }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"diJ" = ( /obj/structure/cable{ - d1 = 4; d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/station/medical/medbay) -"diK" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"diL" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"diM" = ( -/obj/structure/extinguisher_cabinet{ - name = "east bump"; - pixel_x = 30 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"diN" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" + icon_state = "0-8" }, -/area/station/medical/medbay) +/turf/simulated/floor/plating, +/area/station/command/office/cmo) "diQ" = ( /obj/structure/rack, /obj/machinery/light/small{ @@ -60762,29 +57470,6 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics/chargebay) -"djW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) -"djY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/medical/cloning) "djZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -60795,73 +57480,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"dka" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) -"dkb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) -"dkc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) -"dkd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/cloning) -"dke" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dkf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dkh" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -60869,22 +57487,12 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"dkj" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dkk" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "dkl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, -/area/station/medical/medbay) +/area/station/medical/surgery/observation) "dkm" = ( /obj/structure/rack, /obj/structure/extinguisher_cabinet{ @@ -60998,10 +57606,7 @@ }, /area/station/maintenance/port2) "dkB" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/white, @@ -61027,6 +57632,20 @@ "dkI" = ( /turf/simulated/wall/r_wall, /area/station/science/toxins/mixing) +"dkL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "dkP" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance, @@ -61137,36 +57756,39 @@ }, /area/station/science/research) "dkY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/table/glass, +/obj/item/hand_labeler, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Chemistry Requests Console"; + pixel_x = -30 }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whiteblue" + icon_state = "whiteyellow" }, -/area/station/medical/paramedic) +/area/station/medical/chemistry) "dkZ" = ( -/obj/machinery/door_control{ - id = "paramedic"; - name = "Garage Door Control"; - pixel_x = -24; - pixel_y = 1; - req_access_txt = "66" - }, -/obj/machinery/light_switch{ - dir = 4; - name = "custom placement"; - pixel_x = -24; - pixel_y = -8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper/precision, +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/area/station/medical/paramedic) +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "dla" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -61185,13 +57807,18 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics/chargebay) "dld" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/area/station/medical/medbay) +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "dle" = ( /obj/machinery/alarm{ dir = 8; @@ -61201,71 +57828,15 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dlf" = ( -/obj/effect/landmark/start/paramedic, -/turf/simulated/floor/plasteel/white, -/area/station/medical/paramedic) -"dlg" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/radio/intercom{ - name = "west bump"; - pixel_x = -28 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/cloning) -"dlh" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "Medbay West Hallway"; - dir = 1; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dli" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/medical/cloning) -"dlj" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/cloning) -"dlk" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, +/obj/structure/chair/stool, /obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dll" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/cloning) -"dlm" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "Medbay Cloning"; dir = 1 }, -/obj/machinery/bodyscanner, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" - }, -/area/station/medical/cloning) +/obj/effect/landmark/start/chemist, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "dlp" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -61277,29 +57848,17 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dlq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) -"dlr" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/portable/canister/oxygen, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "dls" = ( -/obj/machinery/atmospherics/unary/thermomachine/freezer{ - dir = 1 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/station/medical/psych) "dlu" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -61309,9 +57868,16 @@ }, /area/station/medical/medbay) "dlv" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/wall, -/area/station/medical/medbay) +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "dlw" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable{ @@ -61327,33 +57893,9 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) -"dly" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Observation Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/medbay) "dlz" = ( /turf/simulated/wall, /area/station/medical/surgery) -"dlA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "redbluefull" - }, -/area/station/medical/break_room) -"dlB" = ( -/turf/simulated/floor/plating, -/area/station/medical/surgery) "dlD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -61365,20 +57907,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dlE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dlG" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -61452,11 +57980,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "dlV" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/kirbyplants, /obj/structure/cable, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -61469,11 +57993,6 @@ icon_state = "whitepurplecorner" }, /area/station/command/office/rd) -"dlW" = ( -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "dma" = ( /obj/structure/cable{ d1 = 4; @@ -61513,31 +58032,6 @@ }, /turf/simulated/floor/plasteel/white, /area/station/command/office/rd) -"dmd" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Monkey Pen" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/turf_decal/delivery/partial{ - dir = 1 - }, -/obj/effect/turf_decal/arrows/black{ - dir = 1 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "dmf" = ( /obj/effect/turf_decal/delivery/hollow, /obj/machinery/light_switch{ @@ -61558,34 +58052,16 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dmi" = ( /turf/simulated/wall, /area/station/science/genetics) -"dmj" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/portable/canister/oxygen, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "dmk" = ( -/obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/paramedic) +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "dml" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -61595,56 +58071,12 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) -"dmn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) -"dmp" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dmq" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/port) -"dmr" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dms" = ( -/obj/structure/sign/greencross, -/turf/simulated/wall/r_wall, -/area/station/command/office/cmo) "dmt" = ( /turf/simulated/wall/r_wall, /area/station/command/office/cmo) -"dmu" = ( -/obj/effect/spawner/window/reinforced/polarized{ - id = "CMO" - }, -/turf/simulated/floor/plating, -/area/station/command/office/cmo) "dmv" = ( /obj/machinery/light{ dir = 8 @@ -61654,48 +58086,11 @@ icon_state = "whitebluecorner" }, /area/station/medical/medbay) -"dmw" = ( -/obj/machinery/camera{ - c_tag = "Medbay Observation Room"; - dir = 4; - network = list("Medical","SS13") - }, -/obj/item/kirbyplants, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) "dmy" = ( /obj/structure/girder, /obj/effect/decal/cleanable/fungus, /turf/simulated/floor/plating, /area/station/maintenance/port) -"dmz" = ( -/obj/structure/sign/nosmoking_2{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) -"dmA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"dmB" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) "dmG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -61883,11 +58278,7 @@ }, /area/station/security/brig) "dne" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -62029,210 +58420,44 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dnD" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dnH" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/abandonedbar) -"dnI" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id_tag = "paramedic"; - name = "Paramedic Garage" - }, -/obj/effect/turf_decal/delivery/blue, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel, -/area/station/medical/paramedic) "dnJ" = ( -/obj/vehicle/ambulance{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Paramedic's Office"; - dir = 1; - network = list("Medical","SS13") - }, -/obj/effect/turf_decal/stripes/end{ +/obj/machinery/chem_heater, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/paramedic) +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "dnK" = ( -/obj/machinery/status_display, -/turf/simulated/wall, -/area/station/science/genetics) -"dnL" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/obj/item/storage/box/disks{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/gloves, -/turf/simulated/floor/plasteel/dark, -/area/station/science/genetics) -"dnN" = ( -/obj/machinery/light{ - dir = 1 - }, /obj/machinery/computer/scan_consolenew, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/station/science/genetics) -"dnO" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ +/obj/machinery/alarm{ dir = 8; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dnQ" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 12 + name = "east bump"; + pixel_x = 24 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dnR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 + dir = 5; + icon_state = "whitepurple" }, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/grass, /area/station/science/genetics) -"dnU" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/firealarm{ - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dnV" = ( -/obj/structure/table/glass, -/obj/item/folder/blue, -/obj/item/cartridge/medical, -/obj/item/cartridge/medical, -/obj/item/cartridge/chemistry, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) "dnW" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/flashlight/pen, -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) +/turf/simulated/floor/light, +/area/station/engineering/atmos) "dnX" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/regular, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dnY" = ( -/obj/structure/table/glass, -/obj/item/folder/blue, -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/obj/item/clothing/glasses/hud/health, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dnZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/structure/chair/sofa/left{ dir = 8 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"doa" = ( -/obj/machinery/dna_scannernew, -/obj/machinery/firealarm{ - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/simulated/floor/plasteel, -/area/station/science/genetics) -"doe" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"dof" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Observation Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) +/turf/simulated/floor/wood, +/area/station/medical/psych) "dog" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, /obj/structure/disposalpipe/sortjunction{ dir = 8; name = "Quartermaster Junction"; @@ -62245,84 +58470,14 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) -"doh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"doi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) +/area/station/hallway/primary/central/north) "doj" = ( /turf/simulated/floor/plasteel/dark, /area/station/medical/surgery/observation) -"dok" = ( -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"dol" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) "dom" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/public/construction) -"don" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "doo" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -62408,18 +58563,6 @@ /obj/item/pen, /turf/simulated/floor/plasteel/white, /area/station/maintenance/port2) -"doF" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/camera{ - c_tag = "Medbay Cloning"; - dir = 1; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/cloning) "doJ" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -62525,14 +58668,9 @@ /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) "doS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/north) "doT" = ( /obj/machinery/status_display{ pixel_x = -32 @@ -62576,313 +58714,53 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "doZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dpa" = ( /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dpd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/station/science/genetics) -"dpe" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"dpf" = ( -/obj/structure/bed/amb_trolley{ - dir = 4 - }, -/obj/machinery/light/small, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/paramedic) -"dpg" = ( -/obj/structure/closet/paramedic, -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whiteblue" - }, -/area/station/medical/paramedic) -"dpi" = ( -/obj/structure/table/reinforced, -/obj/machinery/camera{ - c_tag = "Medbay Genetics"; - dir = 4; - network = list("Medical","SS13") - }, -/obj/item/folder/white, -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/science/genetics) -"dpj" = ( /obj/structure/chair/office/light{ - dir = 8 + dir = 1 }, /obj/effect/landmark/start/geneticist, /turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whitepurple" - }, -/area/station/science/genetics) -"dpk" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dpl" = ( -/turf/simulated/floor/plasteel{ - dir = 1; + dir = 8; icon_state = "whitepurplecorner" }, /area/station/science/genetics) -"dpm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"dpn" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/station/science/genetics) -"dpo" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/grass, -/area/station/science/genetics) -"dps" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" +"dpf" = ( +/obj/machinery/chem_dispenser, +/obj/structure/reagent_dispensers/fueltank/chem{ + pixel_y = -32 }, -/area/station/medical/medbay) +/turf/simulated/floor/engine, +/area/station/medical/chemistry) +"dpg" = ( +/obj/machinery/chem_master, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "dpt" = ( /turf/simulated/wall, /area/station/medical/surgery/observation) -"dpu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dpv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dpw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) "dpx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dpy" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dpA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dpB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark/lightsout, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dpF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"dpG" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/light, -/obj/structure/table, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable, -/turf/simulated/floor/plasteel{ - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) -"dpH" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) -"dpI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"dpJ" = ( -/obj/structure/chair, -/turf/simulated/floor/plasteel{ - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) -"dpK" = ( -/obj/structure/chair, -/obj/machinery/newscaster{ - dir = 8; - name = "east bump"; - pixel_x = 28 +/obj/machinery/disposal, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "darkblue" +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/area/station/medical/surgery/observation) +/turf/simulated/floor/wood, +/area/station/medical/psych) "dpL" = ( /obj/structure/rack, /obj/machinery/light/small{ @@ -63024,14 +58902,11 @@ /turf/simulated/wall, /area/station/command/office/rd) "dqi" = ( -/obj/item/kirbyplants, -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 +/obj/machinery/dna_scannernew, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitepurple" }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, /area/station/science/genetics) "dqj" = ( /obj/structure/table, @@ -63096,126 +58971,37 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"dqr" = ( -/obj/structure/table/glass, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Medbay Genetics Office"; - dir = 4; - network = list("Medical","SS13") - }, -/obj/item/storage/box/disks, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/station/science/genetics) "dqs" = ( /obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel/white, /area/station/science/genetics) "dqt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) -"dqw" = ( -/turf/simulated/floor/plasteel/dark, -/area/station/science/genetics) -"dqx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/structure/table/glass, +/obj/item/storage/box/iv_bags{ + pixel_x = -4; + pixel_y = 5 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dqz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"dqA" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 + icon_state = "whiteyellow" }, +/area/station/medical/chemistry) +"dqL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/geneticist, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"dqB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dqE" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/medical/medbay) -"dqF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dqH" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dqI" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dqM" = ( -/obj/effect/spawner/window/reinforced/polarized{ - id = "Surgery 1" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/station/medical/surgery/primary) -"dqO" = ( -/obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" + dir = 5; + icon_state = "darkgreen" }, -/area/station/medical/reception) +/area/station/medical/virology) "dqQ" = ( /obj/machinery/camera{ c_tag = "Singularity SouthEast"; @@ -63227,12 +59013,6 @@ }, /turf/simulated/floor/plating/airless, /area/station/engineering/control) -"dqS" = ( -/obj/effect/spawner/window/reinforced/polarized{ - id = "Surgery 2" - }, -/turf/simulated/floor/plating, -/area/station/medical/surgery/secondary) "dqT" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -63252,10 +59032,7 @@ }, /area/station/maintenance/starboard) "dqV" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -63276,7 +59053,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel/white, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, /area/station/medical/medbay) "dqX" = ( /obj/structure/table, @@ -63370,10 +59153,7 @@ /turf/simulated/floor/wood, /area/station/command/office/ntrep) "drs" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port) @@ -63450,8 +59230,10 @@ /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) "drH" = ( -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitepurple" + }, /area/station/science/genetics) "drI" = ( /obj/machinery/door/firedoor, @@ -63471,7 +59253,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "drL" = ( /obj/structure/sign/science{ pixel_x = -32; @@ -63481,16 +59263,7 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) -"drM" = ( -/obj/structure/sign/science{ - pixel_x = 32; - pixel_y = 32 - }, -/turf/simulated/floor/plasteel{ - icon_state = "purplecorner" - }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "drN" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -63505,169 +59278,30 @@ /turf/simulated/floor/plasteel/white, /area/station/science/research) "drO" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/science/genetics) -"drP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"drR" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" - }, -/area/station/science/genetics) -"drT" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/monkeycubes/wolpincubes, -/obj/item/storage/box/monkeycubes/stokcubes, -/obj/item/storage/box/monkeycubes/neaeracubes, -/obj/item/storage/box/monkeycubes/farwacubes, -/obj/item/storage/box/monkeycubes, -/turf/simulated/floor/plasteel/dark, -/area/station/science/genetics) -"drU" = ( -/obj/structure/chair/office/light, -/obj/effect/landmark/start/geneticist, -/turf/simulated/floor/plasteel{ - dir = 10; icon_state = "whitepurple" }, /area/station/science/genetics) -"drV" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"drW" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/science/genetics) -"drX" = ( -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"drZ" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/grass, -/area/station/science/genetics) -"dsb" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dsc" = ( -/obj/machinery/camera{ - c_tag = "Medbay South Central Hall"; - dir = 8; - network = list("Medical","SS13") +"drR" = ( +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes{ + pixel_x = -3 }, +/obj/item/reagent_containers/spray/cleaner, /obj/machinery/light{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dsd" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/bed/dogbed{ - name = "kitty basket" - }, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/pet/cat/Runtime, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dse" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dsf" = ( -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dsg" = ( -/obj/structure/chair/office/light, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dsh" = ( -/obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Chief Medical Officer's Office"; - dir = 8; - network = list("Medical","SS13") - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dsi" = ( -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/obj/machinery/light{ + icon_state = "whitepurple"; dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) +/area/station/science/genetics) +"drX" = ( +/turf/simulated/floor/plasteel/white, +/area/station/science/genetics) "dsj" = ( /obj/machinery/light/small{ dir = 8 @@ -63777,9 +59411,9 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ - icon_state = "purplecorner" + icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dsJ" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/metal{ @@ -63854,166 +59488,65 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"dsN" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "geneticsdesk"; - name = "Genetics Desk Shutters" - }, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/science/genetics) "dsO" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/noticeboard{ - pixel_y = -32 - }, -/obj/machinery/door_control{ - id = "geneticsdesk"; - name = "Genetics Desk Shutters"; - pixel_x = -28; - pixel_y = -26 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/area/station/science/genetics) -"dsP" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" + dir = 10; + icon_state = "whitepurple" }, /area/station/science/genetics) -"dsQ" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 +"dsP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/area/station/science/genetics) -"dsR" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" - }, -/area/station/science/genetics) -"dsS" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall, -/area/station/science/genetics) -"dsT" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/bodybags, -/obj/machinery/requests_console{ - department = "Medbay"; - departmentType = 1; - name = "Genetics Requests Console"; - pixel_y = -30 + icon_state = "whitepurple" }, -/turf/simulated/floor/plasteel/dark, /area/station/science/genetics) -"dsV" = ( -/obj/machinery/light, -/obj/machinery/computer/scan_consolenew{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ +"dsQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/turf/simulated/floor/plasteel, -/area/station/science/genetics) -"dsW" = ( -/obj/item/kirbyplants, -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dsX" = ( -/obj/structure/table/glass, -/obj/structure/mirror{ - pixel_y = -30 - }, -/obj/machinery/computer/med_data/laptop{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + icon_state = "whitepurple" }, -/turf/simulated/floor/plasteel/white, /area/station/science/genetics) -"dsY" = ( -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +"dsR" = ( +/obj/machinery/power/apc/directional/east, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/science/genetics) -"dsZ" = ( -/obj/machinery/dna_scannernew, -/obj/structure/extinguisher_cabinet{ - name = "south bump"; - pixel_y = -30 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 6; + icon_state = "whitepurple" }, -/turf/simulated/floor/plasteel, /area/station/science/genetics) "dta" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/science/genetics) -"dtb" = ( -/obj/structure/sign/electricshock{ - pixel_x = -32; - pixel_y = -32 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/medical/medbay) -"dtc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/medbay) "dte" = ( /obj/item/kirbyplants, /obj/machinery/alarm{ @@ -64023,169 +59556,12 @@ }, /turf/simulated/floor/plasteel, /area/station/service/expedition) -"dtf" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel, -/area/station/science/genetics) -"dtg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dth" = ( -/obj/structure/table/glass, -/obj/item/paper_bin/nanotrasen, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/stamp/cmo, -/obj/item/pen/multi, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dti" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/folder/blue{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dtj" = ( -/obj/structure/table/glass, -/obj/machinery/computer/med_data/laptop, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dtl" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"dtm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"dtn" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) "dto" = ( /obj/structure/sign/science{ icon_state = "xenobio2" }, /turf/simulated/wall/r_wall, /area/station/science/research) -"dtq" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) -"dtr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) -"dts" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) "dtv" = ( /obj/structure/cable{ d1 = 2; @@ -64201,6 +59577,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" @@ -64265,23 +59642,6 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/public/construction) -"dtF" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) -"dtG" = ( -/obj/machinery/camera{ - c_tag = "Medbay East Hallway"; - dir = 4; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "dtI" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plating/airless, @@ -64330,6 +59690,12 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/white, /area/station/maintenance/port2) +"dtR" = ( +/obj/structure/girder, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) "dtS" = ( /obj/structure/closet/walllocker/emerglocker/north, /turf/simulated/floor/plasteel{ @@ -64337,11 +59703,14 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"dtT" = ( +/obj/structure/table, +/obj/item/storage/box/cups, +/obj/item/toy/figure/crew/md, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "dtU" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/port) "dtY" = ( @@ -64459,195 +59828,30 @@ "duk" = ( /turf/simulated/wall, /area/station/medical/morgue) -"dul" = ( -/obj/machinery/disposal, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) "dum" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/wall, -/area/station/medical/morgue) -"dur" = ( -/obj/structure/table/glass, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/item/clipboard, -/obj/item/toy/figure/crew/cmo, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dus" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dut" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/glass, -/obj/machinery/door_control{ - id = "cmoofficedoor2"; - name = "Office Door (Starboard)"; - normaldoorcontrol = 1; - pixel_x = -6; - pixel_y = 6; - req_access_txt = "40" - }, -/obj/machinery/door_control{ - id = "cmoofficedoor"; - name = "Office Door (Port)"; - normaldoorcontrol = 1; - pixel_x = -6; - pixel_y = -3; - req_access_txt = "40" - }, -/obj/machinery/door_control{ - id = "Biohazard_medi"; - name = "Emergency Medbay Quarantine"; - pixel_x = 6; - pixel_y = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"duu" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/landmark/start/chief_medical_officer, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"duv" = ( -/obj/machinery/ai_status_display{ - pixel_x = 32 - }, -/obj/machinery/computer/card/minor/cmo{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"duw" = ( -/obj/effect/spawner/window/reinforced/polarized{ - id = "Chapel" - }, -/turf/simulated/floor/plating, -/area/station/service/chapel) -"dux" = ( -/obj/machinery/light, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"duy" = ( -/obj/machinery/iv_drip, -/turf/simulated/floor/plating, -/area/station/medical/surgery) -"duz" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"duA" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"duB" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 12 - }, -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) -"duD" = ( -/obj/machinery/optable, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/secondary) -"duE" = ( -/obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 }, -/obj/machinery/light{ - dir = 4 +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) -"duG" = ( -/obj/machinery/status_display{ - pixel_y = -32 + icon_state = "whitepurplefull" }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" +/area/station/science/genetics) +"duw" = ( +/obj/effect/spawner/window/reinforced/polarized{ + id = "Chapel" }, -/area/station/medical/medbay) +/turf/simulated/floor/plating, +/area/station/service/chapel) +"duy" = ( +/obj/machinery/iv_drip, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "duK" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance/two, @@ -64676,17 +59880,6 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) -"duO" = ( -/obj/machinery/camera{ - c_tag = "Virology south"; - dir = 4; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "duP" = ( /obj/machinery/camera{ c_tag = "Engine Room South"; @@ -64874,25 +60067,6 @@ "dvt" = ( /turf/simulated/floor/plasteel/dark, /area/station/medical/morgue) -"dvu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dvv" = ( -/obj/machinery/firealarm{ - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/medical/morgue) "dvw" = ( /obj/structure/morgue{ dir = 8 @@ -64900,147 +60074,16 @@ /obj/effect/landmark/spawner/rev, /turf/simulated/floor/plasteel/dark, /area/station/medical/morgue) -"dvA" = ( -/obj/machinery/optable, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dvB" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table, -/obj/item/autopsy_scanner, -/obj/item/scalpel, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dvC" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light_switch{ - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dvD" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dvE" = ( -/obj/structure/chair/office/light, -/obj/effect/landmark/start/coroner, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "dvG" = ( -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dvH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) +/obj/structure/closet/secure_closet/psychiatrist, +/turf/simulated/floor/wood, +/area/station/medical/psych) "dvI" = ( -/obj/machinery/light_switch{ - dir = 1; - name = "custom placement"; - pixel_x = 24; - pixel_y = -24 - }, -/obj/machinery/keycard_auth{ - pixel_x = 38; - pixel_y = -24 - }, -/obj/machinery/button/windowtint{ - dir = 1; - id = "CMO"; - pixel_x = 24; - pixel_y = -36; - req_access_txt = "40" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dvJ" = ( -/obj/machinery/computer/crew{ - dir = 8 - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Medical Officer's Desk"; - departmentType = 5; - name = "Chief Medical Officer Requests Console"; - pixel_x = 30 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dvL" = ( -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/holosign_switch{ - dir = 4; - id = "surgery1"; - pixel_x = -24; - pixel_y = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"dvM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel{ - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"dvQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) -"dvR" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" +/obj/effect/spawner/window/reinforced/polarized{ + id = "morgue" }, -/area/station/medical/medbay) +/turf/simulated/floor/plating, +/area/station/medical/morgue) "dvS" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -65054,6 +60097,32 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating/airless, /area/space/nearstation) +"dvV" = ( +/obj/structure/window/reinforced{ + dir = 8; + pixel_x = -4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"dvZ" = ( +/obj/structure/table/glass, +/obj/item/megaphone{ + pixel_x = -3 + }, +/obj/item/stamp/cmo, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "dwi" = ( /turf/simulated/wall/r_wall, /area/station/science/server) @@ -65120,10 +60189,15 @@ dir = 8 }, /obj/effect/landmark/lightsout, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dwu" = ( /obj/machinery/camera{ c_tag = "Central Hallway South 3"; @@ -65132,54 +60206,27 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" +/obj/machinery/economy/atm{ + pixel_x = 32 }, -/area/station/hallway/primary/aft) -"dww" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/medical/morgue) -"dwx" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + icon_state = "neutralcorner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dwB" = ( -/obj/structure/window/reinforced{ - dir = 8; - pixel_x = -4 +/area/station/hallway/primary/aft/south) +"dwz" = ( +/obj/machinery/disposal, +/obj/structure/sign/deathsposal{ + pixel_y = 32 }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dwC" = ( -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/disposalpipe/trunk{ + dir = 2 }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dwE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/turf_decal/delivery/hollow/left, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dwF" = ( -/obj/machinery/bodyscanner, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) +/area/station/medical/virology) "dwG" = ( /turf/simulated/wall, /area/station/command/office/cmo) @@ -65207,59 +60254,6 @@ }, /turf/simulated/floor/plasteel, /area/station/public/fitness) -"dwK" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dwL" = ( -/obj/structure/table/glass, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/reagent_containers/iv_bag/salglu, -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/machinery/camera{ - c_tag = "Medbay Surgery East"; - dir = 1; - network = list("Medical","SS13") - }, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) -"dwN" = ( -/obj/structure/chair/office/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) "dwO" = ( /obj/structure/cable{ d1 = 1; @@ -65269,20 +60263,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, /area/station/maintenance/starboard) -"dwP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) "dwQ" = ( /obj/structure/table/wood, /obj/item/clothing/under/costume/maid, @@ -65290,11 +60276,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/theatre) "dwS" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -65351,11 +60333,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "dxs" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 }, @@ -65412,14 +60390,11 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics) "dxA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" +/obj/structure/flora/ausbushes/fullgrass, +/mob/living/simple_animal/chick{ + name = "Sins" }, +/turf/simulated/floor/grass, /area/station/medical/medbay) "dxC" = ( /obj/structure/table/reinforced, @@ -65474,168 +60449,19 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) -"dxF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/aft) "dxH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel/dark, /area/station/medical/morgue) -"dxJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/start/coroner, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "dxM" = ( /obj/machinery/optable, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/surgery) -"dxO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dxQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/spawner/nukedisc_respawn, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dxS" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dxT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dxU" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/bodybags, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dxW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dxY" = ( -/obj/structure/dresser, -/obj/structure/mirror{ - pixel_x = 32 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dxZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) +/area/station/maintenance/starboard) "dyb" = ( /turf/simulated/floor/plating, /area/station/maintenance/theatre) @@ -65656,18 +60482,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "dye" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, +/obj/structure/flora/grass/jungle, +/turf/simulated/floor/grass, /area/station/medical/medbay) "dyg" = ( /obj/structure/cable{ @@ -65691,19 +60511,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/theatre) -"dyk" = ( -/obj/machinery/bodyscanner{ - dir = 4 - }, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/medbay) "dyl" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ @@ -65787,86 +60594,19 @@ }, /area/station/service/chapel) "dyW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" }, -/obj/effect/landmark/spawner/xeno, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) +/area/station/medical/cloning) "dzb" = ( /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, /area/station/maintenance/library) -"dzg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dzh" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/bodybags, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dzj" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dzk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dzl" = ( -/obj/structure/bed, -/obj/item/bedsheet/cmo, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/landmark/start/chief_medical_officer, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dzm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) "dzo" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -65877,13 +60617,6 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) -"dzp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/medbay) "dzq" = ( /obj/machinery/light_switch{ dir = 4; @@ -65952,11 +60685,7 @@ }, /area/station/command/office/rd) "dzU" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -65966,11 +60695,7 @@ }, /area/station/science/research) "dzV" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/disposal, /obj/structure/cable{ d2 = 4; @@ -66017,8 +60742,6 @@ /obj/machinery/status_display{ pixel_y = -32 }, -/obj/item/storage/firstaid/machine, -/obj/item/storage/firstaid/machine, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "dAa" = ( @@ -66027,199 +60750,6 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) -"dAd" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/medical/morgue) -"dAe" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/item/kirbyplants, -/obj/machinery/camera{ - c_tag = "Morgue West"; - dir = 1; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dAf" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/medical/morgue) -"dAg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/observation) -"dAh" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/medical/morgue) -"dAi" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dAk" = ( -/obj/structure/table, -/obj/machinery/requests_console{ - department = "Morgue"; - departmentType = 5; - name = "Morgue Requests Console"; - pixel_y = -30 - }, -/obj/item/paper_bin, -/obj/machinery/light, -/obj/item/pen/multi, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dAl" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/filingcabinet/chestdrawer/autopsy, -/obj/machinery/camera{ - c_tag = "Morgue East"; - dir = 1; - network = list("Medical","SS13") - }, -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dAn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) -"dAp" = ( -/obj/structure/table/glass, -/obj/machinery/computer/med_data/laptop{ - dir = 1 - }, -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dAq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "darkblue" - }, -/area/station/medical/surgery/primary) -"dAr" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = -32 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) -"dAs" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/machinery/light_switch{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) -"dAt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/medbay) -"dAu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-y" - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) -"dAv" = ( -/obj/machinery/camera{ - c_tag = "Medbay Surgery East Storage"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) -"dAw" = ( -/obj/machinery/iv_drip, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) "dAx" = ( /turf/simulated/wall, /area/station/medical/surgery/secondary) @@ -66238,6 +60768,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" @@ -66306,15 +60837,15 @@ dir = 1; name = "Cargo Bay Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ - dir = 1 - }, /obj/effect/turf_decal/delivery, /obj/item/desk_bell{ pixel_x = -6; pixel_y = 3; anchored = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -66323,7 +60854,7 @@ /obj/structure/computerframe, /obj/item/circuitboard/operating, /turf/simulated/floor/plasteel, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dAY" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -66383,21 +60914,27 @@ name = "east bump"; pixel_x = 24 }, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dBk" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, /area/station/medical/morgue) "dBp" = ( -/obj/machinery/iv_drip, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, /area/station/medical/medbay) "dBq" = ( /turf/simulated/floor/wood, @@ -66409,12 +60946,9 @@ /turf/simulated/floor/plasteel/dark, /area/station/maintenance/theatre) "dBt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/flora/junglebush, +/turf/simulated/floor/grass, /area/station/medical/medbay) "dBu" = ( /obj/structure/table/wood, @@ -66465,31 +60999,46 @@ /turf/simulated/floor/plasteel/airless, /area/station/science/toxins/test) "dBH" = ( -/obj/item/kirbyplants, /obj/effect/turf_decal/delivery, +/obj/structure/closet/firecloset, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dBJ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) -"dBL" = ( +/area/station/hallway/primary/aft/south) +"dBK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"dBL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -66497,20 +61046,33 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "dBO" = ( /obj/structure/table/reinforced, -/obj/item/robotanalyzer, -/obj/item/bonegel, -/obj/item/FixOVein, -/obj/item/surgicaldrill, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/button/windowtint{ id = "RoboSurgery"; pixel_x = 24; dir = 8 }, +/obj/item/storage/firstaid/machine, +/obj/item/storage/firstaid/machine, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/robotanalyzer, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "dBP" = ( @@ -66533,30 +61095,38 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dBQ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dBR" = ( /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dBT" = ( /obj/structure/cable{ d1 = 4; @@ -66572,199 +61142,31 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"dBV" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) -"dBX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) -"dBY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutral" - }, -/area/station/maintenance/aft) -"dBZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/spawner/random_spawners/oil_maybe, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) -"dCa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "dCb" = ( /obj/structure/girder, /turf/simulated/floor/plating, /area/station/maintenance/aft) -"dCc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutral" - }, -/area/station/maintenance/aft) -"dCd" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutral" - }, -/area/station/maintenance/aft) -"dCe" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) "dCf" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) -"dCg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/machinery/door/airlock/maintenance{ + name = "Morgue Maintenance" }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "dCh" = ( /obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/medbay) -"dCi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/light/small{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 1; + dir = 9; icon_state = "whitegreen" }, /area/station/medical/medbay) -"dCj" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/medbay) "dCm" = ( /obj/machinery/light/small{ dir = 1 @@ -66775,17 +61177,6 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) -"dCn" = ( -/obj/machinery/bodyscanner, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/status_display{ - pixel_x = 32 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/medbay) "dCo" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -66802,23 +61193,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/theatre) -"dCr" = ( -/obj/structure/table/glass, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/surgicaldrill, -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) "dCs" = ( /obj/structure/table/wood, /obj/item/clothing/head/papersack/smiley, @@ -66952,7 +61326,7 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dCY" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -66983,11 +61357,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"dDa" = ( -/obj/machinery/light, -/obj/structure/closet/firecloset, -/turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) "dDb" = ( /obj/structure/cable{ d1 = 4; @@ -67004,7 +61373,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dDc" = ( /obj/structure/cable{ d1 = 1; @@ -67017,35 +61386,29 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dDg" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/directional/south, +/obj/structure/cable, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "dDh" = ( /turf/simulated/floor/plating, /area/station/maintenance/aft) -"dDj" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "dDk" = ( /turf/simulated/floor/plasteel{ icon_state = "neutral" }, /area/station/maintenance/aft) -"dDl" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "dDm" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -67057,16 +61420,19 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "dDs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) @@ -67087,6 +61453,9 @@ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "dDu" = ( @@ -67101,6 +61470,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitegreen" @@ -67129,24 +61501,11 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) -"dDw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreen" +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-y" }, +/turf/simulated/floor/plasteel/white, /area/station/medical/medbay) "dDy" = ( /obj/structure/cable{ @@ -67163,6 +61522,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"dDz" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "dDC" = ( /obj/structure/cable{ d1 = 4; @@ -67222,6 +61588,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "neutral" @@ -67274,6 +61644,22 @@ }, /turf/simulated/floor/plasteel/airless, /area/station/science/toxins/test) +"dDW" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/meter, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) +"dEa" = ( +/obj/vehicle/ambulance{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/simulated/floor/plasteel/white/side{ + dir = 4 + }, +/area/station/medical/paramedic) "dEc" = ( /obj/structure/chair{ dir = 4 @@ -67283,6 +61669,16 @@ }, /turf/simulated/floor/plasteel/airless, /area/station/science/toxins/test) +"dEg" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "dEi" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -67295,10 +61691,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dEm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -67306,7 +61707,7 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dEn" = ( /obj/structure/cable{ d1 = 1; @@ -67342,22 +61743,6 @@ icon_state = "whitegreen" }, /area/station/medical/medbay) -"dEu" = ( -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/structure/table/tray, -/obj/item/scalpel, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) "dEv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -67387,9 +61772,6 @@ }, /turf/simulated/floor/plasteel/airless, /area/station/science/toxins/test) -"dER" = ( -/turf/simulated/wall, -/area/station/hallway/primary/central/south) "dES" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance/two, @@ -67397,11 +61779,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "dET" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/light{ dir = 8 }, @@ -67410,14 +61787,14 @@ pixel_y = 28 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dEU" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, /obj/effect/landmark/start/assistant, /turf/simulated/floor/carpet, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dEV" = ( /obj/structure/table/wood, /obj/item/clothing/mask/cigarette/pipe, @@ -67429,13 +61806,13 @@ c_tag = "Central Hallway South 4" }, /turf/simulated/floor/carpet, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dEW" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, /turf/simulated/floor/carpet, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dEX" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -67457,13 +61834,10 @@ location = "hall7" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dFa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dFb" = ( /obj/machinery/light{ dir = 4 @@ -67479,15 +61853,7 @@ pixel_x = 28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) -"dFc" = ( -/obj/item/kirbyplants, -/obj/machinery/light/small, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/medbay) +/area/station/hallway/primary/aft/south) "dFd" = ( /obj/structure/cable{ d1 = 1; @@ -67503,7 +61869,8 @@ "dFe" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" + dir = 6; + icon_state = "whitegreen" }, /area/station/medical/medbay) "dFf" = ( @@ -67549,67 +61916,56 @@ pixel_x = -32 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dFv" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, /turf/simulated/floor/carpet, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dFw" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/polarized{ dir = 8; id = "RoboSurgery" }, -/obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath/medical, /obj/item/mmi, /obj/item/mmi, /obj/item/mmi, /obj/effect/turf_decal/delivery/hollow, +/obj/item/mmi, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "dFx" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/effect/landmark/start/assistant, /turf/simulated/floor/carpet, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dFy" = ( /obj/structure/table/reinforced, /obj/machinery/light{ dir = 4 }, -/obj/item/retractor, -/obj/item/hemostat, -/obj/item/bonesetter, -/obj/item/stack/medical/bruise_pack/advanced{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/reagent_containers/spray/cleaner, /obj/effect/turf_decal/delivery/hollow, +/obj/item/storage/surgical_tray, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"dFB" = ( -/obj/structure/chair, -/turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) -"dFE" = ( -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +"dFA" = ( +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" + icon_state = "neutralcorner" }, -/area/station/medical/medbay) +/area/station/hallway/primary/central/nw) +"dFB" = ( +/obj/structure/chair, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/south) "dFF" = ( /obj/structure/sign/biohazard, /turf/simulated/wall/r_wall, @@ -67618,16 +61974,12 @@ /turf/simulated/wall/r_wall, /area/station/medical/virology) "dFO" = ( -/obj/structure/chair, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 - }, +/obj/machinery/economy/vending/snack, +/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" + icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "dFU" = ( /obj/structure/chair{ dir = 1 @@ -67647,11 +61999,7 @@ /turf/simulated/floor/plasteel/airless, /area/station/science/toxins/test) "dFW" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -67695,13 +62043,19 @@ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dGl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/plasteel/grimy, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) +"dGm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "dGn" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -67716,13 +62070,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dGp" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dGr" = ( /obj/machinery/power/terminal{ dir = 1 @@ -67734,99 +62088,9 @@ /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) -"dGt" = ( -/obj/item/kirbyplants, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dGu" = ( -/obj/item/kirbyplants, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dGv" = ( -/obj/item/kirbyplants, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dGw" = ( /turf/simulated/wall, /area/station/medical/virology) -"dGx" = ( -/obj/structure/table/glass, -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/obj/item/paper_bin, -/obj/machinery/newscaster{ - dir = 4; - name = "west bump"; - pixel_x = -28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dGy" = ( -/obj/structure/table/glass, -/obj/machinery/computer/med_data/laptop, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dGz" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dGA" = ( -/obj/item/kirbyplants, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dGK" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 @@ -67874,20 +62138,20 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dGS" = ( -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/aft) +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/south) "dGU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "dGV" = ( /obj/structure/chair{ dir = 8 @@ -67900,89 +62164,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, -/area/station/medical/surgery) -"dHc" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/sign/vacuum{ - pixel_y = -32 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) -"dHd" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) -"dHf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dHg" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dHj" = ( -/obj/structure/table/glass, -/obj/item/clipboard, -/obj/item/toy/figure/crew/virologist, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) +/area/station/maintenance/starboard) "dHk" = ( /obj/structure/grille, /turf/simulated/floor/plasteel{ @@ -67990,45 +62172,6 @@ icon_state = "neutral" }, /area/station/maintenance/port) -"dHm" = ( -/obj/machinery/camera{ - c_tag = "Virology north"; - dir = 8; - network = list("Medical","SS13") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dHp" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/landmark/start/virologist, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/virology) -"dHq" = ( -/obj/structure/table/glass, -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, -/obj/machinery/computer/med_data/laptop, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkgreen" - }, -/area/station/medical/virology) "dHA" = ( /obj/structure/cable{ d1 = 4; @@ -68100,6 +62243,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"dHG" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/primary/central/nw) "dHJ" = ( /obj/structure/cable{ d1 = 4; @@ -68175,7 +62322,7 @@ }, /obj/item/kirbyplants, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dHO" = ( /obj/structure/cable{ d1 = 1; @@ -68192,25 +62339,28 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dHR" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/polarized{ dir = 8; id = "RoboSurgery" }, -/obj/item/mmi, -/obj/item/storage/box/gloves{ - pixel_x = 3; - pixel_y = 5 +/obj/effect/turf_decal/delivery/hollow, +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = -4 }, /obj/item/storage/box/masks, -/obj/effect/turf_decal/delivery/hollow, +/obj/item/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "dHT" = ( /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dHU" = ( /obj/structure/sign/directions/security{ dir = 1; @@ -68233,7 +62383,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dHX" = ( /obj/structure/mirror{ pixel_x = -32 @@ -68242,26 +62392,9 @@ dir = 8; pixel_x = -12 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/station/medical/surgery) -"dHZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) +/area/station/maintenance/starboard) "dIb" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/light/small{ @@ -68270,36 +62403,6 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"dId" = ( -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dIe" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "dIh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -68331,78 +62434,6 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"dIj" = ( -/obj/structure/chair/office/dark{ - dir = 8 - }, -/obj/effect/landmark/start/virologist, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dIk" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dIm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkgreencorners" - }, -/area/station/medical/virology) -"dIn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/virology) -"dIo" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkgreencorners" - }, -/area/station/medical/virology) "dIx" = ( /turf/simulated/wall, /area/station/service/chapel/office) @@ -68460,75 +62491,32 @@ dir = 1; pixel_y = 1 }, -/obj/structure/sign/directions/evac{ - pixel_y = -8 - }, -/turf/simulated/wall, -/area/station/hallway/secondary/exit) -"dIL" = ( -/obj/machinery/camera{ - c_tag = "Mech Lab"; - dir = 1; - network = list("Research","SS13") - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/station/science/robotics/chargebay) -"dIW" = ( -/obj/structure/sign/biohazard, -/turf/simulated/wall/r_wall, -/area/station/medical/virology) -"dIX" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/r_wall, -/area/station/medical/virology) -"dIZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dJb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/sign/directions/evac{ + pixel_y = -8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" +/turf/simulated/wall, +/area/station/hallway/secondary/exit) +"dIL" = ( +/obj/machinery/camera{ + c_tag = "Mech Lab"; + dir = 1; + network = list("Research","SS13") }, -/area/station/medical/virology) -"dJc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plasteel, +/area/station/science/robotics/chargebay) +"dJr" = ( +/obj/structure/sink{ + pixel_y = 24 }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-y" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -68536,77 +62524,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dJd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/virology) -"dJh" = ( -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkgreencorners" - }, -/area/station/medical/virology) -"dJi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dJj" = ( -/obj/machinery/ai_status_display{ - pixel_x = 32 - }, /turf/simulated/floor/plasteel{ - icon_state = "darkgreencorners" + dir = 1; + icon_state = "whitegreen" }, /area/station/medical/virology) -"dJk" = ( -/obj/structure/closet/secure_closet/medical3, -/obj/machinery/button/windowtint{ - id = "Surgery 1"; - pixel_y = 24; - req_access_txt = "45" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" - }, -/area/station/medical/surgery/primary) "dJu" = ( /obj/structure/morgue, /turf/simulated/floor/plasteel/dark, @@ -68656,23 +62583,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"dJE" = ( -/obj/structure/table/glass, -/obj/item/wrench/medical, -/obj/item/clothing/accessory/stethoscope, -/obj/machinery/camera{ - c_tag = "Medbay Cryogenics"; - dir = 1; - network = list("Medical","SS13") - }, -/obj/item/reagent_containers/dropper, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "dJF" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -68706,111 +62616,12 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) -"dJM" = ( -/obj/structure/closet/secure_closet/medical3, -/obj/machinery/button/windowtint{ - id = "Surgery 2"; - pixel_y = 24; - req_access_txt = "45" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/surgery/secondary) "dJO" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitebluecorner" }, -/area/station/medical/surgery) -"dJP" = ( -/obj/structure/extinguisher_cabinet{ - name = "west bump"; - pixel_x = -30 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dJS" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJT" = ( -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJU" = ( -/obj/machinery/atmospherics/portable/canister/air, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJV" = ( -/obj/structure/table, -/obj/machinery/kitchen_machine/microwave, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dJW" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/wall, -/area/station/medical/virology) -"dJX" = ( -/obj/structure/dresser, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkgreen" - }, -/area/station/medical/virology) -"dJY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/virology) +/area/station/maintenance/starboard) "dKd" = ( /obj/structure/table, /obj/machinery/newscaster{ @@ -68934,24 +62745,15 @@ /obj/item/stack/cable_coil/random, /turf/space, /area/space/nearstation) -"dKD" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +"dKB" = ( +/obj/item/kirbyplants, +/obj/item/mounted/frame/apc_frame, /obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" + d2 = 2; + icon_state = "0-2" }, -/area/station/medical/virology) +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "dKH" = ( /obj/structure/closet/crate, /obj/item/flashlight, @@ -69008,27 +62810,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"dKV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/doctor, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "dKX" = ( /obj/structure/cable{ d1 = 4; @@ -69064,151 +62845,12 @@ icon_state = "neutral" }, /area/station/maintenance/apmaint) -"dLa" = ( -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) -"dLb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dLc" = ( -/obj/machinery/shower{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) -"dLd" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/structure/mirror{ - pixel_x = -32 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) "dLe" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitegreen" }, /area/station/medical/virology) -"dLf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/landmark/lightsout, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dLg" = ( -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dLh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dLi" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dLj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dLk" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dLl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dLp" = ( /obj/structure/table, /obj/item/radio/intercom{ @@ -69302,16 +62944,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dLG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/secondary/exit) "dLK" = ( /obj/machinery/light{ dir = 4 @@ -69319,36 +62951,17 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"dLQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dLR" = ( -/obj/structure/table/glass, -/obj/structure/reagent_dispensers/virusfood{ - pixel_x = -32 - }, -/obj/machinery/reagentgrinder, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"dLL" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" + dir = 8; + icon_state = "neutralcorner" }, -/area/station/medical/virology) +/area/station/hallway/primary/central/ne) "dLT" = ( /obj/structure/cable{ d1 = 1; @@ -69359,51 +62972,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/central/south) -"dLU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dLX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dLY" = ( -/obj/structure/closet/l3closet/virology, -/obj/machinery/camera{ - c_tag = "Virology decontamination"; - dir = 4; - network = list("Medical","SS13") - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) -"dMa" = ( -/obj/machinery/light/small, -/obj/structure/extinguisher_cabinet{ - name = "south bump"; - pixel_y = -30 - }, -/obj/structure/closet/l3closet/virology, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) "dMh" = ( /obj/machinery/camera{ c_tag = "Chapel Backroom"; @@ -69414,12 +62982,6 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) -"dMi" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) "dMj" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -69463,57 +63025,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" }, /area/station/hallway/secondary/exit) -"dMu" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/medical/surgery) -"dMv" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, -/area/station/medical/virology) -"dMw" = ( -/obj/machinery/smartfridge/secure/chemistry/virology/preloaded, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreen" - }, -/area/station/medical/virology) "dMx" = ( /obj/structure/cable{ d1 = 4; @@ -69525,51 +63041,6 @@ icon_state = "whitegreen" }, /area/station/medical/virology) -"dMy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dMz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreen" - }, -/area/station/medical/virology) "dMA" = ( /obj/item/storage/secure/safe{ pixel_x = 32 @@ -69578,49 +63049,6 @@ icon_state = "grimy" }, /area/station/security/detective) -"dMC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dMD" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "dMF" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "xeno2"; @@ -69642,22 +63070,6 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) -"dMG" = ( -/obj/structure/table/glass, -/obj/item/clothing/gloves/color/latex, -/obj/item/healthanalyzer, -/obj/item/clothing/glasses/hud/health, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/corner, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dMH" = ( /obj/structure/cable{ d1 = 4; @@ -69781,79 +63193,26 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dNi" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/pen/red, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/machinery/requests_console{ - department = "Virology"; - departmentType = 3; - name = "Virology Requests Console"; - pixel_y = 30 - }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dNj" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/dropper, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ +"dNe" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/station/medical/medbay) +"dNn" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dNk" = ( -/obj/structure/chair/office/dark{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/obj/effect/landmark/start/virologist, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/area/station/medical/virology) -"dNl" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dNm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" + d2 = 4; + icon_state = "1-4" }, -/area/station/medical/virology) -"dNn" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreen" @@ -69863,22 +63222,6 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/medical/virology) -"dNs" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dNt" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dNu" = ( /obj/structure/cable{ d1 = 1; @@ -69892,30 +63235,6 @@ icon_state = "whitegreen" }, /area/station/medical/virology) -"dNv" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dNw" = ( -/obj/structure/table/glass, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dNH" = ( /obj/structure/cable{ d1 = 1; @@ -70008,52 +63327,18 @@ }, /turf/space, /area/space) -"dNW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/computer/pandemic, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dNX" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dNY" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/item/kirbyplants, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dNZ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dOb" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dOc" = ( /obj/structure/window/reinforced/polarized{ id = "RoboSurgery" @@ -70073,144 +63358,6 @@ icon_state = "whitegreencorner" }, /area/station/medical/virology) -"dOe" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dOf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dOh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-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 = "whitegreen" - }, -/area/station/medical/virology) -"dOi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dOj" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/landmark/spawner/nukedisc_respawn, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dOk" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/station/medical/virology) -"dOl" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/pen/red, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreen" - }, -/area/station/medical/virology) "dOn" = ( /obj/machinery/light/small{ dir = 8 @@ -70285,7 +63432,7 @@ }, /area/station/hallway/secondary/exit) "dOz" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -70315,98 +63462,6 @@ }, /turf/space, /area/station/maintenance/starboardsolar) -"dOG" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dOH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dOJ" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dOK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dOL" = ( -/obj/machinery/iv_drip, -/obj/machinery/firealarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dOM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dON" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/item/storage/box/monkeycubes, -/obj/machinery/newscaster{ - dir = 8; - name = "east bump"; - pixel_x = 28 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dOO" = ( /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -70440,11 +63495,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) "dOV" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -70508,14 +63559,21 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"dPg" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/delivery/hollow, +"dPe" = ( +/obj/structure/table, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/cans/cola{ + pixel_y = 7; + pixel_x = -7 + }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" + icon_state = "redyellowfull" }, -/area/station/medical/virology) +/area/station/medical/break_room) "dPh" = ( /obj/structure/cable{ d1 = 4; @@ -70531,73 +63589,6 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) -"dPj" = ( -/obj/item/kirbyplants, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dPk" = ( -/obj/structure/table, -/obj/item/crowbar, -/obj/item/wrench/medical, -/obj/item/restraints/handcuffs/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dPl" = ( -/obj/structure/table, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/obj/structure/sign/vacuum{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dPn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) -"dPo" = ( -/obj/structure/bed/roller, -/obj/effect/turf_decal/delivery/hollow, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dPq" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/portsolar) @@ -70638,8 +63629,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dPv" = ( /obj/structure/cable{ d1 = 4; @@ -70839,51 +63835,20 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dPS" = ( -/obj/effect/spawner/random_spawners/wall_rusted_always, -/turf/simulated/wall/r_wall, -/area/station/medical/virology) "dPU" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dPV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whitegreen" +/mob/living/carbon/human/monkey, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/area/station/medical/virology) -"dPW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whitegreen" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/area/station/medical/virology) -"dPX" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whitegreen" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/turf/simulated/floor/plasteel/white, /area/station/medical/virology) "dPZ" = ( /obj/machinery/atmospherics/unary/portables_connector, @@ -70942,6 +63907,16 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) +"dQg" = ( +/obj/machinery/power/apc/directional/east, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "dQh" = ( /obj/structure/morgue, /obj/machinery/alarm{ @@ -70994,31 +63969,22 @@ /obj/structure/sign/nosmoking_2{ pixel_y = -32 }, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/circular_saw, -/obj/item/cautery, /obj/effect/turf_decal/delivery/hollow, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "dQr" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/disposalpipe/segment, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ - d2 = 8; - icon_state = "0-8" + d2 = 2; + icon_state = "0-2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dQs" = ( -/obj/machinery/door/airlock/maintenance, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -71030,103 +63996,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) -"dQu" = ( -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/structure/table/tray, -/obj/item/scalpel, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) -"dQw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dQx" = ( -/obj/machinery/iv_drip, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dQy" = ( -/obj/structure/chair/office/dark, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dQz" = ( -/obj/structure/chair/office/dark, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dQA" = ( -/obj/machinery/iv_drip, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whitegreen" - }, -/area/station/medical/virology) +/turf/simulated/floor/plasteel, +/area/station/maintenance/aft) "dQB" = ( /obj/structure/lattice/catwalk, /turf/space, @@ -71158,16 +64032,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dQG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/landmark/spawner/rev, -/obj/effect/turf_decal/delivery, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) "dQI" = ( /obj/machinery/light{ dir = 1 @@ -71192,7 +64056,7 @@ /obj/structure/table/reinforced, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -71290,65 +64154,23 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) -"dRf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dRg" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers, -/obj/item/storage/box/syringes, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dRh" = ( -/obj/structure/table/glass, -/obj/structure/sign/deathsposal{ - pixel_y = -32 - }, -/obj/item/paper_bin, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dRi" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +"dRc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/machinery/camera{ + c_tag = "Central Ring Hallway East"; + dir = 9 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" + icon_state = "neutralcorner" }, -/area/station/medical/virology) +/area/station/hallway/primary/central/se) "dRj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -71417,10 +64239,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "dRq" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -71438,7 +64257,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/mask/breath, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/machinery/newscaster{ dir = 8; name = "east bump"; @@ -71477,18 +64296,6 @@ }, /turf/simulated/floor/plasteel/grimy, /area/station/service/chapel) -"dRx" = ( -/obj/structure/table/glass, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/surgicaldrill, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) "dRz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -71608,12 +64415,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "dRT" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -71678,10 +64480,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"dSd" = ( -/obj/structure/sign/greencross, -/turf/simulated/wall, -/area/station/medical/surgery/primary) "dSe" = ( /obj/structure/cable{ d1 = 1; @@ -71768,10 +64566,6 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "dSs" = ( -/obj/machinery/camera{ - c_tag = "Departure Lounge North"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -71779,7 +64573,7 @@ dir = 5 }, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 8 }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) @@ -71805,15 +64599,13 @@ /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dSB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ +/obj/machinery/atmospherics/unary/portables_connector{ dir = 8 }, +/obj/machinery/atmospherics/portable/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "dSD" = ( @@ -71976,7 +64768,7 @@ /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency, /obj/item/wrench, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dTg" = ( @@ -71997,8 +64789,11 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "dTh" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera{ + c_tag = "Departure Lounge North"; + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "dTi" = ( @@ -72053,11 +64848,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -72111,30 +64902,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/grimy, /area/station/service/chapel/office) -"dTu" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dTv" = ( -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "dTw" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -72269,7 +65036,7 @@ /area/station/service/chapel/office) "dUf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /turf/simulated/floor/carpet, /area/station/service/chapel/office) "dUg" = ( @@ -72309,13 +65076,13 @@ "dUk" = ( /obj/structure/cable{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -72421,13 +65188,6 @@ icon_state = "red" }, /area/station/hallway/secondary/exit) -"dUD" = ( -/obj/structure/closet/secure_closet/CMO, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) "dUE" = ( /obj/machinery/power/tesla_coil{ anchored = 1 @@ -72501,8 +65261,8 @@ /area/station/service/chapel/office) "dUK" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, -/obj/item/reagent_containers/food/snacks/grown/poppy/lily{ +/obj/item/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy/lily{ pixel_x = 4; pixel_y = 5 }, @@ -72589,11 +65349,24 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "dUT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"dUU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central) "dUY" = ( /obj/machinery/light, /obj/machinery/alarm{ @@ -72663,29 +65436,14 @@ dir = 8 }, /obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dVv" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/ai_status_display{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) "dVw" = ( /obj/structure/cable{ d2 = 4; @@ -72702,11 +65460,8 @@ "dVx" = ( /obj/structure/table/wood, /obj/item/ashtray/plastic, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /turf/simulated/floor/carpet, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dVy" = ( /obj/structure/grille, /obj/structure/cable/yellow{ @@ -72720,25 +65475,12 @@ /turf/simulated/floor/plating/airless, /area/station/engineering/control) "dVS" = ( -/obj/machinery/access_button{ - autolink_id = "stationai_btn_ext"; - name = "exterior access button"; - pixel_x = 20; - pixel_y = 20; - req_access_txt = "10;13" - }, /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, /turf/space, /area/space/nearstation) "dWc" = ( @@ -72876,180 +65618,61 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dWL" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/aft) -"dWN" = ( -/obj/machinery/suit_storage_unit/cmo, /obj/effect/turf_decal/stripes/line{ - dir = 6 + dir = 8 }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "dWP" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/central) -"dWS" = ( -/obj/item/kirbyplants, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) -"dWT" = ( -/obj/machinery/light, -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dWU" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dWX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plating/airless, -/area/station/medical/virology) -"dWY" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/plating/airless, -/area/station/medical/virology) -"dWZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plating/airless, -/area/station/medical/virology) -"dXb" = ( -/obj/machinery/atmospherics/binary/valve{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"dXc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1; - level = 2 - }, /turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dXd" = ( -/obj/machinery/atmospherics/unary/outlet_injector/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plating/airless, -/area/station/medical/virology) -"dXe" = ( -/obj/structure/disposaloutlet{ - name = "evidence outlet" - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plating/airless, -/area/station/medical/virology) -"dXf" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/dropper, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" +/area/station/medical/sleeper) +"dWR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/area/station/medical/virology) -"dXg" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/pen/red, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/primary) +"dWX" = ( +/turf/simulated/floor/plasteel/white, /area/station/medical/virology) -"dXh" = ( +"dWY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"dXi" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"dXg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "dXj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ name = "Public Access" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dXk" = ( /obj/machinery/light{ dir = 8 @@ -73076,10 +65699,7 @@ /turf/simulated/wall/r_wall, /area/station/hallway/secondary/exit) "dXo" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -73088,26 +65708,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"dXp" = ( -/obj/machinery/camera{ - c_tag = "Medbay Hallway East"; - dir = 1; - network = list("SS13","Medical") - }, -/obj/machinery/light, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) -"dXq" = ( -/obj/structure/sign/poster/official/bless_this_spess{ - pixel_y = -32 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/medical/morgue) "dXr" = ( /obj/machinery/camera{ c_tag = "Robotics Lab"; @@ -73127,10 +65727,7 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics) "dXs" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" @@ -73152,18 +65749,6 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"dXw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/primary) "dXx" = ( /obj/item/kirbyplants, /obj/machinery/camera{ @@ -73176,26 +65761,8 @@ icon_state = "chapel" }, /area/station/service/chapel) -"dXz" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/camera{ - c_tag = "Chief Medical Officer's Quarters"; - dir = 1; - network = list("Medical","SS13") - }, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/command/office/cmo) "dXC" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/camera{ c_tag = "Departure Lounge North" }, @@ -73212,10 +65779,6 @@ /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, /area/station/service/chapel/office) -"dXE" = ( -/obj/effect/decal/cleanable/fungus, -/turf/simulated/wall, -/area/station/medical/virology) "dXF" = ( /obj/structure/chair, /obj/machinery/camera{ @@ -73226,26 +65789,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dXG" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/iv_bag/blood/OPlus, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/radio/intercom{ - name = "north bump"; - pixel_y = 28 - }, -/obj/machinery/camera{ - c_tag = "Virology Lab"; - network = list("SS13","Medical") - }, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dXH" = ( /obj/machinery/camera{ c_tag = "Port Aft Solars" @@ -73290,36 +65833,15 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"dXK" = ( -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) "dXQ" = ( /obj/machinery/light, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "dXS" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, /obj/structure/closet/secure_closet/medical2, -/obj/structure/cable, /turf/simulated/floor/plating, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dXT" = ( /obj/machinery/light/small, /obj/structure/closet/crate/freezer, @@ -73331,7 +65853,7 @@ /obj/item/reagent_containers/iv_bag/blood/random, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dXU" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/regular, @@ -73341,7 +65863,7 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dXV" = ( /obj/structure/table/wood, /turf/simulated/floor/plasteel/grimy, @@ -73358,75 +65880,54 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dXZ" = ( /obj/structure/table/reinforced, /obj/structure/bedsheetbin, /obj/machinery/light/small, /turf/simulated/floor/plasteel, -/area/station/medical/surgery) -"dYa" = ( -/obj/effect/spawner/random_spawners/wall_rusted_maybe, -/turf/simulated/wall, -/area/station/medical/surgery) +/area/station/maintenance/starboard) "dYb" = ( /obj/structure/table/glass, -/obj/item/clipboard, -/obj/item/toy/figure/crew/geneticist, -/obj/structure/extinguisher_cabinet{ +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/box/disks, +/obj/item/radio/intercom{ name = "north bump"; - pixel_y = 30 + pixel_y = 28 + }, +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurplecorner" + icon_state = "whitepurple" }, /area/station/science/genetics) "dYd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" - }, -/area/station/science/genetics) -"dYi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) -"dYj" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/dna_scannernew, +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Genetics Requests Console"; + pixel_y = 30 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + dir = 1; + icon_state = "whitepurple" }, /area/station/science/genetics) "dYl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/structure/table/glass, +/obj/item/storage/box/bodybags{ + pixel_y = 10; + pixel_x = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" + icon_state = "whitepurplecorner" }, /area/station/science/genetics) "dYm" = ( @@ -73524,14 +66025,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/port2) -"dYE" = ( -/obj/structure/bed/roller, -/obj/effect/turf_decal/delivery/hollow, -/mob/living/carbon/human/monkey, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) "dYG" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/delivery, @@ -73816,10 +66309,50 @@ /obj/machinery/blackbox_recorder, /turf/simulated/floor/bluegrid, /area/station/telecomms/chamber) +"ebi" = ( +/obj/structure/table, +/obj/item/storage/box/gloves{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/masks, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) +"ebB" = ( +/obj/structure/table, +/obj/machinery/door_control{ + id = "viroshutters"; + name = "Privacy Shutters Control"; + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/hand_labeler{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "ebU" = ( /obj/machinery/computer/general_air_control{ name = "Bomb Mix Monitor"; - autolink_sensors = list("burn_sensor"="Burn Mix"); + autolink_sensors = list("burn_sensor" = "Burn Mix"); dir = 1 }, /obj/machinery/ignition_switch{ @@ -73844,6 +66377,38 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/toxins/mixing) +"ecP" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Psych Office" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "psychoffice" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/station/medical/psych) +"ecX" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "eer" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, @@ -73871,6 +66436,14 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"eeX" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/storage/box/bodybags, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) "efv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -73897,7 +66470,13 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) +"efS" = ( +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "egp" = ( /obj/structure/cable{ d2 = 2; @@ -73922,22 +66501,11 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/rnd) -"eha" = ( -/obj/machinery/iv_drip, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/closet/crate/freezer/iv_storage, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/primary) "ehm" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/plasteel/white, /area/station/science/toxins/mixing) "ehT" = ( @@ -73950,6 +66518,17 @@ }, /turf/simulated/floor/plating, /area/station/command/office/rd) +"ehV" = ( +/obj/structure/grille, +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/structure/window/plasmareinforced, +/obj/machinery/atmospherics/meter{ + layer = 3.3 + }, +/turf/simulated/floor/plating, +/area/station/science/toxins/mixing) "eir" = ( /obj/machinery/economy/vending/cart, /obj/machinery/computer/security/telescreen/entertainment{ @@ -74033,24 +66612,17 @@ /turf/simulated/floor/plating, /area/station/security/brig) "ejT" = ( -/obj/machinery/access_button{ - autolink_id = "perma_btn_int"; - name = "interior access button"; - pixel_x = -20; - pixel_y = 20; - req_access_txt = "67" - }, /obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "ekg" = ( @@ -74070,7 +66642,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "eki" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -74086,7 +66658,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "ekx" = ( /obj/machinery/door/airlock/research/glass{ name = "Science Chemistry" @@ -74110,11 +66682,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/misc_lab) "eky" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -74130,16 +66698,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) -"elT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Patient Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) "ema" = ( /obj/structure/window/reinforced{ dir = 1; @@ -74151,13 +66709,6 @@ }, /area/station/public/fitness) "eml" = ( -/obj/machinery/door/airlock/external{ - id_tag = "atmostanks_door_int"; - locked = 1; - name = "Atmos External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "emr" = ( @@ -74169,6 +66720,28 @@ icon_state = "dark" }, /area/station/security/main) +"emu" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Port to Engine" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) +"emy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/east) "emC" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -74221,6 +66794,10 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"eoJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "eoO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -74248,6 +66825,12 @@ icon_state = "whitepurple" }, /area/station/science/misc_lab) +"epO" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "eqc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -74304,6 +66887,28 @@ }, /turf/simulated/floor/plasteel, /area/station/security/checkpoint/secondary) +"erg" = ( +/obj/structure/window/reinforced{ + dir = 8; + pixel_x = -4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "erk" = ( /obj/structure/cable{ d2 = 2; @@ -74314,6 +66919,26 @@ }, /turf/simulated/floor/plating, /area/station/command/office/ce) +"ern" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/machinery/door/airlock/medical, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) "erA" = ( /obj/structure/table, /obj/item/clothing/glasses/science, @@ -74334,6 +66959,29 @@ icon_state = "whitepurple" }, /area/station/science/misc_lab) +"erE" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"erI" = ( +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "erP" = ( /obj/machinery/camera{ c_tag = "Secure Lab - Test Chamber"; @@ -74353,16 +67001,32 @@ /area/station/public/fitness) "esa" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkred" }, /area/station/security/prisonershuttle) +"esf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "esj" = ( /obj/machinery/flasher/portable, /turf/simulated/floor/plasteel, @@ -74399,35 +67063,48 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/explab) -"etk" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/machinery/door/firedoor, -/obj/item/pen, -/obj/machinery/door/window/classic/normal{ - name = "Chemistry Desk" +"etc" = ( +/obj/machinery/button/windowtint{ + pixel_x = 24; + id = "sr2"; + dir = 8; + pixel_y = -7; + req_access_txt = "45" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "chemdesk1"; - name = "Chemistry Desk Shutters" +/obj/machinery/light_switch{ + dir = 8; + name = "west bump"; + pixel_x = 24 }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/machinery/holosign_switch{ + dir = 8; + id = "surgery2"; + pixel_x = 24; + pixel_y = 7 }, -/obj/machinery/door/window/classic/normal{ - dir = 1; - name = "Chemistry Desk" +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" }, -/turf/simulated/floor/plasteel, -/area/station/medical/reception) +/area/station/medical/surgery/secondary) +"etR" = ( +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/south) +"etT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "euc" = ( /turf/simulated/wall/r_wall, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "eud" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -74447,6 +67124,17 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"ewa" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/clothing/gloves/color/latex/nitrile{ + pixel_y = 5 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "ewj" = ( /obj/structure/railing{ dir = 1 @@ -74478,6 +67166,12 @@ }, /turf/space, /area/station/maintenance/starboardsolar) +"exy" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/east) "exC" = ( /turf/simulated/floor/bluegrid{ nitrogen = 100; @@ -74499,7 +67193,29 @@ dir = 8; icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) +"exQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"eyb" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "viroshutters"; + name = "Privacy Shutters" + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"eyl" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/ne) "eyy" = ( /obj/machinery/door/poddoor{ density = 0; @@ -74523,6 +67239,36 @@ /obj/item/kirbyplants, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"eyG" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/closet/crate/freezer/iv_storage, +/obj/structure/cable, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) +"ezp" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellowcorner" + }, +/area/station/hallway/primary/port/east) +"ezr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "ezR" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -74543,15 +67289,11 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "eAi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/structure/railing/corner, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue" + icon_state = "whitebluecorner" }, /area/station/medical/reception) "eAl" = ( @@ -74603,7 +67345,19 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"eCn" = ( +/obj/structure/closet/secure_closet/medical3, +/obj/effect/turf_decal/delivery/white/hollow, +/obj/machinery/power/apc/critical/directional/north, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "eCs" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -74637,6 +67391,27 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) +"eDE" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/south) +"eEf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) +"eEq" = ( +/turf/simulated/wall/r_wall, +/area/station/science/genetics) "eEE" = ( /obj/effect/turf_decal/delivery/hollow, /obj/effect/turf_decal/delivery/hollow, @@ -74654,10 +67429,28 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) +"eEP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) "eFu" = ( /obj/structure/cable{ d1 = 4; @@ -74743,6 +67536,18 @@ }, /turf/simulated/floor/wood, /area/station/public/pet_store) +"eHg" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/cable, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) +"eHp" = ( +/obj/effect/spawner/random_spawners/grille_often, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "eHx" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -74759,11 +67564,33 @@ icon_state = "dark" }, /area/station/aisat) +"eHD" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"eHZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "eIG" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "eJp" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -74804,6 +67631,32 @@ icon_state = "neutralfull" }, /area/station/public/fitness) +"eKO" = ( +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/west) +"eKP" = ( +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/reception) +"eLc" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "eLI" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -74822,6 +67675,47 @@ /obj/machinery/computer/area_atmos, /turf/simulated/floor/plasteel, /area/station/science/storage) +"eLU" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery/white/hollow, +/obj/machinery/camera{ + c_tag = "Virology Decontamination"; + dir = 4; + network = list("Medical","SS13") + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"eMA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) +"eMB" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "eNk" = ( /obj/structure/cable{ d1 = 1; @@ -74846,23 +67740,67 @@ }, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) +"eNp" = ( +/obj/structure/table, +/obj/item/reagent_containers/drinks/mug/med, +/obj/item/reagent_containers/drinks/coffee{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "eNt" = ( /turf/simulated/wall, /area/station/maintenance/fsmaint) +"eNw" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteyellowcorner" + }, +/area/station/medical/medbay) "eNI" = ( /turf/simulated/floor/plasteel{ icon_state = "barber" }, /area/station/security/permabrig) "eOd" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable, /turf/simulated/floor/plasteel/white, /area/station/science/explab) +"eOt" = ( +/obj/structure/table/glass, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/item/cartridge/medical{ + pixel_y = 1; + pixel_x = 4 + }, +/obj/item/reagent_containers/drinks/coffee, +/obj/item/reagent_containers/glass/bottle/morphine{ + pixel_y = 7; + pixel_x = -5 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "eOG" = ( /obj/structure/cable{ d1 = 2; @@ -74879,20 +67817,6 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"eON" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/fireaxecabinet{ - pixel_x = 30 - }, -/obj/machinery/economy/vending/atmosdrobe, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "caution" - }, -/area/station/engineering/atmos) "eOO" = ( /obj/structure/cable{ d1 = 1; @@ -74910,7 +67834,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "eOQ" = ( /obj/structure/chair/sofa/pew{ dir = 8; @@ -74938,6 +67862,23 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"ePv" = ( +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = -30 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "eQe" = ( /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, @@ -74969,7 +67910,7 @@ "eQu" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "eQz" = ( /obj/machinery/access_button{ layer = 3.6; @@ -74985,15 +67926,38 @@ name = "Virology Lab External Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) +"eQZ" = ( +/obj/machinery/door/airlock/medical/glass, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) +"eRi" = ( +/obj/structure/table/glass, +/obj/item/storage/box/bodybags, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "eSc" = ( /obj/machinery/computer/rdconsole/experiment, /turf/simulated/floor/plasteel/white, @@ -75009,7 +67973,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "eTB" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -75037,21 +68001,6 @@ }, /turf/simulated/floor/engine, /area/station/science/explab) -"eTI" = ( -/obj/structure/table, -/obj/item/storage/box/gloves{ - pixel_y = 8 - }, -/obj/item/camera/autopsy{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/structure/window/reinforced{ - dir = 8; - pixel_x = -4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "eUn" = ( /obj/structure/cable{ d1 = 4; @@ -75090,6 +68039,16 @@ icon_state = "dark" }, /area/station/security/storage) +"eVW" = ( +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "eWa" = ( /obj/structure/cable{ d1 = 4; @@ -75167,7 +68126,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "eZE" = ( /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, @@ -75184,6 +68143,16 @@ icon_state = "cult" }, /area/station/legal/magistrate) +"fac" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "faq" = ( /obj/structure/closet/emcloset, /obj/item/wrench, @@ -75201,6 +68170,65 @@ icon_state = "darkred" }, /area/station/security/warden) +"fbD" = ( +/obj/structure/table, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkgreen" + }, +/area/station/medical/virology) +"fbX" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteyellowcorner"; + dir = 4 + }, +/area/station/medical/chemistry) +"fca" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) +"fcl" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/nw) +"fcY" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/south) +"fdt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/medical/virology) "fdD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -75259,6 +68287,16 @@ icon_state = "red" }, /area/station/security/permabrig) +"ffa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "ffd" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 8; @@ -75273,25 +68311,12 @@ }, /turf/simulated/floor/engine/n2, /area/station/engineering/atmos) -"ffm" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/simulated/floor/plasteel/white, -/area/station/hallway/primary/central) "ffz" = ( /obj/effect/spawner/random_spawners/cobweb_right_frequent, /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "ffC" = ( -/obj/machinery/access_button{ - autolink_id = "assolar_btn_int"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "10;13" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -75302,14 +68327,23 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) +"ffG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "ffJ" = ( /obj/structure/cable{ d1 = 4; @@ -75331,13 +68365,46 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) +"fga" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "fgh" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/incinerator) +"fgF" = ( +/obj/structure/table/reinforced, +/obj/item/radio, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "fgM" = ( /turf/simulated/wall, /area/station/security/execution) +"fhh" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "fho" = ( /obj/machinery/economy/vending/artvend, /obj/effect/decal/cleanable/cobweb, @@ -75363,10 +68430,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/sorting) "fhI" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/shard, /turf/simulated/floor/plating, @@ -75400,6 +68464,18 @@ icon_state = "neutral" }, /area/station/maintenance/port) +"fiu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/east) +"fiV" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "fjJ" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel/dark, @@ -75444,7 +68520,7 @@ "fmg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -75454,15 +68530,6 @@ icon_state = "dark" }, /area/station/telecomms/chamber) -"fmE" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) "fmF" = ( /obj/structure/closet/secure_closet/security, /turf/simulated/floor/plasteel{ @@ -75512,6 +68579,55 @@ }, /turf/simulated/floor/plating, /area/station/command/office/ntrep) +"fob" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/east) +"foc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/north) +"fod" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/doctor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"fol" = ( +/obj/structure/table/glass, +/obj/item/storage/box/patch_packs, +/obj/item/storage/box/rxglasses{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/phone{ + pixel_x = -4; + pixel_y = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "fou" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -75561,7 +68677,7 @@ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "fpL" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, @@ -75590,7 +68706,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "fqr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -75626,10 +68742,15 @@ dir = 4 }, /obj/machinery/light, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "fqS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -75648,20 +68769,11 @@ }, /area/station/maintenance/apmaint) "frh" = ( -/obj/machinery/door/airlock/external{ - id_tag = "assolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -75695,6 +68807,25 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"frO" = ( +/obj/structure/bed/roller, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24; + name = "south bump" + }, +/obj/machinery/camera{ + c_tag = "Medbay Lobby"; + dir = 1; + network = list("Medical","SS13") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "fsf" = ( /obj/structure/cable{ d1 = 1; @@ -75708,6 +68839,15 @@ icon_state = "neutral" }, /area/station/maintenance/port) +"fsC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/chemist, +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) "fsO" = ( /obj/structure/cable{ d1 = 4; @@ -75721,15 +68861,31 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/engineering/smes) +"fsR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "fun" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Access" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"fuu" = ( +/obj/structure/mirror{ + pixel_y = 28 + }, +/obj/structure/closet/secure_closet/medical3, +/obj/effect/turf_decal/delivery/white/hollow, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "fuH" = ( /obj/machinery/economy/vending/autodrobe, /obj/machinery/light/small{ @@ -75757,6 +68913,12 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/xenobiology) +"fwU" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "fwX" = ( /obj/structure/sign/electricshock{ pixel_x = -32; @@ -75767,7 +68929,27 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) +"fxo" = ( +/obj/machinery/bodyscanner{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) +"fxA" = ( +/obj/machinery/iv_drip, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "fxC" = ( /obj/structure/cable{ d2 = 4; @@ -75776,6 +68958,15 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/xenobiology) +"fyn" = ( +/obj/machinery/economy/vending/coffee, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "fzd" = ( /obj/machinery/access_button{ autolink_id = "virolab_btn_int"; @@ -75795,9 +68986,8 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" - }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, /area/station/medical/virology) "fze" = ( /obj/structure/closet/l3closet/scientist, @@ -75808,6 +68998,15 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/white, /area/station/science/explab) +"fzp" = ( +/obj/structure/chair/stool{ + dir = 8 + }, +/obj/effect/landmark/start/atmospheric, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "fAb" = ( /obj/structure/cable{ d1 = 4; @@ -75827,10 +69026,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "fBl" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -75854,6 +69050,20 @@ }, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) +"fBU" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/hollow/left, +/obj/structure/sign/deathsposal{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "fCA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -75864,7 +69074,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"fCT" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "fCY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -75893,13 +69109,6 @@ }, /area/station/security/brig) "fDS" = ( -/obj/machinery/access_button{ - autolink_id = "stationai_btn_int"; - name = "interior access button"; - pixel_x = -20; - pixel_y = -20; - req_access_txt = "10;13" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -75909,12 +69118,6 @@ dir = 10; initialize_directions = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, /turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) "fEo" = ( @@ -75983,6 +69186,13 @@ icon_state = "dark" }, /area/station/security/prison/cell_block) +"fFy" = ( +/obj/machinery/camera{ + dir = 6; + name = "Atmospherics North" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/engineering/atmos) "fFE" = ( /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/plasteel{ @@ -75990,24 +69200,35 @@ icon_state = "neutral" }, /area/station/maintenance/fsmaint) -"fFP" = ( -/obj/structure/mirror{ - pixel_x = -27 - }, -/obj/machinery/shower{ - dir = 4 +"fFU" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/latex, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) +"fGs" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" }, -/obj/machinery/door/window/classic/normal{ - dir = 4; - name = "Glass Door" +/obj/machinery/power/apc/directional/north, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/cloning) +/area/station/hallway/primary/port/west) "fGt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"fGW" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/south, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "fHs" = ( /obj/structure/table/reinforced, /obj/machinery/photocopier/faxmachine{ @@ -76043,17 +69264,20 @@ }, /area/station/maintenance/starboard) "fIv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/station/maintenance/aft) "fIE" = ( @@ -76080,7 +69304,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "fJA" = ( /obj/structure/table/wood, /obj/item/storage/fancy/cigarettes/cigpack_uplift, @@ -76090,6 +69314,15 @@ icon_state = "grimy" }, /area/station/maintenance/starboard) +"fJR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "fKN" = ( /obj/structure/cable{ d1 = 4; @@ -76108,30 +69341,17 @@ /area/station/maintenance/fsmaint) "fLI" = ( /obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/classic/normal{ - name = "Genetics Desk"; - dir = 4 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ dir = 4 }, -/obj/machinery/door/window/classic/normal{ - dir = 8; - name = "Genetics Desk" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "geneticsdesk"; - name = "Genetics Desk Shutters" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/machinery/door/window/classic/reversed{ + dir = 4; + name = "Genetics Reception" }, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - icon_state = "purplefull" + dir = 8; + icon_state = "whitepurple" }, /area/station/science/genetics) "fLR" = ( @@ -76169,7 +69389,7 @@ inlet_injector_autolink_id = "n2o_in"; name = "Nitrous Oxide Supply Control"; outlet_vent_autolink_id = "n2o_out"; - autolink_sensors = list("n2o_sensor"="Tank") + autolink_sensors = list("n2o_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /turf/simulated/floor/plasteel{ @@ -76177,6 +69397,26 @@ icon_state = "escape" }, /area/station/engineering/atmos) +"fMP" = ( +/obj/machinery/door/airlock/command{ + id_tag = "cmoofficedoor"; + name = "CMO's Office" + }, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "CMO" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "fMW" = ( /obj/machinery/light/small{ dir = 4; @@ -76213,6 +69453,30 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) +"fNN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) +"fNP" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "fOa" = ( /obj/structure/bed/dogbed, /turf/simulated/floor/plasteel{ @@ -76225,7 +69489,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "fOy" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/delivery/hollow, @@ -76266,7 +69530,35 @@ icon_state = "whitepurple" }, /area/station/science/research) +"fOV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) +"fPb" = ( +/obj/structure/table, +/obj/item/clothing/mask/gas, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "fPx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable{ @@ -76278,16 +69570,6 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "fPC" = ( @@ -76307,7 +69589,23 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) +"fPG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "fPJ" = ( /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plasteel{ @@ -76323,6 +69621,26 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"fQh" = ( +/obj/structure/table/glass, +/obj/item/storage/box/iv_bags{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/machinery/economy/vending/wallmed{ + layer = 3.3; + name = "Emergency NanoMed"; + pixel_x = 28 + }, +/obj/machinery/camera{ + c_tag = "Chemistry South"; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "fQr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -76338,6 +69656,11 @@ }, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) +"fQt" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/station/medical/reception) "fQU" = ( /obj/machinery/power/smes{ charge = 2e+006 @@ -76415,7 +69738,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "fSH" = ( /obj/structure/cable{ d1 = 1; @@ -76432,7 +69755,22 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) +"fTe" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "fTq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76447,18 +69785,23 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "fTr" = ( /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) "fTZ" = ( @@ -76495,19 +69838,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "fVZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, +/turf/simulated/floor/plasteel/white, /area/station/medical/surgery/primary) "fWe" = ( /obj/machinery/door/poddoor{ @@ -76524,6 +69855,37 @@ }, /turf/simulated/floor/plating, /area/station/security/storage) +"fWX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) +"fXM" = ( +/obj/machinery/optable, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) +"fYS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "fZU" = ( /obj/structure/chair/stool/bar{ dir = 1 @@ -76534,13 +69896,34 @@ }, /area/station/service/bar) "fZV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Genetics Office" +/obj/machinery/newscaster{ + dir = 1; + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/table/glass, +/obj/item/storage/box/syringes, +/obj/item/book/manual/wiki/sop_science, +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitepurple" }, -/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, -/turf/simulated/floor/plasteel, /area/station/science/genetics) +"gap" = ( +/obj/machinery/firealarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/table/glass, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "gaZ" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -76550,7 +69933,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "gbO" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance/two, @@ -76559,6 +69942,23 @@ icon_state = "bar" }, /area/station/maintenance/fsmaint) +"gbQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "gcp" = ( /obj/structure/cable{ d1 = 1; @@ -76634,6 +70034,23 @@ icon_state = "darkredfull" }, /area/station/security/processing) +"gfB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"gfR" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" + }, +/obj/machinery/power/apc/directional/west, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "ggA" = ( /obj/machinery/economy/vending/shoedispenser, /turf/simulated/floor/plasteel{ @@ -76652,13 +70069,7 @@ /turf/simulated/floor/plasteel, /area/station/command/teleporter) "ggW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold4w/visible, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -76686,25 +70097,82 @@ }, /turf/simulated/floor/plating, /area/station/security/main) -"ghJ" = ( -/obj/machinery/economy/atm{ - pixel_x = 32 +"ghB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/engineering/atmos/distribution) +"ghG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" + dir = 9; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"ghP" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/engineering/atmos/distribution) +"ghS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/camera{ + c_tag = "Virology Hallway North"; + dir = 4; + network = list("Medical","SS13") }, -/area/station/hallway/primary/aft) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "ghZ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/wall, /area/station/maintenance/fore) +"git" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "giz" = ( /obj/structure/table/glass, -/obj/item/book/random{ +/obj/item/folder/white{ + pixel_x = 3; pixel_y = 6 }, +/obj/effect/landmark/lightsout, /turf/simulated/floor/plasteel/white, /area/station/medical/reception) +"giE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/east) "giK" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved{ @@ -76786,6 +70254,16 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) +"gkl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/se) "gls" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -76824,6 +70302,19 @@ icon_state = "neutralfull" }, /area/station/engineering/equipmentstorage) +"gnh" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sunnybush, +/turf/simulated/floor/grass, +/area/station/medical/medbay) +"gns" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/effect/spawner/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/plating, +/area/station/engineering/atmos/distribution) "gnB" = ( /obj/machinery/alarm{ dir = 1; @@ -76875,11 +70366,22 @@ icon_state = "dark" }, /area/station/security/main) +"gpy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" + }, +/obj/machinery/power/apc/important/directional/west, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "gpU" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "gpX" = ( /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plasteel{ @@ -76905,17 +70407,7 @@ "grB" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) -"grD" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "CMO" - }, -/turf/simulated/floor/plating, -/area/station/command/office/cmo) +/area/station/hallway/secondary/entry/east) "gsC" = ( /obj/structure/cable{ d1 = 1; @@ -76925,27 +70417,14 @@ /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Warehouse Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) "gti" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/machinery/economy/vending/wallmed{ - layer = 3.3; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/obj/item/crutches, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, +/obj/structure/flora/rock/jungle, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, /area/station/medical/medbay) "gty" = ( /obj/machinery/light{ @@ -76980,6 +70459,10 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"gua" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "guk" = ( /obj/structure/cable{ d1 = 1; @@ -76995,7 +70478,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) +"gvr" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "gvO" = ( /obj/effect/turf_decal, /obj/effect/decal/cleanable/dirt, @@ -77006,6 +70495,18 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"gvZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) +"gwl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluefull" + }, +/area/station/medical/storage/secondary) "gwn" = ( /obj/structure/cable{ d1 = 4; @@ -77108,6 +70609,10 @@ }, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) +"gzi" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "gAL" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/airless{ @@ -77115,6 +70620,19 @@ dir = 5 }, /area/space/nearstation) +"gAR" = ( +/obj/structure/closet/wardrobe/pjs, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/power/apc/directional/south, +/obj/structure/cable, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "gBe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -77132,6 +70650,15 @@ icon_state = "darkredcorners" }, /area/station/security/permasolitary) +"gCA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "gDv" = ( /obj/machinery/door_timer/cell_1{ pixel_x = -32 @@ -77151,6 +70678,24 @@ icon_state = "wood-broken7" }, /area/station/maintenance/library) +"gDy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"gDM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "gEo" = ( /obj/structure/sink{ pixel_y = 25 @@ -77166,10 +70711,24 @@ dir = 5 }, /obj/machinery/light, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) +"gEy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/east) "gEW" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -77204,7 +70763,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "gFm" = ( /obj/structure/window/reinforced{ dir = 1 @@ -77299,19 +70858,6 @@ /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"gHC" = ( -/obj/machinery/door/airlock/external{ - id_tag = "apmaint2_door_int"; - locked = 1; - name = "West Maintenance External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port) "gHE" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, @@ -77334,14 +70880,17 @@ }, /area/station/engineering/control) "gIn" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 8; - icon_state = "pipe-j2s"; - name = "Chemistry Junction"; - sort_type_txt = "11" +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 6; + dir = 8; icon_state = "whiteblue" }, /area/station/medical/reception) @@ -77349,11 +70898,7 @@ /obj/effect/turf_decal{ dir = 6 }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 4; - name = "east bump"; - pixel_x = 24; +/obj/machinery/power/apc/critical/directional/east{ shock_proof = 1 }, /obj/structure/cable{ @@ -77362,6 +70907,15 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"gJC" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "gJT" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/metal{ @@ -77385,6 +70939,13 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) +"gKe" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/engineering/atmos/distribution) "gKi" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -77399,6 +70960,13 @@ icon_state = "darkred" }, /area/station/security/brig) +"gKs" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/west) "gKF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -77414,6 +70982,34 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port) +"gLm" = ( +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre 2" + }, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "sr2" + }, +/obj/machinery/holosign/surgery{ + id = "surgery2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) "gLn" = ( /obj/structure/cable{ d1 = 4; @@ -77428,6 +71024,24 @@ icon_state = "darkred" }, /area/station/security/brig) +"gLq" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"gLD" = ( +/obj/structure/table/glass, +/obj/machinery/recharger, +/obj/item/screwdriver, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "gLH" = ( /obj/machinery/door/window/classic/reversed{ name = "Danger: Conveyor Access"; @@ -77447,6 +71061,20 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) +"gMe" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) "gML" = ( /obj/structure/sign/radiation/rad_area, /turf/simulated/wall/r_wall, @@ -77483,7 +71111,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "gNO" = ( /obj/item/radio/intercom{ name = "east bump"; @@ -77494,17 +71122,6 @@ }, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) -"gNS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Patient Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) "gOL" = ( /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, @@ -77528,32 +71145,66 @@ icon_state = "darkredfull" }, /area/station/security/warden) -"gQU" = ( -/obj/structure/cable, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/security/permabrig) -"gQW" = ( -/turf/simulated/wall/r_wall, -/area/station/science/toxins/launch) -"gRi" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre" +"gPc" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/obj/machinery/holosign/surgery{ - id = "surgery1" +/obj/effect/turf_decal/delivery/white/hollow, +/obj/machinery/shower{ + pixel_y = 8 + }, +/turf/simulated/floor/noslip, +/area/station/medical/surgery) +"gPh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/central/south) +"gQe" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/primary) +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/south) +"gQS" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/medical/sleeper) +"gQU" = ( +/obj/structure/cable, +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/security/permabrig) +"gQW" = ( +/turf/simulated/wall/r_wall, +/area/station/science/toxins/launch) "gTw" = ( /obj/structure/table/wood, /obj/item/folder/white, @@ -77585,6 +71236,37 @@ icon_state = "freezerfloor" }, /area/station/public/sleep) +"gVk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) +"gVm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/east) +"gVn" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "gVE" = ( /obj/machinery/light{ dir = 1 @@ -77613,20 +71295,7 @@ pixel_y = 28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) -"gWP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/simulated/floor/plasteel, -/area/station/supply/sorting) +/area/station/hallway/primary/central/west) "gXp" = ( /obj/machinery/door/airlock/security{ name = "Detective" @@ -77655,19 +71324,67 @@ icon_state = "red" }, /area/station/security/detective) -"gZj" = ( +"gYx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, /obj/structure/cable{ - d2 = 2; - icon_state = "0-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"gYJ" = ( +/obj/structure/bed, +/obj/item/bedsheet/green, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, +/obj/machinery/camera{ + c_tag = "Virology Bedroom South"; + network = list("SS13","Medical","Bedroom"); + dir = 5 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkgreen" + }, +/area/station/medical/virology) +"haj" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "haA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random_spawners/blood_maybe, @@ -77700,6 +71417,12 @@ /obj/structure/closet/wardrobe/atmospherics_yellow, /turf/simulated/floor/plating, /area/station/maintenance/electrical) +"hbl" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "hbr" = ( /obj/structure/cable{ d2 = 4; @@ -77720,6 +71443,23 @@ }, /turf/simulated/floor/plating, /area/station/security/interrogation) +"hbt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "hbv" = ( /obj/machinery/newscaster{ name = "north bump"; @@ -77730,7 +71470,7 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "hbB" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -77760,14 +71500,6 @@ }, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) -"hbU" = ( -/obj/structure/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/station/medical/virology) "hch" = ( /obj/structure/chair/stool{ dir = 8 @@ -77818,6 +71550,23 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"hdI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) +"heQ" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/station/medical/medbay) "hfk" = ( /obj/machinery/economy/vending/security, /obj/item/radio/intercom{ @@ -77828,6 +71577,24 @@ icon_state = "darkred" }, /area/station/security/main) +"hgo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/north) +"hgR" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "hha" = ( /obj/structure/cable{ d2 = 2; @@ -77838,6 +71605,17 @@ }, /turf/simulated/floor/plating, /area/station/command/office/rd) +"hhn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) "hhz" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -77861,6 +71639,9 @@ }, /turf/simulated/floor/plating/airless, /area/station/engineering/control) +"hhG" = ( +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/east) "hhU" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/turf_decal/stripes/corner{ @@ -77915,6 +71696,24 @@ }, /turf/simulated/floor/wood, /area/station/legal/lawoffice) +"hiT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) +"hiZ" = ( +/obj/structure/table, +/obj/item/storage/firstaid/o2{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/o2, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "hjo" = ( /obj/structure/closet/crate, /obj/effect/landmark/costume/random, @@ -77993,7 +71792,7 @@ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "hmr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -78021,17 +71820,26 @@ icon_state = "red" }, /area/station/hallway/secondary/exit) -"hmC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"hmM" = ( +/obj/effect/spawner/window/reinforced/polarized/grilled{ + id = "CMO" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/area/station/medical/medbay) +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/station/command/office/cmo) "hng" = ( /obj/machinery/message_server, /turf/simulated/floor/bluegrid, @@ -78058,6 +71866,16 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"hon" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet/purple, +/area/station/medical/psych) "hos" = ( /obj/structure/cable{ d1 = 4; @@ -78073,13 +71891,27 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plasteel/white, -/area/station/hallway/primary/central) +/obj/machinery/door/airlock/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "hps" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"hpD" = ( +/obj/structure/table/glass, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/item/reagent_containers/iv_bag/salglu, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "hpH" = ( /obj/machinery/fishtank/tank, /obj/machinery/light/small{ @@ -78107,6 +71939,19 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"hrt" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/geneticist, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple" + }, +/area/station/science/genetics) "hrD" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Perma Cell 3" @@ -78117,6 +71962,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"hrX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "hsa" = ( /obj/machinery/light/small, /obj/structure/sign/poster/contraband/random{ @@ -78129,20 +71987,55 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/service/chapel/office) +"hsp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "hss" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 }, /turf/simulated/floor/engine, /area/station/science/toxins/mixing) -"hsQ" = ( -/obj/structure/chair/sofa/corp/right{ +"hsE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue" + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/east) +"hsQ" = ( +/obj/structure/railing{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel/white, /area/station/medical/reception) +"htc" = ( +/obj/effect/spawner/window/reinforced/polarized/grilled{ + id = "CMO" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/station/command/office/cmo) "htH" = ( /obj/structure/chair/stool, /turf/simulated/floor/plasteel, @@ -78155,11 +72048,20 @@ }, /turf/simulated/floor/wood, /area/station/maintenance/library) +"huq" = ( +/obj/effect/spawner/random_spawners/grille_maybe, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "huN" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"hvf" = ( +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "hvX" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel/dark, @@ -78195,6 +72097,35 @@ }, /turf/simulated/floor/wood, /area/station/maintenance/library) +"hxe" = ( +/obj/structure/plasticflaps{ + opacity = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 4; + location = "Medbay" + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/obj/machinery/door/window/classic/reversed{ + dir = 1; + name = "Medical Delivery" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/turf/simulated/floor/plating, +/area/station/medical/break_room) "hxl" = ( /obj/structure/cable{ d2 = 2; @@ -78209,10 +72140,7 @@ /turf/simulated/floor/plating, /area/station/security/detective) "hxB" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/structure/cable{ d1 = 1; @@ -78270,6 +72198,24 @@ icon_state = "dark" }, /area/station/turret_protected/aisat) +"hzo" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/west) +"hzL" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "hzW" = ( /obj/machinery/alarm{ dir = 1; @@ -78296,7 +72242,7 @@ name = "Mixed Air Supply Control"; outlet_vent_autolink_id = "air_out"; outlet_setting = 2000; - autolink_sensors = list("air_sensor"="Tank") + autolink_sensors = list("air_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 10 @@ -78319,6 +72265,11 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/permabrig) +"hBw" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/hallway/primary/central/north) "hCU" = ( /obj/effect/turf_decal/delivery/partial, /obj/machinery/door/window/classic/normal{ @@ -78335,19 +72286,10 @@ }, /area/station/supply/sorting) "hCW" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/masks, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 - }, +/obj/machinery/economy/vending/genedrobe, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + dir = 1; + icon_state = "whitepurple" }, /area/station/science/genetics) "hDr" = ( @@ -78357,6 +72299,13 @@ icon_state = "freezerfloor" }, /area/station/service/kitchen) +"hDu" = ( +/obj/structure/bed, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "hDz" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -78441,12 +72390,19 @@ /turf/space, /area/space/nearstation) "hFR" = ( -/obj/machinery/economy/vending/medical, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" +/obj/structure/bed/amb_trolley{ + dir = 1 }, -/area/station/medical/medbay) +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/turf/simulated/floor/plasteel/white/side{ + dir = 4 + }, +/area/station/medical/paramedic) "hFW" = ( /obj/machinery/door/airlock/engineering{ name = "Electrical Maintenance" @@ -78460,6 +72416,33 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/maintenance/port) +"hGZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "hHk" = ( /obj/structure/closet/firecloset/full, /obj/effect/decal/cleanable/dirt, @@ -78491,22 +72474,6 @@ icon_state = "bar" }, /area/station/maintenance/fsmaint) -"hIg" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Isolation A" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/turf_decal/delivery/partial, -/obj/effect/turf_decal/arrows/black, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "hIi" = ( /obj/structure/cable{ d1 = 4; @@ -78528,25 +72495,17 @@ icon_state = "darkred" }, /area/station/security/brig) -"hIk" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/item/pen, -/obj/machinery/door/window/classic/normal{ - name = "Medbay Desk" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) "hIE" = ( /obj/item/bodybag, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/maintenance/apmaint) +"hIZ" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/se) "hJh" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -78558,12 +72517,21 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "hJG" = ( /turf/simulated/floor/plasteel/stairs, /area/station/science/research) +"hLd" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/suit_storage_unit/cmo/secure, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "hLU" = ( /obj/machinery/airlock_controller/air_cycler{ pixel_y = -25; @@ -78581,45 +72549,12 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) -"hLZ" = ( -/obj/structure/table/glass, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/reagent_containers/iv_bag/salglu, -/obj/machinery/camera{ - c_tag = "Medbay Surgery West"; - dir = 1; - network = list("Medical","SS13") - }, -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) "hMD" = ( /obj/machinery/camera{ c_tag = "Research Toxin Mixing"; network = list("Research","SS13") }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -78646,6 +72581,24 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"hNh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "hNy" = ( /obj/structure/cable{ d1 = 4; @@ -78691,6 +72644,14 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) +"hPM" = ( +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/delivery/white/hollow, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "hQe" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -78709,7 +72670,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "hQq" = ( /obj/structure/window/reinforced{ dir = 1; @@ -78721,44 +72682,66 @@ /area/station/public/fitness) "hQz" = ( /obj/machinery/door/window/classic/normal{ - name = "Robotics Desk"; - dir = 8 + dir = 8; + name = "Robotics Surgery" }, +/obj/effect/mapping_helpers/airlock/polarized, /obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ dir = 8 }, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"hRZ" = ( +"hRJ" = ( +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Cloning" +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) +"hSe" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) +"hSO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"hTe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, +/obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurple" + icon_state = "whitebluefull" }, -/area/station/medical/cloning) +/area/station/medical/storage) "hTr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "hTD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, @@ -78769,22 +72752,22 @@ "hTV" = ( /turf/simulated/wall, /area/station/legal/magistrate) -"hTW" = ( -/obj/machinery/camera{ - c_tag = "Medbay Surgery East Storage"; - dir = 1 - }, +"hUE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" + icon_state = "purplecorner" }, -/area/station/medical/surgery/primary) +/area/station/hallway/primary/aft/south) "hUV" = ( /obj/machinery/light{ dir = 1 @@ -78832,6 +72815,23 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) +"hWu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkgreen" + }, +/area/station/medical/virology) "hWF" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -78861,6 +72861,24 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/science/research) +"hXE" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) +"hYe" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkgreen" + }, +/area/station/medical/virology) "hYv" = ( /obj/structure/table, /obj/item/toy/figure/crew/scientist, @@ -78894,6 +72912,14 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) +"hZn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos/distribution) "hZs" = ( /obj/effect/turf_decal{ dir = 1 @@ -78912,6 +72938,28 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"hZH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) +"hZK" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/station/medical/medbay) "hZL" = ( /turf/simulated/floor/plasteel/dark, /area/station/public/locker) @@ -78927,6 +72975,24 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"hZO" = ( +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "hZR" = ( /obj/structure/chair/stool{ dir = 4 @@ -78947,6 +73013,21 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) +"iaU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "ibb" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4 @@ -79113,31 +73194,60 @@ }, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) -"ieW" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" +"ieS" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay Cryogenics"; + dir = 9; + network = list("SS13","Medical") + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" }, +/area/station/medical/cryo) +"ieW" = ( +/obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/shard{ icon_state = "small" }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"ieX" = ( +/obj/machinery/door/airlock/medical/glass, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "ifj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + name = "Internal Medbay Maintenance" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, -/area/station/medical/surgery/secondary) +/area/station/medical/surgery) "ifw" = ( /obj/structure/closet/l3closet/security, /turf/simulated/floor/plasteel{ @@ -79150,11 +73260,11 @@ /obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/door/poddoor/shutters{ id_tag = "qm_warehouse"; name = "Warehouse Shutters" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/sorting) "igJ" = ( @@ -79162,26 +73272,8 @@ icon_state = "darkred" }, /area/station/security/prison/cell_block) -"igV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Genetics Desk Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) -"ihi" = ( -/obj/machinery/door/airlock/external{ - id_tag = "perma_door_int"; - locked = 1; - name = "Perma Brig Exterior Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, +"ihi" = ( /obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "ihK" = ( @@ -79208,6 +73300,11 @@ icon_state = "vault" }, /area/station/security/permabrig) +"iis" = ( +/obj/structure/morgue, +/obj/effect/landmark/spawner/rev, +/turf/simulated/floor/plating, +/area/station/medical/morgue) "iiM" = ( /obj/structure/window/reinforced{ dir = 8 @@ -79215,20 +73312,20 @@ /obj/structure/musician/piano, /turf/simulated/floor/plating, /area/station/maintenance/theatre) -"iiY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "ijk" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/fore2) +"ijt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "ijN" = ( /obj/machinery/door/airlock/atmos/glass{ heat_proof = 1; @@ -79273,6 +73370,13 @@ }, /turf/simulated/floor/plasteel/grimy, /area/station/public/vacant_office) +"imG" = ( +/obj/structure/table/glass, +/obj/machinery/computer/med_data/laptop{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "imS" = ( /obj/structure/table/wood, /obj/machinery/light_switch{ @@ -79285,6 +73389,16 @@ /obj/item/clothing/head/stalhelm, /turf/simulated/floor/wood, /area/station/service/clown) +"imY" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "inx" = ( /obj/structure/table/wood, /obj/machinery/fishtank/bowl, @@ -79297,6 +73411,11 @@ }, /turf/simulated/floor/wood, /area/station/public/pet_store) +"iny" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "inH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -79312,13 +73431,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "inM" = ( /obj/structure/cable{ d1 = 1; @@ -79338,20 +73452,42 @@ icon_state = "caution" }, /area/station/public/fitness) -"ioK" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/classic/normal{ - name = "Medbay Desk" +"ioN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"ipg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "ipi" = ( /turf/simulated/floor/wood, /area/station/maintenance/apmaint) @@ -79366,6 +73502,26 @@ icon_state = "red" }, /area/station/security/permabrig) +"ipS" = ( +/obj/structure/table, +/obj/machinery/computer/med_data/laptop{ + dir = 1 + }, +/obj/machinery/button/windowtint{ + id = "morgue"; + pixel_x = 8; + pixel_y = -24; + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/medical/morgue) "ipZ" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel/dark, @@ -79380,17 +73536,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"iqv" = ( -/obj/machinery/economy/vending/medical, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) "iqz" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "iro" = ( /obj/structure/cable{ d1 = 1; @@ -79409,6 +73558,10 @@ "irt" = ( /turf/simulated/wall, /area/station/maintenance/abandonedbar) +"irJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "irM" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -79422,6 +73575,43 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"itm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) +"itA" = ( +/obj/machinery/computer/cloning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"itX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "iuU" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -79470,17 +73660,51 @@ /obj/machinery/status_display{ pixel_x = 32 }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) +"ivS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) +"iwu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) +"iwE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /obj/structure/cable{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) -"iwk" = ( -/obj/effect/spawner/random_spawners/wall_rusted_always, -/turf/simulated/wall, -/area/station/medical/surgery) +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "iwQ" = ( /obj/machinery/light_switch{ name = "north bump"; @@ -79517,6 +73741,14 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/public/fitness) +"ixk" = ( +/obj/structure/table/glass, +/obj/item/wrench/medical, +/obj/item/soap/nanotrasen, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "ixr" = ( /obj/machinery/door/poddoor{ id_tag = "toxinsdriver"; @@ -79543,17 +73775,27 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, /area/station/maintenance/starboard) +"iAa" = ( +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "iBv" = ( /obj/structure/cable{ d1 = 1; @@ -79583,6 +73825,14 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"iBC" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/reception) "iBK" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance/two, @@ -79725,26 +73975,6 @@ }, /turf/simulated/floor/plating, /area/station/engineering/atmos) -"iFx" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/item/radio/intercom{ - name = "west bump"; - pixel_x = -28 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) "iFB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -79762,6 +73992,31 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"iGk" = ( +/obj/structure/closet/secure_closet/medical2, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) +"iGQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"iHR" = ( +/obj/structure/bed/psych, +/obj/machinery/status_display{ + layer = 4; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "iIr" = ( /obj/machinery/door/poddoor{ density = 0; @@ -79784,23 +74039,38 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/bar) +"iIS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space/nearstation) "iIY" = ( -/obj/structure/table/wood, -/obj/item/storage/briefcase, -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/obj/machinery/button/windowtint{ +/obj/effect/landmark/start/paramedic, +/turf/simulated/floor/plasteel{ dir = 4; - id = "Psych"; - pixel_x = -24; - pixel_y = -8; - req_access_txt = "64" + icon_state = "whiteblue" }, -/turf/simulated/floor/wood, -/area/station/medical/psych) +/area/station/medical/paramedic) +"iJi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/east) "iJL" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -79817,38 +74087,54 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) -"iKj" = ( -/obj/machinery/light_switch{ - dir = 4; - name = "west bump"; - pixel_x = -24 +"iKf" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/holosign_switch{ - dir = 4; - id = "surgery2"; - pixel_x = -24; - pixel_y = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" + icon_state = "neutralfull" }, -/area/station/medical/surgery/secondary) -"iKT" = ( -/obj/machinery/access_button{ - autolink_id = "fpsolar_btn_ext"; - name = "exterior access button"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "32" +/area/station/hallway/primary/starboard/north) +"iKv" = ( +/obj/structure/table, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkgreen" }, -/obj/structure/lattice/catwalk, +/area/station/medical/virology) +"iKN" = ( /obj/structure/cable{ - d2 = 4; - icon_state = "0-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/space, -/area/station/maintenance/auxsolarport) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "iLv" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -79883,6 +74169,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) +"iMy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/wall/r_wall, +/area/station/medical/virology) "iNa" = ( /obj/item/relic, /turf/simulated/floor/engine, @@ -79905,6 +74200,23 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"iNo" = ( +/obj/machinery/computer/med_data/laptop{ + dir = 8 + }, +/obj/structure/table/glass/reinforced/plasma, +/turf/simulated/floor/carpet/purple, +/area/station/medical/psych) +"iNB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/east) "iOh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -79947,11 +74259,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/disposal) "iPa" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -79963,11 +74271,7 @@ /area/station/maintenance/starboard) "iPP" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 4; - name = "east bump"; - pixel_x = 24; +/obj/machinery/power/apc/critical/directional/east{ shock_proof = 1 }, /obj/structure/cable{ @@ -79998,6 +74302,31 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) +"iQj" = ( +/obj/structure/morgue, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"iQz" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) +"iQK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "iQO" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -80013,6 +74342,41 @@ /obj/machinery/atmospherics/portable/canister/toxins, /turf/simulated/floor/plasteel, /area/station/science/storage) +"iRk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/west) +"iRs" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) +"iRF" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "iSc" = ( /obj/machinery/door/poddoor{ density = 0; @@ -80086,6 +74450,14 @@ icon_state = "red" }, /area/station/security/permabrig) +"iUf" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "iUt" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor{ @@ -80111,14 +74483,23 @@ icon_state = "bar" }, /area/station/service/bar) +"iUU" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/west) "iUZ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/machinery/door/firedoor, /obj/machinery/door/window, /obj/effect/mapping_helpers/airlock/windoor/autoname, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenbar"; + name = "Kitchen Shutters"; + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -80160,6 +74541,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "iVV" = ( @@ -80199,16 +74581,57 @@ }, /area/station/science/research) "iWE" = ( +/obj/machinery/economy/vending/cola, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) +"iWG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" }, -/area/station/hallway/primary/central) +/area/station/medical/medbay) +"iWN" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Medical Officer's Desk"; + departmentType = 5; + name = "Chief Medical Officer Requests Console"; + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"iXC" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "iXL" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"iXM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "iXX" = ( /obj/machinery/camera{ c_tag = "Brig - Cell 2"; @@ -80231,15 +74654,23 @@ /turf/simulated/floor/plasteel/white, /area/station/science/toxins/mixing) "iYu" = ( -/obj/machinery/access_button{ - autolink_id = "apmaint2_btn_ext"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 24 +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/e_to_w/engineer{ + req_access_txt = 13 }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/turf/simulated/floor/plating, +/area/station/maintenance/auxsolarport) +"iYX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "jaE" = ( /obj/machinery/door/airlock/maintenance{ name = "Custodial Maintenance" @@ -80313,16 +74744,11 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) -"jcu" = ( -/obj/machinery/economy/vending/cola, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutral" - }, -/area/station/medical/break_room) +"jcP" = ( +/obj/effect/spawner/random_spawners/blood_often, +/obj/effect/spawner/random_spawners/cobweb_left_frequent, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "jdb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity{ @@ -80343,6 +74769,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"jdr" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/directional/north, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/south) "jdz" = ( /obj/structure/cable{ d2 = 4; @@ -80351,15 +74788,19 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/robotics/showroom) -"jdF" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 +"jdH" = ( +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" + dir = 4; + icon_state = "whitegreen" }, -/area/station/medical/medbay) +/area/station/medical/virology) "jdU" = ( /obj/structure/cable{ d1 = 4; @@ -80381,6 +74822,54 @@ /obj/machinery/economy/vending/autodrobe, /turf/simulated/floor/plasteel/dark, /area/station/public/locker) +"jeS" = ( +/obj/structure/filingcabinet/chestdrawer/autopsy, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"jfB" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"jfG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + icon_state = "bluecorner" + }, +/area/station/hallway/primary/central/south) "jgr" = ( /obj/machinery/light_switch{ dir = 4; @@ -80389,17 +74878,52 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/bar) +"jgG" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "jhk" = ( /obj/effect/spawner/random_barrier/obstruction, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"jhM" = ( -/obj/machinery/economy/vending/medical, +"jhr" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + name = "west bump" + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"jid" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner" + icon_state = "neutralcorner" }, -/area/station/medical/reception) +/area/station/hallway/primary/central/ne) +"jin" = ( +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/storage/secondary) "jiG" = ( /obj/structure/cable{ d1 = 1; @@ -80416,6 +74940,17 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/supply/storage) +"jiU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluefull" + }, +/area/station/medical/storage/secondary) "jji" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -80448,7 +74983,24 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) +"jjD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) "jkk" = ( /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) @@ -80467,14 +75019,6 @@ icon_state = "yellowcorner" }, /area/station/engineering/break_room) -"jkU" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/delivery/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/primary) "jkW" = ( /obj/structure/cable{ d2 = 2; @@ -80499,6 +75043,35 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/wood, /area/station/service/clown) +"jlw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"jlL" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) +"jmY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/r_wall, +/area/station/medical/virology) +"jnk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel, +/area/station/engineering/break_room) "jnp" = ( /obj/structure/sink{ dir = 8; @@ -80538,7 +75111,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) +"jpa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "jpk" = ( /obj/structure/cable{ d2 = 8; @@ -80547,6 +75126,43 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) +"jpm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) +"jpC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/west) +"jqi" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/science/genetics) "jqA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -80581,14 +75197,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "jrB" = ( -/obj/machinery/door/airlock/external{ - id_tag = "perma_door_ext"; - locked = 1; - name = "Perma Brig External Access" - }, -/obj/structure/sign/securearea{ - pixel_x = 32 - }, /obj/effect/turf_decal/stripes/line, /obj/machinery/door/poddoor{ density = 0; @@ -80597,8 +75205,6 @@ name = "Prison Lockdown Blast Doors"; opacity = 0 }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "jrC" = ( @@ -80606,26 +75212,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/bridge) -"jrG" = ( -/obj/machinery/door/airlock/virology{ - name = "Virology Bedroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/station/medical/virology) "jrK" = ( /obj/structure/table/wood, /obj/item/folder, @@ -80648,64 +75234,16 @@ }, /turf/simulated/floor/engine, /area/station/science/test_chamber) -"jsi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/hallway/primary/central) "jsk" = ( /obj/machinery/door/airlock/external{ id_tag = "supply_home"; locked = 1; name = "Cargo Docking Hatch" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle, /turf/simulated/floor/plating, /area/station/supply/storage) -"jsq" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Virology Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "jtb" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -80754,7 +75292,12 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) +"juK" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/nw) "juN" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -80779,42 +75322,43 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"jvD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "jvR" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/theatre) -"jyM" = ( -/obj/machinery/door/airlock/command{ - id_tag = "cmoofficedoor"; - name = "CMO's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +"jwP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/area/station/hallway/primary/central/north) +"jyz" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellowcorner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/area/station/hallway/primary/port/west) +"jzc" = ( +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) +/area/station/hallway/primary/fore/south) "jzs" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -80841,13 +75385,16 @@ name = "Distribution Loop" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "jAu" = ( /obj/machinery/door/poddoor/shutters{ density = 0; @@ -80864,17 +75411,35 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/meeting_room) -"jBy" = ( +"jAP" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + name = "east bump" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"jBj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" + icon_state = "neutralfull" }, -/area/station/medical/reception) +/area/station/hallway/primary/aft/north) +"jBE" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/virologist, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "jBM" = ( /obj/structure/cable{ d1 = 1; @@ -80905,16 +75470,24 @@ }, /turf/simulated/floor/plating, /area/station/command/office/hos) -"jCQ" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fpsolar_door_int"; - locked = 1; - name = "Engineering External Access" +"jCu" = ( +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/machinery/light/small{ + dir = 1 }, +/obj/machinery/camera{ + c_tag = "Morgue North"; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"jCQ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -80935,56 +75508,19 @@ icon_state = "cult" }, /area/station/legal/magistrate) -"jDT" = ( -/obj/machinery/door/airlock/virology, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"jDK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/station/medical/virology) -"jEr" = ( -/obj/machinery/door/airlock/medical{ - name = "Psych Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/station/medical/psych) "jEE" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fpsolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/w_to_e/engineer{ + req_access_txt = 13 }, /turf/simulated/floor/plating, -/area/station/maintenance/auxsolarport) +/area/station/maintenance/auxsolarstarboard) "jEI" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -80997,6 +75533,27 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/science/break_room) +"jGH" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) +"jGI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "jGV" = ( /obj/machinery/atmospherics/air_sensor{ autolink_id = "waste_sensor"; @@ -81004,19 +75561,25 @@ }, /turf/simulated/floor/engine/vacuum, /area/station/engineering/atmos) -"jIb" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" +"jHq" = ( +/obj/machinery/economy/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_y = 28 }, -/obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "CMO" +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" }, -/turf/simulated/floor/plating, -/area/station/command/office/cmo) +/area/station/medical/medbay) "jIs" = ( /turf/simulated/wall/r_wall, /area/station/security/evidence) +"jIz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "jIA" = ( /obj/structure/cable{ d1 = 4; @@ -81037,6 +75600,12 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port) +"jIB" = ( +/obj/effect/spawner/window/reinforced/polarized{ + id = "sr1" + }, +/turf/simulated/floor/plating, +/area/station/medical/surgery/primary) "jIV" = ( /obj/structure/table, /obj/item/folder/red, @@ -81054,9 +75623,12 @@ inlet_injector_autolink_id = "n2_in"; name = "Nitrogen Supply Control"; outlet_vent_autolink_id = "n2_out"; - autolink_sensors = list("n2_sensor"="Tank") + autolink_sensors = list("n2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -81076,20 +75648,10 @@ /turf/simulated/floor/plating, /area/station/security/checkpoint/secondary) "jJq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "escape_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = -26; - pixel_y = 6; - vent_link_id = "escape_vent"; - ext_door_link_id = "escape_door_ext"; - int_door_link_id = "escape_door_int"; - ext_button_link_id = "escape_btn_ext"; - int_button_link_id = "escape_btn_int" - }, /obj/effect/turf_decal/delivery, +/obj/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "jJI" = ( @@ -81103,30 +75665,43 @@ /obj/effect/spawner/window/reinforced/plasma/grilled, /turf/simulated/floor/plating, /area/station/science/toxins/launch) -"jKp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"jJW" = ( +/obj/machinery/camera{ + c_tag = "Medbay Secure Storage"; + network = list("SS13","Medical"); + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/rack, +/obj/item/clothing/under/plasmaman/enviroslacks, +/obj/item/clothing/under/plasmaman/enviroslacks, +/obj/item/clothing/head/helmet/space/plasmaman/white, +/obj/item/clothing/head/helmet/space/plasmaman/white, +/obj/item/clothing/under/plasmaman{ + pixel_x = 2; + pixel_y = -6 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/item/clothing/under/plasmaman{ + pixel_x = 2; + pixel_y = -6 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/item/clothing/head/helmet/space/plasmaman{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/clothing/head/helmet/space/plasmaman{ + pixel_x = -3; + pixel_y = 2 }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner" + icon_state = "darkblue" }, -/area/station/hallway/primary/central) +/area/station/medical/storage/secondary) "jKE" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/storage) @@ -81136,6 +75711,25 @@ }, /turf/simulated/floor/engine/plasma, /area/station/engineering/atmos) +"jKY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "jLf" = ( /obj/structure/chair/sofa/left{ dir = 4; @@ -81185,6 +75779,16 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"jMD" = ( +/obj/machinery/computer/crew, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "jMN" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -81220,6 +75824,14 @@ icon_state = "brown" }, /area/station/supply/storage) +"jNp" = ( +/obj/machinery/atmospherics/portable/canister/air, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/medical/virology) "jNP" = ( /obj/machinery/door/window/reinforced/reversed{ dir = 4; @@ -81264,6 +75876,23 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port) +"jNX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/wall/r_wall, +/area/station/medical/virology) +"jNY" = ( +/obj/effect/turf_decal/woodsiding{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) +"jOL" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall, +/area/station/hallway/secondary/entry/lounge) "jOW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -81281,10 +75910,15 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "jPk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -81311,6 +75945,29 @@ }, /turf/simulated/floor/plating, /area/station/supply/sorting) +"jPY" = ( +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/table/tray, +/obj/item/storage/surgical_tray, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) +"jQv" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"jQA" = ( +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "jQN" = ( /obj/machinery/door/poddoor{ density = 0; @@ -81342,6 +75999,27 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/library) +"jRZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteyellowcorner" + }, +/area/station/medical/medbay) "jSg" = ( /obj/machinery/door/poddoor{ density = 0; @@ -81414,6 +76092,23 @@ icon_state = "yellowfull" }, /area/station/engineering/control) +"jTJ" = ( +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/table, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/fire, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/storage) "jUb" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -81431,32 +76126,6 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) -"jUx" = ( -/obj/machinery/economy/vending/wallmed{ - name = "Emergency NanoMed"; - pixel_x = -25 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/station/medical/virology) -"jUF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/medical, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "jUH" = ( /obj/structure/cable{ d1 = 1; @@ -81501,6 +76170,43 @@ icon_state = "darkredcorners" }, /area/station/security/permabrig) +"jVn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) +"jVv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/sw) "jVR" = ( /obj/structure/cable{ d2 = 8; @@ -81510,6 +76216,14 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/xenobiology) +"jVW" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "jWY" = ( /obj/docking_port/stationary{ dir = 8; @@ -81521,10 +76235,20 @@ }, /turf/space, /area/space) +"jXz" = ( +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/south) "jYi" = ( /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"jYK" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/machinery/atmospherics/unary/thermomachine/freezer{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "jZh" = ( /obj/machinery/door/poddoor{ density = 0; @@ -81563,24 +76287,6 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port) -"kan" = ( -/obj/machinery/door/airlock/external{ - id_tag = "assolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboardsolar) "kaO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, @@ -81614,29 +76320,48 @@ icon_state = "whitepurplecorner" }, /area/station/science/toxins/mixing) +"kce" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "kcj" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) +"kcs" = ( +/obj/machinery/economy/vending/medidrobe, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "kdg" = ( -/obj/machinery/door/airlock/external{ - id_tag = "escape_door_ext"; - locked = 1; - name = "Escape External Access" +/obj/structure/sign/vacuum{ + pixel_x = -32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "kdm" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/machinery/firealarm{ dir = 4; name = "east bump"; @@ -81659,7 +76384,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "kej" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -81682,6 +76407,11 @@ icon_state = "vault" }, /area/station/turret_protected/aisat) +"keo" = ( +/turf/simulated/floor/plasteel{ + icon_state = "bluecorner" + }, +/area/station/hallway/primary/central/nw) "kep" = ( /obj/structure/cable{ d1 = 1; @@ -81718,6 +76448,18 @@ icon_state = "darkred" }, /area/station/security/prison/cell_block) +"kfx" = ( +/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/dark, +/area/station/medical/morgue) "kfT" = ( /obj/structure/cable{ d2 = 4; @@ -81741,12 +76483,58 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/brig) +"kgl" = ( +/turf/simulated/wall, +/area/station/hallway/primary/central/north) +"kgC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "kgO" = ( /obj/structure/window/reinforced{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/station/science/toxins/mixing) +/turf/simulated/floor/plasteel, +/area/station/science/toxins/mixing) +"kho" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"khM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "khQ" = ( /obj/structure/cable{ d2 = 2; @@ -81766,17 +76554,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) -"khZ" = ( -/obj/machinery/access_button{ - autolink_id = "fssolar_btn_ext"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "10;13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/station/maintenance/auxsolarstarboard) "kii" = ( /obj/structure/rack, /obj/item/storage/box/rubbershot{ @@ -81806,17 +76583,16 @@ }, /turf/simulated/floor/plasteel, /area/station/security/armory/secure) -"kit" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/station/medical/break_room) -"kiK" = ( -/obj/structure/cable, -/obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "CMO" +"kiC" = ( +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 }, -/turf/simulated/floor/plating, -/area/station/command/office/cmo) +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "kiL" = ( /obj/machinery/computer/security{ dir = 8 @@ -81831,6 +76607,25 @@ icon_state = "darkred" }, /area/station/security/warden) +"kjm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random_spawners/grille_often, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "kju" = ( /obj/machinery/door/airlock{ name = "Bathroom" @@ -81846,6 +76641,24 @@ icon_state = "neutralfull" }, /area/station/public/fitness) +"kkz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "kkB" = ( /obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plasteel{ @@ -81865,7 +76678,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "kla" = ( @@ -81880,12 +76695,6 @@ }, /turf/simulated/floor/plasteel, /area/station/service/kitchen) -"klh" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/hallway/primary/central) "klj" = ( /obj/structure/cable{ d2 = 4; @@ -81901,6 +76710,18 @@ icon_state = "darkred" }, /area/station/security/prisonershuttle) +"klE" = ( +/obj/machinery/power/apc/directional/south, +/obj/structure/cable, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) +"klS" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "kmr" = ( /obj/machinery/door/airlock/security{ name = "Evidence Storage" @@ -81914,16 +76735,28 @@ icon_state = "dark" }, /area/station/security/evidence) -"knd" = ( +"kmE" = ( +/obj/machinery/atmospherics/trinary/filter{ + dir = 4; + filter_type = 1; + on = 1 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) +"kna" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ - d2 = 8; - icon_state = "0-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "knI" = ( -/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly, +/obj/item/food/snacks/donut/jelly/cherryjelly, /obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ dir = 9; @@ -81942,6 +76775,14 @@ }, /turf/space, /area/space) +"knY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "koC" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ @@ -81987,6 +76828,16 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) +"kpk" = ( +/obj/item/hemostat, +/obj/machinery/newscaster{ + dir = 1; + name = "south bump"; + pixel_y = -28 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "kpC" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/on, /turf/simulated/floor/bluegrid{ @@ -81995,11 +76846,37 @@ temperature = 80 }, /area/station/science/xenobiology) +"kqn" = ( +/obj/effect/landmark/start/coroner, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"kqx" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/sw) "kqL" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/checkpoint/secondary) +"kqX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "krN" = ( /obj/structure/cable{ d1 = 2; @@ -82048,6 +76925,17 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"kto" = ( +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/storage) +"kts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "ktB" = ( /obj/machinery/door/window/brigdoor{ dir = 1; @@ -82073,6 +76961,32 @@ icon_state = "darkredfull" }, /area/station/security/prison/cell_block) +"ktT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) +"kuI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "kuJ" = ( /obj/structure/cable{ d2 = 2; @@ -82101,6 +77015,20 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/explab) +"kxj" = ( +/obj/structure/mirror{ + pixel_y = 28 + }, +/obj/structure/closet/secure_closet/medical3, +/obj/effect/turf_decal/delivery/white/hollow, +/obj/machinery/camera{ + c_tag = "Medbay Storage Room"; + network = list("SS13","Medical") + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "kxq" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -82109,6 +77037,31 @@ icon_state = "grimy" }, /area/station/maintenance/starboard) +"kxH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "Morgue"; + sort_type_txt = "25" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "kxJ" = ( /obj/structure/cable{ d1 = 4; @@ -82127,6 +77080,12 @@ icon_state = "darkredfull" }, /area/station/security/prisonershuttle) +"kyr" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/storage) "kyK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -82136,33 +77095,64 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) -"kzA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Storage" +"kyN" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel{ - icon_state = "neutralfull" + dir = 8; + icon_state = "whiteblue" }, -/area/station/engineering/atmos) -"kAB" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/machinery/door/firedoor, -/obj/item/pen, -/obj/machinery/door/window/classic/normal{ - name = "Medbay Desk" +/area/station/medical/sleeper) +"kzd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/effect/landmark/start/doctor, +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, /turf/simulated/floor/plasteel/white, -/area/station/medical/reception) +/area/station/medical/sleeper) +"kAx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) +"kBB" = ( +/obj/machinery/power/apc/directional/east, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "kBZ" = ( /obj/structure/sign/explosives, /turf/simulated/wall/r_wall, @@ -82175,6 +77165,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -82183,7 +77174,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "kCA" = ( /obj/effect/turf_decal{ dir = 4 @@ -82224,23 +77215,41 @@ icon_state = "darkredfull" }, /area/station/security/processing) -"kDC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"kDF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"kDH" = ( +/obj/structure/curtain, +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"kEt" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" }, +/area/station/hallway/primary/aft/south) +"kEN" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" + icon_state = "neutralfull" }, -/area/station/medical/medbay) +/area/station/hallway/primary/central/north) "kEZ" = ( /obj/structure/cable{ d1 = 1; @@ -82258,6 +77267,42 @@ icon_state = "neutralcorner" }, /area/station/public/locker) +"kGv" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) +"kGA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/south) "kGF" = ( /obj/machinery/door/poddoor/shutters{ dir = 2; @@ -82299,6 +77344,37 @@ icon_state = "whitepurple" }, /area/station/science/misc_lab) +"kHj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) +"kHJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "kIs" = ( /obj/effect/turf_decal/stripes/line, /obj/item/radio/intercom{ @@ -82307,6 +77383,18 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) +"kID" = ( +/obj/machinery/disposal, +/obj/machinery/camera{ + c_tag = "Chief Medical Officer's Office"; + network = list("Medical","SS13") + }, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "kIF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -82324,6 +77412,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, /area/station/command/office/blueshield) +"kIG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/port/west) "kIP" = ( /turf/simulated/floor/wood{ icon_state = "wood-broken6" @@ -82336,6 +77438,35 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) +"kJJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) +"kKK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 1; + name = "Port to Turbine" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "kLd" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -82351,27 +77482,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) -"kLu" = ( -/obj/machinery/airlock_controller/access_controller{ - name = "Virology Lab Access Console"; - pixel_x = 6; - pixel_y = 24; - req_one_access_txt = "39"; - ext_door_link_id = "virolab_door_ext"; - int_door_link_id = "virolab_door_int"; - ext_button_link_id = "virolab_btn_ext"; - int_button_link_id = "virolab_btn_int" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, +/area/station/hallway/secondary/entry/east) +"kLU" = ( +/obj/structure/girder, /turf/simulated/floor/plasteel{ - icon_state = "whitegreenfull" + icon_state = "neutral" }, -/area/station/medical/virology) +/area/station/maintenance/starboard) "kMx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -82389,7 +77506,7 @@ /area/station/science/toxins/mixing) "kME" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) "kNa" = ( @@ -82403,13 +77520,25 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"kNo" = ( +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "kNC" = ( /obj/structure/chair/office/light{ dir = 8 }, /turf/simulated/floor/engine, /area/station/science/misc_lab) +"kOj" = ( +/obj/machinery/economy/vending/medical, +/obj/effect/turf_decal/woodsiding{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "kOs" = ( /obj/machinery/atmospherics/portable/canister/sleeping_agent, /turf/simulated/floor/plasteel, @@ -82428,6 +77557,28 @@ icon_state = "red" }, /area/station/security/permabrig) +"kPl" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "kPt" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light{ @@ -82440,10 +77591,59 @@ /obj/machinery/atmospherics/portable/canister/carbon_dioxide, /turf/simulated/floor/plasteel, /area/station/science/storage) +"kPL" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) "kQt" = ( /obj/machinery/chem_master, /turf/simulated/floor/engine, /area/station/science/misc_lab) +"kQG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) +"kQO" = ( +/obj/machinery/atmospherics/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) +"kRp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/south) "kSr" = ( /obj/structure/cable{ d1 = 1; @@ -82466,6 +77666,17 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/security/detective) +"kSO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/economy/vending/medical, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "kSX" = ( /obj/structure/closet/crate, /obj/item/flashlight, @@ -82474,6 +77685,15 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) +"kTc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "kTw" = ( /obj/machinery/fishtank/tank, /turf/simulated/floor/plating, @@ -82513,14 +77733,21 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) -"kVM" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/delivery/hollow, +"kTY" = ( +/obj/machinery/airlock_controller/access_controller{ + name = "Virology Lab Access Console"; + pixel_x = -24; + req_one_access_txt = "39"; + ext_door_link_id = "virolab_door_ext"; + int_door_link_id = "virolab_door_int"; + ext_button_link_id = "virolab_btn_ext"; + int_button_link_id = "virolab_btn_int" + }, /turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" + dir = 9; + icon_state = "whitegreen" }, -/area/station/medical/surgery/secondary) +/area/station/medical/virology) "kWF" = ( /obj/machinery/light, /turf/simulated/floor/engine, @@ -82536,7 +77763,22 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) +"kWK" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) +"kWL" = ( +/obj/machinery/computer/med_data, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "kWO" = ( /obj/structure/railing/corner{ dir = 4 @@ -82570,6 +77812,12 @@ icon_state = "neutralfull" }, /area/station/engineering/break_room) +"kWZ" = ( +/obj/structure/railing/corner, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/reception) "kXj" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, @@ -82580,6 +77828,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"kXH" = ( +/obj/machinery/chem_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/status_display{ + layer = 4; + pixel_x = -32 + }, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "kXM" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -82588,6 +77847,13 @@ }, /turf/simulated/floor/plating, /area/station/medical/reception) +"kXO" = ( +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "kYe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -82598,6 +77864,15 @@ icon_state = "darkred" }, /area/station/security/warden) +"kYE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "kYS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -82618,6 +77893,16 @@ /obj/effect/spawner/random_spawners/dirt_maybe, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"lad" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/doctor, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "lah" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -82651,7 +77936,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "lbm" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, @@ -82707,13 +77992,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) -"lcJ" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central/south) "lcV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -82734,24 +78012,39 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, /area/station/public/storage/art) -"ldx" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +"ldp" = ( +/obj/machinery/iv_drip, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) +/area/station/medical/surgery/secondary) +"leb" = ( +/obj/machinery/door/window/classic/reversed{ + name = "Do Not Revive"; + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue{ + dir = 1 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "lee" = ( -/obj/structure/table/glass, -/obj/item/grown/sunflower{ - pixel_x = -2; - pixel_y = 2 +/obj/structure/chair/comfy/teal{ + dir = 4 }, /turf/simulated/floor/plasteel/white, /area/station/medical/reception) +"leo" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "les" = ( /obj/structure/rack, /obj/item/assembly/igniter{ @@ -82778,6 +78071,16 @@ icon_state = "whitepurple" }, /area/station/science/misc_lab) +"leI" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/obj/effect/landmark/start/doctor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "lfd" = ( /obj/machinery/economy/slot_machine, /turf/simulated/floor/wood{ @@ -82788,16 +78091,34 @@ "lfg" = ( /turf/simulated/wall, /area/station/public/pet_store) +"lfU" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1; + name = "Mix to Ports" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) +"lfZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "lhu" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/public/storage/art) "lim" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -82811,13 +78132,64 @@ /turf/simulated/floor/engine, /area/station/science/test_chamber) "liC" = ( -/obj/machinery/light, -/obj/machinery/economy/vending/snack, -/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id_tag = "paramedic"; + name = "Paramedic Garage" + }, +/obj/machinery/door_control{ + id = "paramedic"; + name = "Garage Door Control"; + req_access_txt = "66"; + pixel_x = -24 + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/medical/paramedic) +"liE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"lkb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"lky" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/storage/secondary) "llf" = ( /obj/structure/cable{ d2 = 8; @@ -82833,6 +78205,19 @@ icon_state = "neutral" }, /area/station/maintenance/fsmaint) +"llD" = ( +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "llR" = ( /obj/machinery/light/small{ dir = 1 @@ -82840,6 +78225,20 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"llV" = ( +/obj/item/kirbyplants{ + icon_state = "plant-22" + }, +/obj/structure/sign/nosmoking_1{ + pixel_x = -30 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"lmQ" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/east) "lnl" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -82855,7 +78254,21 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) +"lnN" = ( +/obj/effect/turf_decal/woodsiding{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "lnQ" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 @@ -82884,12 +78297,6 @@ /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, /area/station/maintenance/fsmaint) -"los" = ( -/obj/item/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/reception) "loX" = ( /obj/structure/closet/secure_closet/security, /obj/item/radio/intercom{ @@ -82901,23 +78308,6 @@ icon_state = "darkred" }, /area/station/security/storage) -"lpg" = ( -/obj/structure/table/glass, -/obj/machinery/economy/vending/wallmed{ - layer = 3.3; - name = "Emergency NanoMed"; - pixel_y = -32 - }, -/obj/machinery/photocopier/faxmachine{ - department = "Chief Medical Officer's Office" - }, -/obj/machinery/newscaster{ - dir = 4; - name = "west bump"; - pixel_x = -28 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) "lpm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -82929,6 +78319,26 @@ }, /turf/simulated/floor/engine, /area/station/science/explab/chamber) +"lpo" = ( +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, +/obj/structure/table, +/obj/item/storage/firstaid/adv{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/storage/firstaid/adv, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/storage) +"lpI" = ( +/obj/structure/sign/greencross, +/turf/simulated/wall, +/area/station/medical/paramedic) "lpL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -82936,10 +78346,33 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) +"lpX" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "lqK" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light_switch{ @@ -82948,6 +78381,26 @@ }, /turf/simulated/floor/wood, /area/station/public/pet_store) +"lqL" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/observation) +"lrh" = ( +/obj/machinery/optable, +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 28 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "lrl" = ( /obj/structure/cable{ d1 = 2; @@ -82967,6 +78420,15 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"lrT" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "lsb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -82983,14 +78445,6 @@ icon_state = "neutralfull" }, /area/station/public/fitness) -"lsu" = ( -/obj/structure/window/reinforced{ - dir = 8; - pixel_x = -4 - }, -/obj/machinery/photocopier, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) "ltb" = ( /obj/machinery/atmospherics/binary/valve{ dir = 1; @@ -83008,6 +78462,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/dark, /area/station/legal/courtroom) +"lth" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "ltw" = ( /obj/machinery/light{ dir = 4 @@ -83016,7 +78479,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "ltX" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -83104,6 +78567,27 @@ icon_state = "dark" }, /area/station/aisat) +"lvO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "lvV" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, @@ -83116,6 +78600,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) +"lwo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "lwr" = ( /obj/machinery/atmospherics/portable/canister, /obj/machinery/atmospherics/unary/portables_connector{ @@ -83137,6 +78630,24 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"lwY" = ( +/obj/structure/table/glass, +/obj/item/clothing/accessory/stethoscope{ + pixel_y = 6 + }, +/obj/item/clothing/accessory/stethoscope{ + pixel_y = 3 + }, +/obj/item/clothing/accessory/stethoscope, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "lxc" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -83166,6 +78677,15 @@ /obj/machinery/economy/vending/hydrodrobe, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) +"lxK" = ( +/obj/machinery/camera{ + c_tag = "Primary Dorm Hallway - South" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "lxX" = ( /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -83180,7 +78700,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "lyj" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -83189,19 +78709,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) -"lyl" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) "lyp" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/classic/normal{ @@ -83235,32 +78742,6 @@ icon_state = "whitepurple" }, /area/station/science/break_room) -"lzD" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/classic/normal{ - name = "Monkey Pen"; - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ - dir = 8 - }, -/turf/simulated/floor/grass, -/area/station/science/genetics) -"lzO" = ( -/obj/structure/table/glass, -/obj/item/flashlight/lamp, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkgreen" - }, -/area/station/medical/virology) "lzY" = ( /obj/structure/table/wood, /obj/machinery/alarm{ @@ -83321,9 +78802,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) +"lBx" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "lBR" = ( /turf/simulated/wall, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "lCu" = ( /obj/structure/table/reinforced, /obj/machinery/newscaster{ @@ -83333,6 +78823,45 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) +"lDF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "Genetics"; + sort_type_txt = "23" + }, +/obj/effect/landmark/lightsout, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"lDO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) +"lEa" = ( +/obj/machinery/smartfridge/secure/medbay, +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) "lEr" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -83368,6 +78897,43 @@ icon_state = "dark" }, /area/station/security/main) +"lFG" = ( +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Medbay Requests Console"; + pixel_x = 30 + }, +/obj/structure/table, +/obj/item/storage/firstaid/toxin{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/toxin, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/storage) +"lGs" = ( +/turf/simulated/wall/r_wall, +/area/station/medical/storage/secondary) +"lGx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"lHs" = ( +/obj/effect/turf_decal/woodsiding{ + dir = 5 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "lHK" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -83404,7 +78970,7 @@ /turf/simulated/floor/plasteel, /area/station/security/prison/cell_block) "lIv" = ( -/obj/machinery/suit_storage_unit/clown, +/obj/machinery/suit_storage_unit/clown/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) @@ -83424,6 +78990,18 @@ icon_state = "darkblue" }, /area/station/ai_monitored/storage/eva) +"lJc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "lJo" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -83465,6 +79043,28 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"lKV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "lLU" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -83484,7 +79084,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "lMM" = ( /obj/effect/spawner/random_barrier/wall_probably, /turf/simulated/floor/plating, @@ -83564,11 +79164,12 @@ }, /turf/simulated/floor/plasteel, /area/station/public/storage/art) -"lPv" = ( -/obj/structure/cable, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) +"lPJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "lPV" = ( /obj/machinery/door/airlock/external{ id_tag = "enginen_door_int"; @@ -83585,6 +79186,29 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"lQl" = ( +/obj/effect/spawner/random_spawners/grille_maybe, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) +"lQs" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "lQA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall9f"; @@ -83672,6 +79296,16 @@ "lTi" = ( /turf/simulated/floor/wood, /area/station/maintenance/abandonedbar) +"lTy" = ( +/obj/machinery/newscaster{ + dir = 4; + name = "west bump"; + pixel_x = -28 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "lTY" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/barricade/wooden, @@ -83679,6 +79313,32 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/maintenance/library) +"lUd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/reception) +"lUg" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "lUv" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance_hatch{ @@ -83696,6 +79356,22 @@ icon_state = "vault" }, /area/station/turret_protected/aisat) +"lVA" = ( +/obj/machinery/computer/operating, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/primary) +"lVJ" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "lWs" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -83712,18 +79388,69 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) -"lXe" = ( +"lXi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Paramedic Office" +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" }, -/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/area/station/hallway/primary/central/south) +"lXn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/plasteel, -/area/station/medical/paramedic) +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"lXB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) +"lYp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Medbay Hall"; + sort_type_txt = "9" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"lYX" = ( +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen/multi, +/obj/item/flashlight/lamp/green{ + pixel_x = -7 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/table/glass/reinforced/plasma, +/turf/simulated/floor/carpet/purple, +/area/station/medical/psych) "lZw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -83745,6 +79472,23 @@ icon_state = "dark" }, /area/station/security/main) +"mbh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "mbO" = ( /obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel/dark, @@ -83783,6 +79527,17 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/misc_lab) +"mcY" = ( +/obj/machinery/disposal, +/obj/machinery/camera{ + c_tag = "Medbay Break Room"; + network = list("SS13","Medical") + }, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "mdd" = ( /obj/structure/table/wood, /obj/item/toy/russian_revolver, @@ -83843,7 +79598,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "meU" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -83852,15 +79607,6 @@ icon_state = "dark" }, /area/station/security/processing) -"mfl" = ( -/obj/machinery/atmospherics/unary/thermomachine/freezer{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) "mft" = ( /obj/machinery/door/poddoor{ density = 0; @@ -83900,6 +79646,21 @@ icon_state = "dark" }, /area/station/security/storage) +"mfK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "mga" = ( /obj/effect/landmark/start/shaft_miner, /obj/structure/disposalpipe/segment{ @@ -83908,9 +79669,67 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) +"mgM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/starboard/west) +"mhf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) "mhu" = ( /turf/simulated/wall/r_wall, /area/station/security/permasolitary) +"mhx" = ( +/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/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/north, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) +"mhG" = ( +/obj/structure/rack, +/obj/item/screwdriver, +/obj/item/storage/box/bodybags, +/turf/simulated/floor/plating, +/area/station/medical/coldroom) "mhU" = ( /obj/item/radio/intercom{ name = "east bump"; @@ -83939,12 +79758,15 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) -"mko" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +"mja" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell, /turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" + dir = 1; + icon_state = "whiteblue" }, -/area/station/medical/surgery/primary) +/area/station/medical/reception) "mkp" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -83971,25 +79793,22 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "mkS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/table, +/obj/item/taperecorder, +/obj/item/storage/box/gloves{ + pixel_y = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/maintenance{ - name = "Morgue Maintenance" +/obj/machinery/status_display{ + layer = 4; + pixel_y = -32 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/machinery/light/small, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" }, -/turf/simulated/floor/plasteel/dark, /area/station/medical/morgue) "mkY" = ( /obj/machinery/light{ @@ -84003,6 +79822,11 @@ }, /turf/simulated/floor/plasteel, /area/station/security/armory/secure) +"mli" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "mlS" = ( /obj/machinery/light/small{ dir = 4 @@ -84038,11 +79862,7 @@ /area/station/security/main) "mmx" = ( /obj/structure/closet/secure_closet/security, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -84063,17 +79883,8 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - req_access_txt = "63"; - vent_link_id = "perma_vent"; - ext_door_link_id = "perma_door_ext"; - int_door_link_id = "perma_door_int"; - ext_button_link_id = "perma_btn_ext"; - int_button_link_id = "perma_btn_int" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "perma_vent" +/obj/structure/sign/securearea{ + pixel_x = 32 }, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) @@ -84118,6 +79929,13 @@ icon_state = "whitepurple" }, /area/station/science/research) +"moo" = ( +/obj/structure/chair/wheelchair, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "moy" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -84136,6 +79954,9 @@ /obj/machinery/atmospherics/unary/portables_connector, /turf/simulated/floor/plasteel/white, /area/station/science/toxins/mixing) +"mpZ" = ( +/turf/simulated/floor/carpet/purple, +/area/station/medical/psych) "mqP" = ( /obj/machinery/door/airlock/engineering{ name = "Fore Starboard Solar Access" @@ -84154,15 +79975,27 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "mqS" = ( /obj/item/radio/intercom{ name = "north bump"; pixel_y = 28 }, -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /turf/simulated/floor/plasteel, /area/station/security/armory/secure) +"mrs" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "mrW" = ( /obj/machinery/newscaster{ dir = 1; @@ -84175,7 +80008,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "msl" = ( /obj/item/radio/beacon, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -84232,6 +80065,19 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) +"mtg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/reception) "mtx" = ( /obj/item/radio/beacon, /turf/simulated/floor/plasteel/airless, @@ -84268,20 +80114,23 @@ /obj/structure/railing, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"muK" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) "mvr" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/engineering/break_room) +"mwc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/doctor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) "mwK" = ( /obj/machinery/status_display{ pixel_x = -32 @@ -84310,6 +80159,15 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) +"mxM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "myf" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -84322,6 +80180,17 @@ }, /turf/simulated/floor/plating, /area/station/command/office/hos) +"myx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/station/medical/coldroom) "myN" = ( /obj/structure/bed, /obj/item/bedsheet/hos, @@ -84335,23 +80204,6 @@ /obj/effect/landmark/start/head_of_security, /turf/simulated/floor/carpet/red, /area/station/command/office/hos) -"myR" = ( -/obj/machinery/smartfridge/medbay, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "chemdesk1"; - name = "Chemistry Desk Shutters" - }, -/obj/machinery/door/window/classic/reversed{ - name = "Chemistry Desk" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) "mzs" = ( /obj/structure/cable{ d1 = 1; @@ -84363,7 +80215,57 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) +"mzz" = ( +/obj/structure/table/glass, +/obj/item/storage/box/autoinjectors{ + pixel_y = 4 + }, +/obj/item/roller, +/obj/item/storage/box/masks{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/item/flashlight/pen{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24; + pixel_y = -8 + }, +/obj/machinery/door_control{ + desc = "A remote control switch for the medbay foyer."; + id = "medbayfoyer"; + name = "Medbay Doors Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 7 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/reception) +"mzT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) +"mzW" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/cobweb, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "mzZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -84396,6 +80298,18 @@ icon_state = "darkredcorners" }, /area/station/security/permasolitary) +"mAC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "mAH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -84436,6 +80350,26 @@ }, /turf/simulated/floor/plating, /area/station/engineering/smes) +"mBy" = ( +/obj/structure/bed, +/obj/item/bedsheet/green, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 28 + }, +/obj/machinery/camera{ + c_tag = "Virology Bedroom North"; + network = list("SS13","Medical","Bedroom"); + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkgreen" + }, +/area/station/medical/virology) "mBN" = ( /obj/machinery/door/poddoor{ density = 0; @@ -84512,7 +80446,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "mFK" = ( /obj/machinery/light, /obj/machinery/economy/vending/bardrobe, @@ -84527,21 +80461,6 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/science/toxins/launch) -"mHm" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Staff Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/station/medical/break_room) "mHK" = ( /obj/effect/spawner/random_barrier/possibly_welded_airlock, /obj/structure/barricade/wooden, @@ -84554,31 +80473,35 @@ /turf/simulated/floor/engine/n2, /area/station/engineering/atmos) "mJw" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/area/station/medical/virology) +"mJY" = ( +/obj/structure/table/glass, +/obj/item/soap/nanotrasen, +/obj/item/roller, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) +/area/station/medical/virology) "mKm" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/supply/storage) +"mKx" = ( +/obj/machinery/computer/card/minor/cmo{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "mKM" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/delivery/hollow, @@ -84588,6 +80511,10 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) +"mKR" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/medical/chemistry) "mKU" = ( /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, @@ -84628,19 +80555,6 @@ icon_state = "darkredfull" }, /area/station/security/warden) -"mLt" = ( -/obj/machinery/door/airlock/medical{ - id_tag = "psychfoyer"; - name = "Psych Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/wood, -/area/station/hallway/primary/central) "mMb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -84652,6 +80566,10 @@ /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"mMp" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "mNc" = ( /obj/structure/cable{ d1 = 1; @@ -84714,7 +80632,15 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) +"mNM" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/south) "mNS" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/polarized/grilled{ @@ -84735,11 +80661,16 @@ name = "west bump"; pixel_x = -30 }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "mOW" = ( /obj/structure/table/reinforced, /obj/item/storage/box/syringes, @@ -84762,6 +80693,15 @@ }, /turf/simulated/floor/plating, /area/station/supply/qm) +"mPF" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/obj/structure/sign/nosmoking_2{ + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "mPQ" = ( /obj/effect/turf_decal/delivery, /obj/structure/plasticflaps{ @@ -84790,19 +80730,44 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) +"mPU" = ( +/obj/effect/spawner/airlock/s_to_n{ + req_access_txt = 32 + }, +/turf/simulated/wall, +/area/station/engineering/gravitygenerator) +"mQc" = ( +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/east) "mQk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/dark, /area/station/legal/courtroom) +"mQm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "mRb" = ( /obj/machinery/airlock_controller/access_controller{ name = "Turbine Access Console"; @@ -84884,7 +80849,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "mSF" = ( /obj/effect/turf_decal{ dir = 1 @@ -85008,6 +80973,27 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/bridge) +"mTz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/starboard/south) "mTZ" = ( /obj/machinery/door/window{ name = "Desk Door" @@ -85018,6 +81004,39 @@ }, /turf/simulated/floor/wood, /area/station/command/office/ntrep) +"mUz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) +"mUB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "mUF" = ( /obj/machinery/light, /obj/item/radio/intercom{ @@ -85043,42 +81062,46 @@ icon_state = "darkredcorners" }, /area/station/security/permabrig) +"mUR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "mUZ" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, /obj/effect/spawner/window/reinforced/plasma/grilled, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/station/science/toxins/mixing) -"mVA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" +"mVd" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sunnybush, +/obj/machinery/light{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, +/turf/simulated/floor/grass, /area/station/medical/medbay) +"mVE" = ( +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "mVF" = ( -/obj/machinery/access_button{ - autolink_id = "apsolar_btn_ext"; - name = "exterior access button"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "13" +/obj/effect/spawner/airlock/s_to_n{ + req_access_txt = 1 }, -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/turf/simulated/wall/r_wall, +/area/station/security/permasolitary) +"mWe" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, -/turf/space, -/area/station/maintenance/portsolar) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "mWz" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -85093,7 +81116,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "mWO" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance/three, @@ -85146,6 +81169,9 @@ icon_state = "vault" }, /area/station/command/bridge) +"mXA" = ( +/turf/simulated/wall, +/area/station/medical/sleeper) "mXZ" = ( /obj/machinery/camera{ c_tag = "Brig - Hallway North-East"; @@ -85177,7 +81203,7 @@ inlet_injector_autolink_id = "tox_in"; name = "Toxin Supply Control"; outlet_vent_autolink_id = "tox_out"; - autolink_sensors = list("tox_sensor"="Tank") + autolink_sensors = list("tox_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /turf/simulated/floor/plasteel{ @@ -85185,13 +81211,38 @@ icon_state = "purple" }, /area/station/engineering/atmos) -"mZY" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +"mZL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel/white, -/area/station/medical/cloning) +/area/station/medical/medbay) +"nae" = ( +/obj/machinery/atmospherics/binary/volume_pump/on{ + dir = 4; + name = "Port to Filter" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "naA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -85220,14 +81271,14 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "naN" = ( /obj/machinery/economy/vending/snack, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "nbE" = ( /obj/machinery/hydroponics/constructable, /obj/item/seeds/ambrosia, @@ -85246,25 +81297,37 @@ }, /turf/simulated/floor/grass, /area/station/science/research) -"ncT" = ( -/obj/structure/chair/sofa/corp, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +"ncB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, -/area/station/medical/reception) +/area/station/medical/virology) "ncZ" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkredcorners" }, /area/station/security/brig) +"ndb" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) +"neb" = ( +/obj/effect/turf_decal/delivery/hollow, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "bluecorner" + }, +/area/station/hallway/secondary/entry/lounge) "nem" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel/dark, @@ -85273,10 +81336,15 @@ /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "nff" = ( /obj/structure/cable{ d2 = 8; @@ -85285,13 +81353,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/research) -"nfo" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) "nfy" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel/dark, @@ -85358,16 +81419,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) -"ngL" = ( -/obj/machinery/ai_status_display{ - pixel_x = -32 - }, -/obj/machinery/door/window/classic/reversed{ - dir = 4; - name = "Glass Door" - }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/cloning) "ngZ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -85401,6 +81452,23 @@ icon_state = "neutralfull" }, /area/station/engineering/break_room) +"nhv" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"nhy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "nhT" = ( /obj/machinery/alarm{ dir = 4; @@ -85471,7 +81539,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) +"njq" = ( +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" + }, +/area/station/medical/medbay) "njE" = ( /obj/machinery/light{ dir = 1 @@ -85485,6 +81559,17 @@ icon_state = "barber" }, /area/station/security/permabrig) +"njF" = ( +/obj/structure/chair/sofa/left{ + color = "#6ae226"; + dir = 8 + }, +/obj/effect/landmark/start/virologist, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "njQ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -85496,6 +81581,27 @@ icon_state = "dark" }, /area/station/command/office/hos) +"njU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "bluecorner" + }, +/area/station/hallway/primary/central/south) "njX" = ( /obj/machinery/door/airlock{ name = "Court" @@ -85506,6 +81612,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/legal/courtroom) +"nkC" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "nli" = ( /obj/structure/sign/poster/official/cleanliness{ pixel_y = 32 @@ -85514,24 +81629,20 @@ /turf/simulated/wall, /area/station/security/permabrig) "nlo" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Paramedic's maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, -/obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) +"nlq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 9 }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) +/turf/simulated/wall/r_wall, +/area/station/medical/virology) "nlA" = ( /obj/machinery/door/airlock/command{ id_tag = "captainofficedoor" @@ -85574,6 +81685,12 @@ }, /turf/simulated/floor/plasteel, /area/station/public/vacant_office) +"nmt" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "nmw" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -85619,14 +81736,19 @@ /turf/simulated/floor/carpet, /area/station/maintenance/starboard) "nnP" = ( -/obj/structure/table/reinforced, /obj/machinery/door/window, /obj/effect/mapping_helpers/airlock/windoor/autoname, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, -/obj/item/reagent_containers/food/drinks/britcup, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/drinks/britcup, +/obj/item/reagent_containers/condiment/saltshaker, /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenbar"; + name = "Kitchen Shutters"; + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -85657,16 +81779,6 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"noB" = ( -/obj/machinery/access_button{ - autolink_id = "perma_btn_ext"; - name = "exterior access button"; - pixel_x = 20; - pixel_y = -20; - req_access_txt = "67" - }, -/turf/space, -/area/space) "noW" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel/white, @@ -85699,6 +81811,12 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"npn" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "red" + }, +/area/station/hallway/primary/fore/south) "npp" = ( /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -85723,6 +81841,11 @@ }, /turf/simulated/wall/r_wall, /area/station/engineering/engine/supermatter) +"npJ" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/north) "npQ" = ( /obj/structure/cable{ d1 = 4; @@ -85739,6 +81862,22 @@ icon_state = "neutral" }, /area/station/maintenance/fore) +"npV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) +"npW" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/observation) "nqn" = ( /obj/structure/table/reinforced, /obj/item/folder/white, @@ -85750,9 +81889,6 @@ /obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ dir = 4 }, @@ -85784,6 +81920,36 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) +"nqK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) +"nrj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/valve/digital, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) +"nsl" = ( +/obj/machinery/clonepod/biomass, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"nso" = ( +/obj/structure/sink/puddle, +/turf/simulated/floor/grass, +/area/station/medical/medbay) "nsD" = ( /obj/structure/cable{ d1 = 1; @@ -85798,15 +81964,37 @@ /turf/simulated/floor/plating, /area/station/service/expedition) "ntt" = ( -/obj/machinery/light_switch{ - dir = 1; - name = "south bump"; - pixel_y = -24 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12 }, /turf/simulated/floor/plasteel{ - icon_state = "darkblue" + dir = 8; + icon_state = "whiteblue" }, -/area/station/medical/surgery/observation) +/area/station/medical/surgery/secondary) +"ntG" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plating, +/area/station/medical/coldroom) +"ntZ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "nui" = ( /obj/machinery/light/small{ dir = 8 @@ -85829,16 +82017,6 @@ icon_state = "caution" }, /area/station/public/fitness) -"nuu" = ( -/obj/machinery/light_switch{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "nuO" = ( /obj/structure/sign/vacuum/external, /turf/simulated/wall, @@ -85877,6 +82055,11 @@ /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/wood, /area/station/maintenance/library) +"nvr" = ( +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "nwK" = ( /obj/machinery/light, /obj/structure/cable{ @@ -85890,7 +82073,7 @@ name = "south bump"; pixel_y = -24 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "nxX" = ( /obj/structure/table/reinforced, @@ -85958,7 +82141,16 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) +"nBa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/paramedic) "nBh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/arrows/black, @@ -85989,28 +82181,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) -"nBz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Cloning" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/cloning) "nBO" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -86030,7 +82200,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "nBP" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/light_switch{ @@ -86078,6 +82248,12 @@ /obj/item/storage/fancy/candle_box/full, /turf/simulated/floor/plating, /area/station/maintenance/theatre) +"nCA" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/paramedic) "nCY" = ( /obj/structure/closet/firecloset/full, /turf/simulated/floor/plasteel{ @@ -86096,7 +82272,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "nDM" = ( /obj/structure/table, /obj/item/folder/red, @@ -86114,6 +82290,13 @@ icon_state = "darkredcorners" }, /area/station/security/prisonershuttle) +"nEb" = ( +/obj/structure/closet/secure_closet/CMO, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "nEk" = ( /obj/machinery/door/airlock/research{ name = "Research Division Access" @@ -86131,6 +82314,14 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/science/research) +"nEp" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/north) "nEq" = ( /obj/machinery/door/airlock/hatch{ name = "MiniSat Transit Tube" @@ -86144,6 +82335,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/dark, /area/station/engineering/ai_transit_tube) +"nEw" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "nEx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass, @@ -86159,6 +82355,15 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"nEy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "nER" = ( /obj/structure/cable, /obj/machinery/door/poddoor{ @@ -86171,6 +82376,23 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"nEX" = ( +/obj/structure/rack, +/obj/item/tank/internals/emergency_oxygen/nitrogen{ + pixel_x = -4 + }, +/obj/item/tank/internals/emergency_oxygen/nitrogen, +/obj/item/clothing/mask/breath/vox, +/obj/item/tank/internals/emergency_oxygen/plasma{ + pixel_x = 5 + }, +/obj/item/tank/internals/emergency_oxygen/plasma{ + pixel_x = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluecorners" + }, +/area/station/medical/storage/secondary) "nFh" = ( /obj/structure/cable{ d2 = 8; @@ -86212,25 +82434,16 @@ icon_state = "darkblue" }, /area/station/ai_monitored/storage/eva) -"nGL" = ( -/obj/machinery/bodyscanner{ - dir = 4 +"nGk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) -"nHh" = ( -/obj/structure/reagent_dispensers/fueltank/chem{ - pixel_x = 32 - }, -/obj/machinery/economy/vending/chemdrobe, -/obj/effect/turf_decal/stripes/line{ - dir = 9 + icon_state = "neutralfull" }, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) +/area/station/hallway/primary/central/north) "nHs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -86275,6 +82488,16 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) +"nIC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Internal Virologist Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/turf/simulated/floor/plating, +/area/station/medical/virology) "nIH" = ( /obj/structure/window/reinforced, /turf/simulated/floor/beach/water{ @@ -86282,10 +82505,10 @@ }, /area/station/public/fitness) "nJz" = ( -/obj/machinery/economy/vending/genedrobe, +/obj/machinery/computer/scan_consolenew, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurplecorner" + icon_state = "whitepurple" }, /area/station/science/genetics) "nJE" = ( @@ -86312,7 +82535,12 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) +"nLs" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/ne) "nLL" = ( /obj/machinery/light{ dir = 1 @@ -86335,6 +82563,26 @@ }, /turf/simulated/floor/plating, /area/station/command/office/hop) +"nMf" = ( +/obj/structure/table, +/obj/item/hand_labeler{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen/multi, +/obj/machinery/requests_console{ + department = "Morgue"; + departmentType = 5; + name = "Morgue Requests Console"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/medical/morgue) "nMR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -86385,16 +82633,29 @@ }, /turf/simulated/floor/wood, /area/station/maintenance/library) -"nOu" = ( -/obj/machinery/light_switch{ - name = "north bump"; - pixel_y = 24 +"nOp" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" +/obj/item/paper_bin, +/obj/item/desk_bell{ + pixel_x = -7; + pixel_y = 7; + anchored = 1 }, -/area/station/medical/medbay) +/obj/machinery/door/window/classic/reversed{ + name = "Medical Reception"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 4 + }, +/obj/item/pen, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "nOO" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -86434,10 +82695,30 @@ icon_state = "neutralfull" }, /area/station/supply/storage) -"nRf" = ( -/obj/machinery/optable, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/primary) +"nRk" = ( +/obj/effect/spawner/window/reinforced/polarized/grilled{ + id = "CMO" + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/station/command/office/cmo) +"nRv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "nRE" = ( /obj/machinery/door/poddoor{ density = 0; @@ -86464,7 +82745,7 @@ /obj/machinery/economy/vending/cola, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "nTR" = ( /obj/machinery/camera{ c_tag = "Central Ring Hallway West"; @@ -86476,7 +82757,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "nUp" = ( /obj/structure/cable{ d1 = 2; @@ -86503,6 +82784,13 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/command/office/ce) +"nVI" = ( +/obj/structure/cable, +/obj/machinery/power/apc/directional/south, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "nWi" = ( /obj/machinery/door/poddoor{ density = 0; @@ -86552,18 +82840,21 @@ name = "reinforced stairs" }, /area/station/science/test_chamber) -"nXF" = ( -/obj/machinery/door/airlock/external{ - id_tag = "arrivalsn_door_ext" +"nYi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/machinery/access_button{ - autolink_id = "arrivalsn_btn_ext"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "nYm" = ( /obj/structure/sign/radiation/rad_area{ pixel_x = -32 @@ -86584,7 +82875,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -86609,6 +82900,14 @@ icon_state = "darkred" }, /area/station/security/brig) +"nYW" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/east) "nZf" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -86645,6 +82944,20 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) +"nZk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "oar" = ( /obj/machinery/requests_console{ department = "Security"; @@ -86727,19 +83040,30 @@ }, /turf/simulated/floor/plating, /area/station/security/storage) -"odG" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +"ocR" = ( +/obj/structure/table/glass, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/obj/item/reagent_containers/iv_bag/salglu, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue" }, +/area/station/medical/surgery/secondary) +"odG" = ( +/obj/effect/turf_decal/stripes/corner, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/effect/turf_decal/stripes/corner, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "odQ" = ( /obj/effect/spawner/window/reinforced/plasma/grilled, @@ -86795,17 +83119,9 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) -"ofA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) +"ofu" = ( +/turf/simulated/wall, +/area/station/hallway/primary/central/west) "ofZ" = ( /obj/machinery/camera{ c_tag = "Perma-Brig General Population West"; @@ -86857,6 +83173,15 @@ icon_state = "dark" }, /area/station/security/main) +"ohu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) "oix" = ( /obj/structure/cable{ d1 = 1; @@ -86876,6 +83201,12 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) +"oiF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "ojf" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -86885,6 +83216,13 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"ojv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellowcorner" + }, +/area/station/hallway/primary/port/east) "ojw" = ( /obj/structure/filingcabinet, /turf/simulated/floor/plating, @@ -86939,21 +83277,6 @@ icon_state = "freezerfloor" }, /area/station/public/sleep) -"olz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/supply/storage) "olR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining, @@ -86976,14 +83299,14 @@ inlet_injector_autolink_id = "waste_in"; name = "Gas Mix Tank Control"; outlet_vent_autolink_id = "waste_out"; - autolink_sensors = list("waste_sensor"="Tank") + autolink_sensors = list("waste_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "green" }, -/area/station/engineering/atmos) +/area/station/engineering/atmos/distribution) "omg" = ( /obj/machinery/door/poddoor{ density = 0; @@ -87019,6 +83342,12 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"omT" = ( +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteblue" + }, +/area/station/medical/paramedic) "omU" = ( /obj/structure/cable{ d1 = 1; @@ -87082,6 +83411,35 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) +"onG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/south) +"oop" = ( +/obj/effect/spawner/window/reinforced/polarized{ + id = "psychoffice" + }, +/turf/simulated/floor/plating, +/area/station/medical/psych) +"ooq" = ( +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "oox" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -87136,23 +83494,23 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) -"oqj" = ( -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medical Supplies" +"opY" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"oqo" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) "oqz" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -87189,6 +83547,18 @@ }, /turf/simulated/floor/plasteel, /area/station/public/storage/art) +"orw" = ( +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 28 + }, +/obj/structure/table/tray, +/obj/item/storage/surgical_tray, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "orz" = ( /obj/structure/window/reinforced{ dir = 1; @@ -87200,6 +83570,13 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"orG" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/lounge) "orY" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/command/glass{ @@ -87242,6 +83619,13 @@ /obj/effect/spawner/random_spawners/grille_maybe, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"osF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) "osM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -87255,7 +83639,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "osS" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -87294,7 +83678,18 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) +"ouk" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel/white, +/area/station/science/genetics) +"ouu" = ( +/obj/structure/closet/paramedic, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/paramedic) "ova" = ( /obj/machinery/economy/merch{ dir = 1 @@ -87303,7 +83698,10 @@ dir = 6; icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) +"ovL" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/north) "owG" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -87314,6 +83712,40 @@ }, /turf/simulated/floor/plasteel, /area/station/science/toxins/launch) +"oxJ" = ( +/obj/machinery/door_control{ + id = "kitchenbar"; + name = "Kitchen Bar Shutters Control"; + pixel_x = 6; + pixel_y = 24; + req_access_txt = "28" + }, +/obj/machinery/door_control{ + id = "kitchenhall"; + name = "Kitchen Hallway Shutters Control"; + pixel_x = -8; + pixel_y = 24; + req_access_txt = "28" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/service/kitchen) +"oxK" = ( +/obj/effect/turf_decal/box/white{ + color = "#009dff" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "oxP" = ( /obj/effect/turf_decal{ dir = 1 @@ -87353,21 +83785,35 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/port) -"oyG" = ( -/obj/structure/chair/sofa/corp/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"oyz" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/power/apc/directional/west, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/area/station/hallway/primary/central/east) +"oyD" = ( +/obj/machinery/alarm{ + pixel_y = 24; + name = "north bump" + }, +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" + icon_state = "darkblue" }, +/area/station/medical/storage/secondary) +"oyG" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel/white, /area/station/medical/reception) "oyR" = ( /obj/effect/landmark/start/scientist, @@ -87382,19 +83828,6 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/incinerator) "ozn" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "apsolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -25; - req_access_txt = "13"; - vent_link_id = "apsolar_vent"; - ext_door_link_id = "apsolar_door_ext"; - int_door_link_id = "apsolar_door_int"; - int_button_link_id = "apsolar_btn_int"; - ext_button_link_id = "apsolar_btn_ext" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -87414,12 +83847,33 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "ozw" = ( /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, /area/station/science/break_room) +"ozR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + pixel_y = 24; + name = "north bump" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "ozS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -87441,18 +83895,54 @@ /turf/simulated/floor/plasteel/white, /area/station/science/research) "oAd" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 8 +/obj/structure/railing{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) +"oAm" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue" + icon_state = "neutralfull" }, -/area/station/medical/reception) +/area/station/hallway/primary/central/east) +"oAx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/secondary) +"oBh" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "oBE" = ( /obj/item/vending_refill/coffee, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"oBK" = ( +/obj/machinery/atmospherics/portable/canister/oxygen, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/medical/coldroom) +"oCp" = ( +/obj/machinery/economy/vending/virodrobe, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "oCK" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/effect/turf_decal/delivery/hollow, @@ -87501,20 +83991,25 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) -"oDN" = ( -/obj/machinery/door/firedoor, +"oDF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/medical, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/turf/simulated/floor/plasteel{ + icon_state = "neutral" }, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) +/area/station/maintenance/starboard) "oDZ" = ( /obj/structure/cable{ d1 = 1; @@ -87539,31 +84034,8 @@ }, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) -"oEs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) "oFL" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -87573,6 +84045,24 @@ icon_state = "barber" }, /area/station/service/barber) +"oFW" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) +"oGw" = ( +/obj/machinery/economy/vending/wallmed{ + layer = 3.3; + name = "Emergency NanoMed"; + pixel_y = -32 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "oHh" = ( /obj/structure/cable{ d2 = 4; @@ -87585,14 +84075,19 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "oHk" = ( -/obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/window, /obj/effect/mapping_helpers/airlock/windoor/autoname, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /obj/effect/turf_decal/delivery, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenbar"; + name = "Kitchen Shutters"; + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -87620,6 +84115,18 @@ icon_state = "dark" }, /area/station/security/prison/cell_block) +"oHT" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "viroshutters"; + name = "Privacy Shutters" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "oII" = ( /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -87629,6 +84136,14 @@ /obj/item/radio/beacon, /turf/simulated/floor/engine, /area/station/science/test_chamber) +"oIN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/east) "oIT" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -87644,7 +84159,15 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) +"oJi" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery/blue/hollow, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "oJu" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/cable{ @@ -87742,11 +84265,31 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/public/fitness) +"oLH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "oLR" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/maintenance/apmaint) +"oMd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "oMr" = ( /obj/machinery/turretid/lethal{ control_area = "\improper Telecoms Central Compartment"; @@ -87756,11 +84299,19 @@ /turf/simulated/wall/r_wall, /area/station/telecomms/chamber) "oMA" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"oMI" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "oMO" = ( /obj/structure/window/reinforced{ dir = 8 @@ -87814,6 +84365,19 @@ icon_state = "neutralfull" }, /area/station/supply/storage) +"oON" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "oOW" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -87822,13 +84386,6 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) -"oPN" = ( -/obj/machinery/economy/vending/medical, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/medbay) "oQB" = ( /obj/machinery/door/window/classic/reversed{ dir = 1; @@ -87839,6 +84396,16 @@ }, /turf/simulated/floor/plating, /area/station/science/toxins/launch) +"oQO" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "oQY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -87881,7 +84448,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "oRu" = ( /obj/machinery/door/airlock/security, /obj/effect/mapping_helpers/airlock/autoname, @@ -87909,6 +84476,16 @@ icon_state = "whitepurple" }, /area/station/maintenance/apmaint) +"oRy" = ( +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/north) "oRD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -87918,10 +84495,20 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) +"oRM" = ( +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/reception) "oRW" = ( /obj/structure/cable{ d1 = 4; @@ -87941,6 +84528,18 @@ temperature = 80 }, /area/station/science/xenobiology) +"oTa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/south) "oTo" = ( /obj/structure/cable{ d1 = 4; @@ -87953,6 +84552,13 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) +"oTr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 1 + }, +/turf/simulated/floor/plating/airless, +/area/station/medical/virology) "oTS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, @@ -87960,6 +84566,11 @@ /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /turf/simulated/floor/plasteel, /area/station/service/kitchen) +"oUw" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/station/medical/medbay) "oUJ" = ( /obj/structure/closet/crate{ opened = 1 @@ -87986,6 +84597,41 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/service/expedition) +"oVu" = ( +/obj/structure/morgue, +/obj/machinery/light/small, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"oVH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutral" + }, +/area/station/maintenance/starboard) +"oWo" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "viroshutters"; + name = "Privacy Shutters"; + dir = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "oWp" = ( /obj/effect/turf_decal{ dir = 4 @@ -87998,6 +84644,38 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"oWC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/holosign_switch{ + dir = 4; + id = "surgery1"; + pixel_x = -24; + pixel_y = 7 + }, +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/button/windowtint{ + pixel_x = -24; + id = "sr1"; + dir = 4; + pixel_y = -7; + req_access_txt = "45" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "oWT" = ( /obj/structure/cable{ d1 = 1; @@ -88015,7 +84693,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "oXm" = ( /obj/structure/cable{ d1 = 4; @@ -88026,6 +84704,21 @@ icon_state = "dark" }, /area/station/security/brig) +"oXz" = ( +/obj/machinery/economy/vending/wallmed{ + layer = 3.3; + name = "Emergency NanoMed"; + pixel_x = 28 + }, +/obj/machinery/camera{ + c_tag = "Medbay South Hallway"; + dir = 9; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "oXT" = ( /obj/machinery/door/airlock/highsecurity{ name = "AI Upload" @@ -88066,8 +84759,26 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) +"oZf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "oZR" = ( /obj/structure/cable{ d1 = 4; @@ -88088,21 +84799,19 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"oZY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"pax" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -8 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ +/obj/machinery/light{ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "neutralfull" + dir = 6; + icon_state = "whitegreen" }, -/area/station/engineering/atmos) +/area/station/medical/virology) "paC" = ( /obj/machinery/door/airlock/command{ id_tag = "captainofficedoor"; @@ -88118,24 +84827,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/command/office/captain/bedroom) -"paI" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/iv_bag/blood/random, -/obj/machinery/economy/vending/wallmed{ - layer = 3.3; - name = "Emergency NanoMed"; - pixel_x = -25 - }, -/obj/item/crutches, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/medbay) "paJ" = ( /turf/simulated/floor/engine, /area/station/science/explab/chamber) @@ -88184,10 +84875,27 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/wall, /area/station/service/hydroponics) +"pcr" = ( +/obj/effect/spawner/window/grilled, +/turf/simulated/floor/plating, +/area/station/medical/storage/secondary) +"pcJ" = ( +/obj/structure/table/glass, +/obj/item/storage/fancy/donut_box, +/obj/machinery/computer/security/telescreen{ + pixel_x = -30; + network = list("Bedroom"); + name = "Virologist Isolation" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "pcY" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "pde" = ( /obj/machinery/newscaster{ name = "north bump"; @@ -88208,7 +84916,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "pdD" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Wing" @@ -88244,11 +84952,16 @@ name = "north bump"; pixel_y = 28 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "peG" = ( /obj/machinery/light/small{ dir = 4 @@ -88256,18 +84969,73 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "pfg" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "geneticsdesk"; - name = "Genetics Desk Shutters" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitepurple" }, -/turf/simulated/floor/plating, /area/station/science/genetics) +"pfO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/north) +"pgx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) +"pht" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "phv" = ( /obj/structure/rack, /obj/item/storage/briefcase, @@ -88275,11 +85043,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "phF" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/camera{ c_tag = "Brig - Officer Equipment Storage"; network = list("SS13","Security") @@ -88319,6 +85083,20 @@ /obj/structure/flora/grass/jungle, /turf/simulated/floor/grass/jungle, /area/station/maintenance/fsmaint) +"pjO" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/item/kirbyplants, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) +"pkg" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "pkx" = ( /obj/machinery/economy/vending/engivend, /obj/effect/turf_decal/delivery, @@ -88377,6 +85155,26 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/port) +"pmO" = ( +/obj/structure/table/glass, +/obj/item/roller, +/obj/item/soap/nanotrasen, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) +"pmR" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/east) "pmT" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -88394,29 +85192,18 @@ icon_state = "1-2" }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) -"pnF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +"pnr" = ( +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 }, /turf/simulated/floor/plasteel{ - icon_state = "bluecorner" + dir = 8; + icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "ppj" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 @@ -88427,20 +85214,49 @@ icon_state = "vault" }, /area/station/security/execution) +"ppr" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/medical/reception) "ppu" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/medical/reception) +"ppy" = ( +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"pqM" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "pqQ" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -88478,6 +85294,13 @@ }, /turf/simulated/floor/plasteel/white, /area/station/command/office/rd) +"pqY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating/airless, +/area/station/medical/virology) "prb" = ( /obj/machinery/door/poddoor{ density = 0; @@ -88516,18 +85339,6 @@ icon_state = "neutral" }, /area/station/public/fitness) -"psr" = ( -/obj/machinery/smartfridge/secure/medbay, -/obj/machinery/door/window/classic/reversed{ - desc = "You have the public fridge, pal, lube off."; - name = "Anti-Theft Shield"; - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "psA" = ( /obj/machinery/firealarm{ dir = 4; @@ -88541,6 +85352,24 @@ }, /turf/simulated/floor/engine, /area/station/science/misc_lab) +"psH" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"psT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/north) "pup" = ( /obj/machinery/atmospherics/portable/canister/oxygen, /turf/simulated/floor/plasteel, @@ -88562,6 +85391,11 @@ }, /turf/simulated/floor/plasteel, /area/station/public/toilet/lockerroom) +"pvf" = ( +/obj/item/kirbyplants, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) "pvg" = ( /obj/structure/cable{ d2 = 2; @@ -88602,6 +85436,18 @@ icon_state = "darkred" }, /area/station/security/main) +"pvQ" = ( +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "pwd" = ( /obj/machinery/door/airlock/maintenance{ name = "Science Maintenance" @@ -88609,6 +85455,12 @@ /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"pwS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "pwU" = ( /obj/machinery/door/poddoor{ density = 0; @@ -88641,15 +85493,15 @@ icon_state = "red" }, /area/station/security/permabrig) -"pzp" = ( -/obj/machinery/light/small{ - dir = 1 +"pxD" = ( +/obj/structure/railing{ + dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" + dir = 1; + icon_state = "whitebluecorner" }, -/area/station/medical/morgue) +/area/station/medical/medbay) "pzr" = ( /obj/machinery/door/airlock/engineering{ name = "Aft Port Solar Access" @@ -88690,12 +85542,24 @@ dir = 8 }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenhall"; + name = "Kitchen Shutters" + }, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "pAy" = ( /obj/item/storage/backpack/satchel, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"pAB" = ( +/obj/structure/bed, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "pAC" = ( /obj/machinery/light/small{ dir = 8 @@ -88703,12 +85567,37 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port) +"pAZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "pBe" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) +"pBs" = ( +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "pBz" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/suit/browntrenchcoat, @@ -88717,6 +85606,21 @@ /obj/item/clothing/head/fedora, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"pBJ" = ( +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/camera{ + c_tag = "Medbay Cloning"; + dir = 8; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "pBY" = ( /obj/machinery/newscaster{ name = "north bump"; @@ -88732,6 +85636,22 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"pCt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/port/east) "pCD" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/polarized/grilled{ @@ -88739,22 +85659,26 @@ }, /turf/simulated/floor/plating, /area/station/command/office/rd) -"pDb" = ( -/obj/machinery/economy/vending/medidrobe, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" +"pCM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/station/medical/break_room) -"pDD" = ( -/obj/structure/chair{ - dir = 1 +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) +"pDw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposaloutlet{ + name = "evidence outlet" }, -/area/station/hallway/primary/central) +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/plating/airless, +/area/station/medical/virology) "pDI" = ( /obj/structure/cable{ d1 = 1; @@ -88805,6 +85729,48 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"pFr" = ( +/obj/structure/sink{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"pFx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"pFF" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/east) "pFT" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -88815,6 +85781,10 @@ icon_state = "whitepurple" }, /area/station/science/break_room) +"pGg" = ( +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) "pGi" = ( /obj/structure/sign/electricshock{ pixel_y = -32 @@ -88858,6 +85828,21 @@ icon_state = "red" }, /area/station/hallway/secondary/exit) +"pGL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/landmark/spawner/rev, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "pHd" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -88877,7 +85862,7 @@ locked = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "pIn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -88889,7 +85874,22 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) +"pIs" = ( +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "pIy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -88904,13 +85904,6 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "pIC" = ( -/obj/machinery/access_button{ - autolink_id = "fssolar_btn_int"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "13" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88921,12 +85914,12 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "pIY" = ( @@ -88937,31 +85930,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) -"pJc" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "medbayfoyer"; - name = "Medbay Entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/reception) "pJt" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -89023,37 +85991,18 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel/white, /area/station/science/explab) -"pLJ" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/item/pen, -/obj/machinery/door/poddoor/shutters/preopen{ +"pLA" = ( +/turf/simulated/floor/plasteel{ dir = 8; - id_tag = "chemdesk2"; - name = "Chemistry Desk Shutters" - }, -/obj/machinery/door/window/classic/normal{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ - dir = 8 - }, -/obj/machinery/door/window/classic/normal{ - name = "Chemistry Desk"; - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ - dir = 4 + icon_state = "neutralcorner" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/area/station/hallway/primary/central/se) +"pLJ" = ( +/obj/machinery/chem_dispenser, +/obj/structure/reagent_dispensers/fueltank/chem{ + pixel_x = -32 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/medical/chemistry) "pLU" = ( /obj/machinery/atmospherics/unary/portables_connector{ @@ -89061,6 +86010,10 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/toxins/mixing) +"pMq" = ( +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "pMx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -89156,7 +86109,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "pOB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -89251,6 +86204,33 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/storage) +"pSh" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/ne) +"pSW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/port/west) "pSX" = ( /obj/structure/rack, /obj/item/multitool, @@ -89320,6 +86300,25 @@ }, /turf/simulated/floor/engine, /area/station/science/explab/chamber) +"pUw" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/obj/machinery/button/windowtint{ + id = "psychoffice"; + dir = 4; + pixel_x = -24; + pixel_y = -5 + }, +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24; + pixel_y = 5 + }, +/obj/effect/landmark/start/psychiatrist, +/turf/simulated/floor/wood, +/area/station/medical/psych) "pUB" = ( /obj/machinery/atmospherics/unary/portables_connector, /turf/simulated/floor/plasteel{ @@ -89328,22 +86327,11 @@ }, /area/station/science/toxins/mixing) "pUC" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "arrivalsn_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - vent_link_id = "arrivalsn_vent"; - ext_door_link_id = "arrivalsn_door_ext"; - int_door_link_id = "arrivalsn_door_int"; - ext_button_link_id = "arrivalsn_btn_ext"; - int_button_link_id = "arrivalsn_btn_int" - }, /obj/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "pVI" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -89372,6 +86360,18 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"pWh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "pWn" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel, @@ -89398,7 +86398,34 @@ }, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"pWz" = ( +/obj/machinery/optable, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/primary) +"pWP" = ( +/obj/structure/table/glass, +/obj/item/storage/box/gloves{ + pixel_x = 3; + pixel_y = 8 + }, +/obj/item/storage/box/beakers{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/machinery/status_display{ + layer = 4; + pixel_x = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "pWT" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/decal/cleanable/dirt, @@ -89426,7 +86453,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "pYR" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -89440,7 +86467,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -89449,6 +86476,24 @@ icon_state = "vault" }, /area/station/command/vault) +"pZM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) +"qaf" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/retractor, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "qao" = ( /obj/machinery/door/poddoor{ density = 0; @@ -89483,7 +86528,18 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) +"qaC" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "qbb" = ( /obj/structure/window/reinforced{ dir = 4 @@ -89493,7 +86549,7 @@ inlet_injector_autolink_id = "o2_in"; name = "Oxygen Supply Control"; outlet_vent_autolink_id = "o2_out"; - autolink_sensors = list("o2_sensor"="Tank") + autolink_sensors = list("o2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /turf/simulated/floor/plasteel{ @@ -89513,22 +86569,31 @@ /turf/simulated/floor/plasteel/dark, /area/station/aisat) "qbz" = ( -/obj/machinery/door/airlock/external{ - id_tag = "apsolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) +"qbI" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) +"qcs" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, +/obj/effect/landmark/start/doctor, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "qcA" = ( /obj/docking_port/stationary{ dir = 8; @@ -89538,24 +86603,34 @@ name = "port bay 4 at Kerberos"; width = 9 }, +/obj/machinery/access_button{ + autolink_id = "enginen_btn_ext"; + name = "exterior access button"; + pixel_x = 23; + pixel_y = -23 + }, /turf/space, /area/space) -"qcH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +"qcR" = ( +/obj/machinery/door/airlock/medical, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/area/station/medical/surgery/primary) +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "qdq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -89584,6 +86659,11 @@ icon_state = "dark" }, /area/station/security/main) +"qej" = ( +/obj/machinery/atmospherics/portable/canister/oxygen, +/obj/machinery/atmospherics/unary/portables_connector, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "qeJ" = ( /obj/structure/cable{ d1 = 4; @@ -89630,6 +86710,27 @@ }, /turf/simulated/floor/plasteel, /area/station/security/range) +"qft" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) +"qfH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) "qgm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -89638,11 +86739,11 @@ }, /area/station/public/fitness) "qgr" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, -/area/station/medical/surgery/primary) +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "qhG" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer, /turf/simulated/floor/plasteel{ @@ -89697,24 +86798,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, /area/station/public/storage/art) -"qjS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - icon_state = "pipe-j2s"; - name = "Genetics Junction"; - sort_type_txt = "23" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "qjT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -89732,7 +86815,13 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) +"qke" = ( +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/west) "qkH" = ( /obj/structure/chair/sofa/corner{ dir = 8; @@ -89740,6 +86829,21 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"qlz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/closet/radiation, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/storage/secondary) +"qmB" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/latex, +/turf/simulated/floor/plating, +/area/station/medical/virology) "qmW" = ( /obj/structure/chair{ dir = 4 @@ -89793,6 +86897,14 @@ icon_state = "freezerfloor" }, /area/station/public/sleep) +"qqT" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "qqW" = ( /obj/structure/table, /obj/machinery/kitchen_machine/microwave, @@ -89801,6 +86913,17 @@ icon_state = "red" }, /area/station/security/permabrig) +"qrn" = ( +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "qrT" = ( /turf/simulated/wall/r_wall, /area/station/telecomms/chamber) @@ -89824,11 +86947,10 @@ /area/station/command/bridge) "qtk" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "arrival" - }, -/area/station/hallway/secondary/entry) +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "qtC" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 4; @@ -89843,6 +86965,22 @@ }, /turf/simulated/floor/engine/co2, /area/station/engineering/atmos) +"qtJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/doctor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "qub" = ( /obj/structure/cable{ d2 = 4; @@ -89870,7 +87008,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "quv" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/disposalpipe/segment{ @@ -89911,21 +87049,6 @@ }, /turf/simulated/floor/plating, /area/station/security/execution) -"qvx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Genetics Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel, -/area/station/science/genetics) -"qvU" = ( -/turf/simulated/wall, -/area/station/medical/exam_room) "qwg" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -89961,6 +87084,10 @@ }, /turf/simulated/floor/plating, /area/station/security/storage) +"qxa" = ( +/obj/structure/morgue, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "qxv" = ( /obj/structure/chair/sofa/pew/left{ dir = 8; @@ -89968,6 +87095,52 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"qxR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/west) +"qxT" = ( +/obj/structure/rack, +/obj/item/storage/box/autoinjectors{ + pixel_x = -1; + pixel_y = 3 + }, +/obj/item/storage/box/autoinjectors, +/obj/item/hand_labeler, +/obj/item/crutches{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/crutches, +/obj/item/crutches{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/storage) +"qys" = ( +/obj/structure/table/glass, +/obj/item/storage/box/syringes{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/syringes, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "qzr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -89992,7 +87165,14 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) +"qAe" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "qAx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -90019,6 +87199,16 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"qBj" = ( +/obj/machinery/light_switch{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "qBt" = ( /obj/structure/cable{ d1 = 1; @@ -90108,27 +87298,7 @@ icon_state = "neutral" }, /area/station/maintenance/apmaint) -"qFy" = ( -/obj/machinery/economy/vending/cola, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/central) "qFR" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - autolink_id = "assolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = 25; - req_access_txt = "13"; - vent_link_id = "assolar_vent"; - ext_door_link_id = "assolar_door_ext"; - int_door_link_id = "assolar_door_int"; - ext_button_link_id = "assolar_btn_ext"; - int_button_link_id = "assolar_btn_int" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -90140,6 +87310,11 @@ "qGf" = ( /turf/simulated/wall, /area/station/engineering/ai_transit_tube) +"qGl" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/north) "qGn" = ( /obj/machinery/hologram/holopad, /obj/structure/cable{ @@ -90199,7 +87374,15 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard/south) +"qIK" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "qIZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -90222,34 +87405,22 @@ /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/wood, /area/station/maintenance/library) +"qJe" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "qJt" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"qJv" = ( -/obj/machinery/door/airlock/command{ - name = "CMO's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel/white, -/area/station/command/office/cmo) "qJA" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 }, /turf/simulated/floor/plasteel/white, /area/station/science/toxins/mixing) @@ -90266,6 +87437,28 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/library) +"qKk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "qKL" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -90281,6 +87474,25 @@ }, /turf/simulated/floor/plating, /area/station/security/permasolitary) +"qLt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) "qMp" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -90290,23 +87502,12 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) -"qNS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, +"qMz" = ( +/obj/machinery/light/small, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitebluecorner" + icon_state = "neutral" }, -/area/station/medical/medbay) +/area/station/maintenance/aft) "qOd" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance/three, @@ -90315,28 +87516,20 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"qOu" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/assembly/igniter, -/obj/item/assembly/igniter, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 +"qOr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whiteyellow" + dir = 4; + icon_state = "neutralcorner" }, -/area/station/medical/chemistry) +/area/station/hallway/primary/central/north) "qPg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -90346,6 +87539,12 @@ }, /turf/simulated/floor/wood, /area/station/maintenance/library) +"qPN" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "qPT" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -90358,6 +87557,10 @@ /obj/machinery/economy/vending/plasmaresearch, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) +"qQE" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "qQS" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -90367,7 +87570,44 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"qRe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"qRk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Medbay CMO"; + sort_type_txt = "10" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "qRH" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -90377,6 +87617,18 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/explab) +"qRW" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkgreen" + }, +/area/station/medical/virology) "qSk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -90411,6 +87663,45 @@ }, /turf/simulated/floor/plasteel/freezer, /area/station/public/toilet/lockerroom) +"qTl" = ( +/obj/machinery/disposal, +/obj/machinery/economy/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_x = -28 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) +"qTB" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/stalkybush, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/station/medical/medbay) +"qTE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"qTJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/white, +/area/station/science/genetics) "qTU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity{ @@ -90487,6 +87778,22 @@ icon_state = "darkblue" }, /area/station/command/bridge) +"qVF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/simulated/floor/plasteel, +/area/station/supply/storage) "qWf" = ( /obj/machinery/door/airlock/engineering{ name = "Aft Starboard Solar Access" @@ -90565,17 +87872,26 @@ }, /area/station/security/execution) "qYc" = ( -/obj/item/kirbyplants, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/item/kirbyplants, /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/simulated/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "qYf" = ( /obj/machinery/button/windowtint{ @@ -90632,7 +87948,7 @@ dir = 8; icon_state = "greenblue" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "qZm" = ( /obj/machinery/door/airlock/security, /obj/effect/mapping_helpers/airlock/autoname, @@ -90653,32 +87969,52 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"qZr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "qZt" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "qZI" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "qZV" = ( -/obj/structure/chair/sofa/corp, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/chair/comfy/teal, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) +"raa" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" + icon_state = "neutralfull" }, -/area/station/medical/reception) +/area/station/hallway/primary/central/sw) "raB" = ( /obj/structure/grille/broken, /obj/structure/lattice, @@ -90761,6 +88097,27 @@ icon_state = "bar" }, /area/station/maintenance/fsmaint) +"rdA" = ( +/obj/structure/table/glass, +/obj/item/storage/fancy/donut_box{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/storage/box/donkpockets, +/obj/machinery/camera{ + c_tag = "Virology Break Room"; + dir = 10; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"rdK" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/junglebush, +/turf/simulated/floor/grass, +/area/station/medical/medbay) "reo" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -90775,6 +88132,16 @@ icon_state = "red" }, /area/station/security/permabrig) +"reu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/west) "rev" = ( /obj/machinery/door/airlock/security/glass{ name = "Holding Area" @@ -90826,6 +88193,23 @@ }, /turf/simulated/floor/plasteel, /area/station/command/office/ce) +"reD" = ( +/obj/structure/table/glass, +/obj/item/wrench/medical, +/obj/item/crowbar, +/obj/item/storage/toolbox/emergency, +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "reH" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -90836,15 +88220,25 @@ }, /area/station/security/brig) "reW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/item/radio/intercom{ name = "east bump"; pixel_x = 28 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"rfw" = ( +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/south) "rfW" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall9b"; @@ -90853,13 +88247,37 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "rga" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/incinerator) +"rgn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "rgH" = ( /obj/structure/cable{ d1 = 4; @@ -90882,13 +88300,6 @@ /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "riQ" = ( -/obj/machinery/access_button{ - autolink_id = "atmostanks_btn_int"; - name = "interior access button"; - pixel_x = -23; - pixel_y = 20; - req_access_txt = "32" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 }, @@ -90897,17 +88308,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) -"rje" = ( -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) "rjE" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable{ @@ -90925,6 +88325,9 @@ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "rjL" = ( @@ -90987,6 +88390,17 @@ icon_state = "darkred" }, /area/station/security/warden) +"rkF" = ( +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/east) "rkJ" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -91107,6 +88521,37 @@ }, /turf/simulated/floor/plasteel, /area/station/command/customs) +"rnb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) +"rnp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/turf/simulated/floor/plasteel, +/area/station/supply/sorting) "rnA" = ( /obj/structure/chair/stool{ dir = 8 @@ -91122,6 +88567,9 @@ icon_state = "solarpanel" }, /area/station/maintenance/starboardsolar) +"rod" = ( +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "row" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -91147,7 +88595,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "rps" = ( /obj/structure/cable{ d1 = 1; @@ -91214,6 +88662,17 @@ icon_state = "neutral" }, /area/station/maintenance/fore) +"rqv" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/sw) +"rqw" = ( +/obj/structure/railing, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/reception) "rqO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -91230,6 +88689,11 @@ icon_state = "freezerfloor" }, /area/station/public/sleep) +"rrv" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/coroner, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "rrL" = ( /obj/structure/cable{ d1 = 4; @@ -91245,14 +88709,6 @@ icon_state = "neutral" }, /area/station/maintenance/fore) -"rsF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) "rsK" = ( /obj/machinery/computer/security/telescreen/research{ pixel_y = -32 @@ -91261,22 +88717,38 @@ icon_state = "whitepurple" }, /area/station/science/misc_lab) +"rsV" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "rsX" = ( /obj/item/kirbyplants, /turf/simulated/floor/wood, /area/station/maintenance/library) -"rti" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "GeneticsDoor"; - name = "Genetics" +"rsY" = ( +/obj/machinery/computer/guestpass{ + pixel_x = -28 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white, -/area/station/science/genetics) +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "rtG" = ( /obj/machinery/economy/vending/secdrobe, /obj/machinery/firealarm{ @@ -91290,12 +88762,12 @@ }, /area/station/security/storage) "rtH" = ( -/obj/machinery/door/airlock/external{ - id_tag = "arrivalsn_door_int" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/e_to_w/engineer{ + req_access_txt = 13 }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/maintenance/portsolar) "rtU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -91320,6 +88792,15 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) +"rvN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "rwD" = ( /obj/machinery/door/airlock/command/glass{ name = "Head of Personnel Bedroom" @@ -91348,25 +88829,48 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"rwM" = ( +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 27 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "rwU" = ( /turf/simulated/wall, /area/station/service/barber) "rwY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) +"rwZ" = ( +/obj/structure/table/reinforced, +/obj/item/desk_bell{ + anchored = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "arrival" +/obj/machinery/door/window/classic/reversed, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "imnotmakingyoulubepissoff"; + name = "Chemistry Privacy Shutter" }, -/area/station/hallway/secondary/entry) +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) "rxb" = ( /obj/machinery/computer/secure_data, /obj/machinery/newscaster/security_unit{ @@ -91423,7 +88927,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ryh" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -91432,7 +88936,17 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"ryp" = ( +/obj/effect/spawner/random_spawners/fungus_maybe, +/turf/simulated/wall, +/area/station/maintenance/starboard) +"ryz" = ( +/obj/effect/spawner/window/reinforced/polarized{ + id = "sr2" + }, +/turf/simulated/floor/plating, +/area/station/medical/surgery/secondary) "ryH" = ( /obj/structure/cable{ d1 = 1; @@ -91448,6 +88962,27 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/maintenance/port) +"rzs" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/camera{ + c_tag = "Psychiatrist's Office"; + dir = 4; + network = list("Medical","SS13","Security") + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) +"rzH" = ( +/obj/structure/rack, +/obj/item/wrench/medical, +/obj/item/storage/box/bodybags, +/obj/effect/spawner/random_spawners/cobweb_left_frequent, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "rzO" = ( /obj/machinery/economy/vending/scidrobe, /turf/simulated/floor/plasteel{ @@ -91455,6 +88990,25 @@ icon_state = "whitepurple" }, /area/station/science/break_room) +"rAD" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/machinery/economy/vending/wallmed{ + layer = 3.3; + name = "Emergency NanoMed"; + pixel_x = 28 + }, +/obj/machinery/camera{ + c_tag = "Medbay Entrance Hall"; + dir = 8; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "rBP" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -91463,10 +89017,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) +"rCv" = ( +/obj/item/kirbyplants{ + icon_state = "plant-18" + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "rCw" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -91512,34 +89079,49 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) -"rEQ" = ( -/obj/structure/weightmachine/weightlifter, -/turf/simulated/floor/plasteel, -/area/station/public/fitness) -"rFp" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Isolation B" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/turf_decal/delivery/partial, -/obj/effect/turf_decal/arrows/black, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"rEg" = ( +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 }, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 1; + icon_state = "whitegreen" }, /area/station/medical/virology) -"rGZ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 +"rEn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/plating/airless, +/area/station/medical/virology) +"rEs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/primary) +"rEP" = ( +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) +"rEQ" = ( +/obj/structure/weightmachine/weightlifter, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) +"rGZ" = ( +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -91570,17 +89152,14 @@ icon_state = "vault" }, /area/station/telecomms/chamber) -"rHp" = ( -/obj/machinery/access_button{ - autolink_id = "atmostanks_btn_ext"; - name = "exterior access button"; - pixel_x = 20; - pixel_y = -20; - req_access_txt = "32" +"rHr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/area/station/maintenance/starboard) "rHD" = ( /obj/structure/cable{ d1 = 1; @@ -91605,12 +89184,33 @@ icon_state = "dark" }, /area/station/security/storage) +"rHX" = ( +/mob/living/carbon/human/monkey, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "rIb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) +"rIO" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1; + name = "Pure to Ports" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "rJd" = ( /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, @@ -91625,7 +89225,16 @@ name = "KEEP CLEAR: DOCKING AREA" }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"rJF" = ( +/obj/structure/sign/vacuum{ + pixel_x = -32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "rKJ" = ( /obj/structure/cable{ d1 = 4; @@ -91658,6 +89267,34 @@ icon_state = "darkred" }, /area/station/security/prison/cell_block) +"rKU" = ( +/obj/effect/turf_decal/box/white{ + color = "#009dff" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) +"rLr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "rLB" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating/airless, @@ -91666,6 +89303,17 @@ /obj/machinery/r_n_d/experimentor, /turf/simulated/floor/engine, /area/station/science/explab/chamber) +"rMm" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/power/apc/directional/west, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "rMr" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance_hatch{ @@ -91707,6 +89355,10 @@ icon_state = "neutral" }, /area/station/legal/courtroom) +"rNO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "rOe" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -91734,6 +89386,16 @@ icon_state = "freezerfloor" }, /area/station/service/kitchen) +"rOl" = ( +/obj/structure/table/glass, +/obj/machinery/kitchen_machine/microwave{ + pixel_y = 6 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "rOn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -91742,10 +89404,45 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "rOW" = ( /turf/simulated/wall/r_wall, /area/station/medical/reception) +"rPa" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteyellowcorner" + }, +/area/station/medical/medbay) +"rPH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"rPU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/west) "rQj" = ( /obj/machinery/firealarm{ dir = 8; @@ -91787,13 +89484,26 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"rRw" = ( +/obj/structure/table, +/obj/item/storage/box/gloves{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/masks, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "rRC" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Perma Cell 2" @@ -91879,6 +89589,12 @@ }, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) +"rUU" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/light, +/area/station/engineering/atmos) "rVB" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -91895,13 +89611,17 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenhall"; + name = "Kitchen Shutters" + }, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "rVL" = ( /obj/machinery/economy/vending/coffee, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "rWL" = ( /obj/machinery/alarm{ dir = 8; @@ -91916,7 +89636,7 @@ /obj/structure/table/reinforced, /obj/item/folder, /obj/item/pen, -/obj/item/reagent_containers/food/snacks/grown/apple, +/obj/item/food/snacks/grown/apple, /obj/machinery/door/window/classic/normal{ dir = 8 }, @@ -91929,15 +89649,16 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) -"rXc" = ( -/obj/machinery/door/airlock/medical/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +"rXm" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" + dir = 1; + icon_state = "whitebluecorner" }, -/area/station/medical/reception) +/area/station/medical/medbay) "rXv" = ( /obj/structure/cable{ d1 = 2; @@ -91954,13 +89675,6 @@ /turf/simulated/floor/plating, /area/station/command/office/rd) "rXy" = ( -/obj/machinery/access_button{ - autolink_id = "apsolar_btn_int"; - name = "interior access button"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "13" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -92019,6 +89733,16 @@ }, /turf/simulated/floor/engine, /area/station/science/explab/chamber) +"rYa" = ( +/mob/living/carbon/human/monkey, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/iv_drip, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) "rYb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -92035,6 +89759,13 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"rYe" = ( +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/station/medical/storage/secondary) "rYP" = ( /obj/structure/bookcase, /turf/simulated/floor/wood{ @@ -92051,7 +89782,7 @@ inlet_injector_autolink_id = "co2_in"; name = "Carbon Dioxide Supply Control"; outlet_vent_autolink_id = "co2_out"; - autolink_sensors = list("co2_sensor"="Tank") + autolink_sensors = list("co2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /turf/simulated/floor/plasteel/dark, @@ -92115,10 +89846,6 @@ }, /turf/simulated/floor/plating, /area/station/security/processing) -"sak" = ( -/obj/structure/table/wood, -/turf/simulated/floor/wood, -/area/station/medical/psych) "san" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -92127,7 +89854,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "saC" = ( /obj/structure/cable{ d1 = 1; @@ -92137,6 +89864,56 @@ /obj/effect/spawner/random_spawners/blood_often, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"saH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 1; + level = 2 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"saK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/important/directional/east, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) +"sbe" = ( +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 27 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"sbr" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/hud/health{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 4; + pixel_y = -4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "sbt" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -92145,6 +89922,29 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) +"sbz" = ( +/obj/structure/window/reinforced{ + dir = 8; + pixel_x = -4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "Chemistry"; + sort_type_txt = "11"; + icon_state = "pipe-j2s" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "sbU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -92159,6 +89959,45 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/bar) +"scc" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Office" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"scp" = ( +/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/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "scA" = ( /obj/machinery/firealarm{ dir = 8; @@ -92221,7 +90060,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/east) "seI" = ( /obj/structure/cable{ d1 = 1; @@ -92247,6 +90086,15 @@ }, /turf/simulated/floor/plating, /area/station/command/office/hos) +"sfu" = ( +/obj/structure/bed/roller, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "sfD" = ( /obj/machinery/doppler_array{ dir = 8 @@ -92265,6 +90113,26 @@ icon_state = "darkred" }, /area/station/security/main) +"sgr" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = -30 + }, +/obj/machinery/camera{ + c_tag = "Medbay Public Exam Room"; + dir = 5; + network = list("SS13","Medical") + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) +"sgM" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Internal Medbay Maintenance" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "sgZ" = ( /obj/machinery/newscaster{ name = "north bump"; @@ -92275,7 +90143,39 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) +"shb" = ( +/obj/machinery/light, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/paramedic) +"shh" = ( +/obj/machinery/camera{ + c_tag = "Surgery Storage"; + dir = 1; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "shs" = ( /obj/machinery/economy/vending/assist, /obj/structure/extinguisher_cabinet{ @@ -92309,7 +90209,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "shS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -92325,21 +90225,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/robotics/showroom) -"siJ" = ( -/obj/machinery/economy/vending/medical, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "darkblue" - }, -/area/station/medical/surgery/observation) "sjA" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; @@ -92385,6 +90270,54 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"skW" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"slc" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/east) +"sln" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"slq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "sls" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ @@ -92445,6 +90378,16 @@ icon_state = "whitepurple" }, /area/station/science/misc_lab) +"smG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "snn" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -92521,7 +90464,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "sot" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -92550,20 +90493,6 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"soN" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) "soV" = ( /obj/structure/cable{ d1 = 4; @@ -92573,7 +90502,7 @@ /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Warehouse Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/sorting) "spp" = ( @@ -92586,25 +90515,25 @@ icon_state = "dark" }, /area/station/maintenance/apmaint) +"spz" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "spP" = ( -/obj/structure/closet, /obj/machinery/light/small{ dir = 4 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/security/evidence) -"spS" = ( -/obj/item/kirbyplants, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/engineering/atmos) "sqj" = ( /obj/effect/spawner/random_spawners/blood_maybe, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -92616,30 +90545,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"sqq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "CMO's Junction"; - sort_type_txt = "10" - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/medbay) "sqF" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -92704,7 +90609,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "sqZ" = ( /obj/effect/landmark/spawner/xeno, /turf/simulated/floor/wood{ @@ -92775,6 +90680,19 @@ icon_state = "dark" }, /area/station/security/execution) +"ssu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "ssy" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -92783,17 +90701,16 @@ }, /area/station/supply/storage) "ssz" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/door/window/classic/normal{ + name = "Monkey Pen"; + dir = 1 }, -/obj/machinery/door/airlock/medical, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) +/obj/structure/sink{ + dir = 1; + pixel_y = -8 + }, +/turf/simulated/floor/grass, +/area/station/science/genetics) "ssL" = ( /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, @@ -92812,7 +90729,34 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) +"sty" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) +"stF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "purplefull" + }, +/area/station/hallway/primary/aft/south) "stU" = ( /obj/machinery/conveyor{ id = "cargodisposals" @@ -92851,16 +90795,37 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) -"suU" = ( -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 +"svp" = ( +/obj/effect/landmark/start/chief_medical_officer, +/obj/structure/chair/office/light{ + dir = 8 }, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) +"svB" = ( +/obj/structure/table, +/obj/item/toy/figure/xeno, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" + icon_state = "neutral" }, -/area/station/hallway/primary/central/south) +/area/station/maintenance/aft) +"svD" = ( +/obj/machinery/economy/vending/coffee, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"svX" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/observation) "swV" = ( /obj/machinery/hydroponics/constructable, /obj/item/seeds/glowshroom, @@ -92892,10 +90857,59 @@ icon_state = "darkred" }, /area/station/security/prison/cell_block) +"syt" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) +"syB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "syO" = ( /obj/structure/closet/secure_closet/research_reagents, /turf/simulated/floor/engine, /area/station/science/misc_lab) +"syY" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/south) "szb" = ( /obj/structure/table, /obj/item/clothing/accessory/armband/science, @@ -92906,6 +90920,11 @@ dir = 4 }, /area/station/maintenance/apmaint) +"szf" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "szk" = ( /obj/structure/table/reinforced, /obj/item/folder/red{ @@ -92919,6 +90938,27 @@ icon_state = "dark" }, /area/station/security/main) +"sAa" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper/precision, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"sAl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteyellowcorner" + }, +/area/station/medical/medbay) "sAy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, @@ -92929,13 +90969,11 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) -"sAW" = ( -/obj/structure/closet/secure_closet/medical2, +"sAB" = ( /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner" + icon_state = "neutralcorner" }, -/area/station/medical/surgery/primary) +/area/station/hallway/secondary/entry/lounge) "sBE" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/firealarm{ @@ -92997,14 +91035,59 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/detective) +"sCK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"sDL" = ( +/obj/machinery/atmospherics/unary/thermomachine/freezer{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/medical/coldroom) +"sDN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "sDO" = ( -/obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, /obj/machinery/door/firedoor, /obj/machinery/door/window, /obj/effect/mapping_helpers/airlock/windoor/autoname, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /obj/effect/turf_decal/delivery, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenbar"; + name = "Kitchen Shutters"; + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -93075,19 +91158,28 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"sFH" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "sFK" = ( /turf/simulated/floor/plasteel, /area/station/science/research) "sGz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -93128,11 +91220,29 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "sHI" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel/dark, /area/station/command/bridge) +"sIv" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "sIz" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -93149,7 +91259,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "sJk" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -93176,13 +91286,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/public/storage/tools/auxiliary) -"sJx" = ( -/obj/machinery/economy/vending/virodrobe, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkgreen" - }, -/area/station/medical/virology) "sJA" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -93261,6 +91364,52 @@ }, /turf/simulated/floor/engine, /area/station/science/toxins/mixing) +"sMn" = ( +/obj/structure/table/glass, +/obj/item/clothing/gloves/color/latex{ + pixel_y = 6 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 3 + }, +/obj/item/healthanalyzer, +/obj/item/storage/belt/medical, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"sMp" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"sMA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "sMV" = ( /obj/machinery/light{ dir = 4 @@ -93269,7 +91418,7 @@ dir = 5 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "sOd" = ( /obj/structure/cable, /obj/structure/cable{ @@ -93317,6 +91466,24 @@ icon_state = "darkredcorners" }, /area/station/security/permabrig) +"sOP" = ( +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/economy/vending/chemdrobe, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) +"sPf" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "sPg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -93328,6 +91495,27 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/storage) +"sPs" = ( +/obj/structure/table, +/obj/item/autopsy_scanner, +/obj/item/camera/autopsy{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/scalpel, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"sPx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/nw) "sPz" = ( /obj/machinery/light/small{ dir = 1 @@ -93385,6 +91573,63 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"sQZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + pixel_y = 24; + name = "north bump" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) +"sRh" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"sRk" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "viroshutters"; + name = "Privacy Shutters"; + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/cable, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"sRC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "sRR" = ( /obj/structure/cable{ d1 = 1; @@ -93404,6 +91649,25 @@ /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, /area/station/maintenance/library) +"sSu" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"sSG" = ( +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/obj/effect/landmark/start/doctor, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "sSH" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/alarm{ @@ -93451,6 +91715,14 @@ icon_state = "neutral" }, /area/station/maintenance/fsmaint) +"sUE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/starboard/east) "sUV" = ( /obj/machinery/camera{ c_tag = "Central Ring Hallway South" @@ -93468,21 +91740,8 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "sVl" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "fpsolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = 25; - req_access_txt = "32"; - vent_link_id = "fpsolar_vent"; - ext_door_link_id = "fpsolar_door_ext"; - int_door_link_id = "fpsolar_door_int"; - ext_button_link_id = "fpsolar_btn_ext"; - int_button_link_id = "fpsolar_btn_int" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -93495,34 +91754,13 @@ /obj/structure/grille, /turf/simulated/floor/plating, /area/station/maintenance/port) -"sVG" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "CMO" - }, -/turf/simulated/floor/plating, -/area/station/command/office/cmo) -"sVV" = ( -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medical Supplies" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" +"sVx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/area/station/medical/storage) +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "sWd" = ( -/obj/machinery/access_button{ - autolink_id = "assolar_btn_ext"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "13" - }, /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -93531,30 +91769,30 @@ }, /turf/space, /area/station/maintenance/starboardsolar) -"sWx" = ( -/obj/machinery/door/airlock/external{ - id_tag = "stationai_door_int"; - locked = 1; - name = "Minisat Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +"sWn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 +/area/station/hallway/primary/central/north) +"sWx" = ( +/obj/effect/spawner/airlock/e_to_w/engineer{ + req_access_txt = "11,13" }, -/turf/simulated/floor/plasteel/dark, +/turf/simulated/wall, /area/station/engineering/ai_transit_tube) +"sWI" = ( +/obj/item/kirbyplants, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "sXr" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "HoS" @@ -93565,6 +91803,26 @@ }, /turf/simulated/floor/plating, /area/station/command/office/hos) +"sXV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"sYf" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "sYg" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -93592,18 +91850,6 @@ icon_state = "darkredcorners" }, /area/station/security/prison/cell_block) -"sYw" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whiteblue" - }, -/area/station/medical/exam_room) "sYB" = ( /obj/machinery/door/airlock/research, /obj/effect/mapping_helpers/airlock/autoname, @@ -93649,18 +91895,12 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "sYX" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/access_button{ - autolink_id = "escape_btn_int"; - name = "interior access button"; - pixel_x = -24; - pixel_y = -24; - req_access_txt = "10;13" +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 }, -/obj/structure/sign/vacuum{ - pixel_x = -32 +/obj/effect/turf_decal/delivery, +/obj/machinery/light/small{ + dir = 8 }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) @@ -93731,6 +91971,21 @@ icon_state = "neutralfull" }, /area/station/public/fitness) +"tby" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white/hollow, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "tbP" = ( /obj/machinery/light_switch{ dir = 4; @@ -93755,11 +92010,10 @@ icon_state = "dark" }, /area/station/security/storage) -"tdC" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, +"tdW" = ( +/obj/effect/landmark/spawner/rev, +/obj/structure/morgue, +/turf/simulated/floor/plasteel/dark, /area/station/medical/morgue) "tep" = ( /obj/machinery/door/firedoor, @@ -93769,21 +92023,45 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"teL" = ( -/obj/structure/girder, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +"teH" = ( +/obj/structure/table, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/item/storage/box/beakers, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/syringe/antiviral{ + pixel_y = -5 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/item/reagent_containers/syringe/antiviral{ + pixel_y = 5 }, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) +/obj/item/reagent_containers/syringe/antiviral{ + pixel_y = 10 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = 3 + }, +/obj/item/reagent_containers/dropper/precision, +/obj/machinery/light, +/obj/item/clothing/suit/straight_jacket{ + pixel_x = -2 + }, +/obj/item/clothing/mask/muzzle{ + pixel_x = -2 + }, +/obj/item/clothing/glasses/sunglasses/blindfold, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/storage) +"tfY" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/medical/morgue) "tge" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -93800,13 +92078,19 @@ icon_state = "red" }, /area/station/security/permabrig) -"tgf" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Toilet" +"tgr" = ( +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/turf/simulated/floor/plasteel, -/area/station/medical/break_room) +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "tgs" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/wood, @@ -93814,6 +92098,23 @@ "tgE" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/starboard) +"thz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "thL" = ( /turf/simulated/floor/wood, /area/station/maintenance/library) @@ -93831,6 +92132,15 @@ /obj/item/bedsheet/black, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"tiQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/south) "tjB" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -93861,19 +92171,13 @@ "tks" = ( /turf/simulated/floor/wood, /area/station/maintenance/starboard) -"tls" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "atmostanks_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 57; - req_access_txt = "32"; - vent_link_id = "atmostanks_vent"; - ext_door_link_id = "atmostanks_door_ext"; - int_door_link_id = "atmostanks_door_int"; - ext_button_link_id = "atmostanks_btn_ext"; - int_button_link_id = "atmostanks_btn_int" +"tkI" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" }, +/area/station/medical/morgue) +"tls" = ( /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) @@ -93915,7 +92219,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "tmo" = ( /obj/structure/cable{ d1 = 1; @@ -93936,6 +92240,13 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/central) +"tmJ" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "tnu" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 4; @@ -93951,6 +92262,30 @@ /obj/item/storage/toolbox/mechanical, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) +"tnU" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/west) +"tod" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Internal Medbay Maintenance" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) +"tox" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "tpo" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -93960,12 +92295,39 @@ icon_state = "dark" }, /area/station/security/execution) +"tpM" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "tpP" = ( /obj/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"tpR" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/hollow, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "trr" = ( /obj/machinery/door/poddoor{ density = 0; @@ -94002,6 +92364,16 @@ icon_state = "barber" }, /area/station/service/barber) +"tsp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) "tsL" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ @@ -94022,7 +92394,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "tvq" = ( /obj/machinery/atmospherics/portable/scrubber/huge/stationary, /turf/simulated/floor/plasteel{ @@ -94066,6 +92438,12 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) +"tvL" = ( +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/medbay) "twb" = ( /obj/structure/window/reinforced, /obj/structure/rack, @@ -94102,11 +92480,16 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "txR" = ( /obj/machinery/camera{ c_tag = "Experimention Lab"; @@ -94148,6 +92531,13 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) +"tyQ" = ( +/obj/machinery/economy/vending/medical, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "tzC" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -94170,13 +92560,17 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) -"tAl" = ( -/obj/structure/table, -/obj/item/folder/white, -/obj/item/pen, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/morgue) +/area/station/hallway/primary/fore/north) +"tAi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "tAt" = ( /obj/structure/cable{ d1 = 1; @@ -94244,6 +92638,20 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) +"tBX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/sleeper) +"tCf" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/medical/virology) +"tCW" = ( +/obj/machinery/status_display, +/turf/simulated/wall, +/area/station/hallway/secondary/entry/south) "tDw" = ( /turf/simulated/wall, /area/station/medical/reception) @@ -94282,6 +92690,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"tDU" = ( +/obj/machinery/alarm{ + pixel_y = 24; + name = "north bump" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellowcorner" + }, +/area/station/hallway/primary/port/west) "tEw" = ( /obj/structure/showcase{ density = 0; @@ -94302,6 +92720,17 @@ icon_state = "barber" }, /area/station/service/barber) +"tEL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "tFK" = ( /obj/item/soap/nanotrasen, /obj/machinery/light/small{ @@ -94315,6 +92744,14 @@ icon_state = "freezerfloor" }, /area/station/security/permabrig) +"tFN" = ( +/obj/structure/cable, +/obj/machinery/power/apc/directional/south, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/east) "tFO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -94351,15 +92788,16 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) -"tGB" = ( -/obj/machinery/door/airlock/external{ - id_tag = "atmostanks_door_ext"; - locked = 1; - name = "Atmos External Access" +"tGE" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/turf/simulated/floor/plasteel, -/area/station/engineering/gravitygenerator) +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/north) "tGY" = ( /obj/structure/sign/nosmoking_2{ pixel_y = 32 @@ -94373,13 +92811,22 @@ /obj/item/lipstick/random, /turf/simulated/floor/plating, /area/station/maintenance/theatre) +"tHx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10; + initialize_directions = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "tIa" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "tIr" = ( /obj/machinery/economy/vending/hatdispenser, /turf/simulated/floor/plasteel/dark, @@ -94400,6 +92847,22 @@ }, /turf/simulated/floor/plasteel, /area/station/public/storage/art) +"tID" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "tIK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -94417,6 +92880,17 @@ icon_state = "neutral" }, /area/station/maintenance/port) +"tIM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + name = "east bump" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "tIT" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass, @@ -94469,11 +92943,62 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) +"tKj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "tKX" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, /turf/simulated/floor/plating, /area/station/medical/virology) +"tLO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"tMJ" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white/hollow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "tNn" = ( /obj/machinery/light/small, /obj/structure/chair/wood{ @@ -94485,16 +93010,17 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) -"tNq" = ( -/obj/item/radio/intercom{ - name = "east bump"; - pixel_x = 28 +"tNx" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/utility, +/obj/machinery/camera{ + dir = 6; + name = "Atmospherics Central" }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" + icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/engineering/atmos) "tNO" = ( /obj/machinery/computer/crew, /obj/machinery/requests_console{ @@ -94508,19 +93034,8 @@ icon_state = "darkred" }, /area/station/security/warden) -"tOv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "red" - }, -/area/station/security/permabrig) "tOM" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -94599,11 +93114,50 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) +"tQT" = ( +/obj/machinery/camera{ + c_tag = "Medbay West Hallway"; + dir = 1; + network = list("Medical","SS13") + }, +/obj/structure/closet/walllocker/emerglocker/south, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "tRa" = ( /obj/machinery/economy/vending/cola, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"tRn" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/newscaster{ + name = "south bump"; + pixel_y = -32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) +"tRC" = ( +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/chair/wheelchair{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "tRF" = ( /obj/structure/rack, /obj/item/clothing/glasses/welding, @@ -94651,22 +93205,27 @@ /turf/simulated/floor/plating, /area/station/security/prison/cell_block) "tSp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 }, +/obj/machinery/newscaster{ + dir = 1; + name = "south bump"; + pixel_y = -28 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "tSt" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /turf/simulated/floor/plasteel/white, @@ -94680,20 +93239,11 @@ /turf/simulated/floor/plating, /area/station/science/server) "tSB" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fssolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "tSM" = ( @@ -94713,6 +93263,21 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/theatre) +"tTg" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Isolations" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "tTM" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -94766,7 +93331,16 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) +"tVb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutral" + }, +/area/station/maintenance/starboard) "tVz" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "HoS" @@ -94793,35 +93367,29 @@ }, /turf/simulated/floor/plating, /area/station/security/range) +"tVV" = ( +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "tWj" = ( /obj/effect/spawner/random_spawners/wall_rusted_probably, /turf/simulated/wall, /area/station/maintenance/apmaint) -"tWT" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +"tWK" = ( +/obj/machinery/hologram/holopad, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" }, -/turf/simulated/floor/plasteel, -/area/station/medical/storage) +/area/station/medical/cloning) "tXb" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/light{ dir = 8 }, @@ -94829,7 +93397,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) "tXj" = ( /obj/machinery/cryopod/right, /obj/machinery/light_switch{ @@ -94841,10 +93409,102 @@ icon_state = "freezerfloor" }, /area/station/public/sleep) +"tXs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"tYd" = ( +/obj/structure/morgue, +/obj/effect/landmark/spawner/rev, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"tYs" = ( +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/medical/storage) "tYD" = ( /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"tYQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"tZI" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/iv_drip, +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) +"tZV" = ( +/obj/structure/morgue{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "uah" = ( /obj/structure/table/reinforced, /obj/machinery/door_control{ @@ -94874,7 +93534,7 @@ "uaL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -94883,7 +93543,7 @@ /obj/machinery/economy/vending/cigarette, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "ubm" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -94912,6 +93572,20 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"ubP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light/small, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreen" + }, +/area/station/medical/virology) "ubV" = ( /obj/effect/landmark/start/shaft_miner, /obj/structure/disposalpipe/segment, @@ -94933,13 +93607,12 @@ }, /area/station/public/fitness) "uci" = ( -/obj/machinery/door/airlock/external{ - id_tag = "apmaint2_door_ext"; - locked = 1; - name = "West Maintenance External Access" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/s_to_n{ + req_access_txt = null }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/port) +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/west) "ucl" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plating, @@ -94965,20 +93638,106 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/research) -"udZ" = ( -/obj/machinery/door/airlock/external{ - id_tag = "sol_door_ext"; - locked = 1; - name = "Arrivals External Access" +"udE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/access_button{ - autolink_id = "sol_btn_ext"; - name = "exterior access button"; - pixel_x = -13; - pixel_y = -23 +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"udS" = ( +/obj/machinery/dna_scannernew, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"udZ" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/w_to_e/engineer{ + req_access_txt = 13 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/maintenance/starboardsolar) +"uec" = ( +/obj/machinery/door_control{ + id = "cmoofficedoor"; + name = "Office Door"; + normaldoorcontrol = 1; + pixel_x = 25; + req_access_txt = "40" + }, +/obj/machinery/button/windowtint{ + id = "CMO"; + pixel_x = 24; + pixel_y = 8; + req_access_txt = "40"; + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = 24; + pixel_y = -8; + dir = 8; + name = "custom placement" + }, +/obj/machinery/door_control{ + id = "Biohazard_medi"; + name = "Medical Quarantine"; + pixel_x = 35; + req_access_txt = "40" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"ueo" = ( +/obj/structure/rack, +/obj/item/roller, +/obj/item/storage/box/beakers, +/obj/item/hand_labeler, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/camera{ + c_tag = "Genetics"; + dir = 4; + network = list("Research","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/station/science/genetics) +"ueD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/port/east) "ueI" = ( /obj/machinery/atmospherics/portable/canister/nitrogen, /turf/simulated/floor/plasteel, @@ -94997,6 +93756,13 @@ }, /turf/simulated/floor/plasteel, /area/station/service/janitor) +"ueP" = ( +/obj/structure/table/glass, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "ueR" = ( /obj/structure/table/reinforced, /obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ @@ -95048,12 +93814,6 @@ /turf/simulated/floor/wood, /area/station/maintenance/library) "uht" = ( -/obj/machinery/access_button{ - autolink_id = "apmaint2_btn_int"; - name = "interior access button"; - pixel_x = -24; - pixel_y = 24 - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, @@ -95067,7 +93827,16 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) +"uhM" = ( +/obj/machinery/camera{ + c_tag = "Central Hallway South 1"; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/north) "uic" = ( /obj/structure/cable{ d1 = 4; @@ -95097,15 +93866,9 @@ }, /area/station/security/processing) "uil" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, -/obj/machinery/atmospherics/portable/canister/air, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) +/obj/effect/spawner/airlock, +/turf/simulated/wall, +/area/station/service/chapel/office) "uit" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 4; @@ -95147,6 +93910,13 @@ }, /turf/simulated/floor/plasteel, /area/station/security/armory/secure) +"uje" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "ujq" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall9e"; @@ -95190,7 +93960,18 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, -/area/station/medical/surgery) +/area/station/maintenance/starboard) +"ujS" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "ukv" = ( /obj/structure/cable{ d1 = 4; @@ -95219,7 +94000,15 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) +"ukN" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/medical/morgue) "ulF" = ( /obj/machinery/door/airlock/glass{ name = "Chapel Office" @@ -95250,25 +94039,6 @@ }, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) -"unp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Chemistry Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/chemistry) "unt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -95338,6 +94108,16 @@ icon_state = "darkred" }, /area/station/security/prison/cell_block) +"upg" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "upw" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -95347,15 +94127,8 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "upI" = ( -/obj/machinery/access_button{ - autolink_id = "fpsolar_btn_int"; - name = "interior access button"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "32" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -95399,6 +94172,27 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/bridge) +"uqW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutral" + }, +/area/station/maintenance/starboard) +"usf" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/station/medical/storage/secondary) "usl" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -95445,6 +94239,26 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/abandoned_garden) +"utn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "uts" = ( /obj/machinery/door/airlock/research{ name = "Abandoned Equipment Room" @@ -95453,6 +94267,21 @@ /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"uud" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance/three, +/obj/item/clothing/accessory/stethoscope, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) +"uuh" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "uvD" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/three, @@ -95461,6 +94290,70 @@ icon_state = "redyellowfull" }, /area/station/maintenance/fsmaint) +"uwm" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/doctor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) +"uwR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/table/glass, +/obj/item/stack/packageWrap, +/obj/item/reagent_scanner/adv, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) +"uwX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/maintenance/starboard) +"uxq" = ( +/mob/living/carbon/human/monkey, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/simulated/floor/grass, +/area/station/science/genetics) +"uxr" = ( +/obj/structure/morgue{ + dir = 8 + }, +/obj/effect/landmark/spawner/rev, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/station/medical/morgue) +"uxv" = ( +/obj/structure/closet/secure_closet/reagents, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "uzM" = ( /obj/machinery/door/airlock/maintenance{ name = "Xenobiology Maintenance" @@ -95523,6 +94416,10 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) +"uBQ" = ( +/obj/effect/landmark/start/atmospheric, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) "uBS" = ( /obj/machinery/mineral/stacking_unit_console, /turf/simulated/wall, @@ -95537,29 +94434,17 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port) -"uDd" = ( -/obj/machinery/door/airlock/command{ - id_tag = "cmoofficedoor2"; - name = "CMO's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +"uCI" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/purple{ + dir = 4 }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" }, -/turf/simulated/floor/plasteel/dark, -/area/station/command/office/cmo) +/area/station/engineering/atmos) +"uCR" = ( +/turf/simulated/wall/r_wall, +/area/station/engineering/atmos/distribution) "uDs" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved{ @@ -95573,6 +94458,10 @@ icon_state = "whitepurple" }, /area/station/maintenance/port) +"uDG" = ( +/obj/effect/landmark/start/doctor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/surgery/primary) "uDH" = ( /obj/machinery/door/poddoor{ density = 0; @@ -95594,13 +94483,6 @@ /turf/simulated/floor/plating, /area/station/security/permabrig) "uDO" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fssolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -95617,7 +94499,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/north) "uEq" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -95652,6 +94534,47 @@ }, /turf/simulated/floor/plating, /area/station/security/interrogation) +"uFz" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/mob/living/carbon/human/monkey, +/turf/simulated/floor/grass, +/area/station/science/genetics) +"uFH" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) +"uFJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable, +/obj/machinery/power/apc/directional/west, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "uFN" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -95674,6 +94597,25 @@ icon_state = "whitepurple" }, /area/station/maintenance/apmaint) +"uGj" = ( +/obj/structure/table/glass, +/obj/item/roller, +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 24; + name = "east bump" + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "uGm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -95692,6 +94634,12 @@ }, /turf/simulated/floor/wood, /area/station/service/clown) +"uGT" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "uGY" = ( /obj/machinery/alarm{ dir = 4; @@ -95715,6 +94663,11 @@ /obj/machinery/economy/vending/suitdispenser, /turf/simulated/floor/plasteel/dark, /area/station/public/locker) +"uHV" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/ne) "uJk" = ( /obj/structure/cable{ d1 = 4; @@ -95726,20 +94679,6 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) -"uJq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "arrival" - }, -/area/station/hallway/secondary/entry) "uJC" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -95771,6 +94710,20 @@ }, /turf/simulated/floor/engine/n20, /area/station/engineering/atmos) +"uJQ" = ( +/obj/structure/table, +/obj/machinery/photocopier/faxmachine{ + department = "Chief Medical Officer's Office" + }, +/obj/machinery/newscaster{ + dir = 1; + name = "south bump"; + pixel_y = -28 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "uKf" = ( /obj/structure/cable{ d2 = 2; @@ -95807,22 +94760,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/execution) -"uKw" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Chemistry Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/station/maintenance/aft) "uKP" = ( /obj/machinery/door/airlock/maintenance{ name = "Crematorium Maintenance" @@ -95844,6 +94781,31 @@ /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel/dark, /area/station/command/meeting_room) +"uLc" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"uLr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/ne) "uLy" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -95876,6 +94838,27 @@ icon_state = "whitepurplecorner" }, /area/station/science/research) +"uMa" = ( +/obj/machinery/bodyscanner, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) +"uMB" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "uMM" = ( /obj/structure/extinguisher_cabinet{ name = "west bump"; @@ -95884,27 +94867,12 @@ /obj/machinery/economy/vending/detdrobe, /turf/simulated/floor/plasteel/dark, /area/station/security/detective) -"uMN" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/masks, -/obj/item/storage/box/beakers, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whiteblue" +"uNq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 }, -/area/station/medical/exam_room) +/turf/simulated/floor/plating/airless, +/area/station/medical/virology) "uNz" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plating, @@ -95916,6 +94884,19 @@ icon_state = "bar" }, /area/station/maintenance/fsmaint) +"uOC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "uOZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/mineral/stacking_machine{ @@ -95942,23 +94923,48 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/robotics/showroom) -"uQK" = ( -/obj/machinery/bodyscanner, +"uPn" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24; + name = "south bump" + }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue" + icon_state = "darkblue" }, -/area/station/medical/surgery/secondary) +/area/station/medical/storage/secondary) +"uPp" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "uRn" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, /turf/simulated/floor/plating, /area/station/security/brig) +"uSD" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/north) "uSE" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/customs) +"uTw" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "uTx" = ( /obj/structure/cable{ d1 = 1; @@ -95973,6 +94979,50 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore2) +"uTD" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/drinks/coffee{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/drinks/dry_ramen, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) +"uUi" = ( +/obj/structure/table/glass, +/obj/item/storage/box/iv_bags{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/structure/sign/vacuum{ + pixel_y = -32 + }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Virology Lab"; + network = list("SS13","Medical"); + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "uUk" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/classic/normal{ @@ -95985,6 +95035,11 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "kitchenhall"; + name = "Kitchen Shutters"; + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "uUu" = ( @@ -96020,6 +95075,18 @@ icon_state = "vault" }, /area/station/turret_protected/ai) +"uVH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/carpet/purple, +/area/station/medical/psych) "uVM" = ( /obj/machinery/airlock_controller/air_cycler{ pixel_y = 25; @@ -96051,6 +95118,29 @@ /obj/item/target/syndicate, /turf/simulated/floor/plating, /area/station/security/range) +"uWm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/storage/secondary) +"uWt" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "uWB" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -96068,6 +95158,40 @@ }, /turf/simulated/floor/wood, /area/station/maintenance/theatre) +"uXN" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"uXP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet/purple, +/area/station/medical/psych) "uYc" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 5"; @@ -96161,16 +95285,28 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"uZp" = ( +/obj/structure/chair/sofa/right{ + color = "#6ae226" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "vaZ" = ( /obj/structure/grille, /obj/structure/window/plasmareinforced{ dir = 1 }, /obj/structure/window/plasmareinforced, -/obj/machinery/atmospherics/pipe/simple/insulated, /obj/machinery/atmospherics/meter{ layer = 3.3 }, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/station/science/toxins/mixing) "vbA" = ( @@ -96183,6 +95319,14 @@ icon_state = "whitepurple" }, /area/station/science/toxins/mixing) +"vbB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/thermomachine/freezer, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "vbN" = ( /obj/machinery/camera{ c_tag = "Exterior Armory"; @@ -96192,16 +95336,6 @@ }, /turf/space, /area/station/security/armory/secure) -"vbZ" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/closet/crate/freezer/iv_storage, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/secondary) "vcb" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -96216,7 +95350,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "vce" = ( /obj/structure/chair{ dir = 8 @@ -96233,32 +95367,54 @@ }, /area/station/security/main) "vcx" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "sol_vent" +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -25; - vent_link_id = "sol_vent"; - ext_door_link_id = "sol_door_ext"; - int_door_link_id = "sol_door_int"; - ext_button_link_id = "sol_btn_ext"; - int_button_link_id = "sol_btn_int" +/turf/simulated/floor/plasteel/dark, +/area/station/engineering/ai_transit_tube) +"vcE" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) +"vdI" = ( +/obj/machinery/keycard_auth{ + pixel_y = 26 + }, +/obj/machinery/computer/security/telescreen{ + pixel_x = 30; + network = list("Medical"); + name = "Chief Medical Officer Monitor" + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "veH" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/station/engineering/atmos) +"veV" = ( +/obj/machinery/atmospherics/binary/valve{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "vfh" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/unary/passive_vent{ @@ -96266,6 +95422,17 @@ }, /turf/space, /area/space/nearstation) +"vfi" = ( +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "vfD" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Maintenance" @@ -96293,6 +95460,11 @@ /obj/effect/spawner/window/reinforced/plasma/grilled, /turf/simulated/floor/plating, /area/station/engineering/controlroom) +"vhF" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "vhS" = ( /obj/machinery/firealarm{ dir = 4; @@ -96342,16 +95514,32 @@ icon_state = "redcorner" }, /area/station/security/permabrig) +"vji" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/sw) +"vjj" = ( +/obj/structure/grille/broken, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "vjm" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/disposalpipe/junction, /turf/simulated/floor/plasteel/white, /area/station/science/research) -"vjO" = ( -/obj/machinery/economy/vending/medical, -/turf/simulated/floor/plasteel/white, -/area/station/medical/storage) +"vjT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/starboard/east) "vko" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -96362,6 +95550,16 @@ icon_state = "darkred" }, /area/station/security/brig) +"vkP" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "vkU" = ( /obj/structure/cable{ d2 = 2; @@ -96387,7 +95585,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "vly" = ( /obj/structure/cable{ d1 = 4; @@ -96413,10 +95611,52 @@ /obj/effect/spawner/window/reinforced/tinted, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"vmp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "vmw" = ( /obj/structure/girder, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"vmP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "vnm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -96424,15 +95664,15 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "vnq" = ( /obj/structure/table/reinforced, /obj/item/seeds/lime, /obj/item/seeds/watermelon, /obj/item/seeds/grape, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/banana, /obj/machinery/door/window/classic/reversed{ dir = 8 }, @@ -96445,6 +95685,27 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) +"vnK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) +"vnQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) "vom" = ( /obj/machinery/atmospherics/air_sensor{ autolink_id = "air_sensor"; @@ -96468,10 +95729,25 @@ }, /turf/simulated/floor/plating, /area/station/security/processing) +"vpa" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "vpS" = ( /obj/effect/landmark/spawner/rev, /turf/simulated/floor/engine, /area/station/science/explab/chamber) +"vqu" = ( +/obj/effect/landmark/start/coroner, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "vrH" = ( /obj/structure/flora/junglebush, /obj/machinery/light/small{ @@ -96479,6 +95755,23 @@ }, /turf/simulated/floor/grass/jungle, /area/station/maintenance/fsmaint) +"vrP" = ( +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) +"vsw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/reception) "vsy" = ( /obj/machinery/alarm{ name = "north bump"; @@ -96519,17 +95812,32 @@ icon_state = "freezerfloor" }, /area/station/public/toilet) +"vtH" = ( +/obj/machinery/economy/vending/medical, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "vuu" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/supply/miningdock) +"vuX" = ( +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) "vvC" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "vvQ" = ( /obj/structure/chair{ dir = 4 @@ -96571,20 +95879,14 @@ /obj/item/weldingtool/research, /turf/simulated/floor/plasteel/white, /area/station/science/explab) -"vzo" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - autolink_id = "fssolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = 25; - req_access_txt = "13"; - vent_link_id = "fssolar_vent"; - ext_door_link_id = "fssolar_door_ext"; - int_door_link_id = "fssolar_door_int"; - ext_button_link_id = "fssolar_btn_ext"; - int_button_link_id = "fssolar_btn_int" +"vyO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" }, +/area/station/hallway/primary/aft/south) +"vzo" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -96626,7 +95928,12 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) +"vzF" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/stalkybush, +/turf/simulated/floor/grass, +/area/station/medical/medbay) "vzG" = ( /obj/structure/sign/radiation/rad_area, /turf/simulated/wall, @@ -96648,7 +95955,6 @@ /area/station/command/office/hos) "vzU" = ( /obj/structure/closet/walllocker/emerglocker/north{ - pixel_y = 0; pixel_x = -32 }, /turf/simulated/floor/plating, @@ -96674,7 +95980,18 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) +"vAX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) +"vBu" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "vBO" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 @@ -96741,6 +96058,24 @@ icon_state = "yellow" }, /area/station/supply/office) +"vCM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/sw) "vDg" = ( /obj/machinery/alarm{ dir = 1; @@ -96806,23 +96141,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"vEP" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/landmark/spawner/xeno, -/turf/simulated/floor/plating, -/area/station/medical/break_room) "vET" = ( /obj/structure/table/wood, /obj/item/stack/packageWrap, @@ -96833,6 +96151,33 @@ }, /turf/simulated/floor/plasteel/grimy, /area/station/public/vacant_office) +"vEY" = ( +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/camera{ + c_tag = "Medbay Front Desk"; + dir = 9; + network = list("Medical","SS13") + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + 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{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "vFs" = ( /obj/machinery/door/airlock/research{ name = "Toxins Storage" @@ -96872,6 +96217,24 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) +"vFI" = ( +/turf/simulated/wall, +/area/station/hallway/primary/central/ne) +"vFN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "vGg" = ( /obj/machinery/economy/vending/coffee, /obj/structure/sign/poster/official/random{ @@ -96894,6 +96257,25 @@ icon_state = "darkred" }, /area/station/security/warden) +"vGC" = ( +/obj/structure/extinguisher_cabinet{ + name = "east bump"; + pixel_x = 27 + }, +/obj/structure/table, +/obj/item/storage/firstaid/brute{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/brute, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "vGR" = ( /obj/machinery/alarm{ name = "north bump"; @@ -96916,7 +96298,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "vHE" = ( /obj/machinery/mass_driver{ dir = 8; @@ -96924,20 +96306,34 @@ }, /turf/simulated/floor/plating, /area/station/science/toxins/launch) +"vHF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/exit) "vId" = ( /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/beach/sand, /area/station/maintenance/fsmaint) -"vIN" = ( -/obj/machinery/access_button{ - autolink_id = "arrivalsn_btn_int"; - name = "exterior access button"; - pixel_x = 4; - pixel_y = 24 +"vIr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "vIR" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 8; @@ -96979,15 +96375,6 @@ icon_state = "neutralcorner" }, /area/station/public/fitness) -"vJP" = ( -/obj/machinery/door/airlock/external{ - id_tag = "escape_door_int"; - locked = 1; - name = "Escape External Access" - }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) "vKf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -97010,7 +96397,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "vKB" = ( /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/ppflowers, @@ -97041,20 +96428,27 @@ name = "Turbine Interior Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, /turf/simulated/floor/engine, /area/station/maintenance/incinerator) -"vMy" = ( -/obj/machinery/economy/vending/coffee, +"vMD" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/regular, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/light, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" + dir = 6; + icon_state = "whiteblue" }, -/area/station/medical/break_room) +/area/station/medical/sleeper) "vMI" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -97074,6 +96468,17 @@ icon_state = "darkred" }, /area/station/security/prison/cell_block) +"vOe" = ( +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) +"vOB" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "vOI" = ( /obj/machinery/atmospherics/trinary/mixer, /turf/simulated/floor/plasteel{ @@ -97081,6 +96486,13 @@ icon_state = "whitepurple" }, /area/station/science/toxins/mixing) +"vPa" = ( +/obj/structure/sign/greencross{ + pixel_x = 32 + }, +/obj/machinery/economy/vending/medical, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "vPd" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, @@ -97099,6 +96511,29 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) +"vPo" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) +"vPD" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "vPK" = ( /obj/structure/cable{ d2 = 8; @@ -97109,6 +96544,19 @@ }, /turf/simulated/floor/plating, /area/station/command/office/ce) +"vQm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/observation) "vSr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -97155,7 +96603,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/south) "vSW" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -97165,6 +96613,39 @@ icon_state = "red" }, /area/station/hallway/secondary/exit) +"vTs" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Workstation" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"vTw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/secondary/entry/west) +"vTx" = ( +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 28 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "vUu" = ( /obj/item/radio/intercom{ name = "east bump"; @@ -97229,6 +96710,44 @@ icon_state = "neutralfull" }, /area/station/engineering/hardsuitstorage) +"vVW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/maintenance/aft) +"vVX" = ( +/obj/machinery/iv_drip, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/station/medical/virology) +"vWI" = ( +/obj/structure/closet/secure_closet/reagents, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/status_display{ + layer = 4; + pixel_y = -32 + }, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "vXf" = ( /obj/machinery/atmospherics/air_sensor{ autolink_id = "n2o_sensor" @@ -97241,12 +96760,59 @@ icon_state = "neutral" }, /area/station/maintenance/fsmaint) +"vXU" = ( +/obj/structure/table/glass, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/item/stack/medical/bruise_pack/advanced{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/stack/medical/ointment/advanced{ + pixel_x = 4; + pixel_y = 5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "vYt" = ( /obj/machinery/atmospherics/air_sensor{ autolink_id = "co2_sensor" }, /turf/simulated/floor/engine/co2, /area/station/engineering/atmos) +"vYz" = ( +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/south) +"vYF" = ( +/obj/item/kirbyplants{ + icon_state = "plant-18" + }, +/turf/simulated/floor/wood, +/area/station/medical/psych) +"vZa" = ( +/obj/machinery/power/apc/directional/east, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/reception) "vZC" = ( /obj/structure/cable{ d2 = 2; @@ -97255,6 +96821,25 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"vZK" = ( +/obj/structure/table/glass, +/obj/item/folder/white{ + pixel_y = 3 + }, +/obj/item/paper_bin/nanotrasen, +/obj/item/pen/multi, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = -3 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "wai" = ( /obj/structure/cable{ d2 = 2; @@ -97285,30 +96870,33 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) +"wbi" = ( +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "wbk" = ( /obj/machinery/economy/vending/cart, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) -"wby" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) "wbZ" = ( /obj/machinery/atmospherics/unary/portables_connector, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, /area/station/science/toxins/mixing) +"wcu" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "wdo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -97330,6 +96918,26 @@ icon_state = "whitegreen" }, /area/station/medical/virology) +"wdS" = ( +/obj/machinery/firealarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Paramedic's Office"; + dir = 1; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/paramedic) "wdU" = ( /obj/structure/cable{ d1 = 4; @@ -97371,7 +96979,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/engine, /area/station/engineering/controlroom) "wew" = ( /obj/machinery/alarm{ @@ -97427,7 +97035,7 @@ name = "Turbine Exterior Airlock" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" @@ -97486,6 +97094,15 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) +"whp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "why" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -97504,10 +97121,43 @@ icon_state = "dark" }, /area/station/security/interrogation) -"wiR" = ( -/obj/structure/chair/office/light, -/turf/simulated/floor/plasteel/white, -/area/station/medical/reception) +"wil" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/west) +"wiD" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/patch_packs{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/storage/box/pillbottles{ + layer = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/storage) +"wiE" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/south) "wjm" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -97528,6 +97178,35 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/warden) +"wjN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/ne) +"wjY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos/glass{ + name = "Power Monitoring" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) +"wkv" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" + }, +/obj/structure/closet/l3closet, +/obj/item/clothing/mask/gas, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/medical/storage/secondary) "wkG" = ( /obj/machinery/door/airlock/maintenance{ name = "Auxiliary Storage" @@ -97544,12 +97223,31 @@ /obj/machinery/atmospherics/portable/scrubber, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) +"wkV" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/north) +"wkW" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "viroshutters"; + name = "Privacy Shutters"; + dir = 2 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "wll" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -97563,8 +97261,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/sorting) +"wlC" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/sw) "wmB" = ( /obj/structure/cable{ d2 = 4; @@ -97599,6 +97304,24 @@ icon_state = "darkredcorners" }, /area/station/security/prison/cell_block) +"wnk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "wnt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance/two, @@ -97616,12 +97339,34 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/service/kitchen) +"wob" = ( +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "wok" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/on{ dir = 4 }, /turf/simulated/floor/engine, /area/station/maintenance/incinerator) +"woM" = ( +/obj/structure/table/glass, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/clothing/mask/surgical{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/machinery/power/apc/directional/south, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "woT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -97662,16 +97407,37 @@ }, /turf/simulated/wall/r_wall, /area/station/engineering/engine/supermatter) -"wqO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre Storage" +"wpJ" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Operating Theatre 1" + }, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "sr1" }, +/obj/machinery/holosign/surgery{ + id = "surgery1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, /area/station/medical/surgery/primary) +"wqd" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/camera{ + c_tag = "Medbay Observation Room"; + dir = 4; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) "wre" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -97700,22 +97466,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/command/teleporter) -"wrr" = ( -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = 25; - vent_link_id = "apmaint2_vent"; - ext_door_link_id = "apmaint2_door_ext"; - int_door_link_id = "apmaint2_door_int"; - ext_button_link_id = "apmaint2_btn_ext"; - int_button_link_id = "apmaint2_btn_int" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "apmaint2_vent" +"wro" = ( +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel, -/area/station/maintenance/port) +/area/station/medical/virology) "wrE" = ( /obj/structure/table/reinforced, /obj/machinery/alarm{ @@ -97836,6 +97593,28 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/station/command/office/captain) +"wuc" = ( +/obj/machinery/door/airlock/medical/glass{ + id_tag = "medbayfoyer"; + name = "Medbay Entrance" + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "wul" = ( /turf/simulated/floor/beach/sand, /area/station/maintenance/fsmaint) @@ -97843,19 +97622,53 @@ /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel/dark, /area/station/command/bridge) -"wuL" = ( +"wuT" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Internal Medbay Maintenance" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /obj/structure/cable{ - d2 = 4; - icon_state = "0-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/simulated/floor/plating, -/area/station/medical/virology) +/area/station/medical/coldroom) +"wvz" = ( +/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/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/se) "wvH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "arrival" + }, +/area/station/hallway/secondary/entry/south) "wvM" = ( /obj/machinery/door/airlock{ name = "Internal Affairs Office" @@ -97892,6 +97705,32 @@ icon_state = "neutral" }, /area/station/maintenance/apmaint) +"wxq" = ( +/obj/effect/spawner/window/reinforced/polarized/grilled{ + id = "CMO" + }, +/obj/structure/cable, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/station/command/office/cmo) +"wyn" = ( +/obj/machinery/door/airlock/medical/glass{ + id_tag = "medbayfoyer"; + name = "Medbay Entrance" + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "wyA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass, @@ -97914,6 +97753,22 @@ icon_state = "vault" }, /area/station/command/bridge) +"wyS" = ( +/obj/item/kirbyplants, +/obj/structure/cable, +/obj/machinery/power/apc/important/directional/south, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/lounge) +"wzF" = ( +/obj/structure/chair/office/light, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/reception) "wzJ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -97947,6 +97802,22 @@ /obj/structure/dresser, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"wAG" = ( +/obj/machinery/bodyscanner{ + dir = 2 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/obj/machinery/camera{ + c_tag = "Morgue West"; + network = list("Medical","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/morgue) "wAN" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -97957,24 +97828,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) -"wAV" = ( -/obj/machinery/economy/vending/cigarette, -/obj/structure/extinguisher_cabinet{ - name = "east bump"; - pixel_x = 30 - }, -/obj/machinery/camera{ - c_tag = "Medbay Break Room"; - dir = 8; - network = list("SS13","Medical") - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/medical/break_room) "wAW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -97992,6 +97845,12 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"wBx" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/east) "wBO" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -98038,6 +97897,29 @@ }, /turf/simulated/floor/plating, /area/station/security/detective) +"wDE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) "wDU" = ( /obj/machinery/chem_dispenser, /obj/item/reagent_containers/glass/beaker/large, @@ -98052,7 +97934,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "wER" = ( /obj/structure/window/reinforced{ dir = 4 @@ -98073,6 +97955,12 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/sorting) +"wFp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/cryo) "wGb" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, @@ -98081,6 +97969,26 @@ icon_state = "whitepurple" }, /area/station/science/break_room) +"wGz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "wGL" = ( /obj/machinery/newscaster/security_unit{ dir = 4; @@ -98089,11 +97997,33 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/command/bridge) +"wGT" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/station/medical/sleeper) "wHe" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, /obj/effect/spawner/window/reinforced/plasma/grilled, /turf/simulated/floor/plating, /area/station/science/toxins/mixing) +"wHU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "wIb" = ( /obj/effect/spawner/random_spawners/dirt_frequent, /obj/structure/closet/crate, @@ -98132,6 +98062,15 @@ "wJr" = ( /turf/simulated/wall/r_wall, /area/station/science/break_room) +"wJE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "wJP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, /obj/effect/turf_decal/delivery/hollow, @@ -98158,23 +98097,17 @@ icon_state = "dark" }, /area/station/maintenance/apmaint) -"wKI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +"wKG" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "arrival" + icon_state = "neutralfull" }, -/area/station/hallway/secondary/entry) +/area/station/engineering/atmos) +"wKI" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/lounge) "wKL" = ( /obj/machinery/light/small{ dir = 1 @@ -98187,6 +98120,14 @@ temperature = 80 }, /area/station/science/xenobiology) +"wLR" = ( +/obj/structure/morgue, +/obj/effect/landmark/spawner/rev, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluecorners"; + dir = 1 + }, +/area/station/medical/morgue) "wMd" = ( /obj/machinery/camera{ c_tag = "Security Armory"; @@ -98202,6 +98143,12 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) +"wMS" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/medical/surgery) "wNJ" = ( /obj/structure/table/reinforced, /obj/item/tank/jetpack/carbondioxide{ @@ -98210,14 +98157,24 @@ }, /obj/item/tank/jetpack/carbondioxide, /obj/structure/cable, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, /obj/effect/turf_decal/delivery, +/obj/machinery/power/apc/critical/directional/east{ + shock_proof = 1 + }, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) +"wOk" = ( +/obj/structure/table/glass, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 5 + }, +/obj/item/reagent_containers/dropper/precision, +/obj/item/reagent_containers/glass/beaker, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "wOE" = ( /obj/structure/transit_tube_pod{ dir = 8 @@ -98245,6 +98202,17 @@ icon_state = "brown" }, /area/station/supply/sorting) +"wPT" = ( +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "wRc" = ( /obj/machinery/chem_heater, /obj/item/radio/intercom{ @@ -98261,6 +98229,19 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"wRi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) +"wRp" = ( +/obj/effect/landmark/lightsout, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/central/se) "wRN" = ( /obj/machinery/atmospherics/unary/outlet_injector/on{ autolink_id = "air_in"; @@ -98271,7 +98252,7 @@ "wSw" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel/dark, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "wSB" = ( /obj/machinery/door/poddoor{ density = 0; @@ -98287,6 +98268,14 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/permabrig) +"wSK" = ( +/obj/machinery/atmospherics/trinary/filter/flipped{ + dir = 1; + filter_type = 2; + name = "N2 Filter" + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "wSO" = ( /obj/structure/sign/vacuum/external{ pixel_y = -32 @@ -98299,7 +98288,7 @@ dir = 10; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "wSU" = ( /obj/structure/cable{ d1 = 1; @@ -98393,7 +98382,7 @@ /turf/simulated/floor/plasteel{ icon_state = "brown" }, -/area/station/hallway/primary/fore) +/area/station/supply/lobby) "wVz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -98407,7 +98396,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "wVM" = ( /obj/machinery/access_button{ autolink_id = "enginen_btn_int"; @@ -98450,7 +98439,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "wWl" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -98478,6 +98467,23 @@ icon_state = "neutral" }, /area/station/maintenance/port) +"wWW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"wWX" = ( +/obj/machinery/computer/pandemic, +/obj/effect/turf_decal/delivery/green, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "wXn" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/polarized/grilled{ @@ -98498,26 +98504,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/starboard) -"wYm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/obj/machinery/holosign/surgery{ - id = "surgery2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/dark, -/area/station/medical/surgery/secondary) +/area/station/hallway/primary/starboard/north) "wYv" = ( /obj/machinery/door/airlock/security{ name = "Armory" @@ -98566,16 +98553,6 @@ icon_state = "dark" }, /area/station/security/interrogation) -"wYZ" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) "wZa" = ( /obj/structure/window/reinforced{ dir = 1; @@ -98593,6 +98570,17 @@ }, /turf/simulated/floor/plating, /area/station/security/permabrig) +"wZb" = ( +/obj/structure/morgue, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/landmark/spawner/rev, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "wZe" = ( /obj/machinery/light/small{ dir = 8 @@ -98603,31 +98591,22 @@ }, /area/station/maintenance/fsmaint) "wZD" = ( -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -57; - req_access_txt = "10;13"; - vent_link_id = "stationai_vent"; - ext_door_link_id = "stationai_door_ext"; - int_door_link_id = "stationai_door_int"; - ext_button_link_id = "stationai_btn_ext"; - int_button_link_id = "stationai_btn_int" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/spawner/airlock/e_to_w/engineer{ + req_access_txt = 13 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/wall, +/area/station/maintenance/port) +"wZK" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Internal Medbay Maintenance" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown" }, -/turf/simulated/floor/plasteel/dark, -/area/station/engineering/ai_transit_tube) +/turf/simulated/floor/plating, +/area/station/medical/coldroom) "xab" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -98673,6 +98652,14 @@ icon_state = "wood-broken5" }, /area/station/maintenance/apmaint) +"xbI" = ( +/obj/effect/turf_decal/woodsiding{ + dir = 1 + }, +/obj/item/toy/plushie/grey_cat, +/obj/structure/table/wood, +/turf/simulated/floor/wood, +/area/station/medical/psych) "xbS" = ( /obj/structure/cable{ d1 = 1; @@ -98731,9 +98718,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/access_button{ - autolink_id = "sol_btn_int"; + autolink_id = "engines_btn_int"; name = "interior access button"; pixel_x = -25; pixel_y = -25 @@ -98743,7 +98729,23 @@ initialize_directions = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/west) +"xcR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "xda" = ( /obj/item/cultivator, /obj/item/reagent_containers/glass/bottle/nutrient/ez, @@ -98760,6 +98762,36 @@ /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, /area/station/maintenance/library) +"xdN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"xeb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) "xgm" = ( /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) @@ -98794,16 +98826,25 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/white, /area/station/command/office/rd) -"xgR" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) "xha" = ( /obj/item/chair/stool/bar, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"xhf" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/surgery/observation) +"xhh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "xhi" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -98829,6 +98870,28 @@ /obj/machinery/magnetic_module, /turf/simulated/floor/plasteel, /area/station/security/range) +"xib" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Cloning" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) +"xid" = ( +/obj/structure/barricade/wooden, +/turf/simulated/floor/plating, +/area/station/maintenance/aft) "xie" = ( /obj/machinery/door/firedoor, /obj/machinery/flasher{ @@ -98852,6 +98915,31 @@ icon_state = "vault" }, /area/station/turret_protected/aisat) +"xiK" = ( +/obj/machinery/photocopier, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"xjD" = ( +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/paramedic) "xjE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -98862,12 +98950,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"xkE" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whiteblue" - }, -/area/station/medical/reception) "xkJ" = ( /obj/machinery/atmospherics/binary/pump{ name = "burn chamber to port"; @@ -98878,34 +98960,6 @@ icon_state = "whitepurple" }, /area/station/science/toxins/mixing) -"xlB" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Virology Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/medical/virology) -"xlF" = ( -/obj/structure/closet/secure_closet/medical3, -/obj/machinery/newscaster{ - name = "north bump"; - pixel_y = 28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) "xlS" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/barricade/wooden, @@ -98932,14 +98986,20 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/teleporter) -"xnw" = ( -/obj/machinery/door/airlock/external{ - id_tag = "apsolar_door_ext"; - locked = 1; - name = "Engineering External Access" +"xnr" = ( +/obj/machinery/computer/crew{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/station/command/office/cmo) +"xnw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -98962,6 +99022,28 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/port) +"xnL" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "viroshutters"; + name = "Privacy Shutters" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/station/medical/virology) "xom" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -98974,6 +99056,12 @@ }, /turf/simulated/floor/wood, /area/station/public/pet_store) +"xoT" = ( +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel{ + icon_state = "purplefull" + }, +/area/station/hallway/primary/aft/south) "xph" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -99036,7 +99124,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "xrg" = ( /obj/structure/window/reinforced{ dir = 4 @@ -99058,7 +99146,16 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) +"xsh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/engine, +/area/station/medical/chemistry) "xsz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/disposal, @@ -99070,10 +99167,39 @@ icon_state = "whitepurple" }, /area/station/science/toxins/mixing) +"xsN" = ( +/obj/machinery/power/apc/directional/east, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "xtS" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, /area/station/maintenance/port) +"xtU" = ( +/obj/machinery/door/airlock/virology{ + name = "Virology Bedroom" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) "xtZ" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, @@ -99136,15 +99262,6 @@ icon_state = "darkred" }, /area/station/security/warden) -"xwk" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 12 - }, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/station/medical/surgery/primary) "xwU" = ( /obj/machinery/economy/slot_machine, /turf/simulated/floor/plating, @@ -99210,51 +99327,39 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/range) -"xyC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "medbayfoyer"; - name = "Medbay Entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/reception) "xyI" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + name = "east bump" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "xzp" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) +"xzV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; - d2 = 4; - icon_state = "1-4" + d2 = 2; + icon_state = "1-2" }, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/medical/virology) +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/lightsout, +/turf/simulated/floor/plasteel/white, +/area/station/medical/medbay) +"xzZ" = ( +/obj/structure/sign/chemistry, +/turf/simulated/wall/r_wall, +/area/station/medical/chemistry) "xAc" = ( /obj/structure/railing/corner{ dir = 1 @@ -99264,6 +99369,29 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"xAK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) +"xBq" = ( +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteblue" + }, +/area/station/medical/storage) "xBJ" = ( /obj/structure/railing{ dir = 10; @@ -99294,10 +99422,42 @@ }, /turf/simulated/floor/engine/vacuum, /area/station/engineering/atmos) +"xBR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteyellow" + }, +/area/station/medical/chemistry) "xCC" = ( /obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_2) +"xCE" = ( +/obj/structure/morgue{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/station/medical/morgue) "xCH" = ( /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment{ @@ -99307,14 +99467,39 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) -"xCS" = ( +/area/station/hallway/primary/fore/east) +"xCT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, +/obj/effect/landmark/lightsout, +/turf/simulated/floor/plasteel/white, /area/station/medical/virology) +"xDk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "xDn" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -99326,6 +99511,18 @@ icon_state = "whitebluecorner" }, /area/station/medical/reception) +"xDT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "xEz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 8 @@ -99334,6 +99531,22 @@ temperature = 80 }, /area/station/science/xenobiology) +"xES" = ( +/obj/machinery/smartfridge/secure/chemistry/virology/preloaded, +/obj/structure/reagent_dispensers/virusfood{ + pixel_x = -30 + }, +/obj/machinery/requests_console{ + department = "Virology"; + departmentType = 3; + name = "Virology Requests Console"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "xFp" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -99364,6 +99577,45 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"xFI" = ( +/obj/machinery/economy/vending/wallmed{ + layer = 3.3; + name = "Emergency NanoMed"; + pixel_x = 28 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) +"xFW" = ( +/obj/effect/spawner/random_spawners/fungus_maybe, +/turf/simulated/wall, +/area/station/maintenance/aft) +"xFZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/maintenance/starboard) +"xGb" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "xGg" = ( /obj/machinery/door/window/classic/reversed{ dir = 8; @@ -99394,6 +99646,14 @@ icon_state = "darkred" }, /area/station/security/warden) +"xGo" = ( +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/delivery/white/hollow, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "xGw" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -99415,20 +99675,33 @@ }, /turf/simulated/floor/plating, /area/station/command/office/rd) -"xHj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +"xHg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/camera{ + c_tag = "Virology Isolations"; + network = list("SS13","Medical"); + dir = 8 }, /turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" + dir = 6; + icon_state = "whitegreen" }, -/area/station/medical/surgery/primary) +/area/station/medical/virology) "xHl" = ( /obj/machinery/economy/vending/sustenance, /obj/structure/cable{ @@ -99446,31 +99719,22 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/range) -"xHC" = ( -/obj/structure/plasticflaps{ - opacity = 1 - }, -/obj/machinery/navbeacon{ - codes_txt = "delivery"; - dir = 8; - location = "Medbay" - }, -/obj/machinery/door/window/classic/reversed{ - dir = 4; - name = "Medical Delivery" - }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ +"xHN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/medical/storage) +/area/station/hallway/secondary/entry/east) +"xIm" = ( +/obj/structure/closet/walllocker/emerglocker/west, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitebluecorner" + }, +/area/station/medical/medbay) "xIo" = ( /obj/structure/bed, /obj/structure/cable{ @@ -99512,6 +99776,12 @@ icon_state = "neutral" }, /area/station/maintenance/port) +"xIH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "xIJ" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -99519,6 +99789,24 @@ icon_state = "darkred" }, /area/station/security/main) +"xIN" = ( +/mob/living/simple_animal/hostile/retaliate/kangaroo{ + name = "Darwin" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/command/office/cmo) "xJq" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -99591,19 +99879,6 @@ icon_state = "bar" }, /area/station/maintenance/fsmaint) -"xKN" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel{ - icon_state = "cmo" - }, -/area/station/medical/storage) -"xKW" = ( -/obj/structure/closet/secure_closet/medical2, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" - }, -/area/station/medical/surgery/secondary) "xKX" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -99633,7 +99908,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/west) "xLh" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -99644,15 +99919,19 @@ }, /area/station/public/fitness) "xLC" = ( -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" +/obj/structure/closet/secure_closet/paramedic, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue" }, -/obj/effect/spawner/window/reinforced/polarized{ - id = "Psych" +/area/station/medical/paramedic) +"xLM" = ( +/obj/machinery/sleeper, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" }, -/turf/simulated/floor/plating, -/area/station/medical/psych) +/area/station/medical/sleeper) "xLV" = ( /turf/space, /area/space/nearstation) @@ -99686,6 +99965,20 @@ icon_state = "vault" }, /area/station/command/bridge) +"xOd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/chemistry) +"xOG" = ( +/obj/structure/table/glass, +/obj/item/toy/figure/crew/virologist, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "xOZ" = ( /obj/machinery/atmospherics/portable/canister/sleeping_agent, /obj/effect/decal/cleanable/dirt, @@ -99699,6 +99992,15 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/ai_monitored/storage/eva) +"xPh" = ( +/obj/item/kirbyplants, +/obj/machinery/requests_console{ + department = "Arrival Shuttle"; + name = "Arrival Shuttle Requests Console"; + pixel_x = 30 + }, +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/arrival/station) "xPn" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -99714,24 +100016,13 @@ /obj/item/kirbyplants, /turf/simulated/floor/plasteel/white, /area/station/science/explab) -"xPJ" = ( -/obj/machinery/door/airlock/external{ - id_tag = "sol_door_int"; - locked = 1; - name = "Arrivals External Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) "xPQ" = ( /obj/machinery/economy/vending/coffee, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "xPW" = ( /obj/machinery/light, /turf/simulated/floor/carpet, @@ -99799,17 +100090,6 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) -"xRm" = ( -/obj/machinery/access_button{ - autolink_id = "escape_btn_ext"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 24; - req_access_txt = "10;13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "xRD" = ( /obj/effect/spawner/random_spawners/cobweb_right_frequent, /obj/structure/closet/firecloset, @@ -99830,6 +100110,17 @@ icon_state = "neutral" }, /area/station/maintenance/port) +"xRQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/iv_drip, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreen" + }, +/area/station/medical/virology) "xRX" = ( /obj/structure/cable{ d1 = 4; @@ -99838,6 +100129,14 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/explab) +"xSf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/medical/cloning) "xSg" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -99862,8 +100161,50 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"xTi" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 0; + name = "Port to Filter" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/engineering/atmos) +"xTt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/virology) +"xUg" = ( +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/item/storage/box/monkeycubes, +/obj/machinery/camera{ + c_tag = "Virology Pen"; + network = list("SS13","Medical") + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen" + }, +/area/station/medical/virology) "xUI" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /turf/simulated/floor/plasteel, /area/station/security/armory/secure) "xVe" = ( @@ -99882,6 +100223,14 @@ /obj/structure/grille, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"xVu" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/iv_drip, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/cryo) "xVF" = ( /obj/structure/cable{ d2 = 2; @@ -99890,15 +100239,12 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/command/customs) -"xWD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +"xVK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "xXi" = ( /obj/structure/cable{ d1 = 1; @@ -99931,11 +100277,25 @@ name = "Custodial Junction"; sort_type_txt = "22" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) +"xXW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/station/engineering/controlroom) "xYp" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor{ @@ -99960,6 +100320,12 @@ icon_state = "dark" }, /area/station/security/permabrig) +"xYO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/atmos) "xYX" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 4; @@ -99982,6 +100348,15 @@ /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"yal" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/north) +"yaM" = ( +/obj/structure/chair/stool{ + dir = 8 + }, +/turf/simulated/floor/plasteel/white, +/area/station/medical/reception) "ycH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass, @@ -100096,10 +100471,19 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central/south) +/area/station/hallway/primary/central) "ygH" = ( /turf/simulated/wall/r_wall, /area/station/security/permabrig) +"yhn" = ( +/obj/structure/mopbucket/full, +/obj/item/mop, +/obj/item/caution, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbluecorners" + }, +/area/station/medical/storage/secondary) "yib" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -100132,30 +100516,54 @@ /obj/effect/spawner/window/reinforced/plasma/grilled, /turf/simulated/floor/plating, /area/station/engineering/controlroom) +"yis" = ( +/obj/structure/table, +/obj/item/storage/bag/dice, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/station/medical/break_room) "yiO" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/plasteel, /area/station/maintenance/port2) -"yjn" = ( -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +"yjA" = ( +/obj/machinery/power/apc/directional/south, +/obj/item/kirbyplants{ + icon_state = "plant-10" }, +/obj/structure/cable, +/turf/simulated/floor/wood, +/area/station/medical/psych) +"yjG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 28 + }, /turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" + dir = 1; + icon_state = "neutralcorner" }, -/area/station/medical/surgery/secondary) +/area/station/hallway/primary/central/north) "yki" = ( /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, @@ -100165,18 +100573,6 @@ icon_state = "darkredfull" }, /area/station/security/main) -"ykl" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown" - }, -/turf/simulated/floor/plasteel, -/area/station/maintenance/starboard) "ykx" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -117999,7 +118395,7 @@ aaa aaa dij dij -aGW +sso dij dij aaa @@ -119634,7 +120030,7 @@ cCy hkk aaa abj -iYu +acF cHA aaa aaa @@ -119891,8 +120287,8 @@ maf hkk aaa cHA -uci -cHA +ddh +wZD aaa aaa aaa @@ -120148,7 +120544,7 @@ cTi hkk aaa cHA -wrr +cCq cHA aaa aaa @@ -120329,7 +120725,7 @@ abj abj abj abj -iKT +atK abj aLT aNT @@ -120405,7 +120801,7 @@ sZp cHA aaa cHA -gHC +drn cHA aaa aaa @@ -120586,8 +120982,8 @@ aaa abj abj gmT -jEE -gmT +jCQ +iYu acF aGZ wok @@ -120879,9 +121275,9 @@ bGs bwN abj bVs -bXG +iIS bYJ -abj +tAi nmF abj bXU @@ -121138,7 +121534,7 @@ abj dVS abj abj -abj +fYS nmF abj bXU @@ -121392,10 +121788,10 @@ bEI bGv bwN qGf -dcp -qGf -qGf +vcx +sWx abj +fYS giK abj bXU @@ -121649,9 +122045,9 @@ bEK bGw bwN bJZ -wZD bVt qGf +abj bZf fRW qYL @@ -121906,7 +122302,7 @@ bEM bGx bwN qGf -sWx +vcx qGf qGf bRT @@ -122111,7 +122507,7 @@ aaa aaa dij dij -aGW +sso dij abj aaa @@ -122121,7 +122517,7 @@ abj aaa abj dij -aGW +sso dij dij abj @@ -122413,7 +122809,7 @@ aOg acF bzL byi -bzL +mPU bBt rcq bEN @@ -122667,8 +123063,8 @@ lOm odQ wWl aOg -rHp -tGB +acF +eml tls eml riQ @@ -123176,13 +123572,13 @@ aYO keu rcz qJW -aOg -qJW -rcz -keu -aOg -aOg -bwP +uCR +ghB +ghP +gKe +uCR +uCR +uCR byl byl byl @@ -123439,7 +123835,7 @@ olZ btg buo bvD -bwP +uCR bym bzN bIx @@ -123672,7 +124068,7 @@ fgh aIy aJP aLg -aMI +aMC jMh aPH aQT @@ -123945,15 +124341,15 @@ aYy aYy aYy bdo -bkz +aYy bmv aUi bpA brB -aTZ -ban +hZn +adU bvF -bwP +uCR bzO bzN bBy @@ -124191,16 +124587,16 @@ aOb aPH aQV aSD -aSc -aVF -aXj -aYz -bam -bam +aPF +aSI +aVO +ban bam ban ban -aXW +ban +uTw +rIO aYt bkA bmw @@ -124210,7 +124606,7 @@ brC bti buq bvG -bwP +uCR byp bzN bBy @@ -124444,24 +124840,24 @@ aGZ aJS aLj aMH -aOe -aPx +aOb +aPH aQW -aSE -aUa -aVG -aXk -aYA -aYA -bbO -aYA -beJ -bgc -aXk -biO +aSD +iYX +aVF +ban +dnW +tNx +lth +fgF +dnW +wKG +lfU +aYt bkB bmx -aUi +gns bpC brD btj @@ -124691,8 +125087,8 @@ axG ayF ayF aAf -aBh aLq +jYK aLq aLq axG @@ -124705,26 +125101,26 @@ aOg aPy aQX aSD -aPF -aSI -aXl -aVO +mQm +vnQ +qIK ban -bbP ban ban +fzp +ban +jgG ban -bhj biP -bkB +eEP bmy jAs bpD brE -ban +adU bus bvI -bwP +uCR byl byl byl @@ -124942,36 +125338,36 @@ abj atd atd atd -aLs +ivS aFd axI aFd ayT -aCi -aCi +gCA aDe -aFd +gCA +rvN aFd aHo aJF aGZ aGZ hJh -aMJ +aNT aOg aPz aQY -aSF -aUb -aVH -aXm -beJ -bao -bbQ -bdp -beJ -bgd -aYA +aSD +aUc +aVF +ban +ban +ban +ban +ban +ban +jgG +ban biQ bkC bmz @@ -124986,7 +125382,7 @@ bys bzR bBA bDs -bIx +jnk byl bIx bKC @@ -125205,9 +125601,9 @@ axK ayJ azU ayR -aAg -aCV -aEd +dDW +ayR +wSK aFc aFW aJH @@ -125217,28 +125613,28 @@ aLn aML aOg aPH -spS -iiY +aQZ +aSD veH -aVI -aXn +aVF +aYD aYD cOB -bap cOB -beK +cOB +ban aXq -bhk +aXW biT -bkM +xYO bmA -aOb +bnW bpF -aOb -aOg -aOg -aOg -bwP +uCR +uCR +uCR +uCR +uCR byl byl bBB @@ -125464,7 +125860,7 @@ ayV aCS aCS aDh -aFl +aHc aHc aEn aHe @@ -125475,21 +125871,21 @@ aMM fun aUM aUM -aSD -aUc -aVJ -aXo -aXo -aOb -aOb -aOb -aXo -aXo -bhl +aSE +kKK +aVH +ggW +aYA +aYA +bbO +aYA +bgc +uPp +ban biR bkE bmB -bnX +aOb bpG brG btm @@ -125730,26 +126126,26 @@ aCk wAP aMN aOg -aPH +bHy aQZ aSD aUc -aVI -aOb -aYF -baq -bbR -bdq -beL -aOb -bhk -biT +aVF +jgG +ban +ban +ban +ban +ban +jgG +ban +rgn bkF bmC -aYK +kuI bpH brH -aYK +uBQ buv aOg bwW @@ -125971,7 +126367,7 @@ atd aub auG avC -awL +awR axM ayM aAd @@ -125980,8 +126376,8 @@ aEk npF aCj aEf -aFf -aHl +ahD +aHh aIE atd aLp @@ -125991,22 +126387,22 @@ aPC aRb aSD aUc -aVI -kzA -aYG -bdr -bbS -bdr +aVF +wKG +aXk +bdp +bbQ +bdp beM ggW bhn biS -bkF -bmD -bnY +mhf +bkM +aXo bpI -brI -brI +buw +buw buw bvK bwX @@ -126016,7 +126412,7 @@ bBE bKp bEX bGD -bIA +bEX bKp bMq bGz @@ -126227,8 +126623,8 @@ abj atd aue auI -aLu -awH +xXW +aHp axO ayM azY @@ -126244,27 +126640,27 @@ atd aPE aRa aOg -aPH +fFy aRc aSD aUc -aVI -aOb -aYH -bas -bbT -bds -eON -aOb -bhk +aVF +jgG +rUU +iUf +iUf +iUf +dnW +nae +ban aZm -bkF +mhf bmE -bnZ -bpJ -brJ +aXo +btn btn -bux +btn +aOb aOg byl byl @@ -126485,7 +126881,7 @@ atd aub auI avE -awN +awR axP ayM azZ @@ -126495,7 +126891,7 @@ aCY aEh aFh aJs -aHl +aHh aIG aJV aLs @@ -126505,19 +126901,19 @@ aPH aQZ aSD aUc -aVL -aXo -aXo -aOb -aOb -aOb -aXo -aXo +aVF +jgG +jVW +xTi bho -aZm +bho +bho +uCI +bho +pgx bkI bmF -boa +bpK bpK brK bto @@ -126528,7 +126924,7 @@ bOg bzW bBG bKp -bIA +bEX bGF bEX bKp @@ -126763,19 +127159,19 @@ aTT aSH aUd aVM -aXq -aYI -bhp -mfl -bhp -beO -aXn +jVW +beJ +beJ +beJ +beJ +beJ +beJ bhk biU bkJ bmG bob -bpL +bob bob btp buz @@ -126998,8 +127394,8 @@ aaa atd aub auI -avG -awP +avE +awR axR ayM aAb @@ -127009,7 +127405,7 @@ aDa aEi aFh aFY -aHl +xVK aII lZR aLu @@ -127020,17 +127416,17 @@ aQZ aSD aUe aVN -aXr +bau aYJ bau -oZY +bau bau aXG -aXr +bau sGz biV bkK -bmH +brL boc bpM brL @@ -127255,7 +127651,7 @@ abj atd aue auI -aLs +wJE awQ axS ayM @@ -127266,7 +127662,7 @@ aDb ayM ayM aFZ -aHh +xVK aID atd mKM @@ -127284,9 +127680,9 @@ bbV aYK aXN ijT +jgG mzZ -ban -bkM +osF bmI aOg aOg @@ -127513,7 +127909,7 @@ atd aub auG avC -awL +awR axN ayM aAd @@ -127523,7 +127919,7 @@ wpA aDc aEj aGa -aHl +xVK nwK atd atd @@ -127537,13 +127933,13 @@ aVF bgg bkL bgg -aTZ -ban +iXM +kQO tiC bgg +emu ban -ban -bkM +osF bmJ aOg brN @@ -127769,7 +128165,7 @@ abj atd aub axl -avI +xhh awR axL ayP @@ -127780,7 +128176,7 @@ ayL aDc aEj aFi -aHh +xVK wer aJY aLv @@ -127793,12 +128189,12 @@ aUf aVP aXu aYL -aXu +nrj hlY bbW beP bgh -bhp +vnK bhp bkN bmK @@ -127902,7 +128298,7 @@ abj abj abj aaa -mVF +dYJ abj aaa dij @@ -128026,10 +128422,10 @@ abj atd auf axl -avI -awS +xhh +awR axT -ayI +aFd azV aCU aCU @@ -128042,7 +128438,7 @@ pmT rtU aLw aMT -aOg +wjY aPH aRi aSK @@ -128058,7 +128454,7 @@ bgi jJc biZ bkO -bmL +aQZ aOg bpQ brP @@ -128160,7 +128556,7 @@ aaa abj nKk xnw -nKk +rtH abj dij aaa @@ -128283,15 +128679,15 @@ abj atd aug atd -avI -awT -axV +xhh +awR +kmE +ayR +ayR ayR -aAg ayR -aAg aDd -aEm +aFj aFj aGg odG @@ -128540,7 +128936,7 @@ abj atd atd atd -aLu +kTc aHp axU ayK @@ -128556,7 +128952,7 @@ atd atd atd atd -aOl +aOg aOg aOg aOg @@ -130391,7 +130787,7 @@ bDF bOj brW bjU -blL +kIG bWE bYi drn @@ -130647,7 +131043,7 @@ bKu bBR bOr brW -bty +tDU vHe bWH cHA @@ -131075,10 +131471,10 @@ aaa abj abj abj -grB +iUU aef aef -grB +iUU abj abj abj @@ -131095,8 +131491,8 @@ abj abj abj abj -grB -udZ +iUU +qke rJk abj abj @@ -131161,7 +131557,7 @@ bBR bBR bOt brW -bty +jyz vHe bWH bYj @@ -131332,29 +131728,29 @@ abj abj aaa aaa -grB -afb -afb -grB +iUU +pGg +pGg +iUU abj aaa aaa aaa aaa abj -grB -grB -grB -grB -grB -grB +iUU +iUU +iUU +iUU +iUU +iUU aaa aaa aaa abj -grB -vcx -grB +iUU +ahQ +iUU aaa aaa aaa @@ -131418,7 +131814,7 @@ bBT bBT bOu brW -bty +jyz vHe bWH bYk @@ -131584,38 +131980,38 @@ aaa aaa aaa adb -grB +iUU adb -grB -grB -grB -grB +iUU +iUU +iUU +iUU aef aef adb -grB -grB +iUU +iUU adb -grB -grB -grB -grB +iUU +iUU +iUU +iUU aik aiE -afb +pGg ajf -grB -grB -grB -grB -adb -grB -xPJ -grB -adb -adb -adb +iUU +iUU +iUU +iUU adb +iUU +eKO +iUU +aAr +aAr +aAr +aAr aaa uzN aqC @@ -131675,8 +132071,8 @@ bKB bME bOw brW -bSy -vHe +fGs +pSW bWH ctU bZL @@ -131739,7 +132135,7 @@ ecs dyz iTn wbZ -vaZ +ehV wRN cKu sMj @@ -131838,10 +132234,10 @@ aaa aaa aaa aaa -grB -grB -grB -vIN +iUU +iUU +uci +pGg tXb adZ san @@ -131863,8 +132259,8 @@ adZ adZ adZ adZ -aip -agA +rwY +age agg adZ xcL @@ -131872,7 +132268,7 @@ oMA qtk ani wSO -adb +aAr aaa uzN aqz @@ -132095,41 +132491,41 @@ aaa aaa aaa aaa -nXF +aeN pUC -rtH +aeN adt afh -aea +tnU fCA -asB +ahg eYW -asB -asB -asB -asB -asB -asB ahg -ajZ -ajZ -ajZ -ajZ -cMP -ajZ -ajZ -ajZ -ajZ ahg -ajZ -ajZ -ajZ +ahg +ahg +ahg +ahg +ahg +vTw +vTw +vTw +vTw +cMP +vTw +vTw +vTw +vTw +rPU +vTw +vTw +vTw amA -amM +hhn anu wvH gEs -adb +aAr aaa apG aqD @@ -132253,7 +132649,7 @@ lwr vhS nBP xkJ -vaZ +ehV jzV cRy qwo @@ -132352,9 +132748,9 @@ aaa aaa aaa aaa -grB -grB -grB +iUU +iUU +iUU adu sMV aeb @@ -132367,7 +132763,7 @@ eCj aeb aeb ltw -agB +aeb aeb aeb aeb @@ -132380,13 +132776,13 @@ aeb agB aeb mFy -aeb +wil reW -amL -anv -ank -anP -adb +saK +kWK +ant +anL +aAr aaa uzN aqE @@ -132612,38 +133008,38 @@ aaa aaa aaa adb -grB +iUU adb -grB -grB -grB +iUU +iUU +iUU adb -grB -grB +iUU +iUU adb -grB -grB +iUU +iUU adb -grB -grB -grB -grB -aio +iUU +iUU +iUU +iUU +pjO aiF aiI -ajy -grB -grB -grB -grB +pvf +iUU +iUU +iUU +iUU adb -grB adb adb adb +aAr sgZ anK -adb +aAr aaa uzN uzN @@ -132884,12 +133280,12 @@ abj aaa aaa abj -grB -grB -grB -grB -grB -grB +iUU +iUU +iUU +iUU +iUU +iUU abj aaa abj @@ -132897,10 +133293,10 @@ aaa aaa aaa aaa -adb +aAr ezV anL -adb +aAr abj abj abj @@ -132960,9 +133356,9 @@ bFn bMH bOy bDQ -bty -vHe -bWH +ezp +pCt +exy bYj bZP cbK @@ -133154,10 +133550,10 @@ abj abj abj abj -grB +dGS ant -anP -adb +anL +aAr awX awX awX @@ -133217,9 +133613,9 @@ bFo bMI bOz bDQ -bjU +ojv blL -bWE +gEy bYj jRu cbL @@ -133411,10 +133807,10 @@ aaa aaa abj aaa -grB +dGS ant -anP -adb +anL +aAr aor aoR aqF @@ -133475,8 +133871,8 @@ bMJ bOA bIV bTZ -vHe -bWH +ueD +tFN bYj bZR cbM @@ -133668,7 +134064,7 @@ aaa aaa abj aaa -grB +dGS ant anJ rxD @@ -133925,10 +134321,10 @@ aaa aaa abj aaa -grB +dGS ant -anP -adb +anL +aAr aoS apK aqH @@ -133988,9 +134384,9 @@ bFo bMI bFr bDQ -bty -vHe -bWH +ezp +pCt +exy bYj bZS cbN @@ -134182,9 +134578,9 @@ aaa aaa abj aaa -grB +dGS ant -anP +anL aoo aoo aoo @@ -134245,9 +134641,9 @@ bFq bMK bPY bDQ -bty +ezp eki -bWH +exy bYj jRu cbO @@ -134439,9 +134835,9 @@ aaa aaa abj aaa -grB +dGS ant -anP +anL aoo aoT apL @@ -134502,9 +134898,9 @@ bFr bMG bPZ bOC -bSy +pFF eki -bWH +exy bYj bZR cbM @@ -134696,9 +135092,9 @@ aaa aaa abj aaa -adb +aAr ant -anP +anL aoo imf apM @@ -134953,7 +135349,7 @@ aaa aaa abj aaa -adb +aAr ant fqF aoo @@ -135000,13 +135396,13 @@ pQf baF bol bqm -byO -vcb -byO -byO +sWn +fOV +ssu +uFJ bxl baG -byO +hNh bEa bDR bEp @@ -135033,10 +135429,10 @@ quu tVa bsf bsf -bsf +vCM cvs bsf -bsf +jVv bsf bsf shP @@ -135210,9 +135606,9 @@ aaa aaa abj aaa -grB +dGS ant -anP +anL aoo vET apM @@ -135239,65 +135635,65 @@ osM mks osM mOM -osM +gQe osM aSZ osM -osM +gQe osM aYX baK bcl bdG bhF -bhF +onG qYV bjn -blc +qYV bmX bom bqn -tmq -tIa -tmq -tmq -tmq -tmq -tmq +npJ +kEN +fcl +fcl +fcl +sPx +fcl bCf -tmq +fcl bFs -tmq -tmq -tmq -tmq -tmq +fcl +fcl +fcl +fcl +fcl ozr -tmq +hzo bUL -tmq -tmq -bZU -tmq -tmq +hzo +hzo +qxR +hzo +hzo cbP -tmq -tmq -tmq -tmq -tmq -tIa +hzo +hzo +hzo +reu +hzo +gKs cpN crq -tmq -tmq -tmq -tmq -tmq -tmq -tmq -tmq -tmq +vji +vji +vji +vji +raa +vji +vji +vji +vji cDd cGy xqH @@ -135467,7 +135863,7 @@ aaa aaa abj aaa -grB +dGS ant rBP aoo @@ -135488,16 +135884,16 @@ aCx nNK aDD gpU -vzB +uSD kdu aEF aHS -aRK +fcY aXA -aGJ +jzc +syY aEF -aEF -aRK +fcY aTa aEF aEF @@ -135508,28 +135904,28 @@ aSe bdH aEF aEF -bld +npn bjo -bld +npn vzB boy -tmq -bIX -bSz -bIX -bIX -bIX +npJ +xGb +jwP +iXC +iXC +iXC byQ -bWM +keo bDG -bWM -bWM -bHi -bIX -bIX -bIX -bIX -bSz +keo +keo +dFA +iXC +iXC +iXC +iXC +ntZ nTR bUM bWM @@ -135541,21 +135937,21 @@ cbQ bSD bHi ckm -bIX -bIX -bSz +oQO +eVW +ntZ bqp -bIX -cEL +rqv +wlC ctQ -cEL +wlC cwQ -cEL -cEL -cEL -cEL -cEL -cEL +kqx +wlC +wlC +wlC +wlC +wlC btE cHC ddn @@ -135724,9 +136120,9 @@ aaa aaa abj aaa -grB +dGS ant -anP +anL aoo aoY ast @@ -135770,10 +136166,10 @@ eer uUk aYZ pde -tmq -bhX -bsv -bvV +npJ +wPT +kgl +juK bxi bxi bwf @@ -135788,7 +136184,7 @@ jAu jAu bHj bSE -bsv +ofu gVF btH btH @@ -135981,7 +136377,7 @@ aaa aaa abj aaa -grB +dGS ant alm nmr @@ -136001,7 +136397,7 @@ aBu aBy aLD xXU -aFH +qbI aFA aGv aHJ @@ -136026,13 +136422,13 @@ bhI bjq blf aYZ -boo -tmq -hQe -bsv -pcY -pcY -pcY +lKV +nGk +klE +kgl +dHG +dHG +dHG bwf bAr bCl @@ -136058,8 +136454,8 @@ ckn clI cno bSE -bqr -cvE +cqn +bwm csK ctR cvt @@ -136069,8 +136465,8 @@ twb cBe cCC csK -cEM -tmq +czY +ckv bIG cIW cKw @@ -136238,9 +136634,9 @@ aaa aaa abj aaa -grB +dGS akG -uJq +als aoo apa apR @@ -136283,10 +136679,10 @@ bdQ bjt wny aYZ -boo -tmq -bIX -pcY +yjG +npJ +xGb +bKt aaa abj aaa @@ -136315,8 +136711,8 @@ qYT clJ cnp bSE -bqr -cvE +cqn +bwm csK cBi cEr @@ -136326,8 +136722,8 @@ cEr cEr cDO csK -cEL -tmq +czY +ckv bIG cIW cKx @@ -136480,24 +136876,24 @@ abj abj abj abj -grB +doS ahz -grB +doS abj abj abj abj -grB +doS pHg -grB +doS abj abj abj abj abj -grB +dGS ant -rwY +anL aoo apb apS @@ -136515,7 +136911,7 @@ aAx aAw aES aUv -aFH +qbI aFA aGx aHM @@ -136540,10 +136936,10 @@ bdP bjs blh aYZ -boo -tmq -bIX -pcY +rnb +npJ +xGb +bKt aaa abj aaa @@ -136584,7 +136980,7 @@ cCE cEb csK sUV -tmq +ckv cHE cIX cMe @@ -136737,24 +137133,24 @@ aaa aaa abj aaa -grB +doS afb -grB -grB -grB -grB -grB -grB +doS +doS +doS +doS +doS +doS afb -grB +doS aaa abj aaa aaa aaa -adb +aAr upw -wKI +fqF aoo apc apT @@ -136771,8 +137167,8 @@ lJo aES jaE aES -aUv -aFH +mhx +qbI aFA aGy aHM @@ -136793,14 +137189,14 @@ bcr bdM bfh aYZ -bdQ +oxJ bjt blj aYZ bop -tmq -bIX -pcY +npJ +xGb +bKt aaa abj aaa @@ -136829,8 +137225,8 @@ ckp clL bUT bSE -bqr -suU +cqn +ado csK cEs cwT @@ -136841,7 +137237,7 @@ cCF cEr cEQ cIT -tmq +ckv cHG cJa dau @@ -136986,30 +137382,30 @@ aaa aaa aaa adN -adb -adb -adb -adb -grB -grB -adb -grB -grB +ovL +ovL +ovL +ovL +doS +doS +ovL +doS +doS ahz -grB +doS aio aiH aiX ajy -grB +doS pHg -grB -grB -adb -grB -grB -adb -adb +doS +doS +ovL +doS +doS +ovL +aAr anp jOW aoo @@ -137029,7 +137425,7 @@ aAy aGq uLH aUy -aFH +qbI aFA aGz aHN @@ -137054,10 +137450,10 @@ aYa aYC blk aYZ -boo -tmq -bhX -bsv +rnb +npJ +fwU +kgl abj abj abj @@ -137098,7 +137494,7 @@ cEr cEr cEQ cIT -tmq +ckv cHG cIW cND @@ -137161,7 +137557,7 @@ dIx dIx dIx dIx -dIx +uil abj aaa aaa @@ -137245,27 +137641,27 @@ add add adL aey -grB +doS afc -adZ -adZ -agg -aip -agA -adZ -adZ -adZ -adZ -adZ -adZ -adZ -adZ -aip -agA -agg -adZ -adZ -amz +dWL +dWL +pvQ +ffG +rJF +dWL +dWL +dWL +dWL +dWL +dWL +dWL +dWL +ffG +rJF +pvQ +dWL +dWL +gpy amL ant anO @@ -137285,7 +137681,7 @@ axe axe axe axe -aVY +jjD aWa aFA aFA @@ -137311,10 +137707,10 @@ bhK aYE bll bmZ -boo -tmq -bIX -pcY +rnb +npJ +xGb +bKt aaa abj aaa @@ -137343,7 +137739,7 @@ bWT clN cnr bSE -bqr +cqn crw csK ejB @@ -137355,7 +137751,7 @@ cCH cEr cER cIT -tmq +ckv cHG cIW cKA @@ -137416,10 +137812,10 @@ dSo dKP dTh sYX -vJP +dVb jJq -kdg -xRm +dVb +acF acF aaa aaa @@ -137503,28 +137899,28 @@ adO aed aez aeP -afh -aea -aea -aea +jpa +qGl +qGl +qGl agJ ajZ ajZ ajZ ajZ -cMP +nEp ajZ ajZ ajZ ajZ -ahg +pfO ajZ ajZ ajZ ajZ -amA +gVk amM -anu +wvH alx aop aop @@ -137543,7 +137939,7 @@ axe aEO axe pdL -aFH +qbI aFA aGA aMg @@ -137570,8 +137966,8 @@ blm bmZ boq bqq -bIX -pcY +xGb +bKt aaa abj aaa @@ -137671,11 +138067,11 @@ dPM dPM dkq dSs +dSP +dSB dIH dIH dIH -uil -dIH abj aaa aaa @@ -137759,27 +138155,27 @@ add add adL aeA -grB +doS afj -aeb -aeb +blc +blc agh agC -aeb -aeb -aeb -aeb -aeb -aeb -aeb -aeb -aeb -agB +blc +blc +blc +blc +blc +blc +blc +blc +blc +whp alt aly -aeb -aeb -amB +blc +vmP +tIM amL ant ait @@ -137799,8 +138195,8 @@ aBt axe aFy axe -aRW -aFH +sQZ +qbI aFA aGB aMi @@ -137825,10 +138221,10 @@ bdQ aYE blo bmZ -boo -tmq -bIX -pcY +rnb +npJ +xGb +bKt aaa abj aaa @@ -137857,8 +138253,8 @@ cks clP cnt bSE -cpT -cvE +boo +bwm csK cvz cxQ @@ -137869,7 +138265,7 @@ cEr cEN csK cES -tmq +ckv cHG cIW cKC @@ -137927,11 +138323,11 @@ dKo dKo dKo dKo -dSB +dXJ +dKo +dUj +kdg tSp -dXK -dIH -dIH dIH abj aaa @@ -138014,32 +138410,32 @@ aaa aaa aaa adN -adb -adb -adb -adb -grB -grB -adb -grB -grB +ovL +ovL +ovL +ovL +doS +doS +ovL +doS +doS ahA -grB +doS aio -aiI -aiI +ndb +ndb ajy -grB +doS ahA -grB -grB -adb -grB -grB -adb +doS +doS +ovL +doS +ovL +ovL amN ant -anP +anL xVF apf aqg @@ -138056,8 +138452,8 @@ vtq aAB azq axe -aVY -aFH +jjD +qbI aFA iIC aMg @@ -138083,9 +138479,9 @@ aZk bln aZa pYl -tIa +kEN bsj -bsv +kgl abj abj abj @@ -138115,7 +138511,7 @@ bSE bSE bSE cpU -cvE +bwm csK cDs cvB @@ -138126,7 +138522,7 @@ cBm cCK csK cET -tmq +ckv cHG cIW cMn @@ -138186,8 +138582,8 @@ dNa dKo dXJ uaj -dUj -dSP +dKo +dKo dUT dIH abj @@ -138279,22 +138675,22 @@ aaa aaa abj aaa -grB +doS afb -grB -grB -grB -grB -grB -grB +doS +doS +doS +doS +doS +doS afb -grB +doS aaa abj aaa aaa aaa -adb +aAr ant anP aop @@ -138313,8 +138709,8 @@ azr aGo aHX axe -aVY -aFH +jjD +qbI aFA aGD aHP @@ -138339,10 +138735,10 @@ bhR bjw bnc bmZ -boo -tmq -bIX -pcY +rnb +npJ +xGb +bKt aaa pTv quW @@ -138370,9 +138766,9 @@ ciF bYv aaa aaa -dER +bsv nBO -cvE +bwm csK csK xPb @@ -138383,7 +138779,7 @@ csK csK csK cEU -tmq +ckv cHG cJa cKF @@ -138424,7 +138820,7 @@ dfu dEU dFv dGl -dGS +dcV dHT dIJ cWH @@ -138536,24 +138932,24 @@ abj abj abj abj -grB +doS ahA -grB +doS abj aaa aaa abj -grB +doS ahA -grB +doS abj abj abj abj abj -grB +dGS ant -anP +anL aop aop fih @@ -138571,7 +138967,7 @@ aAC aCw aFQ bck -aFH +ohu aFA aGE aIZ @@ -138596,10 +138992,10 @@ bli bdQ bne bmZ -boo -tmq -bIX -pcY +rnb +npJ +xGb +bKt aaa mBN bxm @@ -138639,8 +139035,8 @@ czJ cBn cCL tzC -cEL -tmq +czY +ckv cHG cJa cKF @@ -138681,7 +139077,7 @@ dfu dEV dVx dGl -dGS +dcV dHT dIJ cWH @@ -138808,7 +139204,7 @@ aaa aaa aaa aaa -adb +aAr ann anQ aou @@ -138816,19 +139212,19 @@ api apZ aqU asA -asY +neb asY awh avb awi -aoA +wyS axe aCP aAD axe axe aAz -aFH +qbI aFA aGF aIZ @@ -138853,10 +139249,10 @@ bdQ bdP bQy bmZ -boo -tmq -bIX -pcY +rnb +npJ +xGb +bKt aaa mBN bxn @@ -138882,11 +139278,11 @@ cfG chl ciH bYv -dER -dER -dER +bsv +bsv +bsv cpX -cvE +bwm euc oHh eIG @@ -138896,8 +139292,8 @@ czK cBo cCM qih -cEL -tmq +czY +ckv cHG cIW cKG @@ -138938,7 +139334,7 @@ dfu dEW dFx dGl -dGS +dcV dHQ dLD dST @@ -139065,11 +139461,11 @@ aaa aaa aaa aaa -grB +dGS anl anR -asB -apu +oTa +dhh aqX asB asi @@ -139084,8 +139480,8 @@ azt aAE aIQ axe -aAz -aFH +bPt +qbI aFA aGG aHR @@ -139111,9 +139507,9 @@ bdQ bQy aYZ fJp -tmq -bIX -pcY +npJ +xGb +bKt aaa koT bxo @@ -139154,8 +139550,8 @@ cyk cyk gyY cEV -tmq -cHG +dLT +gPh cIW cKH cMn @@ -139195,7 +139591,7 @@ dfu dBR dFa dGl -dGS +dcV naN dIH dXC @@ -139322,10 +139718,10 @@ agE agF agE aaa -grB +dGS ant anT -aow +vYz apj aqa aqV @@ -139367,10 +139763,10 @@ pzT pzT aYZ bna -boo -tmq -bhX -bsv +rnb +npJ +fwU +kgl abj bwf bxp @@ -139397,21 +139793,21 @@ bYv mTf bYv clS -ckv -ckv -cqc +tmq +tmq +cqo pBe csP cub -cvE +bwm uKf cyk czM cBp cCN cxa -cEL -tmq +czY +ckv cHH cJb cKI @@ -139438,9 +139834,9 @@ sAy dfo dqp drK -dce -dce -ddJ +ank +ank +xoT dql dql dql @@ -139452,7 +139848,7 @@ dfu dHT dcV hTr -dWL +dcV xPQ dIK dQI @@ -139579,7 +139975,7 @@ alv alH agF aaa -grB +dGS ant anT joU @@ -139589,7 +139985,7 @@ aqW asj aqW atC -adb +wKI axF awl ayx @@ -139598,7 +139994,7 @@ bhO bhO bhO bhO -aAz +hsE aFH aWq aGH @@ -139611,23 +140007,23 @@ bhO bhO bhO aRW -aWl +bjA bhO bhO aZd baU bfp -aWq +bhO bjA bhO bhO bhO bhO byN -boo -tmq -bsm -pcY +rnb +npJ +hBw +bKt aaa uqG bxq @@ -139651,56 +140047,56 @@ cca cfK cfK qub -csW -csW +cFa +cFa clS -ckv -ckv -cqc +tmq +tmq +cqo crE -csQ +bZU cuc -cvE +bwm cxa cyl czO cBr cCO jdz -cEL -tmq +czY +ckv cHI dEm -cVA -cVA +wkV +wkV cNN -cVA -cVA -cVA +wkV +wkV +wkV cTV -cVA +wkV clA -cVA -cVA -cVA -cVA -cVA +wkV +wkV +wkV +wkV +wkV dft dgC diu dnC -doS dnC -dHT +dnC +yal dgC -dft +mNM drL cVA cVA cVA cZR doY -dgC +wiE doY doY doY @@ -139708,8 +140104,8 @@ dDb dXj dHT dcV -dGU -dGS +hTr +dcV fOr dIH aKM @@ -139836,7 +140232,7 @@ alw alH agF aaa -grB +dGS ant anU lML @@ -139846,10 +140242,10 @@ aqW arP aqW atD -adb +wKI juJ awm -aAr +asB aBj azv aAG @@ -139884,7 +140280,7 @@ bMa bot bqt bsl -pcY +bKt aaa omg bxr @@ -139909,15 +140305,15 @@ cdN cfK fnc ciL -dLT +dUU clT -dLT -dLT +dUU +dUU cqb crF csR cud -cvF +bsm cxa rUS czN @@ -139928,15 +140324,15 @@ cEW cGA cHJ dEl -doZ -doZ +jBj +jBj cNO cPy -doZ -doZ -doZ -doZ -cnV +jBj +jBj +jBj +foc +dGU doZ doZ doZ @@ -139950,15 +140346,15 @@ cnV doZ doZ doZ -dfB -doZ -doZ +tiQ +vyO +kGA neQ -doZ +pIn dwt -doZ -doZ -bJH +pIn +kRp +pIn pIn dBP dDc @@ -140093,7 +140489,7 @@ alv alH agF aaa -grB +dGS ant anT wEA @@ -140103,17 +140499,17 @@ aqW asj aqW atE -adb +wKI roR awn -ayy +sAB aBU -aEF -aTa -aEF -aRK +pmR +bwh +pmR +fob cyT -aEF +pmR aFC aGJ aJc @@ -140121,17 +140517,17 @@ aKw aKw xCH aRH -aEF +pmR aoZ -aRK -aEF -aSe -aEF +fob +pmR +pmR +pmR aJc -aEF -aEF +pmR +pmR bgx -aSe +gVm bhY bhY blq @@ -140139,9 +140535,9 @@ bhY foX bMb bov -bsg -bsm -pcY +hgo +hBw +bKt aaa jQN bxs @@ -140165,23 +140561,23 @@ ccc cdO cfL mTf -czY -czY +cEL +cEL cEK -ckv -ckv -cqc +tmq +tmq +cqo crG -csS +bFM cue -cvG +bIX cxa cyn czQ cBt cCQ siG -cFa +csW cGB cHK dEm @@ -140190,31 +140586,31 @@ cRh cNP cRh cRh -cmn +cJY cTW -cYC -cXd -cYC -cYC -daO -cYC -cYC -dgw -cmn -cmn +tGE +cJY +uhM +cJY +cJY +cJY +oRy +dsI dle cJY +cJY +psT +cJY dmh +cJY +kEt dpa +hUE dpa -dsI -drM -dpa -ghJ -cTW +etR dwu -dxF -diw +cmn +cmn dQr dBj dBQ @@ -140350,17 +140746,17 @@ agE agF agE aaa -grB +dGS ant anT aoA -apk +tCW aqe asE arO asE atF -apj +jOL avg aBm axk @@ -140396,9 +140792,9 @@ bfq bdU bnd bov -bsg +hgo bsn -bsv +kgl abj bwf bxt @@ -140425,21 +140821,21 @@ bYx gFD bYx clU -ckv -ckv -cqc +tmq +tmq +cqo crH csT cuf -cvG +bIX uKf cyk czP cBs cCR cxa -cFa -tmq +csW +ckv cHL cJf hjK @@ -140449,33 +140845,33 @@ cPA ppu hjK rOW -cVD cXe -cVD cXe -daP -dcf -ddK -dfv -dfv -lXe -dfv -dnI -dfv +cXe +cXe +cXe +cXe +cXe +cXe +cXe +cXe +cXe +cXe +eEq dmi -qvx +dta dmi -dce -drK -duk -duk -duk -oDN -duk -duk -duk +ank +stF +ank +dfu +dfu +dfu +dfu +dfu +dfu dBJ -dDa +dfu dfu dFb dFB @@ -140486,7 +140882,7 @@ jpk dJG dKo dKo -dLG +vHF dVp dKp pGr @@ -140599,7 +140995,7 @@ aim aim aim aim -ahV +xPh ahC akA agE @@ -140607,20 +141003,20 @@ aaa aaa aaa aaa -grB +dGS ant anT -aea +eDE aeJ aea aea ask aea aea -aeJ +orG aea awo -ayy +sAB ayA azx aAJ @@ -140653,9 +141049,9 @@ bjC bls bfq bov -bsg -bwm -pcY +hgo +uGT +bKt aaa mTy bxu @@ -140695,8 +141091,8 @@ czR cBo cBo eNm -cFa -tmq +csW +ckv cHK ppu cKM @@ -140704,35 +141100,35 @@ cMo wAW mTs cRj -cSx -rOW -qOu +wzF +lBx cXf +qaC cYD -cXe -cVD +kXH pLJ cVD -dgD +xsh +uxv dgF dkY dkZ dnJ -dfv +eEq dqi drH dmi fLI pfg -duk -dvs -dvs -dxH -dvs -dvs -duk +dmi +dmi +jcP +dDk +xid +dDk +dDh dQs -dfu +jXz dfu dfu eQu @@ -140864,7 +141260,7 @@ aaa aaa aaa aaa -adb +aAr ans lpL aoB @@ -140910,9 +141306,9 @@ bfu blt bfq bov -bsg -bwm -pcY +hgo +uGT +bKt aaa nWi bxv @@ -140938,11 +141334,11 @@ cfN chr ciP bYx -dER -dER -dER +bsv +bsv +bsv cqe -cvG +bIX euc xrW eIG @@ -140952,42 +141348,42 @@ czS cBo cCS qih -cFa -tmq +csW +ckv cHK ppu cKN -cSs +nQF cNS +kts +ktT nQF -wiR -cSy -cTY -cVF +mTs +rwZ +cZF cXg -cYE -cZD dbd dch ddZ -dgD -dgG +uwR +cXg +xOd diy dlf dpf -dfv +eEq nJz dpd -dqr +ueo drO dsO -duk -pzp -tdC -dxH -tdC -dAd -duk +uxq +dmi +svB +dDm +dEo +uud +dDm dBL dDg dEo @@ -141121,9 +141517,9 @@ abj abj abj abj -grB +dGS ant -anP +anL aoC aoC hTD @@ -141167,9 +141563,9 @@ bfu blu bhU bov -bsg -bwm -pcY +hgo +uGT +bKt aaa nWi bxw @@ -141209,47 +141605,47 @@ czT cBu cCT tzC -cFa -tmq -pnF -byb -jBy +csW +ckv +cHK +cJh +rQz eAi -cNT cPD -cRl -cSz -rOW -cZE +cPD +uFH +nQF +mTs dat -dax +cZF +cXg cXg dcg dcs dfq -dgD +tsp dgH diz dmk dpg -dfv +eEq dYb -dpe +drX dqs -drP +drX dsP ssz -dvu -dwx -dxJ -dyW -dAe -duk +dmi +dEo +dEo +dEo +dEo +kPL fIv dDh -dEp -abj -abj +lHK +aaa +aaa abj abj abj @@ -141364,21 +141760,21 @@ aaa aaa aaa grB -afb +pMq grB grB grB grB grB grB -afb +pMq grB aaa abj aaa aaa aaa -adb +aAr hbv als aoC @@ -141400,7 +141796,7 @@ jkv wnt eOG aFF -gWP +rnp uJC ibg aKy @@ -141424,9 +141820,9 @@ bfu blu bhU bov -bsg -bwm -pcY +hgo +uGT +bKt aaa mSV quW @@ -141454,9 +141850,9 @@ ciR bYx aaa aaa -dER +bsv tlB -cvG +bIX csV csV oVl @@ -141467,45 +141863,45 @@ csV csV csV cEY -tmq +ckv cHK cJh rQz -npp +rqw cNU cPE -xkE -mTs -etk -cVH +fTe +gDM +dEg cXh +wOk cYF -dlW -ctb -cXg +daW +daW +xBR ddN -dgD -dfv +hSe +fbX nlo -dfv -dfv -dfv +fsR +vWI +eEq hCW -dYi drX drX +ouk dsQ -duk -dvv -tdC -dxO -tdC -dAf -duk -dBV +uFz +dmi +oBK +sDL +mhG +dEo +dDh +pht dCb -dEp -aaa +dEo +abj aaa aaa aaa @@ -141626,18 +142022,18 @@ grB pWw tRa ajd -ajy +sWI grB ahF grB grB -adb +slc grB grB -adb +slc amN ant -anP +anL jJl apm arM @@ -141683,7 +142079,7 @@ bdU hmg gFa bML -bsv +kgl abj abj abj @@ -141713,7 +142109,7 @@ cht cht cht ygv -cvG +bIX csV cxe cvK @@ -141724,45 +142120,45 @@ cBw cCV csV gaZ -tmq +ckv cHK ppu cKP -npp +iBC cbr hsQ -cha -cSB -cUb -cVI -cXi -cYG -daU -daU -cvU -ddO -uKw +ecX +tRn +tDw +cXe +cXe +xzZ +nqn +lEa +ern +cXe +cXe dgT -djW -dmn +fsC +cXg dqt -igV +eEq dYd -dYj +qTJ dYl drR dsR dum -dvw -dvw -dxO -dvw -dvw -duk -dCd -dDj +dmi +aNB +ntG +myx +wZK +dDh +qLt +dCb dEo -aaa +abj aaa aaa aaa @@ -141879,18 +142275,18 @@ aaa abj grB aip -afJ -adZ -adZ -adZ -adZ -adZ +vrP +aip +aip +aip +aip +aip +xHN aip -adZ agA alG -adZ -adZ +aip +aip amz amL ant @@ -141938,9 +142334,9 @@ bfu blu bhU bov -bsg -bwm -pcY +hgo +uGT +bKt aaa abj aaa @@ -141970,7 +142366,7 @@ clW cmX cht ygv -fmE +hQe csV cul cxh @@ -141981,43 +142377,43 @@ cBv cCW csV cEZ -tmq +ckv cHK ppu -cKQ +cKP npp -ncT +nQF lee -ckJ -mTs -myR -cZF -cXg -cpJ -cXg -cXg -cXg -ddP -dfx -dfy -dfy -dfy -dfy -dmi +pWh +frO +tDw +vzF +oUw +eNw +daY +sAl +jRZ +rPa +cXe +fQh +llD +daW +sOP +eEq dnK -dmi +hrt fZV -dsN -dsS -duk -tdC -tdC -dxO -tdC -dXq -duk -dCd -dDk +dmi +dmi +dmi +dmi +dfy +dfy +wuT +dEo +dEo +pht +dDh lHK abj aaa @@ -142136,21 +142532,21 @@ aaa aaa grB aFB -ajZ -ajZ -cMP -ajZ -ajZ -ajZ -ahg +fiu +fiu +vcE +fiu +fiu +fiu +giE kLd kNa kNa kNa ahi -amA +fPG amM -anu +wvH anX aoC aoC @@ -142196,8 +142592,8 @@ blu bhU box bqx -bwm -pcY +uGT +bKt aaa abj aaa @@ -142237,46 +142633,46 @@ czV cBy cCX xph -cFa +csW qZt ukK cJi cKR -cMr +npp qZV -cPH -ckJ -cSD -cTY -nHh +cSs +pWh +sfu +kXM +hZK cXj -cYH ddV -daW -daW -ddQ -dfx -dgI -fFP -ngL -dlg +cMq +pwS +tLO +pwS +cXe +cXe +cXe +mKR +cXe +eEq dmi -dnL -dpi -dqw -drT -dsT -duk -dvw -dvw -dxO -dvw -dvw -duk -fIv -dDk +jqi +dmi +dmi +jQv +dyW +nsl +itA +udS +tXs +dfy +dDh +kHj +dDh dEo -aaa +abj aaa aaa aaa @@ -142394,16 +142790,16 @@ aaa grB aec akb -aeb -aeb -aeb -aeb +bld +bld +bld +bld akb -agB +bld inH xyI ivG -xyI +pCM rQS amB amL @@ -142452,9 +142848,9 @@ bfu bly bfq bov -bsg -bwm -pcY +hgo +uGT +bKt aaa abj aaa @@ -142484,7 +142880,7 @@ clY cnA cht sor -cvG +bIX csV cuX cCX @@ -142494,44 +142890,44 @@ cBv pLm dte csV -cFa -tmq +csW +ckv cHK ppu -cKS +uTD npp -ncT +qZV giz -ckJ -cSE -rOW -cXe -cXe -cYI -cXe -nqn -psr -unp -dfx -dgJ -diB -djY -doF -dmi -dnN -dpj -dqx -drU -dsV -dum -pzp -tdC -dxO -tdC -dAh -duk -dBX -dDl +pWh +rMG +kXM +pxD +ddV +cMq +etT +pwS +tLO +pwS +cSA +gQS +kyN +wGT +sgr +sty +qTl +tMJ +tby +gQS +ooq +tHx +hSO +hSO +hSO +ioN +dfy +dDh +qLt +qMz dEo aaa aaa @@ -142648,17 +143044,17 @@ aaa aaa aaa aaa -adb -adb -adb +slc +slc +slc aeM -adb -adb -adb -adb -adb +slc +slc +slc +slc +slc mqP -adb +slc axm axm awY @@ -142709,9 +143105,9 @@ bfu wVi bfq bov -bsg -cvW -bsv +hgo +tmJ +kgl abj abj abj @@ -142751,46 +143147,46 @@ cCX cBC cDa csV -cFa -tmq +rfw +ckv cHK ppu -jhM -npp +cMt +kWZ oyG oAd -ckJ -los -kXM -cVM -cXm -cYJ -tDw -daY -dcm -ddS -dfy -dgK +iQz +rMG +wyn +cMq +cMq +gJC +sMp +bqy +tLO +oMI diC -dka -dli -dmi -doa -dpk -dqz -drV -dsZ -duk -dvw -dvw -dxO -dvw -dvw -duk -dBY -dDh -lHK -abj +vBu +dWP +dWP +dWP +oiF +fWX +eEf +hZH +xib +sDN +xdN +tWK +oON +smG +gAR +dfy +dtR +pht +lQl +dEo +dEo aaa aaa aaa @@ -142906,11 +143302,11 @@ aaa aaa aaa aaa -adb +slc aeC -aeN +hhG aff -adb +slc afk afz agp @@ -142965,10 +143361,10 @@ bgH bjF ova bdU -boy -bsg -bwm -pcY +ozR +hgo +uGT +bKt aaa abj aaa @@ -142998,7 +143394,7 @@ cma cnB coG wat -cvG +bIX csV csV wUm @@ -143008,47 +143404,47 @@ wUm iFr stt csV -cFa -tmq -cHO -cJj -cKU -cMs -cNV +jdr +dLT +njU +cJh +nCu +rqw +fQt cPI -ckJ -xDF -kAB -cVN -cXn -mTs -ppu -cKO -cMq -kDC -dfz -dgL -diC -dka -dlj -dta -dnO -dpl -dqz -drW -dsW -duk -tdC -tdC -dxO -tdC -tdC -duk -fIv -dDk +haj +oZf +wuc +cYO +cYO +dvV +erg +sbz +utn +mZL +kho +iaU +kHJ +kHJ +oqo +kzd +iwE +tBX +fac +gQS +ooq +wHU +xSf +ooq +ooq +eRi +dfy +eeX +pht +dDh +dDr dEo -aaa -aaa +abj aaa aaa aaa @@ -143163,11 +143559,11 @@ aaa aaa aaa aaa -adb +slc aeK aeQ aeK -adb +slc afl afB agq @@ -143210,7 +143606,7 @@ aJd aJd aGK ayD -olz +qVF jKE ayD bbe @@ -143223,9 +143619,9 @@ bbi bbe bbe boz -bsg -bwm -pcY +hgo +uGT +bKt aaa abj aaa @@ -143255,7 +143651,7 @@ cmb cnD cht sqO -cvG +bIX uaS csV cxl @@ -143265,47 +143661,47 @@ cCX cBC cCX csV -cFa -tmq -cHN -cJh -nCu -npp -cbH +csW +ckv +jfG +ppr +hdI +rsV gIn -ckS +gIn +sIv xDF -ioK -xkE -cXo -cYL -hIk -ctr -dco -qNS -dfz -dgM -mZY -dkb -dlq -rti -dpm -dpm -dqA -cKE -dsX -duk -dvw -dvw -dxO -dvw -dvw -duk -dBZ -dDm -dEo -aaa -aaa +kXM +fhh +iRF +cMq +gfB +cMq +cMq +lDF +tox +eLc +bka +bka +bka +jlL +bka +dDz +kSO +gQS +uGj +lGx +pBJ +ooq +ooq +ixk +dfy +dDr +iRs +syt +dDk +xFW +abj aaa aaa aaa @@ -143420,11 +143816,11 @@ aaa aaa aaa aaa -adb +slc aeL afa aeL -adb +slc afm afC agH @@ -143480,9 +143876,9 @@ bjG blB bbe boy -bsg -bwm -pcY +hgo +uGT +bKt aaa abj aaa @@ -143512,7 +143908,7 @@ cmc cnE xmE ygv -cvG +bIX rVL csV cvQ @@ -143522,44 +143918,45 @@ cAb cBD cDc csV -cFa -tmq +csW +ckv cHN ppu cKW nQF -cNS -cRk +nQF +nQF nQF xDF -ctD -cVO +kXM +qTB cnX -xDF -ppu -daZ -dcn -ddU -dfz -dgN -diE -dkc -dll -dta -dnQ -dpn -dqB -dpn -dsY +iRF +cMq +cMq +cMq +hbt +cSA +vBu +dWP +dWP +dWP +dWP +dWP +dWP +woM +mXA +dfy +tod +duk +dvI +efS duk -eTI -dwB -dxO -lsu -bju duk -dCa -dDk +duk +duk +mbh +dDm lHK abj aaa @@ -143630,7 +144027,6 @@ aaa aaa aaa aaa -aaa "} (170,1,1) = {" aaa @@ -143737,9 +144133,9 @@ bjH blN bbi bov -bsg -ado -bsv +hgo +pnr +kgl pcY pcY pcY @@ -143769,7 +144165,7 @@ cmd cnG cht ygv -cvG +bIX nSv csV eXJ @@ -143779,44 +144175,45 @@ mhU cDf cDf csV -cFa -tmq +csW +ckv cHN ppu cKX -cMt +nCu cNW -rMG -los -dqO -kXM -cVP -cXp -cYM +vXU +qqT +xDF tDw -nOu -dqW +heQ +hZK +abD +rAD +lVJ +cKV +hbt cSA -dfy -dgO -diF -dkd -dlm -dmi -dnR -dpo -lzD -drZ -dtf +gQS +xLM +uMa +sPf +sPf +sPf +sPf +vMD +mXA +rzH +fGW duk -dvA -dvt -dxQ -dvE -dAk +eHD +jlw +vkP +wZb +iis duk -teL -dDh +eMA +vjj dEo aaa aaa @@ -143887,7 +144284,6 @@ aaa aaa aaa aaa -aaa "} (171,1,1) = {" aaa @@ -143994,12 +144390,12 @@ bfA bnf bNB cpO -bsg +hgo bsr -bsv -bxi -bxi -bvV +kgl +nLs +nLs +eyl bwf dnr snE @@ -144026,7 +144422,7 @@ cht cht cht vAP -lcJ +bSz csV csV csV @@ -144036,43 +144432,44 @@ csV csV csV csV -cnO +lXi tIa njo -hjK +lpI +dfv +dfv +dfv +dfv +ppu +nOp tDw -kXM -pJc -xyC -kXM -hjK tDw ppu -rXc ppu tDw -cKO -dqW -dlh -dfA -dfz -hRZ -nBz -dfz -dmi -dta -dta -dta -dta -dta +tDw +ppy +lkb +oGw +mXA +gQS +gQS +mMp +mMp +mMp +gQS +gQS +mXA +qej +mUR duk -dvB -dwC -dxO -dwC -dAl +jeS +dxH +tfY +leb +dXg duk -dCc +eMA dDh dEo aaa @@ -144144,7 +144541,6 @@ aaa aaa aaa aaa -aaa "} (172,1,1) = {" aaa @@ -144251,85 +144647,86 @@ bjI bnh dCY bov -bsg -bwm -coE -bwm -bwm -bwm +hgo +uGT +sFH +pSh +pSh +pSh bza bEo bCC bqv bEo bHA -bwm -bwm -bwm -bwm +pSh +pSh +pSh +dLL coE -bwm +wBx bVc -bwm -bwm -bwm -bwm -bwm -bwm -bwm +wBx +wBx +wBx +rkF +oyz +mQc +wBx ciV -bwm -bwm -bwm +wBx +wBx +wBx coE -cqn -bwm -cFa +scp +pLA +epO cun -cFa +epO cxm cyz -cFa -cFa -cFa -cFa -cFa -tmq +epO +gfR +ujS +epO +epO +hIZ cHP -dWP -cKY +dfv +dEa hFR cNR -cPL -cRn -cKO -cUe -ckg -cMq -cKO -cZJ +dfv +jMD +lad +mzz +rsY +fol +gLD +qrn +tDw cKO -don +hbt cSA -dgx -cSA -diJ -dkf -dqE -dmp -dqE -cSA -dqE -dsb -dtb +bUE +qAe +rKU +jGH +jGH +jGH +jGH +tZI +bUE +vbB +gzi duk -dvC -dvt -dxS -dww -dAi +cLL +dxH +tfY +xCE +tZV dBk -dCd +bLv dDk lHK abj @@ -144401,7 +144798,6 @@ aaa aaa aaa aaa -aaa "} (173,1,1) = {" aaa @@ -144509,88 +144905,88 @@ blF bbe jjp dog -tmq -tIa -tmq -tmq +npJ +kEN +uHV +uHV uhI -tmq -tmq +uHV +dcz bCD bsg -bFM +wjN bqu -tmq -tmq -tmq -tmq -tIa -tmq +uHV +uHV +uHV +uHV +oAm +lmQ bVd -tmq -tmq +lmQ +lmQ bYF -tmq -tmq -tmq -tmq -tmq -tmq -tmq -tmq -tIa -cqo +lmQ +iNB +lmQ +lmQ +nYW +lmQ +lmQ +lmQ +oAm +wvz crS nAC -tmq +hIZ rfW -tmq -tmq -tmq -tmq -cDd -tmq -tmq +hIZ +hIZ +hIZ +gkl +wRp +hIZ +hIZ cGD kCi liC -cKY +omT cMv cNY -cPM -mVA -cSH -cSH -cki -cYO -cYO -cYO -dbb -dcr -ddX -dgy -dgQ -diI -qjS -dqF -dKV -dgQ -sqq -dqF -dqF -dtc -jUF -dvD -dwE -dxT -dzg -dAn +dfv +kWL +nQF +nQF +cMp +nQF +yaM +npp +ppu +cKO +hbt +cSA +fNP +rod +dGm +rod +wFp +qQE +rod +xVu +bUE +vOe +git +duk +wAG +rEP +tkI +vPD mkS -dCe -dDk +duk +mbh +fFU dEo -aaa -aaa +abj aaa aaa aaa @@ -144712,7 +145108,7 @@ aaa ofi ofi tSB -ofi +jEE ofi abj akB @@ -144766,88 +145162,88 @@ bbe bbe boC bqA -efA -oIT -efA -efA +qOr +jpm +uLr +uLr bxz bzb -efA +jid bCE fTq bHm bHC -efA +uLr qjT -efA +uLr bPc oIT bSU bVe bXa -oRD +iJi cau -oRD +iJi eEG cfS cnw cnC -oRD +iJi pOw -oRD +iJi mWz cqp crT efA cuo -oRD -oRD +uOC +uOC cyA +uOC oRD -oRD -oRD -pOw +dRc +fca cFc aBd cHQ -qFy -cKY -cMw -cKV -cKV -aMw -cKV -cUf -cRo -cKV -cKV -cKV -cKV -ctd -cSF -dil -cSF -cSF +dfv +nCA +dgG +wdS +dfv +mja +nQF +oRM +eKP +vsw +nQF +npp +ieX +cKO +kPl +hrX +oMd +mzT dld -cSF -dmr -cSF -dps -cSF -dsc -cRm +dlv +qtJ +hsp +pZM +xIH +sgM +irJ +kgC duk -cYN -dwF -dxU -dzh -tAl +lrh +dxH +dvt +dvt +nMf dBk -dBV -dDm +vVW +lXB xbW -aaa -aaa +abj aaa aaa aaa @@ -145023,15 +145419,15 @@ bni eNt vDt eNt -bsv -bsv +kgl +kgl pcY pcY bxA pcY pcY -bsv -bsv +vFI +vFI bgs bHD bgs @@ -145067,43 +145463,43 @@ cxn dFO cGF iWE -pDD -cYP -cYP -cYP -cPO -jEr -cPO -cYP -cYP -cYP -cJg -cJg -dci -ddM -dfr -cKY -cJg -czB -cEC -cJg -dms -jIb -jyM -kiK -dmt -grD -dmt -dmt -dmt -dmt -dmt -dmt -dmt -dBV -dDh +dfv +ouu +nBa +shb +dfv +moo +vIr +upg +lUd +eHZ +tEL +mtg +eQZ +mUB +lYp +cSA +bUE +wcu +oxK +erI +ieS +pmO +reD +hgR +duk +duk +duk +duk +sPs +jvD +dvt +rrv +ipS +duk +mbh +dDr lHK -abj aaa aaa aaa @@ -145297,7 +145693,7 @@ bNi bPd bLh bSW -bVg +aWl mrW bYH hvX @@ -145312,56 +145708,56 @@ cvu coI fRQ bYH -cEL +kiC cuu -bIX +nEw cxn cyB cAc cBE cyB cxn -cFd +bng hos -cmt -bMD +bng +dfv xLC iIY cOa -cPQ -cRp -cSI -cUg -aQo -cYP -cYS -cZL +xjD +hZO +vEY +vZa +nCu +leI +nQF +npp +ppu cKO -cFo -cSA -cJg -dgS -cMp -cFe -dFE -dmt -dnU -dpu -cKy -dsd -dul -dur -lpg -dwG -dUD -dVv -dWN -dmt +hbt +tQT +cYP +cYP +cYP +cYP +cYP +cYP +cYP +cYP +duk +amu +tYd +iQj +wLR +mAC +rNO +xzp +tfY dCf -dCb +mbh +dDh dEo -aaa -aaa +abj aaa aaa aaa @@ -145482,7 +145878,7 @@ aaa aaa aaa abj -khZ +adg abj abj aaa @@ -145554,8 +145950,8 @@ bNj bPe bQW bSX -bVg -bXc +aWl +iRk bYK cax cax @@ -145569,56 +145965,56 @@ cax cax cax bYK -cEL +nmt cuu -bIX +nEw cxn cyC cAd cBF qTi cxn -bDD -jsi -cmt -ffm -xLC -sak -cOb -cPQ -cRq -cSJ -cVQ -cVQ -cYP -cYR -cZL -cUn -dct -dea -cKY -dgU -diL -dkk -dlr -dmu -dnV -dpv -dqI -dse -dtg -dus -dvG -grD -dvG -dzj -dAp -dmt -dBY -dDm +cUM +buF +ezR +dfv +dgD +dgD +dgD +dgD +rOW +rOW +rOW +vtH +qys +pWP +lwY +tDw +jHq +hbt +cSA +xbI +mPF +oop +vuX +rzs +pUw +uWt +aeF +duk +jCu +vqu +dvt +dvt +kfx +hbl +hbl +ukN +duk +vVW +dDh dEo -aaa -aaa +abj aaa aaa aaa @@ -145736,7 +146132,7 @@ aaa aaa dij dij -aGW +sso dij abj adg @@ -145812,7 +146208,7 @@ bPf sJs bSY xLe -bXc +iRk bZi cax ccq @@ -145835,44 +146231,45 @@ bBk cAc cyD cxn -bEH -jKp -tNq -klh -mLt -bOK -cOc -cPR -cRr -cSK -cUi -cVR -cYP -cYS -cZL -cKV -cFo -cSF -cJg -dgV -diK -dkj -dls -dmu -dnW -dpw -dxW -dsf -dth -dut -dvH -qJv -dxW -dba -dXz +boG +mUz +cUM +boG +lGs +nEX +jJW +wkv +qlz +yhn dmt -dCd -dDh +dwG +dwG +dwG +dwG +dwG +iWG +nYi +kYE +jNY +cPQ +oop +cPQ +lYX +iNo +mpZ +iHR +duk +jfB +hbl +hbl +dvw +kfx +tdW +tdW +oVu +duk +mbh +dDk lHK abj aaa @@ -145943,7 +146340,6 @@ aaa aaa aaa aaa -aaa "} (179,1,1) = {" aaa @@ -146068,8 +146464,8 @@ bNl bPg bQW bSX -bVg -bXc +aWl +iRk bYK cay ccq @@ -146083,9 +146479,9 @@ cay cax cqr bYK -cFa +fiV cuu -bIX +nEw cxn cxn cAe @@ -146093,46 +146489,46 @@ cxn cxn cxn bng -cGI -bng -bng -bng -cYP -cYP -cYP -cYP -cYP -cYP -cYP -cYP -cUr -cUr -daZ -ctj -ddU -cKY -diG -dke -dlk -dmj -dmu -dnX -dpx -dvG -dsg -dti -duu -dvI -sVG -dvG -dzk -dAr +kjm +boG +boG +lGs +oyD +gwl +jiU +agZ +uPn dmt -fIv -dDr +nEb +pqM +tYQ +sCK +fMP +tpM +tKj +dkL +lnN +kJJ +ecP +dls +uXP +hon +uVH +yjA +duk +amu +qxa +dvs +qxa +kfx +dvt +dvt +kqn +duk +kkz +dDh dEo -aaa -aaa +abj aaa aaa aaa @@ -146325,7 +146721,7 @@ bTd bPh bLh bSX -bVg +mgM bXc bYH ccO @@ -146340,9 +146736,9 @@ ccq nfy cqr bYH -cFa -cuu -bIX +vTx +mTz +nVI cxn cyF bBu @@ -146350,50 +146746,50 @@ cEj cEj pWn cxn -buF +jVn boG -cJo -bRw -bng -cOd -cJL -cOe -qvU -uMN -cXq -cZM -sYw -cUr -cKO -cFo -cSA -cJg -dgS -cMp -cFA -dJE -dmt -dnY -dpy -dqH -dsh -dtj -duv -dvJ -dwG -dxY -dzl -dAs +boG +lGs +rYe +jin +lky +uWm +usf dmt -dCg +hLd +vAX +fNN +xiK +nRk +rXm +qRk +cSA +jNY +vYF +cYP +cAM +fJR +dnX +dpx +dvG +duk +nkC +rwM +tgr +gDy +pAZ +skW +skW +uxr +duk dDs +klS dEp abj -abj aaa abj abj -abj +aaa aaa aaa aaa @@ -146581,7 +146977,7 @@ bLn bLn bLn bLn -bTb +jpC bVi bXf bYH @@ -146609,40 +147005,40 @@ cDg cJl fPx cTa -cJp -bRF -bng -cOe -cPa -cOd -qvU -cUk -dcE -dcE -cZQ -dbu -cMq -cFo -dfE -cKY -cJg -czB -cFB -cJg -dms -jIb -uDd -kiK -dmt -sVG -dmt -dmt -dmt -dmt -dmt -dmt -dmt -cKY +cUM +lGs +lGs +lGs +pcr +tYs +pcr +dwG +kID +kNo +xIN +uJQ +dwG +cKO +hbt +cSA +lHs +kOj +cYP +cYP +oop +oop +cYP +cYP +duk +duk +duk +duk +dvI +qcR +dvI +dvI +duk +duk dDt cKY cKY @@ -146653,8 +147049,8 @@ dFG dFG aaa aaa -aaa -aaa +abj +abj aaa aaa aaa @@ -146856,7 +147252,7 @@ cqr bYH cnO qHK -bSz +vPo cxn cyH cAh @@ -146865,58 +147261,58 @@ cxn cxn cxn xQW -boG -boG +cUM +cUM bSe -bng -cJL -cQs -cQv -qvU -cTg -dcE +cMz +eCn +nqK +kQG +ewa +htc +vpa cZN -cZQ -dbu -cMq -ctd +lQs +uLc +dwG +cKO +hbt cSA -dgx cSA cSA -cHV -dgW dmv +xDT cSA -dpA cSA cSA +bfW cSA +xIm cSA -dtG -dwK +dmv dgW +wGz cSA cSA cJk dCh dDu dEr -dFc +tvL cTX -dLa -dLd -dLY -dIW -abj -lyl -lPv +hPM +eLU +xGo dFG -wuL dFG -aki -xzp -abj +sSu +dFG +sSu +dFG +dFG +aaa +aaa +aaa aaa aaa aaa @@ -147097,7 +147493,7 @@ bPj bLn bXD bVg -bXc +oIN bYH rML ccs @@ -147111,9 +147507,9 @@ cnK coM cqt bYH -cFa +fiV cuu -bwm +gvr cxn czU bBu @@ -147121,58 +147517,56 @@ cAf cDh cEo cxn -cUA -cMz -cMz -cMz -cMz -cMz -cMz +oDF +boG +cUM +ago cMz +kxj +hvf +uwm cSO -iqv -dcE -daa -dbi -dbs -dtF -dcv -ded -dgB -dgX -dgX -cVT -dxZ -dgX -dnZ -dpB -dgX -dgX -dgX -dgX -dgX -dgX -dxZ -dgX -dAt +hmM +xeb +dvZ +eOt +vZK +wxq +cKO +wDE +cSH +cSH +cSH +pFx +cki +cSH +xzV +cSH +kna +cSH +cSH +kDF +cSH +cki +kxH +cSH +cSH oYX -dCi +dgX dDv dbH dFd eQz -dLb -dLQ -dMa +dNu +nZk +gLq +dGw +mBy +hYe +dGw +qRW +gYJ dFG -aaa -wby -dMG -dLR -dMw -dNj -dRg -ldx abj aaa aaa @@ -147229,6 +147623,8 @@ aaa aaa aaa aaa +aaa +aaa "} (184,1,1) = {" aaa @@ -147264,7 +147660,7 @@ aaa aaa aaa dij -aGW +sso dij dij abj @@ -147352,9 +147748,9 @@ bLo bLp bPk bLn -bTb +emy bVg -bXc +oIN bYH caC cct @@ -147368,9 +147764,9 @@ cnL coN beB bYH -cFa +lxK cuu -bwm +gvr cxn czU bBu @@ -147378,58 +147774,58 @@ txW cxn cxn cxn -cUA -cMz -cJr -cLd -cMA -cOh -cPU -cRt +oDF +boG +cUM +rHr cMz -cUs -dcE -daa -cZp -deV -cKV -cwo +fuu +hvf +xcR +sbr +diN +sRh +ahm +svp +mKx +diN +cKO +hbt cSF -dil -nuu -diM cSF -dlu cSF -dqW +cPJ +dlu cSF +sbe +exQ cSF -dsi cSF -cMq cSF -diM +dQg +oXz dlu -cMq -hmC +cSF +cSF +cSF cKY -dCj -dDw +njq +dqW dEs dFe dFF -dLc -dLU -dMv -dIX -abj -dFG -dNi -hbU -dMx -dNk -dRh +tpR +rPH +pax +dGw +bBb +xRQ +dGw +bFY +ubP dFG +abj +aaa aaa aaa aaa @@ -147611,7 +148007,7 @@ bPl bLn bTb bVg -bXc +oIN bYH caD ccu @@ -147625,7 +148021,7 @@ cnM coO cqt bYH -cFa +fiV cuu cvW cxn @@ -147635,31 +148031,34 @@ cBL cDh cEq cDe -cUA +oDF +cUM +eHp +cjn cMz -xlF -cLe -cMB -cbI -cfw -cRu -oqj -cVS -cXy -cYV -cZO -dbt -deb -dcw -dux -cJk -cKY -cKY -cKY -dlv +bKW +hvf +xcR +tyQ +dwG +vdI +iWN +uec +xnr +dwG +oBh +hbt +cSF dCo -dof +npW +svX +npW +npW +dpt +dpt dCo +dCo +dpt cXJ cXJ cXJ @@ -147667,9 +148066,6 @@ cXJ cXJ cXJ cXJ -dSd -qcH -cXJ cKY rjE cKY @@ -147678,16 +148074,16 @@ cTX dFG fzd dFG +dGw +dqL +fbD +dGw +iKv +hWu dFG -aaa -gZj -dNW -dRf -dMy -dNl -dRi -wYZ -aaa +abj +abj +abj aaa aaa aaa @@ -147868,7 +148264,7 @@ bPm gow bTb bVg -bXc +oIN xan cei ccv @@ -147882,9 +148278,9 @@ cnM coM cqt bYH -cFa +fiV cuu -bwm +gvr cxn cyJ cAf @@ -147893,65 +148289,65 @@ cxn cxn cDe cUA +cUM +boG cMz -cJt -cLf -xKN -cOi -cMC -vjO -cOg -cVU -cXz -cpc -cZQ -dbu -cKV -cwp -duG -cKY -dgZ -paI -dyk -cKY -dmw -doh -dpJ -dqM -dCr -dtl -duz -dvL -nGL -cXJ -jkU -fVZ +cMz +kyr +hvf +sMA +teH +dwG +dwG +dwG +dwG +dwG +dwG +bYs +hbt +cSF +lqL +doj +dkl +doj +doj +wqd +rMm +aiL +uje +llV +jIB +fxA +oWC +ePv +eHg +hpD cXJ cSZ -dDE +oDF bng aaa -aaa dFG -kLu +kTY +gVn +jQA +dGw +xtU +kDH +dGw +kDH +xtU +dFG +dFG +oHT +xnL +eyb +dFG dFG -aaa -aaa -knd -dNX -dTu -dTv -dNm -dWS -knd abj aaa aaa aaa -aaa -aaa -aaa -aaa aaZ aaa aaa @@ -148125,7 +148521,7 @@ bPn gXp eOO bVl -bXc +oIN bYH caF ccw @@ -148139,7 +148535,7 @@ cnN coP cqu bYH -cFa +fiV cuv cvX cxn @@ -148150,62 +148546,62 @@ cDh cFb cFg ltY +boG +ezR cMz -cJu -cLf -cMC -cOj -cMC -cRv -sVV -cVU -cXA -dcE -cZQ -dbu -cKV -cwp -cSF -cJg -dhe -dwN -dkl -cJg -dmB -doh -dpJ -dqM -dEu -dtm -nRf -dvM -hLZ -cXJ -eha -hTW +wiD +tVV +hvf +hTe +wob +tRC +cOg +cSA +cSA +dgW +cSA +cKO +sln +sXV +vQm +ijt +crC +nhy +fod +lfZ +qRe +qZr +udE +dWY +wpJ +xAK +dWR +pWz +uDG +jPY cXJ cSY -dDy +wnk npb abj -abj -aki -dHc -lPv -abj -abj dFG -dNY +qBj +cBf wdL -dMz -dNn -dWT +dGw +ghG +sRC +pcJ +nEy +fga +dGw +fBU +lrT +ebB +wWX +xES dFG -aaa -aaa -aaa -aaa -aaa +abj aaa aaa aaa @@ -148407,63 +148803,63 @@ cxn cxn cFg bHf +bng +bng cMz -cJv -cLg -cMG -cOk -cPW -cRw -cMz -cVV -cXB -cYW -cZS -dbv -cKV -cwp +kcs +hvf +jIz +iwu +lJc +rLr +bTt +cSH +cSH +dcE +cSH +cSH +uXN cSF -elT -dhe -dwP -dzp -dly -dAg -doe -dpF -gRi -dHZ -dtn -duA -dAq -qgr -wqO -mko -dXw +lqL +doj +doj +doj +doj +oLH +lPJ +dBK +gua +doj +jIB +imY +rEs +lVA +fVZ +gap cXJ boG -dDE +oDF bng aaa -aaa -aki -dHd -lPv -aaa -aaa dFG -dXG -dPg -dQw -dfQ -dWU -dFG -abj -abj -abj -aaa -aaa -aaa +rEg +cBf +wdL +dGw +pFr +mfK +arQ +vFN +xHg +tTg +dNn +dWX +cBf +jBE +wdL +oWo +rEn +oTr aaa aaa aaa @@ -148664,62 +149060,62 @@ wTL cnP cFh ltY +ezR +ezR cMz -cMz -tWT -xHC -cMz -cMz -cMz -cMz -cWd -cWd -cWd -cWd -cWd -dbl -dcx -cwr -cJg -dhd -diN -dfC -cJg -dmB -doh -dpH -cXJ -dJk -dMi -duB -dMi -sAW -cXJ -xwk -xHj +qxT +kto +hvf +itX +xBq +aHg +cOg +jAP +xFI +dlu +cSF +cSF +esf +cSF +lqL +xhf +nhv +eMB +vPa +uMB +vfi +dBK +doj +dtT +jIB +bBV +lDO +npV +dfl +fxo cXJ dCm -dDD +cUA bng aaa dFG -dFG -ctw -dFG -dFG -dFG -dFG -dJW -aki -jsq -lPv +wro +cBf +wdL dGw -dFG -dFG -dFG -abj -abj -abj +dGw +tCf +tCf +tCf +dGw +dGw +hGZ +qgr +ezr +wWW +qfH +sRk +uNq aaa aaa aaa @@ -148808,7 +149204,7 @@ aaa aaa aaa aaa -aGW +sso abj ace aco @@ -148896,7 +149292,7 @@ nXf bLn bTh bVn -bXk +vjT bYN caH ccz @@ -148922,62 +149318,62 @@ cnP cFi cGM cmv -ctv -cLi -cOn +kGv +cMz +cMz +aKQ +hvf +pkg +fCT +cMz +aZE +cKY cWd -vEP cWd -cUl -cVW -cXC -cYX -cpK cWd -cKV -cwp -dXp -cKY -cKY -cKY -cKY +cWd +bRA +cWd cKY -dmz -dol -dpG -dAx +bzu +bzu +bzu dAx dAx dAx -dAx -dAx -dAx -dAx -yjn -dAx +gLm +ryz +ryz +dlz +dlz +pIs +dlz +dlz +cXJ +cXJ cSY -dDC +iKN bng abj dFG -dGt -dHf -dId -dNt -dJP -jUx -dLe +erE +cBf dOd -dMC -dOd -duO -dOG -dPj -dPS -dWX -dXd -abj -aaa +ghS +mJw +dLe +dLe +dLe +jhr +dGw +dJr +qJe +mrs +cEB +sAa +wkW +pqY +pDw aaa aaa aaa @@ -149179,60 +149575,60 @@ cnP cFj cGN boG -cJw -xWD -cMH -cWd -cRx -cWd -pDb -cXG -cXG -cYY -cZU -kit -cKV -cwp -cSF -cJg -dhd +aSu +lpX +cMz +hiZ +hvf +hvf +fCT +cMz +mzW +mVE +hxe +lUg +lTy +sSG +khM +fyn +bzu dhc dBp -cJg -dmB -doh -ntt -dAx -dJM -xgR -iFx -iKj -xKW -dAx -muK -ifj +gnh dAx +bss +ntt +qKk +itm +iGk +dlz +gPc +qft +eyG +dlz +iQK boG -dDE +boG +oDF npb aaa -aki -dGu -dHg -dIe -dIZ -dJQ -dej -dLf -dej -dMD -dOH -dOe -dOH -dPk -xCS -dWY -abj +dFG +xOG +adX +qTE +jGI +lXn +xCT +xTt +ncB +abM +vTs +vmp +tID +ipg +sMn +uUi +dFG abj aaa aaa @@ -149410,7 +149806,7 @@ bPr bsH rOn bVg -bXk +sUE bYN hiO ccB @@ -149434,64 +149830,64 @@ cBP jez cnP cFk -cGO +vhF cHZ -cJx -cLk -cMH -des -cSR +boG +jKY +cMz +jTJ +vGC +lFG +lpo +cMz +ezR +mli cWd -cUo -cVY -cXF -dlA -cZV -mHm -dlE -dcy -deh -gNS -dvR +mcY +kXO +mWe +xDk +rCv +bzu dxA dBt dbF -dmA -doi -dpI -wYm -dPn -dtq -soN -dvQ -nfo -ofA -dzm -dAu dAx +ueP +oAx +hXE +gMe +ffa +hRJ +hiT +lwo +rRw +dlz +iny +cSY cSZ -dDE +lvO bng abj dFG -dGv -dNv -dIk -dJe -dNv -dKD -dLg -dLX -dXi -dXi -dOf -dXi -dPl +dwz +spz +kqX +mxM +jdH +qPN +thz +qPN +oJi +dGw +dGw +dNr +bPV +dNr dFG -dWZ -dXe -abj -abj +dFG +aaa +aaa aaa aaa aaa @@ -149694,59 +150090,57 @@ csi csi cIa csi -cLl -cMI -ykl -cSS -tgf -cUp -cXG -cXG -cYZ -cZW -kit -cKV -dqW -cPJ -cJg -dhe +syB +cMz +cMz +cMz +cMz +cMz +cMz +huq +boG +cWd +eNp +gvZ +slq +kAx +pBs +bzu dye -dkl -cJg -dmB -doj -dpJ -dqS -dQu -dtr -duD -rsF -dwL -dAx -vbZ -dAv +nso +dNe dAx +orw +cel +fXM +mwc +leo +dlz +wbi +knY +shh +dlz cSZ -dDE +cSY +cSZ +lvO bng aaa dFG +dFG dGw -dNr -xlB -dJf -dGw -dGw +nIC dGw -knd dGw dNr -jDT +scc dNr dGw -dFG -dFG -dFG +dGw +fPb +dLe +gbQ +pAB dFG abj aaa @@ -149799,6 +150193,8 @@ aaa aaa aaa aaa +aaa +aaa "} (194,1,1) = {" aaa @@ -149923,7 +150319,7 @@ bsH bsH btT wXF -bVB +iKf bsD bYM bYM @@ -149951,59 +150347,57 @@ cFl cGP cIb csi -dcB -cMJ -des -cST -cWd -cUq -vMy -jcu -wAV -cZX +nRv +wRi +cqC +cMH +kLU +szf +boG +doq +boG cWd -oPN -dcz -jdF -cKY -dhf +yis +qcs +xsN +dPe +aek +bzu gti -dCn -cKY -siJ -dok -dpK -dqS -dRx -dts -duE -rje -uQK -dAx -kVM -dAw +mVd +rdK dAx +ocR +etc +iAa +kBB +ldp +dlz +wMS +ebi +nvr +ifj +boG cSY -dDC -bng +cSY +lvO +ryp abj +aaa dFG -dGx -dHj -dJb -dXb -dJS +fdt +jDK dGw -dLh -dPo +oCp +dLe +gYx +dLe +svD dGw -dNs -dOh -dOJ -lPv +xUg +dWX dPU -dQx -dXf +vVX dFG abj aaa @@ -150056,6 +150450,8 @@ aaa aaa aaa aaa +aaa +aaa "} (195,1,1) = {" aaa @@ -150208,11 +150604,15 @@ cFm cGQ ujq csi -dlw -bng -cWd -cWc -cWc +xFZ +boG +cqC +cqC +eHp +boG +cqC +cqC +doq cWd cWd cWd @@ -150220,48 +150620,44 @@ cWd cWd cWd cKY -mJw cKY cKY cKY -cKY -cKY -cKY -dpt -dpt -dpt -dAx -dAx dAx dAx dAx dAx dAx dAx -dAx -dAx -dCm -dDD +dlz +dlz +dlz +dlz +dlz +oFW +boG +cSZ +cUA npb aaa -wuL -dGy -dIj -dOi -dXc -dJT -dXE -dLi -dOd -wuL -dNt -oEs -dOK -hIg -dPV -dQy -dXg -tKX +aaa +dFG +veV +qmB +dGw +wro +eoJ +liE +sVx +mJY +dGw +uuh +eoJ +pGL +rYa +nlq +abj +abj aaa aaa aaa @@ -150467,30 +150863,30 @@ cId csi kkC cqC -boG +cMH boG cqC +doq +cMH cqC boG -cjn -cXD cZc -cqC +qaf boG -dcB +duM dek cjn boG cqC cqC -cMH -doq -cqC +iQK +tVb cqC +doq cqC -dsj -boG boG +dsj +cMH gpX cMH dyc @@ -150498,26 +150894,24 @@ dzo hjo cjn obN -dDE +oDF bng aaa -wby -dGz -dJi -dJc -dXh -dJU -lPv -dLj -dQG -dmd -dNu -dOj -dOL -dGw -dGw +aaa +dFG +saH +opY dGw +uZp +imG +cBf +dWX +rdA dGw +psH +qPN +rHX +hDu dFG abj aaa @@ -150570,6 +150964,8 @@ aaa aaa aaa aaa +aaa +aaa "} (197,1,1) = {" aaa @@ -150736,8 +151132,8 @@ cZT dbq dcC del -dfH -cHW +uqW +oVH cjF cHW cHW @@ -150758,24 +151154,24 @@ iVO dDF bqC abj +aaa dFG -dGA -dHm -dJd -dXi -dJV +iGQ +jNp dGw -dLk -dXi -knd -dNv -dOk -dOM -rFp -dPW -dQz -dXg -tKX +bwl +njF +dMx +sYf +rOl +dFG +iMy +vOB +hzL +jmY +jNX +aaa +aaa aaa aaa aaa @@ -150986,13 +151382,13 @@ aFt aFt cSX dDE -iwk -dlz -dlz +bqC +bng +bng dcF -dlz -dlz -dlz +bng +bng +ryp dfI dhi dfI @@ -151015,24 +151411,20 @@ oqS dDG dDG abj +aaa +dFG +dFG dFG -dGw -dGw -jrG -dGw -dJW -dGw -dLl -dYE -dGw -dNw -dOl -dON -lPv -dPX -dQA -dXf dFG +dFG +vOB +kce +tKX +dFG +dFG +abj +abj +abj abj aaa aaa @@ -151041,6 +151433,10 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa aaZ aaa aaa @@ -151243,7 +151639,7 @@ imS aFt iPa vly -iwk +bqC cZb cZY dcG @@ -151272,25 +151668,25 @@ dCq dDH dDG abj +aaa +aaa +aaa abj -dFG -lzO -dIm -dJh -dJX -dFG -dFG -dFG -dFG -dFG -knd -dFG -dFG -dFG -dFG -dFG -dFG abj +abj +aaa +aaa +abj +abj +abj +aaa +aaa +abj +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -151500,11 +151896,11 @@ cQe aFt cSZ cUw -dlz +bng cZe dab dcH -dlB +boG dJO dXT dfI @@ -151529,25 +151925,16 @@ dyb dDI jvR abj -abj -aki -dHp -dIn -dJY -dJY -lPv aaa -abj -abj -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa abj -abj -abj -abj -abj -abj -abj aaa aaa aaa @@ -151598,224 +151985,233 @@ aaa aaa aaa aaa -"} -(201,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaZ -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abj -eNt -aZu -eNt -abj -abj -abj -aaa -aaa -abj -ygH -aJx -aJx -vNM -fgM -fgM -fgM -fgM -fgM -fgM -fgM -aZG -bbq -ygH -bLA -pJt -bLA -bLA -juN -ejC -uRn -bLA -bLA -bno -bqM -bjr -bqM -tmp -ewt -kgb -rTN -bLB -vZC -rXR -hps -bLB -hiB -isB -jbi -bLB -hTV -hTV -eZE -eGJ -hkM -bsG -cjr -foK -cjr -cjr -bqj -cqE -bgt -axb -ckV -brS -oNd -cyV -cIk -cIj -cIk -pNl -fNF -tbn -cIh -aFu -cLo -cMM -aHQ -cQf -fIE -boG -dDy -dlz -cZf -dac -dcI -duy -dMu -dXU -dfI -dhl -diS -diS -diS -dmH -diT -diS -dtB -dmK -dtz -cjn -dvS -dwS -dyg -eQh -dAC -uVQ -dBq -dDJ -jvR -aaa -abj -dFG -dHq -dIo -dJj -sJx -dFG -abj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(201,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abj +eNt +aZu +eNt +abj +abj +abj +aaa +aaa +abj +ygH +aJx +aJx +vNM +fgM +fgM +fgM +fgM +fgM +fgM +fgM +aZG +bbq +ygH +bLA +pJt +bLA +bLA +juN +ejC +uRn +bLA +bLA +bno +bqM +bjr +bqM +tmp +ewt +kgb +rTN +bLB +vZC +rXR +hps +bLB +hiB +isB +jbi +bLB +hTV +hTV +eZE +eGJ +hkM +bsG +cjr +foK +cjr +cjr +bqj +cqE +bgt +axb +ckV +brS +oNd +cyV +cIk +cIj +cIk +pNl +fNF +tbn +cIh +aFu +cLo +cMM +aHQ +cQf +fIE +boG +dDy +bng +cZf +dac +dcI +duy +cMH +dXU +dfI +dhl +diS +diS +diS +dmH +diT +diS +dtB +dmK +dtz +cjn +dvS +dwS +dyg +eQh +dAC +uVQ +dBq +dDJ +jvR +abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -152014,13 +152410,13 @@ aFv aFv cSY dDC -dlz +bng cZg dab ddR dxM dNZ -dbA +kpk dfI dhm diT @@ -152042,14 +152438,14 @@ dBq dyb dDK oqS -aaa abj -dFG -dFG -dFG -dFG -dFG -dFG +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -152271,10 +152667,10 @@ cQg aFv cTa dDE -dlz +bng cZh dac -dem +uwX dAX dOb dXY @@ -152300,14 +152696,14 @@ dCs ucl oqS abj -abj -abj aaa aaa aaa -abj -abj -abj +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -152459,7 +152855,7 @@ ygH uUu kju aKU -tOv +aOX nFh aSj aTH @@ -152528,12 +152924,12 @@ cQi aFv aLH dDE -dlz +bng cZi daR deo dem -dMu +cMH dXZ dfJ dho @@ -152785,9 +153181,9 @@ cQh fIE cSY dDD -dlz +bng cZj -daS +dKB dep dGV ujM @@ -153042,13 +153438,13 @@ aFv aFv cjn dDE -dlz -dlz -dbr +bng +bng +bqB deq -dlz -dlz -dYa +bng +bng +dfK dfI dfI dfI @@ -155373,7 +155769,7 @@ aaa jtb jtb frh -jtb +udZ jtb abj abj @@ -155886,7 +156282,7 @@ aaa aaa abj jtb -kan +frh jtb abj abj @@ -157593,7 +157989,7 @@ aaa aaa aaa aaa -aGW +sso abj abj abj @@ -157862,7 +158258,7 @@ mhu mhu mhu mhu -mhu +mVF bda aTM bdf @@ -158116,7 +158512,7 @@ aaa aaa aaa aaa -noB +aaa jrB mmV ihi diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 455f8e33cfb3..f308ad53b0ae 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -42,6 +42,10 @@ }, /turf/space, /area/space) +"abb" = ( +/obj/machinery/economy/vending/cigarette, +/turf/simulated/floor/wood, +/area/station/command/office/captain) "abe" = ( /obj/structure/grille/broken, /obj/structure/lattice, @@ -65,11 +69,7 @@ /turf/simulated/floor/plating/airless, /area/station/engineering/solar/auxport) "abU" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -162,7 +162,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "acx" = ( /obj/structure/cable{ d1 = 1; @@ -233,7 +233,7 @@ /area/station/science/toxins/mixing) "adc" = ( /obj/structure/closet/secure_closet/clown, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /turf/simulated/floor/wood, /area/station/service/clown) "adi" = ( @@ -308,11 +308,7 @@ pixel_x = -6; pixel_y = 24 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -404,7 +400,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "aev" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -418,16 +414,12 @@ dir = 6 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aex" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -536,7 +528,7 @@ /area/shuttle/pod_3) "afT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, @@ -663,7 +655,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -695,7 +687,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "ahv" = ( /obj/structure/lattice, /obj/machinery/access_button{ @@ -750,20 +742,20 @@ /area/station/public/fitness) "aii" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = -5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, @@ -809,10 +801,7 @@ dir = 4 }, /obj/effect/turf_decal/stripes/corner, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -834,7 +823,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aiL" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -874,9 +863,7 @@ /obj/machinery/computer/mob_battle_terminal/red{ pixel_y = 30 }, -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -886,6 +873,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/security/processing) +"aje" = ( +/obj/structure/chair, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "ajg" = ( /turf/simulated/wall, /area/station/maintenance/fore) @@ -988,11 +982,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "ajJ" = ( @@ -1049,7 +1039,7 @@ /area/station/maintenance/fore) "ajS" = ( /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "akg" = ( @@ -1113,11 +1103,7 @@ }, /area/station/public/fitness) "akr" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -1184,7 +1170,7 @@ c_tag = "Engineering - Storage" }, /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "akR" = ( @@ -1267,6 +1253,10 @@ pixel_x = -24 }, /obj/structure/closet/crate/can, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" @@ -1381,20 +1371,12 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "cult" }, /area/station/legal/lawoffice) "alI" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = -5 - }, /obj/machinery/light/small{ dir = 1 }, @@ -1529,9 +1511,6 @@ /turf/simulated/wall/r_wall, /area/station/security/brig) "amI" = ( -/obj/structure/closet{ - name = "Evidence Closet 3" - }, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -1542,11 +1521,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -1584,11 +1560,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -1947,7 +1919,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "aok" = ( /obj/structure/cable, /obj/structure/cable{ @@ -1981,7 +1953,7 @@ /obj/structure/window/plasmareinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter{ layer = 3.3 }, @@ -2424,12 +2396,10 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aqQ" = ( -/obj/structure/closet{ - name = "Evidence Closet 1" - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkred" @@ -2629,11 +2599,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "arU" = ( @@ -2848,10 +2814,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "ate" = ( @@ -2930,6 +2893,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3166,11 +3134,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 8; icon_state = "0-4" @@ -3183,7 +3147,7 @@ name = "KEEP CLEAR: DOCKING AREA" }, /turf/simulated/wall/r_wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "auj" = ( /obj/machinery/camera/autoname{ dir = 4 @@ -3366,7 +3330,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluefull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "avc" = ( /turf/simulated/wall/r_wall, /area/station/command/office/hos) @@ -3421,6 +3385,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "avr" = ( @@ -3454,11 +3419,7 @@ /area/station/maintenance/fsmaint) "avz" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -3674,7 +3635,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "avU" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -3731,9 +3692,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "awb" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel, /area/station/supply/office) "awe" = ( @@ -4132,11 +4091,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "axw" = ( @@ -4196,7 +4151,7 @@ /area/station/maintenance/fore) "axH" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) "axM" = ( @@ -4422,7 +4377,7 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "ayE" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -5333,11 +5288,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/light_switch{ name = "custom placement"; pixel_x = 6; @@ -5353,6 +5304,7 @@ name = "west bump"; pixel_x = -28 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "aCw" = ( @@ -5413,13 +5365,6 @@ /obj/structure/closet/secure_closet/engineering_welding, /turf/simulated/floor/plasteel, /area/station/engineering/control) -"aCH" = ( -/obj/structure/cable/yellow, -/obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "Processing" - }, -/turf/simulated/floor/plating, -/area/station/supply/storage) "aCV" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -5553,11 +5498,7 @@ /turf/simulated/floor/plating/airless, /area/space/nearstation) "aDt" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -5618,7 +5559,7 @@ locked = 1; name = "Supply Dock Airlock" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle, /turf/simulated/floor/plating, /area/station/supply/storage) "aDB" = ( @@ -6142,7 +6083,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "aFF" = ( /obj/machinery/camera{ c_tag = "Mining Office"; @@ -6463,16 +6404,13 @@ d2 = 4; icon_state = "2-4" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/security/brig) "aGX" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -29 }, -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -6643,9 +6581,7 @@ "aHH" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/delivery/hollow, -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "aHI" = ( @@ -6680,7 +6616,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aHO" = ( /turf/simulated/wall/r_wall, /area/station/security/armory/secure) @@ -6690,7 +6626,7 @@ name = "east bump"; pixel_x = 24 }, -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -6736,11 +6672,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/storage) "aHZ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -6776,11 +6708,7 @@ /area/station/command/bridge) "aIc" = ( /obj/machinery/light, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow, /turf/simulated/floor/wood, /area/station/public/mrchangs) @@ -6848,6 +6776,12 @@ /obj/structure/statue/tranquillite/mime, /turf/simulated/floor/mineral/tranquillite, /area/station/service/mime) +"aIr" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/north) "aIs" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -6921,7 +6855,7 @@ dir = 1 }, /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "aIA" = ( @@ -7112,7 +7046,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aJa" = ( /obj/machinery/alarm{ dir = 4; @@ -7125,7 +7059,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJb" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 6 @@ -7146,7 +7080,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "aJd" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=1.5-Fore-Central"; @@ -7161,7 +7095,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -7172,7 +7106,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -7191,7 +7125,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJg" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -7210,7 +7144,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJh" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -7224,7 +7158,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJi" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -7240,7 +7174,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJk" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -7254,7 +7188,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJl" = ( /obj/effect/spawner/random_spawners/grille_maybe, /turf/simulated/floor/plating, @@ -7273,11 +7207,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -7291,7 +7225,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aJt" = ( /obj/machinery/atmospherics/pipe/manifold/visible/green{ dir = 1 @@ -7306,7 +7240,7 @@ /area/station/engineering/control) "aJv" = ( /turf/simulated/wall/r_wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "aJz" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -7505,7 +7439,8 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "aKf" = ( @@ -7520,7 +7455,8 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "aKg" = ( @@ -7553,7 +7489,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aKi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7573,11 +7509,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/tile/bar, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aKl" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -7606,7 +7547,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKw" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -7617,7 +7558,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -7642,16 +7583,10 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKB" = ( /turf/simulated/wall, /area/station/service/clown) -"aKC" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "redcorner" - }, -/area/station/hallway/primary/fore) "aKD" = ( /obj/machinery/camera{ c_tag = "Fore Primary Hallway Cells" @@ -7663,7 +7598,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKE" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -7674,7 +7609,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKF" = ( /obj/structure/rack, /obj/item/reagent_containers/dropper/precision, @@ -7703,7 +7638,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKI" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -7712,13 +7647,13 @@ }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "aKK" = ( /obj/item/radio/beacon, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKL" = ( /obj/machinery/light{ dir = 1 @@ -7727,7 +7662,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aKT" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -7942,10 +7877,8 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 +/obj/machinery/power/apc/critical/directional/west{ + shock_proof = 1 }, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) @@ -8145,15 +8078,14 @@ }, /obj/item/cartridge/cargo, /obj/item/megaphone, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, +/obj/machinery/keycard_auth{ + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "brown" }, @@ -8179,25 +8111,15 @@ icon_state = "brown" }, /area/station/supply/qm) -"aLV" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/station/supply/lobby) "aLW" = ( /obj/machinery/alarm{ dir = 4; name = "west bump"; pixel_x = -24 }, -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aLY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8207,13 +8129,13 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aLZ" = ( /obj/structure/reagent_dispensers/fueltank, /obj/item/weldingtool, /obj/item/clothing/head/welding, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aMb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8263,7 +8185,7 @@ /area/station/maintenance/fpmaint) "aMf" = ( /turf/simulated/wall/r_wall, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aMh" = ( /obj/machinery/atmospherics/portable/canister/air, /obj/effect/turf_decal/delivery/white/hollow, @@ -8279,7 +8201,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aMk" = ( /turf/simulated/wall, /area/station/legal/courtroom) @@ -8390,7 +8312,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "aMA" = ( /obj/structure/table/wood, /obj/item/stamp/clown{ @@ -8476,7 +8398,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "aML" = ( /turf/simulated/floor/plasteel, /area/station/public/construction) @@ -8647,7 +8569,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/keycard_auth, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -8673,7 +8594,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aNf" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -8686,20 +8607,16 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow{ d1 = 1; d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aNi" = ( /obj/structure/window/basic, -/obj/structure/reagent_dispensers/watertank, /obj/machinery/camera{ c_tag = "Outter Vault"; dir = 8 @@ -8710,10 +8627,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plasteel{ icon_state = "browncorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aNk" = ( /obj/machinery/economy/vending/assist, /obj/effect/decal/cleanable/dirt, @@ -8772,7 +8695,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aNu" = ( /obj/structure/chair, /obj/structure/sign/poster/official/random{ @@ -8826,7 +8749,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aNG" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -8842,16 +8765,13 @@ }, /area/station/legal/lawoffice) "aNJ" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aNK" = ( /obj/machinery/door/airlock{ id_tag = "Toilet1"; @@ -8870,7 +8790,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aNM" = ( /obj/machinery/cryopod, /obj/machinery/light_switch{ @@ -9248,11 +9168,7 @@ /area/station/maintenance/fsmaint) "aPl" = ( /obj/machinery/shieldgen, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -9365,15 +9281,16 @@ pixel_x = 7; pixel_y = -6 }, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo Requests Console"; - pixel_y = 30 - }, /obj/machinery/photocopier/faxmachine{ department = "Quartermaster's Office" }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "brown" }, @@ -9632,7 +9549,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aQs" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -9715,6 +9632,9 @@ /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, /obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "qm" + }, /turf/simulated/floor/plasteel, /area/station/supply/qm) "aQI" = ( @@ -9948,18 +9868,8 @@ }, /area/station/public/dorms) "aRu" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/turf/simulated/wall, +/area/station/hallway/secondary/entry/south) "aRx" = ( /obj/structure/closet/wardrobe/orange, /turf/simulated/floor/plasteel{ @@ -9969,12 +9879,10 @@ /area/station/security/prisonlockers) "aRy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/glass/beaker{ pixel_x = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -10021,7 +9929,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aRD" = ( /obj/machinery/firealarm{ dir = 8; @@ -10057,13 +9965,13 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aRH" = ( /obj/structure/table/wood, /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/structure/window/reinforced{ @@ -10464,9 +10372,7 @@ /area/station/legal/courtroom) "aTh" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plating, /area/station/maintenance/fore) "aTi" = ( @@ -10477,7 +10383,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aTm" = ( /obj/machinery/firealarm{ dir = 8; @@ -10728,7 +10634,7 @@ /area/station/maintenance/fpmaint) "aUa" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -10882,7 +10788,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aUq" = ( /obj/machinery/firealarm{ dir = 4; @@ -10896,7 +10802,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aUs" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10925,14 +10831,9 @@ /turf/simulated/floor/plating, /area/station/public/storage/emergency/port) "aUw" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aUx" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -11009,11 +10910,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -11085,6 +10982,17 @@ icon_state = "darkgrey" }, /area/station/engineering/smes) +"aUM" = ( +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/directional/west, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/ne) "aUP" = ( /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber"; @@ -11151,16 +11059,14 @@ /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_1) "aUX" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/structure/sign/botany{ pixel_x = 32 }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "aUY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -11356,11 +11262,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -11618,9 +11520,7 @@ name = "east bump"; pixel_x = 27 }, -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /turf/simulated/floor/wood, /area/station/legal/courtroom) "aWj" = ( @@ -11663,12 +11563,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 8; - name = "Engineering Engine Super APC"; - pixel_x = -24 - }, +/obj/machinery/power/apc/critical/directional/west, /turf/simulated/floor/plasteel, /area/station/engineering/control) "aWq" = ( @@ -11712,11 +11607,16 @@ dir = 8 }, /obj/effect/turf_decal/tile/bar, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/central/north) "aWv" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, @@ -11769,7 +11669,7 @@ dir = 1; pixel_y = 2 }, -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /turf/simulated/floor/wood, /area/station/command/office/captain/bedroom) "aWF" = ( @@ -11821,12 +11721,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 8; - name = "Engineering Engine Super APC"; - pixel_x = -24 - }, +/obj/machinery/power/apc/critical/directional/west, /obj/machinery/computer/security/engineering, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" @@ -11867,7 +11762,7 @@ pixel_x = -28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "aWV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12025,7 +11920,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "aXu" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, @@ -12211,11 +12106,11 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aXS" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aXT" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/three, @@ -12244,10 +12139,7 @@ icon_state = "0-4" }, /obj/machinery/light, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/station/public/construction) "aXY" = ( @@ -12279,7 +12171,7 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aYb" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/two, @@ -12296,13 +12188,8 @@ layer = 4; pixel_x = -32 }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "aYl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12372,7 +12259,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aYA" = ( /obj/effect/spawner/window/reinforced/tinted, /turf/simulated/floor/plating, @@ -12465,10 +12352,7 @@ /area/station/public/locker) "aYM" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -12547,7 +12431,7 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aYU" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -12661,7 +12545,7 @@ name = "Escape Pod One" }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aZk" = ( /obj/machinery/door/airlock/engineering{ name = "Arrivals Expansion Area" @@ -12669,11 +12553,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aZm" = ( /obj/effect/spawner/window/reinforced/tinted, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aZn" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -12686,7 +12570,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aZr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -12772,7 +12656,7 @@ /area/station/engineering/smes) "aZJ" = ( /turf/simulated/wall/r_wall, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "aZK" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -12828,7 +12712,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aZQ" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -12841,7 +12725,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aZR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, @@ -12849,7 +12733,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "aZS" = ( /obj/structure/sign/directions/science{ pixel_x = 32; @@ -12866,7 +12750,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "aZT" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -12874,10 +12758,7 @@ }, /obj/structure/table, /obj/item/storage/fancy/donut_box, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -12961,7 +12842,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bac" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12983,6 +12864,11 @@ }, /area/station/hallway/secondary/bridge) "bad" = ( +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Dorms Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -13170,13 +13056,13 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "baJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "baK" = ( /obj/structure/chair, /obj/machinery/camera{ @@ -13189,7 +13075,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "baL" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -13217,7 +13103,7 @@ dir = 4; icon_state = "whitecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "baO" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -13260,7 +13146,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "baZ" = ( /obj/structure/closet/crate, /obj/item/stack/packageWrap{ @@ -13295,7 +13181,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bbh" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -13306,7 +13192,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -13345,14 +13231,12 @@ name = "north bump"; pixel_y = 24 }, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbn" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -13363,7 +13247,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbo" = ( /obj/machinery/light{ dir = 1 @@ -13376,7 +13260,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbp" = ( /obj/machinery/camera{ c_tag = "Central Primary Hallway - Fore" @@ -13396,13 +13280,13 @@ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbq" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbr" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -13410,13 +13294,13 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbs" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbt" = ( /obj/machinery/alarm{ dir = 4; @@ -13427,7 +13311,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bbv" = ( /obj/structure/closet/wardrobe/xenos, /turf/simulated/floor/plasteel{ @@ -13479,7 +13363,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbC" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -13504,7 +13388,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bbE" = ( /obj/structure/table/reinforced, /obj/item/razor, @@ -13530,9 +13414,7 @@ }, /area/station/command/office/ce) "bbM" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /obj/structure/sign/electricshock{ pixel_x = -32 }, @@ -13553,8 +13435,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bbT" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13628,7 +13514,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bcf" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -13641,8 +13527,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bcj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13676,11 +13567,7 @@ req_access = list(75) }, /obj/effect/landmark/start/cyborg, -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -13702,7 +13589,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bco" = ( /obj/machinery/light/small{ dir = 4 @@ -13766,7 +13653,7 @@ "bcu" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bcv" = ( @@ -13783,7 +13670,7 @@ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bcC" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -13809,13 +13696,11 @@ }, /area/station/supply/lobby) "bcH" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" }, -/turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/aft/north) "bcI" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -13836,7 +13721,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bcJ" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -13856,7 +13741,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bcK" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -13868,7 +13753,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bcL" = ( /obj/machinery/computer/guestpass{ pixel_y = -30 @@ -13888,7 +13773,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bcN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -13908,27 +13793,27 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bcO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/machinery/newscaster{ name = "north bump"; pixel_y = 28 @@ -13950,6 +13835,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard) "bcR" = ( @@ -13957,11 +13847,11 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bcS" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bcV" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -13982,7 +13872,7 @@ /area/station/supply/storage) "bcX" = ( /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bcZ" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -13995,12 +13885,12 @@ /turf/simulated/floor/plasteel{ icon_state = "C7" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bdb" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bdc" = ( /obj/structure/sign/poster/random{ pixel_x = 32 @@ -14008,7 +13898,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bde" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -14019,14 +13909,14 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bdi" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bdk" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "Perma Gate"; @@ -14182,6 +14072,11 @@ pixel_x = 6; pixel_y = -6 }, +/obj/machinery/requests_console{ + department = "Tech Storage"; + name = "Tech Storage Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -14231,7 +14126,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bdC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -14289,7 +14184,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bdH" = ( /obj/machinery/status_display{ layer = 4; @@ -14302,7 +14197,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bdI" = ( /turf/simulated/wall/r_wall, /area/station/turret_protected/ai) @@ -14364,13 +14259,13 @@ dir = 5; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bdR" = ( /obj/machinery/door/airlock/external{ name = "Arrival Airlock" }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bdS" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -14383,7 +14278,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bdT" = ( /obj/machinery/door/airlock/security{ name = "Detective's Office" @@ -14433,7 +14328,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bdW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -14463,7 +14358,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bdZ" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14497,7 +14392,7 @@ dir = 6 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bei" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -14516,7 +14411,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bej" = ( /obj/structure/window/reinforced{ dir = 1 @@ -14537,7 +14432,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bel" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14556,7 +14451,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "ben" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14571,7 +14466,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "beo" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -14584,7 +14479,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bep" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14603,7 +14498,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "beq" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14619,7 +14514,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "ber" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14639,7 +14534,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C6" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bes" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -14661,7 +14556,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C8" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "beu" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14680,7 +14575,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bev" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14698,7 +14593,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bex" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -14718,7 +14613,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bey" = ( /obj/machinery/light{ dir = 4 @@ -14735,7 +14630,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bez" = ( /turf/simulated/wall, /area/station/public/storage/tools/auxiliary) @@ -14760,7 +14655,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "beE" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -14811,7 +14706,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "beI" = ( /obj/machinery/door_control{ desc = "A remote control-switch for the engineering security doors."; @@ -14883,7 +14778,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "beQ" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -14896,15 +14791,13 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "beR" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; pixel_x = 27 }, -/obj/item/kirbyplants{ - icon_state = "plant-16" - }, +/obj/item/kirbyplants/plant16, /obj/item/radio/intercom{ name = "north bump"; pixel_y = 28 @@ -14913,7 +14806,7 @@ dir = 5; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "beW" = ( /obj/structure/window/reinforced{ dir = 8 @@ -15001,16 +14894,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bfj" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -15026,11 +14914,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/item/kirbyplants{ - level = 4.1 - }, +/obj/item/kirbyplants, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bfn" = ( /obj/structure/closet/emcloset, /obj/machinery/firealarm{ @@ -15053,7 +14939,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plating, /area/station/supply/storage) "bfp" = ( @@ -15096,8 +14982,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bfv" = ( /obj/structure/closet/secure_closet/cargotech, /obj/structure/disposalpipe/segment, @@ -15164,7 +15055,7 @@ /area/station/turret_protected/ai) "bfG" = ( /turf/simulated/wall, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bfH" = ( /obj/machinery/light{ dir = 4 @@ -15186,7 +15077,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bfJ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -15195,7 +15086,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bfK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15203,7 +15094,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bfN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -15213,16 +15104,6 @@ }, /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai) -"bfO" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central) "bfR" = ( /obj/machinery/firealarm{ dir = 1; @@ -15232,7 +15113,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bfS" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -15240,13 +15121,13 @@ "bfU" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bfV" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bfW" = ( /obj/machinery/firealarm{ dir = 1; @@ -15257,7 +15138,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bfX" = ( /obj/machinery/camera{ c_tag = "Central Primary Hallway - Fore - Courtroom"; @@ -15267,26 +15148,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bfY" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) -"bfZ" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bga" = ( /obj/structure/sign/vacuum/external{ pixel_y = -32 @@ -15294,7 +15163,7 @@ /obj/machinery/light, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bgb" = ( /obj/machinery/washing_machine, /turf/simulated/floor/plasteel{ @@ -15314,7 +15183,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bge" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plasteel{ @@ -15330,11 +15199,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "yellow" @@ -15363,7 +15228,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bgi" = ( /obj/structure/closet/toolcloset, /turf/simulated/floor/plasteel{ @@ -15390,16 +15255,11 @@ codes_txt = "patrol;next_patrol=3-Central-Port"; location = "2-Storage" }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "bgm" = ( /obj/structure/rack{ dir = 8; @@ -15650,7 +15510,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bgH" = ( /obj/machinery/ai_status_display{ pixel_y = 32 @@ -15659,7 +15519,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bgK" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -15688,7 +15548,7 @@ dir = 10; icon_state = "blueyellow" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bgO" = ( /obj/structure/rack{ dir = 8; @@ -15743,25 +15603,16 @@ /turf/space, /area/space/nearstation) "bgV" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/effect/spawner/random_spawners/cobweb_left_rare, /turf/simulated/floor/wood{ icon_state = "wood-broken3" }, /area/station/maintenance/starboard) "bgW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "arrival" - }, -/area/station/hallway/secondary/entry) +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/south) "bgX" = ( /turf/simulated/wall, /area/station/security/checkpoint/secondary) @@ -15777,7 +15628,7 @@ /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bhc" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -15794,7 +15645,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bhd" = ( /obj/structure/table, /obj/item/flashlight{ @@ -15831,11 +15682,7 @@ pixel_x = 26; pixel_y = 26 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -15863,10 +15710,10 @@ /obj/machinery/economy/vending/coffee, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bhl" = ( /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bhm" = ( /obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -15897,7 +15744,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bhq" = ( /turf/simulated/wall, /area/station/service/janitor) @@ -16005,7 +15852,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "bhH" = ( /obj/structure/cable{ d1 = 1; @@ -16118,12 +15965,12 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bhW" = ( /obj/machinery/economy/vending/cigarette, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bhY" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -16160,11 +16007,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -16336,21 +16179,12 @@ /turf/simulated/floor/plating, /area/shuttle/arrival/station) "bit" = ( -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "biv" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law{ @@ -16367,11 +16201,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -16492,7 +16322,7 @@ }, /area/station/supply/storage) "biJ" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -16505,7 +16335,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "biL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/flasher{ @@ -16518,7 +16348,7 @@ "biN" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "biO" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -16529,11 +16359,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/bar, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "biU" = ( /obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16559,7 +16394,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "biY" = ( /obj/structure/reagent_dispensers/watertank, /obj/structure/reagent_dispensers/spacecleanertank{ @@ -16649,13 +16484,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "bjh" = ( /obj/machinery/light{ dir = 1 @@ -16703,7 +16533,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bjp" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -16841,7 +16671,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bjB" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -16882,7 +16712,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bjF" = ( /obj/structure/closet/toolcloset, /obj/item/radio/intercom{ @@ -17168,7 +16998,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "bkt" = ( /obj/machinery/camera{ c_tag = "Engineering - Entrance"; @@ -17182,7 +17012,7 @@ "bku" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /turf/simulated/floor/plating, /area/station/supply/office) "bkw" = ( @@ -17203,8 +17033,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bkA" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -17258,14 +17093,14 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bkI" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "browncorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bkL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17344,7 +17179,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "bkT" = ( /obj/structure/closet/toolcloset, /obj/item/clothing/glasses/meson/engine, @@ -17366,8 +17201,13 @@ dir = 9; icon_state = "redyellow" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bkV" = ( +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "brown" @@ -17430,7 +17270,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "blk" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -17447,7 +17287,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bll" = ( /obj/structure/closet/emcloset, /obj/structure/sign/double/map/left{ @@ -17472,7 +17312,7 @@ /area/station/hallway/primary/starboard) "blo" = ( /turf/simulated/wall, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "blq" = ( /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ @@ -17490,7 +17330,6 @@ }, /area/station/engineering/tech_storage) "blr" = ( -/obj/machinery/suit_storage_unit/atmos, /obj/machinery/atmospherics/pipe/manifold/visible/purple{ dir = 1 }, @@ -17498,6 +17337,7 @@ name = "north bump"; pixel_y = 24 }, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -17610,7 +17450,7 @@ dir = 8; icon_state = "browncorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "blJ" = ( /obj/item/radio/intercom/custom{ pixel_y = 25 @@ -17747,16 +17587,11 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "blX" = ( /obj/machinery/alarm{ dir = 4; @@ -17981,11 +17816,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bms" = ( @@ -17995,6 +17826,9 @@ icon_state = "map-right-MS"; pixel_y = 32 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/station/supply/lobby) "bmu" = ( @@ -18114,11 +17948,7 @@ }, /obj/item/key/janitor, /obj/item/reagent_containers/spray/cleaner, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/decal/cleanable/dirt, /obj/item/storage/box/lights/mixed, /obj/item/storage/box/lights/mixed, @@ -18164,7 +17994,7 @@ pixel_y = -24 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor{ pixel_x = -4; pixel_y = 2 @@ -18209,7 +18039,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bnc" = ( /obj/machinery/door/airlock/maintenance{ name = "Hydroponics Garden" @@ -18255,7 +18085,11 @@ /area/station/hallway/primary/starboard) "bni" = ( /obj/machinery/camera{ - c_tag = "Starboard Primary Hallway - Tech Storage" + c_tag = "Starboard Primary Hallway - Auxiliary Tool Storage" + }, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 }, /turf/simulated/floor/plasteel{ dir = 4; @@ -18284,7 +18118,7 @@ /turf/simulated/floor/plasteel{ icon_state = "blue" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bnm" = ( /obj/effect/turf_decal/stripes/white/line, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -18307,7 +18141,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bnp" = ( /obj/structure/sign/securearea{ pixel_y = 32 @@ -18316,7 +18150,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bnr" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -18332,7 +18166,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -18525,17 +18359,11 @@ /turf/simulated/floor/plating, /area/station/supply/storage) "bnX" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bnY" = ( /obj/structure/sign/pods, /turf/simulated/wall, @@ -18677,9 +18505,11 @@ /area/station/command/bridge) "bos" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/light{ - dir = 1 +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/supply/lobby) "bou" = ( @@ -18863,7 +18693,7 @@ icon_state = "pipe-j2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "boQ" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -18936,8 +18766,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "boY" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -18972,7 +18807,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bpf" = ( /turf/simulated/floor/plasteel, /area/station/maintenance/fsmaint) @@ -19085,28 +18920,23 @@ /turf/simulated/floor/plasteel, /area/station/supply/office) "bpz" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bpA" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bpC" = ( /turf/simulated/floor/plasteel{ dir = 9; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bpD" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -19121,10 +18951,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/door/airlock/mining/glass{ name = "Mailroom" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "bpF" = ( @@ -19146,7 +18976,7 @@ dir = 9; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bpH" = ( /obj/structure/sign/double/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -19158,7 +18988,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bpI" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -19167,7 +18997,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bpJ" = ( /obj/machinery/conveyor{ dir = 1; @@ -19311,11 +19141,7 @@ "bpU" = ( /obj/structure/cable/yellow, /obj/effect/landmark/spawner/nukedisc_respawn, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bpV" = ( @@ -19353,7 +19179,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bqc" = ( /turf/simulated/wall/r_wall, /area/station/command/office/hop) @@ -19521,8 +19347,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bqw" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, @@ -19536,7 +19367,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bqA" = ( /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -19551,14 +19382,14 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bqC" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bqD" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -19570,7 +19401,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bqE" = ( /obj/machinery/firealarm{ dir = 1; @@ -19578,13 +19409,13 @@ pixel_y = -24 }, /obj/machinery/camera{ - c_tag = "Starboard Primary Hallway - Auxiliary Tool Storage"; + c_tag = "Starboard Primary Hallway - Tech Storage"; dir = 1 }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bqG" = ( /obj/structure/table/glass, /obj/machinery/photocopier/faxmachine{ @@ -19618,7 +19449,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bqQ" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19641,7 +19472,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bqS" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, @@ -19813,11 +19644,6 @@ /turf/simulated/floor/plating/airless, /area/shuttle/arrival/station) "brv" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -19825,12 +19651,12 @@ dir = 4 }, /obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "brw" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19843,11 +19669,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "brx" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19862,7 +19693,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bry" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19871,11 +19702,16 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "brz" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19891,7 +19727,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "brA" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19911,7 +19747,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "brB" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19930,7 +19766,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "brC" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19947,7 +19783,7 @@ dir = 6; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "brD" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -19969,7 +19805,7 @@ dir = 10; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "brE" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -19987,13 +19823,13 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "brF" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "brG" = ( /obj/machinery/conveyor{ dir = 1; @@ -20021,7 +19857,7 @@ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "brK" = ( /obj/machinery/conveyor_switch/oneway{ id = "packageExternal"; @@ -20050,7 +19886,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "brO" = ( /obj/machinery/light{ dir = 4 @@ -20064,7 +19900,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "brQ" = ( /obj/machinery/ai_status_display{ pixel_y = -32 @@ -20085,21 +19921,25 @@ /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "brU" = ( -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "brV" = ( /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "brW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/binary/valve, @@ -20348,7 +20188,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bsX" = ( /obj/machinery/teleport/hub, /turf/simulated/floor/plasteel{ @@ -20380,7 +20220,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "btb" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -20404,45 +20244,55 @@ }, /area/station/aisat) "btm" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "btn" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ pixel_x = 1; pixel_y = 5 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bto" = ( /obj/structure/chair/comfy/beige, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "btp" = ( /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "btq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "btr" = ( /obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bts" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -20456,13 +20306,13 @@ dir = 8; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "btt" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "btu" = ( /obj/machinery/firealarm{ name = "north bump"; @@ -20472,44 +20322,45 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "btv" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "btz" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/directional/north, /obj/machinery/camera{ - c_tag = "Port Primary Hallway - Middle" + c_tag = "Port Primary Hallway - West" }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "btA" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "btB" = ( /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "btD" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -20525,13 +20376,13 @@ dir = 5; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "btF" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "btI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, @@ -20540,7 +20391,7 @@ dir = 1; icon_state = "brown" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "btK" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -20554,7 +20405,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "btM" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -20908,7 +20759,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "buw" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -20985,8 +20836,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "buE" = ( /obj/machinery/requests_console{ announcementConsole = 1; @@ -21114,7 +20970,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "buX" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -21283,19 +21139,19 @@ }, /area/station/command/bridge) "bvs" = ( -/obj/machinery/status_display{ - layer = 4; - pixel_x = -32 - }, /obj/machinery/camera{ c_tag = "Central Primary Hallway - Starboard - Art Storage"; dir = 4 }, +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "bvt" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21373,19 +21229,21 @@ dir = 4 }, /obj/effect/landmark/start/assistant, +/obj/structure/cable/yellow, +/obj/machinery/power/apc/important/directional/west, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bvB" = ( /turf/simulated/floor/carpet, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bvC" = ( /obj/machinery/hologram/holopad{ pixel_y = -16 }, /turf/simulated/floor/carpet, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bvD" = ( /obj/structure/chair/comfy/beige{ dir = 8 @@ -21393,7 +21251,7 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bvE" = ( /obj/machinery/economy/vending/cola, /obj/machinery/newscaster{ @@ -21404,18 +21262,13 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bvF" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -21429,7 +21282,7 @@ dir = 8; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bvG" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21446,8 +21299,13 @@ dir = 8; icon_state = "pipe-j2" }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bvK" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21469,7 +21327,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bvL" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21487,7 +21345,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bvM" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21509,7 +21367,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bvN" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21526,7 +21384,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bvO" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21543,7 +21401,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bvQ" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21560,7 +21418,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bvS" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -21580,7 +21438,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bvU" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -21601,7 +21459,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bvW" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ @@ -21701,12 +21559,7 @@ c_tag = "Bridge - Port"; dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 8; - name = "west bump Important Area"; - pixel_x = -24 - }, +/obj/machinery/power/apc/important/directional/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -21768,7 +21621,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bwm" = ( /obj/machinery/status_display{ layer = 4; @@ -21804,11 +21657,9 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bwp" = ( -/obj/item/kirbyplants{ - level = 4.1 - }, +/obj/item/kirbyplants, /turf/simulated/floor/wood, /area/station/service/bar) "bwq" = ( @@ -21957,7 +21808,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bwV" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4; @@ -22110,8 +21961,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bxu" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -22271,40 +22127,18 @@ }, /area/station/service/barber) "bxJ" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/important/directional/east, +/obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bxK" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/effect/landmark/lightsout, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bxL" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/newscaster{ dir = 8; name = "east bump"; @@ -22317,7 +22151,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bxM" = ( /obj/structure/chair/comfy/beige{ dir = 4 @@ -22325,7 +22159,7 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bxN" = ( /obj/machinery/atmospherics/binary/valve/open, /turf/simulated/floor/plating, @@ -22341,49 +22175,54 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bxP" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxQ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxS" = ( /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxT" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxX" = ( /obj/machinery/alarm{ dir = 1; @@ -22394,7 +22233,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxY" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -22405,14 +22244,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bxZ" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bya" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -22428,7 +22267,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "byc" = ( /obj/machinery/firealarm{ dir = 1; @@ -22439,17 +22278,17 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "byd" = ( /obj/machinery/camera{ - c_tag = "Port Primary Hallway - Starboard"; + c_tag = "Port Primary Hallway - East"; dir = 1 }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bye" = ( /obj/structure/bed/dogbed/ian, /mob/living/simple_animal/pet/dog/corgi/Ian, @@ -22467,7 +22306,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "byg" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -22476,7 +22315,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "byi" = ( /obj/machinery/door_control{ id = "hop"; @@ -22500,7 +22339,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -22514,11 +22353,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/carpet, /area/station/command/office/hop) "bym" = ( @@ -22718,7 +22553,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "byJ" = ( /obj/machinery/light/small{ dir = 4 @@ -22925,43 +22760,28 @@ /area/station/aisat) "bzs" = ( /obj/machinery/hologram/holopad, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bzw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bzy" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bzA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /obj/effect/turf_decal/stripes/line{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) -"bzB" = ( -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, -/turf/simulated/floor/plasteel{ - icon_state = "grimy" - }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/east) "bzC" = ( /obj/structure/chair/comfy/beige{ dir = 1 @@ -22969,7 +22789,7 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bzD" = ( /obj/machinery/camera{ c_tag = "Port Primary Hallway - Port"; @@ -22982,13 +22802,8 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bzE" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -22997,7 +22812,7 @@ dir = 8; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bzF" = ( /obj/machinery/light{ dir = 4 @@ -23005,23 +22820,28 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bzG" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bzH" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bzJ" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -23068,7 +22888,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bzS" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -23267,6 +23087,17 @@ }, /turf/simulated/floor/carpet, /area/station/command/office/captain) +"bAt" = ( +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "purple" + }, +/area/station/hallway/primary/aft/south) "bAv" = ( /obj/structure/chair/stool{ dir = 4 @@ -23339,8 +23170,13 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bAL" = ( /obj/structure/cable/yellow{ d2 = 8; @@ -23365,12 +23201,12 @@ /obj/item/radio/beacon, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bAR" = ( /obj/machinery/economy/vending/cola, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bAT" = ( /obj/machinery/light, /obj/machinery/computer/station_alert{ @@ -23411,10 +23247,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -23460,10 +23293,7 @@ /area/station/aisat) "bBd" = ( /obj/machinery/light/small, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 8; @@ -23524,17 +23354,6 @@ icon_state = "darkbluecorners" }, /area/station/turret_protected/aisat/interior) -"bBk" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "green" - }, -/area/station/hallway/primary/central) "bBl" = ( /turf/simulated/wall/r_wall, /area/station/telecomms/computer) @@ -23580,16 +23399,14 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bBr" = ( -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bBs" = ( /obj/structure/chair, /obj/effect/landmark/start/assistant, @@ -23597,10 +23414,10 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bBt" = ( /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bBu" = ( /obj/machinery/status_display{ layer = 4; @@ -23610,13 +23427,13 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bBv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bBx" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -23624,8 +23441,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bBy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -23633,8 +23455,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bBz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23649,7 +23481,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bBE" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=6-Port-Central"; @@ -23659,24 +23491,19 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bBG" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bBI" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bBK" = ( /obj/item/seeds/apple, /obj/item/seeds/banana, @@ -23936,12 +23763,6 @@ /obj/item/storage/box/ids, /turf/simulated/floor/wood, /area/station/command/office/hop) -"bCm" = ( -/obj/machinery/economy/vending/cigarette{ - products = list(/obj/item/storage/fancy/cigarettes/cigpack_syndicate=7,/obj/item/storage/fancy/cigarettes/cigpack_uplift=3,/obj/item/storage/fancy/cigarettes/cigpack_robust=2,/obj/item/storage/fancy/cigarettes/cigpack_carp=3,/obj/item/storage/fancy/cigarettes/cigpack_midori=1,/obj/item/storage/fancy/matches=10,/obj/item/lighter/random=4) - }, -/turf/simulated/floor/wood, -/area/station/command/office/captain) "bCo" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -23998,21 +23819,15 @@ /area/station/engineering/atmos/control) "bCx" = ( /obj/structure/table, -/obj/item/surgicaldrill{ - pixel_x = 17; - pixel_y = 4 - }, -/obj/item/stack/medical/bruise_pack/advanced{ - pixel_x = -4; - pixel_y = 4 - }, /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/cautery, /obj/machinery/light{ dir = 1 }, +/obj/item/storage/firstaid/machine, +/obj/item/storage/firstaid/machine, +/obj/item/robotanalyzer, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -24030,7 +23845,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "bCA" = ( /obj/item/radio/intercom{ name = "west bump"; @@ -24050,7 +23865,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bCC" = ( /obj/machinery/status_display{ pixel_y = 32 @@ -24137,10 +23952,7 @@ dir = 8; network = list("SS13","MiniSat") }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/light_switch{ dir = 8; name = "east bump"; @@ -24253,11 +24065,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) -"bDm" = ( -/obj/machinery/light, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) "bDo" = ( /obj/structure/chair, /obj/structure/sign/vacuum/external{ @@ -24267,7 +24074,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bDq" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -24276,11 +24083,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bDr" = ( /obj/machinery/firealarm{ dir = 4; @@ -24310,10 +24122,15 @@ "bDt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bDu" = ( /obj/machinery/firealarm{ dir = 1; @@ -24323,7 +24140,7 @@ /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bDv" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -24333,7 +24150,7 @@ /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bDx" = ( /obj/machinery/alarm{ dir = 1; @@ -24344,7 +24161,7 @@ dir = 10; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bDy" = ( /obj/machinery/firealarm{ dir = 1; @@ -24354,7 +24171,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bDz" = ( /obj/machinery/hologram/holopad, /obj/machinery/status_display{ @@ -24381,7 +24198,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bDB" = ( /obj/machinery/alarm{ dir = 1; @@ -24392,11 +24209,11 @@ dir = 6; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bDC" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bDD" = ( /obj/structure/sign/double/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -24407,13 +24224,8 @@ dir = 10; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bDE" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/structure/sign/double/map/right{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; @@ -24422,13 +24234,8 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bDF" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -24436,11 +24243,16 @@ dir = 5 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bDG" = ( /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ @@ -24552,7 +24364,7 @@ /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bDV" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -24669,7 +24481,7 @@ /area/station/command/office/captain) "bEl" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -24708,7 +24520,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bEr" = ( /obj/structure/dresser, /obj/structure/sign/poster/official/random{ @@ -24744,14 +24556,9 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bFd" = ( -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 4; - name = "Telecoms Control Room APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/important/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -24772,7 +24579,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bFf" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -24930,7 +24737,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bFB" = ( /turf/simulated/wall, /area/station/hallway/secondary/bridge) @@ -24947,7 +24754,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bFH" = ( /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, @@ -24964,7 +24771,7 @@ dir = 6; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bFK" = ( /obj/machinery/economy/vending/coffee{ pixel_x = -3 @@ -24989,7 +24796,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bFM" = ( /obj/structure/chair/comfy/teal{ dir = 4 @@ -25081,7 +24888,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "bFX" = ( /obj/structure/sign/poster/contraband/random{ pixel_x = 32 @@ -25121,10 +24928,7 @@ loot = list(/obj/item/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "trash spawner" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/station/maintenance/port) "bGd" = ( @@ -25367,9 +25171,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/bridge) "bHx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/wood, /area/station/service/library) "bHz" = ( @@ -25435,9 +25237,6 @@ pixel_y = -1 }, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker{ - pixel_x = -6 - }, /obj/machinery/reagentgrinder{ pixel_x = 6; pixel_y = 6 @@ -25446,6 +25245,10 @@ c_tag = "Bar - Counter"; dir = 1 }, +/obj/item/clothing/head/that{ + pixel_y = 7; + pixel_x = -6 + }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -25491,7 +25294,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bHM" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -25506,7 +25309,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bHN" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -25519,7 +25322,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "bHO" = ( /obj/structure/chair/stool/bar, /obj/effect/turf_decal/woodsiding{ @@ -25595,7 +25398,7 @@ /turf/simulated/floor/bluegrid, /area/station/maintenance/starboard) "bHY" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/bluespace, /area/station/maintenance/starboard) "bIf" = ( @@ -25650,9 +25453,7 @@ }, /area/station/telecomms/computer) "bIA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -25692,6 +25493,16 @@ icon_state = "whitepurple" }, /area/station/science/research) +"bIH" = ( +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/south) "bIO" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -25714,7 +25525,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "bIT" = ( /obj/structure/table/wood, /obj/machinery/alarm{ @@ -25754,7 +25565,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bJd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -25771,7 +25582,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bJe" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26162,7 +25973,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bJM" = ( /obj/machinery/light, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -26323,7 +26134,7 @@ locked = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bKv" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -26399,7 +26210,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bKN" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26427,11 +26238,16 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bKS" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -26582,7 +26398,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bLu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -26602,9 +26418,7 @@ /area/station/security/brig) "bLA" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/classic/reversed{ - name = "Kitchen" - }, +/obj/machinery/door/window/classic/reversed, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -26616,6 +26430,12 @@ /obj/structure/window/reinforced{ dir = 4 }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -26630,7 +26450,7 @@ /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bLD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -26734,11 +26554,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -26786,16 +26602,15 @@ }, /area/station/aisat) "bMB" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow, +/obj/machinery/power/apc/important/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bMC" = ( /obj/machinery/firealarm{ name = "north bump"; @@ -26808,7 +26623,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bMD" = ( /obj/structure/table/wood, /obj/item/folder, @@ -26913,7 +26728,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bMS" = ( /turf/simulated/wall/r_wall, /area/station/ai_monitored/storage/eva) @@ -26921,7 +26736,7 @@ /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bMU" = ( /obj/structure/sign/securearea{ pixel_y = -32 @@ -27033,11 +26848,19 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bNo" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable/yellow{ @@ -27054,7 +26877,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bNx" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ @@ -27222,7 +27045,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bOh" = ( /obj/item/book/manual/wiki/security_space_law{ pixel_x = -3; @@ -27335,7 +27158,7 @@ /area/station/service/library) "bOx" = ( /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "bOy" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/sink/kitchen{ @@ -27353,7 +27176,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "bOA" = ( /turf/simulated/floor/greengrid, /area/station/turret_protected/ai_upload) @@ -27368,7 +27191,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bOG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -27477,7 +27300,7 @@ /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bOU" = ( /obj/structure/filingcabinet, /obj/structure/disposalpipe/segment{ @@ -27500,7 +27323,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bOX" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable/yellow{ @@ -27555,29 +27378,6 @@ icon_state = "neutral" }, /area/station/hallway/secondary/garden) -"bPe" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery"; - dir = 8; - location = "Kitchen" - }, -/obj/structure/plasticflaps{ - opacity = 1 - }, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen Delivery"; - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bot" - }, -/area/station/service/kitchen) "bPg" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -27675,11 +27475,7 @@ pixel_x = -6; pixel_y = 24 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -27695,7 +27491,7 @@ /area/station/command/teleporter) "bPB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/ale, +/obj/item/reagent_containers/drinks/cans/ale, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "bPE" = ( @@ -27733,9 +27529,9 @@ /area/station/public/vacant_office) "bPS" = ( /obj/structure/closet/secure_closet/blueshield, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "bPT" = ( @@ -27777,7 +27573,7 @@ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "bPZ" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -27972,7 +27768,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "bQG" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -27984,7 +27780,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bQI" = ( /turf/simulated/wall, /area/station/service/kitchen) @@ -28023,7 +27819,7 @@ location = "13.1-Engineering-Enter" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "bQS" = ( /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -28054,7 +27850,7 @@ /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "bQX" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -28187,17 +27983,13 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bRA" = ( /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/wood, /area/station/public/vacant_office) "bRB" = ( @@ -28301,7 +28093,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bRP" = ( /obj/machinery/status_display{ layer = 4; @@ -28317,11 +28109,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -28359,7 +28147,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bRX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -28649,7 +28437,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bSX" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -28727,11 +28515,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow, /turf/simulated/floor/wood, /area/station/command/office/ntrep) @@ -28752,7 +28536,7 @@ dir = 6; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bTn" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/wood, @@ -28798,11 +28582,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/wood, /area/station/service/library) "bTt" = ( @@ -28881,22 +28661,23 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bTD" = ( /obj/machinery/economy/vending/dinnerware, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -28926,7 +28707,7 @@ pixel_x = 5; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -4; pixel_y = 4 }, @@ -29034,17 +28815,10 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bTY" = ( /turf/simulated/floor/plating, /area/station/maintenance/port) -"bTZ" = ( -/obj/structure/table, -/obj/item/storage/bag/tray, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "bUi" = ( /obj/machinery/gibber, /turf/simulated/floor/plasteel{ @@ -29061,8 +28835,6 @@ /area/station/service/hydroponics) "bUl" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/enzyme, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -29176,12 +28948,12 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "bUN" = ( -/obj/machinery/suit_storage_unit/mime, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/suit_storage_unit/mime/secure, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -29192,7 +28964,7 @@ locked = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bUP" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -29209,7 +28981,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bUR" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -29231,7 +29003,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bUV" = ( /obj/machinery/photocopier, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -29286,7 +29058,6 @@ /turf/simulated/floor/engine, /area/station/command/office/rd) "bVb" = ( -/obj/machinery/suit_storage_unit/clown, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -29294,6 +29065,7 @@ c_tag = "E.V.A. Storage"; dir = 4 }, +/obj/machinery/suit_storage_unit/clown/secure, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -29393,7 +29165,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bVs" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -29449,11 +29221,7 @@ /turf/simulated/floor/wood, /area/station/maintenance/starboard) "bVM" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -29504,14 +29272,12 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bVX" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/item/kirbyplants{ - icon_state = "plant-16" - }, +/obj/item/kirbyplants/plant16, /obj/machinery/light{ dir = 4 }, @@ -29718,7 +29484,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bWA" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/effect/turf_decal/stripes/line{ @@ -29865,11 +29631,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow, /obj/machinery/button/windowtint{ dir = 8; @@ -29893,11 +29655,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/table, /obj/item/storage/fancy/donut_box, /obj/item/storage/fancy/donut_box, @@ -29970,10 +29728,6 @@ "bXb" = ( /obj/machinery/plantgenes, /obj/effect/turf_decal/stripes/line, -/obj/structure/extinguisher_cabinet{ - name = "north bump"; - pixel_y = 30 - }, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) "bXi" = ( @@ -30088,9 +29842,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -30123,9 +29875,7 @@ /area/station/supply/office) "bXF" = ( /obj/effect/turf_decal/stripes/corner, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /obj/machinery/door_control{ id = "mechbay"; name = "Mech Bay Shutters Control"; @@ -30204,7 +29954,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "bXQ" = ( /obj/machinery/camera{ c_tag = "Medbay Staff Entrance"; @@ -30252,7 +30002,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bXV" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -30467,7 +30217,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bYv" = ( /obj/machinery/photocopier, /obj/machinery/computer/security/telescreen/entertainment{ @@ -30645,19 +30395,19 @@ /turf/simulated/floor/wood, /area/station/service/library) "bZh" = ( -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/machinery/power/apc/directional/west, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "bZi" = ( /obj/structure/sign/directions/science{ pixel_y = 24 @@ -30672,7 +30422,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "bZl" = ( /turf/simulated/wall/r_wall, /area/station/command/office/blueshield) @@ -30691,15 +30441,15 @@ dir = 1; icon_state = "darkblue" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "bZt" = ( /turf/simulated/floor/plasteel{ icon_state = "greencorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bZu" = ( /turf/simulated/wall, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "bZv" = ( /turf/simulated/wall, /area/station/service/hydroponics) @@ -30907,28 +30657,24 @@ pixel_y = 24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "car" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cas" = ( /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cax" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30956,7 +30702,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "caC" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -30971,7 +30717,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "caD" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -30980,13 +30726,13 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "caF" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "caH" = ( /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ @@ -31028,20 +30774,20 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "caM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "caN" = ( /obj/item/radio/intercom{ name = "north bump"; pixel_y = 28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "caO" = ( /obj/machinery/light{ dir = 1 @@ -31054,7 +30800,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "caP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -31065,7 +30811,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "caQ" = ( /obj/machinery/economy/vending/hydronutrients, /obj/machinery/light{ @@ -31086,7 +30832,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "caS" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -31138,7 +30884,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C11" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cbb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -31193,7 +30939,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cbj" = ( /obj/structure/sign/securearea{ pixel_y = 32 @@ -31202,7 +30948,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cbl" = ( /turf/simulated/floor/engine/co2, /area/station/engineering/atmos) @@ -31291,7 +31037,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cby" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -31311,7 +31057,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cbC" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -31332,7 +31078,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cbD" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -31374,7 +31120,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C7" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cbG" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -31393,7 +31139,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cbJ" = ( /obj/structure/morgue{ dir = 1 @@ -31423,12 +31169,12 @@ dir = 4; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cbL" = ( /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cbX" = ( /obj/structure/sign/poster/random{ pixel_y = 32 @@ -31543,7 +31289,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C5" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cco" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -31563,7 +31309,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C9" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "ccp" = ( /obj/machinery/computer/pandemic, /turf/simulated/floor/plasteel{ @@ -31639,7 +31385,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ccE" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -31654,7 +31400,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ccF" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -31672,10 +31418,15 @@ dir = 8; icon_state = "pipe-c" }, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "ccH" = ( /turf/simulated/floor/plasteel, /area/station/engineering/control) @@ -31706,7 +31457,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "ccR" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -31731,7 +31482,7 @@ dir = 6; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "ccZ" = ( /obj/machinery/requests_console{ department = "Hydroponics"; @@ -31904,7 +31655,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cdF" = ( /obj/effect/landmark/spawner/xeno, /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ @@ -31926,7 +31677,7 @@ /area/station/maintenance/apmaint) "cdJ" = ( /obj/structure/lattice, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /turf/space, /area/space/nearstation) "cdM" = ( @@ -31976,7 +31727,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cdX" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -31990,7 +31741,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cdZ" = ( /obj/machinery/camera{ c_tag = "Central Primary Hallway - Aft-Port"; @@ -32000,7 +31751,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cea" = ( /obj/machinery/light/small, /obj/structure/sign/directions/security{ @@ -32019,7 +31770,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "ced" = ( /obj/machinery/light/small, /obj/structure/sign/directions/medical{ @@ -32036,12 +31787,12 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cee" = ( /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cef" = ( /obj/machinery/camera{ c_tag = "Central Primary Hallway - Aft-Starboard"; @@ -32050,7 +31801,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "ceh" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -32062,20 +31813,18 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cei" = ( /obj/machinery/firealarm{ dir = 4; name = "east bump"; pixel_x = 24 }, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cej" = ( /obj/machinery/newscaster{ dir = 1; @@ -32089,7 +31838,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cek" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, @@ -32145,15 +31894,6 @@ icon_state = "green" }, /area/station/service/hydroponics) -"ceq" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - icon_state = "pipe-j2s"; - name = "HoS Junction"; - sort_type_txt = "7" - }, -/turf/simulated/floor/plasteel, -/area/station/security/brig) "cer" = ( /obj/structure/window/reinforced{ dir = 8 @@ -32264,6 +32004,12 @@ icon_state = "whiteblue" }, /area/station/medical/paramedic) +"ceT" = ( +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "neutral" + }, +/area/station/hallway/secondary/entry/lounge) "ceU" = ( /obj/structure/chair, /obj/item/radio/intercom/locked/confessional{ @@ -32283,7 +32029,7 @@ "ceW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/gin, +/obj/item/reagent_containers/drinks/bottle/gin, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "ceY" = ( @@ -32292,7 +32038,7 @@ }, /obj/machinery/economy/vending/cart, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "ceZ" = ( /obj/item/stack/rods{ amount = 4 @@ -32362,14 +32108,12 @@ name = "west bump"; pixel_x = -27 }, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cfj" = ( /obj/machinery/light{ dir = 1 @@ -32425,7 +32169,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cfp" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -32437,14 +32181,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cfq" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cfr" = ( /obj/structure/sign/directions/science{ pixel_x = -32; @@ -32461,7 +32205,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "cft" = ( /obj/structure/sign/science, /turf/simulated/wall, @@ -32517,13 +32261,13 @@ dir = 6; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cfB" = ( /turf/simulated/floor/plasteel{ dir = 10; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cfC" = ( /obj/machinery/door/airlock/public/glass, /obj/machinery/door/firedoor, @@ -32564,7 +32308,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "cfJ" = ( /obj/structure/table/wood, /obj/item/phone{ @@ -32602,9 +32346,7 @@ /area/station/maintenance/starboard) "cfV" = ( /obj/structure/sink/puddle, -/obj/structure/flora/junglebush/large{ - pixel_y = 0 - }, +/obj/structure/flora/junglebush/large, /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) "cfW" = ( @@ -32613,11 +32355,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/carpet, /area/station/medical/psych) "cfY" = ( @@ -32733,7 +32471,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cgx" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -32742,13 +32480,18 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cgy" = ( /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cgz" = ( /obj/structure/table/glass, /obj/item/folder, @@ -32798,20 +32541,11 @@ /turf/simulated/wall/r_wall, /area/station/science/explab) "cgH" = ( -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, /obj/machinery/light{ dir = 1 }, +/obj/item/storage/surgical_tray, /obj/structure/table/tray, -/obj/item/scalpel, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -32866,7 +32600,7 @@ /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cgO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32885,7 +32619,7 @@ /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cgP" = ( /obj/machinery/camera{ c_tag = "Hydroponics - Foyer" @@ -32907,7 +32641,7 @@ /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cgQ" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -32927,7 +32661,7 @@ /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cgT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -32985,7 +32719,7 @@ }, /obj/machinery/door_control{ id = "rdrnd"; - name = "Research and Development Containment Control"; + name = "Experi-mentor shutters"; pixel_y = 34; req_access_txt = "30" }, @@ -33050,7 +32784,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "chk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/girder, @@ -33164,7 +32898,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluefull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "chO" = ( /obj/machinery/door/airlock/public/glass{ name = "Hydroponics Storage" @@ -33181,7 +32915,7 @@ /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "chP" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -33208,11 +32942,7 @@ icon_state = "0-4" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/maintenance/turbine) "chR" = ( @@ -33411,7 +33141,7 @@ dir = 1; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "ciu" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -33462,7 +33192,7 @@ dir = 9; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "ciD" = ( /obj/machinery/atmospherics/unary/thermomachine/heater/on, /turf/simulated/floor/plasteel{ @@ -33614,7 +33344,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "cjo" = ( /obj/structure/rack, /obj/item/stack/rods{ @@ -33756,7 +33486,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cjI" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -33770,7 +33500,7 @@ icon_state = "pipe-y" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cjM" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -33876,11 +33606,7 @@ dir = 4; name = "Gas to Chamber" }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_y = 24; +/obj/machinery/power/apc/critical/directional/north{ shock_proof = 1 }, /obj/structure/cable/yellow{ @@ -34097,18 +33823,6 @@ icon_state = "whitepurple" }, /area/station/science/research) -"clc" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/paicard, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whitepurple" - }, -/area/station/science/research) "cle" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 @@ -34146,7 +33860,7 @@ "cli" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/wall, -/area/station/maintenance/fpmaint) +/area/station/supply/qm) "cll" = ( /obj/structure/sign/poster/random{ pixel_y = -32 @@ -34165,7 +33879,6 @@ }, /area/station/service/chapel/office) "cln" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) @@ -34185,6 +33898,12 @@ icon_state = "white" }, /area/station/science/rnd) +"clv" = ( +/obj/item/food/snacks/monkeycube, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "cly" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -34379,10 +34098,11 @@ }, /area/station/medical/medbay) "cmm" = ( -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/area/station/hallway/primary/aft) +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "cmn" = ( /obj/machinery/door/morgue{ name = "Confession Booth (Chaplain)"; @@ -34423,7 +34143,7 @@ "cmu" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "cmv" = ( /turf/simulated/wall, /area/station/medical/cryo) @@ -34546,7 +34266,7 @@ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "cmX" = ( /turf/simulated/wall, /area/station/medical/exam_room) @@ -34596,7 +34316,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "cnm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, @@ -34657,7 +34377,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cnt" = ( /obj/structure/disposalpipe/junction{ dir = 1 @@ -34692,7 +34412,7 @@ desc = ""; icon_state = "C14" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cnF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -34951,7 +34671,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "coA" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/doctor, @@ -34987,11 +34707,7 @@ pixel_x = 24; pixel_y = 10 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" @@ -35221,11 +34937,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/light_switch{ name = "north bump"; pixel_y = 24 @@ -35265,7 +34977,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cpQ" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, @@ -35287,7 +34999,7 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/ywflowers, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -35572,11 +35284,6 @@ }, /area/station/medical/virology) "crd" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/item/radio/intercom{ name = "east bump"; pixel_x = 28 @@ -35585,13 +35292,17 @@ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "crf" = ( /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whiteblue" }, /area/station/medical/exam_room) +"crg" = ( +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "crh" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -35681,10 +35392,7 @@ icon_state = "0-8" }, /obj/machinery/atmospherics/portable/canister/oxygen, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/station/public/storage/emergency/port) "crB" = ( @@ -35738,7 +35446,7 @@ dir = 4; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "crN" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -35990,7 +35698,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "csV" = ( /obj/structure/table/glass, /obj/item/reagent_containers/spray/plantbgone{ @@ -36014,7 +35722,6 @@ /area/station/maintenance/starboard2) "csW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/item/reagent_containers/food/snacks/monkeycube, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "csX" = ( @@ -36174,7 +35881,7 @@ }, /area/station/medical/cryo) "ctI" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -36218,7 +35925,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "ctT" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -36334,7 +36041,7 @@ dir = 4; icon_state = "purple" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cue" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -36597,12 +36304,6 @@ /area/station/science/toxins/mixing) "cuS" = ( /obj/structure/table/glass, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/surgicaldrill, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 @@ -36668,15 +36369,6 @@ icon_state = "whiteblue" }, /area/station/medical/exam_room) -"cve" = ( -/obj/structure/girder, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/apmaint) "cvg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36710,7 +36402,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C6" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cvo" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/medmaint) @@ -36757,11 +36449,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" }, @@ -36780,11 +36468,9 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cvJ" = ( -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" }, @@ -36851,7 +36537,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "cvY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -37022,7 +36708,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cwG" = ( /turf/simulated/floor/plating, /area/station/maintenance/starboard2) @@ -37096,9 +36782,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /obj/machinery/light{ dir = 8 }, @@ -37132,7 +36816,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cxm" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -37192,9 +36876,7 @@ dir = 8 }, /obj/structure/window/reinforced, -/obj/structure/flora/junglebush/large{ - pixel_y = 0 - }, +/obj/structure/flora/junglebush/large, /turf/simulated/floor/grass/no_creep, /area/station/medical/exam_room) "cxz" = ( @@ -37317,9 +36999,7 @@ }, /area/station/medical/medbay) "cxL" = ( -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteblue" @@ -37459,7 +37139,7 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "cyu" = ( /obj/structure/sign/fire, /turf/simulated/wall/r_wall, @@ -37499,8 +37179,13 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "cyE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -37586,13 +37271,9 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cyM" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -37601,7 +37282,7 @@ dir = 4; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cyN" = ( /obj/structure/table/wood, /obj/item/storage/bible, @@ -37724,10 +37405,7 @@ /area/station/medical/morgue) "czo" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteblue" @@ -37735,10 +37413,7 @@ /area/station/medical/surgery/primary) "czs" = ( /obj/structure/closet/secure_closet/medical3, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 1; @@ -37857,13 +37532,13 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "czH" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "czJ" = ( /obj/effect/turf_decal/stripes/white/line, /turf/simulated/floor/plasteel{ @@ -38007,7 +37682,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C12" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cAA" = ( /obj/machinery/alarm{ dir = 8; @@ -38017,7 +37692,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cAB" = ( /obj/machinery/hologram/holopad, /obj/effect/turf_decal/delivery, @@ -38059,11 +37734,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -38077,9 +37748,6 @@ }, /area/station/engineering/gravitygenerator) "cAJ" = ( -/obj/structure/closet{ - name = "Evidence Closet 2" - }, /obj/machinery/alarm{ dir = 4; name = "west bump"; @@ -38091,6 +37759,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -38165,11 +37834,7 @@ icon_state = "0-8" }, /obj/item/stock_parts/cell/high, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/public/storage/tools) "cBb" = ( @@ -38431,19 +38096,12 @@ /area/station/science/server) "cBT" = ( /obj/structure/table, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/bonegel, -/obj/item/hemostat{ - pixel_x = 6 - }, /obj/machinery/firealarm{ name = "north bump"; pixel_y = 24 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/storage/surgical_tray, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -38576,11 +38234,11 @@ dir = 1 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/carpet, /area/station/service/chapel) "cCu" = ( @@ -38597,7 +38255,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "cCy" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, @@ -38718,7 +38376,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cCV" = ( /turf/simulated/floor/plasteel{ icon_state = "whitepurple" @@ -39099,7 +38757,7 @@ pixel_y = 2 }, /obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cEk" = ( @@ -39132,7 +38790,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cEn" = ( /obj/structure/closet/secure_closet/scientist, /obj/machinery/newscaster{ @@ -39166,7 +38824,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cEz" = ( /obj/structure/table/glass, /obj/item/storage/box/bodybags{ @@ -39324,7 +38982,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cEY" = ( /turf/simulated/wall, /area/station/medical/surgery/secondary) @@ -39657,11 +39315,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/carpet, /area/station/service/chapel) "cGm" = ( @@ -39786,7 +39440,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -39857,7 +39511,7 @@ dir = 1; icon_state = "darkblue" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cGY" = ( /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -40043,11 +39697,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -40105,7 +39755,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C4" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cHJ" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -40133,10 +39783,10 @@ /area/station/science/research) "cHO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /turf/simulated/floor/plating, @@ -40358,7 +40008,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cIu" = ( /turf/simulated/wall/r_wall, /area/station/science/robotics/chargebay) @@ -40389,7 +40039,7 @@ "cIA" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "cIB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, @@ -40601,7 +40251,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -40634,11 +40284,7 @@ dir = 10 }, /obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -40825,7 +40471,7 @@ }, /area/station/security/permabrig) "cKm" = ( -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /turf/simulated/floor/plasteel/dark, /area/station/command/office/hos) "cKn" = ( @@ -40877,7 +40523,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cKu" = ( /obj/machinery/r_n_d/experimentor, /turf/simulated/floor/engine, @@ -40897,7 +40543,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/suit_storage_unit/rd, +/obj/machinery/suit_storage_unit/rd/secure, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" }, @@ -40920,7 +40566,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cKz" = ( /obj/machinery/computer/cloning{ dir = 1 @@ -40941,9 +40587,7 @@ }, /area/station/medical/cloning) "cKA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkgreencorners" @@ -40975,7 +40619,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -41050,10 +40694,7 @@ /area/station/maintenance/aft2) "cKV" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whiteblue" @@ -41171,25 +40812,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/aft2) -"cLm" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - name = "west bump"; - pixel_x = -27 - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "purple" - }, -/area/station/science/research) "cLn" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, @@ -41252,7 +40874,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "cLF" = ( /obj/structure/table_frame/wood, /turf/simulated/floor/plating, @@ -41390,7 +41012,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cMi" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -41419,20 +41041,11 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics) "cMx" = ( -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, /obj/machinery/light{ dir = 1 }, +/obj/item/storage/surgical_tray, /obj/structure/table/tray, -/obj/item/scalpel, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -41473,7 +41086,7 @@ /area/station/maintenance/portsolar) "cMF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_x = -2; pixel_y = 2 }, @@ -41500,8 +41113,8 @@ /area/station/medical/break_room) "cMK" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/enzyme{ layer = 5 }, /turf/simulated/floor/plating, @@ -41518,7 +41131,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/tequila, +/obj/item/reagent_containers/drinks/bottle/tequila, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "cMP" = ( @@ -41544,7 +41157,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cMW" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -41599,11 +41212,7 @@ /area/station/maintenance/fore) "cNf" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -41906,7 +41515,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cNU" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -41948,13 +41557,11 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cOh" = ( /obj/structure/closet/crate/freezer, /obj/effect/spawner/lootdrop/maintenance, @@ -41976,22 +41583,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft2) -"cOk" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "purple" - }, -/area/station/science/research) "cOm" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -42093,7 +41684,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cOP" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=9.3-Escape-3"; @@ -42296,7 +41887,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cPF" = ( /obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ @@ -42325,7 +41916,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cPK" = ( /obj/structure/sign/poster/contraband/random{ pixel_x = 32 @@ -42462,11 +42053,7 @@ /obj/item/disk/tech_disk{ pixel_y = 6 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -42646,11 +42233,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "cQU" = ( @@ -42709,7 +42292,6 @@ /obj/machinery/optable{ name = "Robotics Operating Table" }, -/obj/item/storage/firstaid/machine, /obj/structure/extinguisher_cabinet{ name = "south bump"; pixel_y = -30 @@ -42721,12 +42303,6 @@ /area/station/science/robotics) "cRp" = ( /obj/structure/table/glass, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/surgicaldrill, /obj/item/radio/intercom{ name = "east bump"; pixel_x = 28 @@ -42926,7 +42502,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cRU" = ( /turf/simulated/wall, /area/station/medical/psych) @@ -43036,6 +42612,21 @@ }, /turf/simulated/wall, /area/space/nearstation) +"cSE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/grille, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor{ + id_tag = "SecJusticeChamber"; + name = "Justice Vent" + }, +/turf/simulated/floor/plating, +/area/station/security/execution) "cSF" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -43133,11 +42724,11 @@ /area/station/maintenance/apmaint) "cSR" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -43257,9 +42848,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -43305,7 +42894,7 @@ /area/station/security/interrogation) "cTz" = ( /obj/structure/lattice/catwalk, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, @@ -43428,9 +43017,7 @@ name = "east bump"; pixel_x = 27 }, -/obj/item/kirbyplants{ - icon_state = "plant-14" - }, +/obj/item/kirbyplants/plant14, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -43443,11 +43030,7 @@ }, /area/station/medical/medbay) "cUf" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -43819,11 +43402,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "cVw" = ( @@ -44203,11 +43782,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" }, @@ -44248,7 +43823,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "cXo" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -44568,7 +44143,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cYO" = ( /obj/machinery/iv_drip, /obj/machinery/firealarm{ @@ -44618,7 +44193,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "cZh" = ( /obj/machinery/optable, /turf/simulated/floor/plasteel{ @@ -44739,7 +44314,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "cZX" = ( /obj/machinery/light{ dir = 8 @@ -45056,7 +44631,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "dbc" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -45175,8 +44750,8 @@ /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "dce" = ( -/obj/structure/dispenser, -/turf/simulated/floor/plasteel, +/obj/structure/sign/poster/official/random, +/turf/simulated/wall/r_wall, /area/station/science/toxins/mixing) "dch" = ( /obj/structure/lattice/catwalk, @@ -45626,7 +45201,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "deE" = ( /obj/structure/sign/poster/random{ pixel_x = -32 @@ -45635,7 +45210,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "deF" = ( /obj/structure/sign/directions/evac{ pixel_x = 32 @@ -45643,7 +45218,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "deH" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -45803,10 +45378,7 @@ /area/station/service/chapel) "dfs" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -45873,7 +45445,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "dgb" = ( /obj/structure/sign/double/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -45889,7 +45461,7 @@ /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "dgg" = ( /obj/effect/landmark/burnturf, /obj/effect/spawner/lootdrop{ @@ -45900,12 +45472,12 @@ /area/station/maintenance/port) "dgj" = ( /obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 2; + d2 = 8; + icon_state = "2-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "dgn" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, @@ -46104,11 +45676,7 @@ }, /obj/item/storage/box/beakers, /obj/item/reagent_containers/spray/cleaner, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -46207,11 +45775,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/light_switch{ dir = 8; name = "custom placement"; @@ -46287,6 +45851,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/security/brig) +"djR" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/security/brig) "djU" = ( /obj/structure/bed, /obj/item/clothing/suit/straight_jacket, @@ -46430,6 +46003,17 @@ icon_state = "white" }, /area/station/science/xenobiology) +"dnj" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/ne) "dnm" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -46532,6 +46116,22 @@ /obj/machinery/light/small, /turf/simulated/floor/mineral/tranquillite, /area/station/service/mime) +"doE" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/classic/reversed, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/obj/item/food/snacks/pie, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "doV" = ( /obj/machinery/computer/mecha{ dir = 8 @@ -46809,7 +46409,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "dwC" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -47169,7 +46769,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "dEG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -47178,22 +46778,29 @@ dir = 4 }, /obj/structure/cable/yellow{ - d1 = 2; + d1 = 4; d2 = 8; - icon_state = "2-8" + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) +"dEM" = ( +/turf/simulated/floor/plasteel{ + icon_state = "C9" }, +/area/station/hallway/primary/central/north) +"dFf" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) -"dEM" = ( -/turf/simulated/floor/plasteel{ - icon_state = "C9" - }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "dFD" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -47300,6 +46907,16 @@ icon_state = "grimy" }, /area/station/security/detective) +"dJB" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/nw) "dKd" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -47334,6 +46951,17 @@ icon_state = "red" }, /area/station/security/main) +"dKB" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "dKK" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -47386,6 +47014,18 @@ /obj/machinery/atmospherics/binary/valve/open, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_north) +"dNt" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel, +/area/station/security/brig) "dNU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -47478,6 +47118,12 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) +"dPX" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "dQb" = ( /turf/simulated/floor/plasteel{ icon_state = "darkgrey" @@ -47625,6 +47271,12 @@ icon_state = "white" }, /area/station/medical/reception) +"dSN" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/east) "dTt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -47677,19 +47329,10 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "dUF" = ( -/obj/machinery/door/airlock/external{ - id_tag = "soldock_door_ext"; - locked = 1; - name = "Arrivals External Access" - }, -/obj/machinery/access_button{ - autolink_id = "soldock_btn_ext"; - name = "exterior access button"; - pixel_x = -7; - pixel_y = -25 - }, +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/e_to_w/arrivals, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "dUG" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -47800,7 +47443,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dXb" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible/cyan, @@ -47875,11 +47518,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "dYK" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -47979,25 +47618,12 @@ icon_state = "0-4" }, /obj/item/megaphone, -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 1; - name = "north bump Important Area"; - pixel_y = 24 - }, +/obj/machinery/power/apc/important/directional/north, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "red" }, /area/station/security/warden) -"dZP" = ( -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port) "dZZ" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plasteel, @@ -48009,7 +47635,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "ebf" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -48021,7 +47647,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "ebs" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "BS" @@ -48174,6 +47800,7 @@ name = "east bump"; pixel_x = 27 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "efd" = ( @@ -48232,15 +47859,6 @@ icon_state = "whitepurple" }, /area/station/maintenance/asmaint) -"egC" = ( -/obj/item/slime_extract/oil, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/station/maintenance/asmaint) "ehh" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; @@ -48376,7 +47994,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "eju" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -48793,6 +48411,18 @@ icon_state = "cult" }, /area/station/legal/lawoffice) +"etn" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/station/hallway/primary/central/north) "etp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -48806,7 +48436,7 @@ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "etB" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel, @@ -48822,9 +48452,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "etR" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -49234,7 +48862,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "eCH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -49444,7 +49072,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "eIa" = ( /mob/living/carbon/human/monkey, /obj/structure/cable/yellow{ @@ -49522,15 +49150,6 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/aft2) -"eIY" = ( -/obj/machinery/door/poddoor/preopen{ - name = "Biohazard Shutter"; - id_tag = "RnDChem" - }, -/obj/effect/spawner/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/simple/insulated, -/turf/simulated/floor/engine, -/area/station/science/test_chamber) "eJh" = ( /obj/machinery/atmospherics/unary/thermomachine/heater/on{ dir = 1 @@ -49622,6 +49241,17 @@ /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall/r_wall, /area/station/science/test_chamber) +"eLW" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "eMh" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -49665,6 +49295,21 @@ /obj/effect/spawner/random_spawners/cobweb_left_frequent, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"eNa" = ( +/obj/machinery/alarm{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/ne) +"eNp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/fore/east) "eNR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -49688,9 +49333,7 @@ name = "Kitchen Counter Shutters" }, /obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen" - }, +/obj/machinery/door/window/classic/normal, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -49707,6 +49350,11 @@ icon_state = "darkgrey" }, /area/station/science/robotics) +"eOI" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "eOZ" = ( /obj/effect/turf_decal/stripes/white/line, /obj/machinery/firealarm{ @@ -49739,7 +49387,7 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "ePK" = ( /turf/simulated/floor/wood{ icon_state = "wood-broken3" @@ -49750,6 +49398,11 @@ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -49802,6 +49455,29 @@ icon_state = "cafeteria" }, /area/station/science/break_room) +"eRh" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 8; + location = "Kitchen" + }, +/obj/machinery/door/window/classic/normal{ + name = "Kitchen Delivery"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 4 + }, +/obj/structure/plasticflaps{ + opacity = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "bot" + }, +/area/station/service/kitchen) "eRy" = ( /obj/structure/table/glass, /obj/structure/cable/yellow{ @@ -49931,11 +49607,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -50137,7 +49809,7 @@ /area/station/science/research) "eVO" = ( /obj/machinery/light, -/obj/structure/closet/secure_closet/roboticist, +/obj/machinery/economy/vending/robodrobe, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -50210,6 +49882,28 @@ }, /turf/simulated/floor/plating, /area/station/science/rnd) +"eYD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id_tag = "executionfireblast" + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/station/security/execution) "eYE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -50346,7 +50040,6 @@ /turf/simulated/floor/plating, /area/station/security/brig) "fbQ" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -50390,7 +50083,6 @@ /turf/simulated/wall, /area/station/engineering/atmos) "fcB" = ( -/obj/machinery/suit_storage_unit/atmos, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 6 }, @@ -50404,11 +50096,8 @@ pixel_x = -24; pixel_y = -6 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -50448,9 +50137,8 @@ /area/station/engineering/secure_storage) "fdt" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/insulated, /turf/simulated/floor/engine/vacuum, /area/station/science/toxins/mixing) "fdu" = ( @@ -50463,16 +50151,11 @@ /turf/simulated/floor/plasteel, /area/station/security/brig) "fdz" = ( -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /turf/simulated/floor/plasteel, /area/station/supply/office) "feu" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -50483,7 +50166,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C10" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "ffG" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -50537,13 +50220,24 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "fgC" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"fgN" = ( +/obj/machinery/power/apc/directional/north, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "fgS" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -50561,7 +50255,7 @@ /turf/space, /area/station/engineering/solar/auxport) "fho" = ( -/obj/structure/chair/stool, +/obj/structure/closet/secure_closet/roboticist, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -50571,7 +50265,7 @@ /turf/simulated/floor/plasteel{ icon_state = "bluefull" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "fhu" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -50582,14 +50276,12 @@ }, /area/station/engineering/atmos) "fhC" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "fhR" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -50620,11 +50312,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -50674,13 +50362,6 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) -"fjU" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/turf/simulated/floor/engine/vacuum, -/area/station/science/toxins/mixing) "fkr" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -50789,11 +50470,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -50941,6 +50618,12 @@ icon_state = "darkgreycheck" }, /area/station/science/research) +"fpO" = ( +/obj/structure/sign/vacuum/external{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "fpR" = ( /obj/structure/sign/pods{ pixel_x = 32 @@ -51004,6 +50687,12 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"fqB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "fqO" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -51153,11 +50842,7 @@ icon_state = "0-4" }, /obj/effect/turf_decal/stripes/corner, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" @@ -51190,13 +50875,23 @@ icon_state = "solarpanel" }, /area/station/engineering/solar/port) +"ftz" = ( +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/east) "ftI" = ( /obj/machinery/computer/general_air_control/large_tank_control{ dir = 8; inlet_injector_autolink_id = "n2o_in"; name = "Nitrous Oxide Supply Control"; outlet_vent_autolink_id = "n2o_out"; - autolink_sensors = list("n2o_sensor"="Tank") + autolink_sensors = list("n2o_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/structure/window/reinforced{ @@ -51248,11 +50943,7 @@ }, /area/station/security/range) "fuy" = ( -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, +/obj/effect/spawner/random_spawners/grille_often, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "fuC" = ( @@ -51415,10 +51106,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/firealarm{ dir = 8; name = "west bump"; @@ -51456,10 +51144,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 6; @@ -51507,11 +51192,11 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "fzW" = ( -/obj/machinery/suit_storage_unit/security, /obj/machinery/camera{ c_tag = "Armory - Internal"; dir = 8 }, +/obj/machinery/suit_storage_unit/security/secure, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -51592,6 +51277,19 @@ icon_state = "whiteyellow" }, /area/station/medical/chemistry) +"fBQ" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/west) "fBW" = ( /obj/machinery/atmospherics/binary/valve/digital/open{ name = "Output Release" @@ -51611,7 +51309,7 @@ /area/station/engineering/control) "fCn" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -51713,7 +51411,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "fEw" = ( /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plasteel{ @@ -51921,8 +51619,13 @@ sort_type_txt = "20" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "fHC" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 @@ -51966,7 +51669,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C12" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "fId" = ( /turf/simulated/wall/r_wall, /area/station/science/server) @@ -52022,7 +51725,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C3" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "fJr" = ( /obj/machinery/disposal, /obj/structure/cable/yellow{ @@ -52047,9 +51750,7 @@ }, /area/station/science/toxins/mixing) "fKW" = ( -/obj/item/kirbyplants{ - icon_state = "plant-16" - }, +/obj/item/kirbyplants/plant16, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -52103,7 +51804,7 @@ dir = 4; icon_state = "browncorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "fMZ" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 @@ -52199,7 +51900,7 @@ /obj/structure/cable/yellow, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "fPa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -52259,25 +51960,36 @@ }, /area/station/engineering/break_room) "fQl" = ( -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, /area/station/science/break_room) "fQr" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"fQt" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/starboard/east) "fQQ" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -52344,6 +52056,20 @@ icon_state = "darkredcorners" }, /area/station/security/armory/secure) +"fSz" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/south) "fSW" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -52451,6 +52177,16 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) +"fUo" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "fUI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -52584,6 +52320,9 @@ }, /turf/simulated/floor/wood, /area/station/service/bar) +"fXo" = ( +/turf/simulated/wall, +/area/station/hallway/primary/central/south) "fXy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -52593,6 +52332,12 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"fXz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/se) "fYb" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 10 @@ -52790,17 +52535,6 @@ /obj/item/deck/cards, /turf/simulated/floor/plasteel, /area/station/security/permabrig) -"gcW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - id_tag = "soldock_door_int"; - locked = 1; - name = "Arrivals External Access" - }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) "gdb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -52876,34 +52610,6 @@ icon_state = "darkgrey" }, /area/station/science/toxins/mixing) -"geC" = ( -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, -/obj/machinery/camera{ - c_tag = "Science Hallway - Research"; - network = list("Research","SS13") - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/station/science/research) "geG" = ( /obj/machinery/economy/vending/snack, /obj/machinery/camera{ @@ -52929,9 +52635,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -53097,6 +52800,13 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) +"ggQ" = ( +/obj/structure/table/glass, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "green" + }, +/area/station/hallway/primary/central/se) "ggT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 @@ -53118,11 +52828,15 @@ pixel_x = 32; pixel_y = 32 }, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "ghT" = ( /obj/machinery/computer/arcade/orion_trail{ dir = 8 @@ -53253,6 +52967,9 @@ }, /area/station/science/toxins/launch) "glS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" @@ -53294,10 +53011,7 @@ /obj/item/storage/firstaid/regular, /obj/machinery/light, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -53536,6 +53250,11 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/security/prison/cell_block/A) +"gst" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "gsM" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -53657,7 +53376,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/item/slime_extract/pink, +/obj/item/slime_extract, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/structure/cable/yellow{ @@ -53712,7 +53431,7 @@ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "gzt" = ( /obj/structure/lattice, /obj/machinery/camera{ @@ -53721,18 +53440,6 @@ }, /turf/space, /area/space/nearstation) -"gzU" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "purple" - }, -/area/station/science/xenobiology) "gAM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -53778,9 +53485,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable/yellow{ d1 = 2; d2 = 8; @@ -53791,6 +53495,16 @@ }, /turf/simulated/floor/plasteel, /area/station/security/brig) +"gBB" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "gBG" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -53868,6 +53582,16 @@ icon_state = "whiteyellowfull" }, /area/station/medical/chemistry) +"gCA" = ( +/obj/structure/extinguisher_cabinet{ + name = "west bump"; + pixel_x = -27 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/ne) "gCX" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -54056,6 +53780,17 @@ icon_state = "darkgrey" }, /area/station/science/toxins/mixing) +"gFZ" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/directional/north, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/north) "gGe" = ( /obj/effect/turf_decal/stripes/white/line, /obj/machinery/atmospherics/portable/pump, @@ -54257,11 +53992,7 @@ /area/station/security/permabrig) "gKP" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -54324,6 +54055,15 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard) +"gMn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "gMo" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan, /turf/simulated/floor/plating, @@ -54419,7 +54159,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "gND" = ( /obj/machinery/alarm{ name = "north bump"; @@ -54559,16 +54299,9 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "gRF" = ( -/obj/structure/closet/secure_closet{ - anchored = 1; - name = "Evidence Storage"; - req_access_txt = "4" - }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, +/obj/structure/closet/secure_closet/evidence/detective, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -54715,7 +54448,7 @@ pixel_x = -32 }, /turf/simulated/floor/plating, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "gUk" = ( /obj/structure/chair{ dir = 1 @@ -54857,6 +54590,9 @@ /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"gWO" = ( +/turf/simulated/floor/plasteel, +/area/station/science/toxins/mixing) "gXg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -54984,7 +54720,7 @@ }, /area/station/engineering/control) "gZT" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 }, /turf/simulated/floor/plasteel{ @@ -55067,9 +54803,7 @@ }, /area/station/medical/exam_room) "hcI" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/light/small{ dir = 1 }, @@ -55130,6 +54864,21 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"hdw" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "hdE" = ( /obj/structure/chair/stool{ dir = 4 @@ -55385,10 +55134,21 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, /area/station/security/execution) +"hiC" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "hiO" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -55444,15 +55204,18 @@ /area/station/command/office/cmo) "hjr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "hjx" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -55545,7 +55308,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "hlN" = ( /obj/structure/closet/secure_closet/security, /obj/structure/extinguisher_cabinet{ @@ -55815,17 +55578,23 @@ /area/station/security/permabrig) "hrf" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, /turf/simulated/floor/wood, /area/station/service/bar) +"hrO" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/south) "hrZ" = ( /obj/structure/table, /obj/effect/turf_decal/delivery/hollow, @@ -55886,27 +55655,25 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "hty" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) "htP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = 6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_x = 6; pixel_y = -2 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5; pixel_y = -2 }, @@ -56068,12 +55835,13 @@ network = list("SS13","tcomm") }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel/dark, /area/station/telecomms/chamber) +"hxz" = ( +/obj/structure/grille/broken, +/turf/simulated/floor/plating/airless, +/area/space/nearstation) "hxD" = ( /obj/structure/window/reinforced{ dir = 1 @@ -56241,7 +56009,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "hBH" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/on{ dir = 8; @@ -56291,6 +56059,17 @@ }, /turf/simulated/floor/bluegrid/telecomms, /area/station/science/xenobiology) +"hCu" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/west) "hCA" = ( /obj/structure/closet/crate/secure/bin, /obj/item/paper/crumpled, @@ -56366,13 +56145,20 @@ "hDY" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/brig{ +/obj/machinery/door/window/reinforced/normal{ + name = "Security Desk"; + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ dir = 1 }, /turf/simulated/floor/plasteel, /area/station/security/checkpoint/secondary) "hEe" = ( /obj/effect/landmark/start/roboticist, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/science/robotics) "hEj" = ( @@ -56569,11 +56355,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -56786,11 +56568,11 @@ /area/station/turret_protected/ai) "hLT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -56805,6 +56587,12 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) +"hLZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "hMv" = ( /obj/effect/landmark/spawner/rev, /obj/structure/morgue{ @@ -56888,11 +56676,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore2) "hOA" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -56997,7 +56781,7 @@ inlet_injector_autolink_id = "o2_in"; name = "Oxygen Supply Control"; outlet_vent_autolink_id = "o2_out"; - autolink_sensors = list("o2_sensor"="Tank") + autolink_sensors = list("o2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 @@ -57181,7 +56965,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "hTS" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -57215,10 +56999,6 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "hVw" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, /turf/simulated/floor/engine/vacuum, /area/station/science/toxins/mixing) "hVK" = ( @@ -57386,6 +57166,31 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/public/dorms) +"hZh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/grille, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/poddoor{ + id_tag = "SecJusticeChamber"; + name = "Justice Vent" + }, +/turf/simulated/floor/plating, +/area/station/security/execution) "hZi" = ( /obj/machinery/seed_extractor, /obj/effect/turf_decal/stripes/corner, @@ -57506,7 +57311,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "ibR" = ( /obj/structure/chair, /obj/machinery/light{ @@ -57517,7 +57322,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "icm" = ( /turf/simulated/floor/plasteel{ dir = 10; @@ -57867,6 +57672,20 @@ icon_state = "dark" }, /area/station/security/storage) +"ijn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/important/directional/north, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "ijt" = ( /obj/structure/window/reinforced{ dir = 1 @@ -57963,7 +57782,7 @@ dir = 1; name = "Delivery Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mail_sorting{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -58045,7 +57864,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "inq" = ( /obj/structure/sink{ dir = 4; @@ -58080,12 +57899,6 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics) "inw" = ( -/obj/machinery/access_button{ - autolink_id = "soldock_btn_int"; - name = "interior access button"; - pixel_x = -25; - pixel_y = -25 - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, @@ -58093,7 +57906,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "inB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, @@ -58155,7 +57968,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "ipj" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -58206,6 +58019,11 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"iqu" = ( +/obj/machinery/light, +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "iqC" = ( /obj/structure/table, /obj/item/toy/plushie/face_hugger, @@ -58219,11 +58037,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos/distribution) "iqY" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -58384,6 +58198,9 @@ id = "toxinsigniter"; pixel_y = -25 }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, /turf/simulated/floor/engine/vacuum, /area/station/science/toxins/mixing) "iuU" = ( @@ -58464,6 +58281,10 @@ /area/station/public/vacant_office) "iwm" = ( /obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -58485,11 +58306,6 @@ /turf/simulated/floor/plating, /area/station/science/robotics/showroom) "iwB" = ( -/obj/machinery/camera{ - c_tag = "Science - Toxins Lab"; - dir = 1; - network = list("Research","SS13") - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -58546,6 +58362,20 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"ixQ" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/se) "ixU" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -58731,6 +58561,11 @@ /obj/item/storage/fancy/cigarettes, /obj/item/flash, /obj/item/reagent_containers/spray/pepper, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkred" @@ -58912,9 +58747,13 @@ icon_state = "whitehall" }, /area/station/science/research) +"iFx" = ( +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard2) "iFA" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/h_chocolate, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -58925,10 +58764,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ icon_state = "barber" @@ -58968,7 +58804,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "iHo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -59053,6 +58889,9 @@ icon_state = "darkred" }, /area/station/security/storage) +"iJH" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/fore/east) "iKb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -59154,7 +58993,8 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/lobby) "iKZ" = ( @@ -59166,7 +59006,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "iLj" = ( /obj/effect/landmark/lightsout, /obj/machinery/hologram/holopad, @@ -59400,14 +59240,11 @@ /obj/structure/sign/poster/official/random{ pixel_x = -32 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "iQC" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -59516,6 +59353,21 @@ /obj/item/stack/cable_coil/blue, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"iSY" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "iTb" = ( /obj/structure/sign/poster/official/random{ pixel_y = 32 @@ -59554,11 +59406,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard) "iTB" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -59580,6 +59428,11 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -59642,7 +59495,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "iVP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -59743,6 +59596,17 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"iYA" = ( +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "iZh" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "Psych" @@ -59785,7 +59649,7 @@ /obj/machinery/door/airlock/mining{ name = "Warehouse" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/storage) "jau" = ( @@ -59799,11 +59663,7 @@ icon_state = "1-2" }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "jbe" = ( @@ -59838,6 +59698,16 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"jcg" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/north) "jcA" = ( /obj/machinery/light/small{ dir = 1 @@ -59869,6 +59739,20 @@ icon_state = "darkblue" }, /area/station/command/office/cmo) +"jdP" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/south) "jdX" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 @@ -59935,11 +59819,16 @@ "jfb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "jfk" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable/yellow{ @@ -59954,6 +59843,24 @@ }, /turf/simulated/floor/plating, /area/station/security/permabrig) +"jft" = ( +/obj/item/kirbyplants/plant10, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/station/hallway/secondary/entry/lounge) +"jfN" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) +"jgq" = ( +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/east) "jgD" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -59969,6 +59876,17 @@ icon_state = "dark" }, /area/station/turret_protected/ai) +"jgP" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + 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, +/area/station/hallway/primary/aft/north) "jiK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -59996,6 +59914,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/station/public/mrchangs) +"jjG" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + id_tag = "ToxinsVenting"; + name = "Toxins Venting Bay Door"; + power_state = 0 + }, +/turf/space, +/area/station/science/toxins/mixing) "jjL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -60012,6 +59941,28 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"jkg" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "jkB" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -60027,7 +59978,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C3" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "jkZ" = ( /obj/structure/window/reinforced{ dir = 8 @@ -60088,13 +60039,18 @@ /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "jms" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"jmL" = ( +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "jmV" = ( /obj/structure/falsewall, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -60133,9 +60089,7 @@ c_tag = "Detective's Office"; dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/carpet, /area/station/security/detective) @@ -60270,7 +60224,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C4" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "jtB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -60333,7 +60287,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "juS" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, @@ -60441,6 +60395,11 @@ icon_state = "dark" }, /area/station/engineering/control) +"jyq" = ( +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/central/ne) "jyP" = ( /obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -60461,7 +60420,7 @@ icon_state = "2-4" }, /obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "Processing" + id = "qm" }, /turf/simulated/floor/plating, /area/station/supply/qm) @@ -60551,16 +60510,12 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "jCi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -60650,7 +60605,7 @@ "jDK" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "jEw" = ( /obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, @@ -60744,7 +60699,7 @@ /obj/machinery/computer/general_air_control{ dir = 1; name = "Bomb Mix Monitor"; - autolink_sensors = list("burn_sensor"="Burn Mix") + autolink_sensors = list("burn_sensor" = "Burn Mix") }, /obj/machinery/door_control{ id = "ToxinsVenting"; @@ -60794,8 +60749,13 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "jFH" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -60849,7 +60809,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "jGH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60928,10 +60888,7 @@ /obj/effect/turf_decal/siding{ dir = 1 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 @@ -60961,7 +60918,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "jIX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61086,6 +61043,15 @@ }, /turf/space, /area/space/nearstation) +"jLt" = ( +/obj/item/slime_extract/darkblue, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple" + }, +/area/station/maintenance/asmaint) "jLJ" = ( /obj/structure/chair/office/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -61133,15 +61099,13 @@ "jMy" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "jNa" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, -/obj/structure/flora/junglebush/large{ - pixel_y = 0 - }, +/obj/structure/flora/junglebush/large, /turf/simulated/floor/grass/no_creep, /area/station/medical/exam_room) "jNd" = ( @@ -61349,14 +61313,6 @@ /area/station/security/permabrig) "jOX" = ( /obj/structure/table/glass, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/medical/bruise_pack/advanced, /obj/item/reagent_containers/iv_bag/salglu, /obj/item/reagent_containers/spray/cleaner{ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; @@ -61414,7 +61370,7 @@ sort_type_txt = "22" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "jPT" = ( /obj/structure/chair, /turf/simulated/floor/plasteel{ @@ -61453,9 +61409,7 @@ /area/station/security/range) "jQx" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen" - }, +/obj/machinery/door/window/classic/normal, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -61654,6 +61608,17 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/engineering/control) +"jUr" = ( +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/paicard, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple" + }, +/area/station/science/research) "jUK" = ( /obj/machinery/light_switch{ dir = 8; @@ -61832,7 +61797,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "jXR" = ( /obj/machinery/door/window/classic/reversed{ dir = 8 @@ -61939,7 +61904,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/ne) "kbr" = ( /obj/machinery/atmospherics/portable/canister/air, /obj/machinery/atmospherics/pipe/simple/hidden/purple{ @@ -62023,6 +61988,32 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft2) +"kej" = ( +/obj/item/kirbyplants/plant24, +/obj/machinery/camera{ + c_tag = "Science Hallway - Research"; + network = list("Research","SS13") + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" + }, +/area/station/science/research) "ken" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -62165,7 +62156,7 @@ dir = 4; icon_state = "purple" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "khy" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -62197,9 +62188,7 @@ }, /area/station/science/research) "kiq" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -62232,6 +62221,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"kjg" = ( +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/south) "kjo" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ @@ -62353,6 +62345,12 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"kmz" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/south) "kmO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -62424,7 +62422,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "kqd" = ( /obj/item/radio/intercom{ name = "west bump"; @@ -62453,11 +62451,7 @@ }, /area/station/science/research) "kqi" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -62658,7 +62652,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "kvh" = ( /obj/structure/closet/bombcloset, /obj/structure/extinguisher_cabinet{ @@ -62692,7 +62686,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "kwD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -62823,28 +62817,20 @@ /obj/machinery/camera{ c_tag = "Evidence Storage" }, -/obj/item/storage/secure/safe{ - name = "evidence safe"; - pixel_y = 32 - }, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, /area/station/security/evidence) "kzm" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/extinguisher_cabinet{ + name = "west bump"; + pixel_x = -27 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" }, -/turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/aft/south) "kzx" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -62971,13 +62957,30 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) +"kBk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel, +/area/station/supply/lobby) "kBn" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel, /area/station/supply/storage) "kCc" = ( @@ -63013,7 +63016,7 @@ dir = 9; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "kCP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -63121,11 +63124,7 @@ /turf/simulated/floor/engine, /area/station/science/xenobiology) "kEh" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -63503,6 +63502,17 @@ icon_state = "freezerfloor" }, /area/station/security/permabrig) +"kLW" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/sw) "kLY" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -63719,21 +63729,11 @@ }, /area/station/medical/medbay) "kPB" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "kPK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63755,20 +63755,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft2) -"kQv" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "kQx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /turf/simulated/floor/wood, /area/station/legal/courtroom) +"kQB" = ( +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "kQD" = ( /obj/machinery/computer/secure_data, /obj/machinery/newscaster/security_unit{ @@ -63855,6 +63849,17 @@ icon_state = "whitegreen" }, /area/station/medical/virology) +"kSz" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "kSA" = ( /obj/structure/table, /obj/structure/cable/yellow{ @@ -63875,11 +63880,7 @@ pixel_y = 7 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" @@ -63950,7 +63951,10 @@ "kVn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/door_assembly/door_assembly_fre{ - name = "broken freezer airlock" + name = "broken freezer airlock"; + move_force = 10000; + move_resist = 10000; + anchored = 1 }, /obj/structure/barricade/wooden/crude, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -64013,8 +64017,18 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "kWj" = ( /obj/item/stack/sheet/glass{ amount = 20; @@ -64041,11 +64055,7 @@ icon_state = "0-8" }, /obj/structure/table/reinforced, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel, /area/station/science/robotics) "kWt" = ( @@ -64236,12 +64246,7 @@ }, /area/station/medical/chemistry) "laH" = ( -/obj/structure/lattice, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, +/obj/structure/grille, /turf/space, /area/space/nearstation) "laR" = ( @@ -64386,9 +64391,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -64511,7 +64514,7 @@ /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "lfU" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -64683,17 +64686,27 @@ "lid" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/turf_decal/tile/bar, /obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, -/obj/effect/turf_decal/tile/bar, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/central/north) "lio" = ( /turf/simulated/floor/plating/airless, /area/station/engineering/solar/port) @@ -64910,6 +64923,17 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) +"llW" = ( +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Dorms Requests Console"; + pixel_x = -30 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/public/dorms) "lmi" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -65062,18 +65086,35 @@ icon_state = "white" }, /area/station/medical/medbay) +"loz" = ( +/obj/item/kirbyplants/plant18, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + name = "west bump"; + pixel_x = -27 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "purple" + }, +/area/station/science/research) "lpp" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/carrotcakeslice{ +/obj/item/food/snacks/carrotcakeslice{ pixel_x = 8; pixel_y = -2 }, -/obj/item/reagent_containers/food/snacks/poppypretzel{ +/obj/item/food/snacks/poppypretzel{ pixel_x = -8; pixel_y = -3 }, @@ -65155,11 +65196,11 @@ /area/station/command/office/captain) "lrA" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -65245,7 +65286,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "ltg" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -65405,6 +65446,19 @@ }, /turf/simulated/floor/plating, /area/station/science/xenobiology) +"lyp" = ( +/obj/structure/extinguisher_cabinet{ + name = "west bump"; + pixel_x = -27 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/south) "lzO" = ( /obj/machinery/light{ dir = 4 @@ -65481,7 +65535,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "lAX" = ( /turf/simulated/wall, /area/station/science/break_room) @@ -65598,7 +65652,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C11" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "lDq" = ( /obj/machinery/shower{ dir = 8; @@ -65622,7 +65676,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "lDG" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -65660,7 +65714,7 @@ "lEw" = ( /obj/structure/closet/firecloset, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -65885,13 +65939,10 @@ }, /area/station/science/test_chamber) "lHZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "lIC" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; @@ -65977,6 +66028,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" @@ -66034,11 +66088,15 @@ /area/station/security/storage) "lKK" = ( /obj/machinery/light, +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "lLb" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable/yellow, @@ -66109,6 +66167,12 @@ icon_state = "white" }, /area/station/science/xenobiology) +"lMU" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/east) "lNl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -66194,11 +66258,21 @@ dir = 4 }, /obj/effect/turf_decal/tile/bar, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/central/north) "lOv" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -66230,7 +66304,7 @@ sort_type_txt = "21" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "lOE" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -66389,11 +66463,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -66577,7 +66647,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "lVF" = ( /obj/machinery/r_n_d/circuit_imprinter, /turf/simulated/floor/plasteel{ @@ -66768,10 +66838,16 @@ name = "west bump"; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "maV" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + icon_state = "pipe-j2s"; + name = "Security Junction"; + sort_type_txt = "8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" @@ -66874,10 +66950,6 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "mcP" = ( @@ -66925,7 +66997,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "mdF" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -67149,6 +67221,20 @@ icon_state = "darkblue" }, /area/station/command/office/cmo) +"mhA" = ( +/obj/item/kirbyplants/plant18, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "purple" + }, +/area/station/science/research) "mhS" = ( /obj/structure/sign/poster/official/random{ pixel_y = 32 @@ -67375,7 +67461,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "mmB" = ( /obj/structure/closet/secure_closet/atmos_personal, /turf/simulated/floor/plasteel, @@ -67396,7 +67482,7 @@ /obj/structure/window/plasmareinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter{ layer = 3.3 }, @@ -67680,7 +67766,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "muB" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -67765,7 +67851,7 @@ desc = ""; icon_state = "C13" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "mxb" = ( /obj/machinery/door/airlock/freezer, /obj/effect/mapping_helpers/airlock/access/any/service/kitchen, @@ -67775,8 +67861,8 @@ /area/station/service/kitchen) "mxp" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "mxw" = ( @@ -67802,7 +67888,7 @@ "myY" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "mzf" = ( /obj/structure/window/plasmareinforced{ dir = 1 @@ -67965,7 +68051,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "mBA" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -68161,7 +68247,7 @@ desc = ""; icon_state = "C14" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "mFQ" = ( /obj/machinery/light{ dir = 8 @@ -68192,11 +68278,16 @@ /obj/structure/sign/poster/official/random{ pixel_x = 32 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "mGk" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -68206,7 +68297,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "mGK" = ( /obj/machinery/door/firedoor, /obj/structure/sign/science{ @@ -68216,7 +68307,7 @@ dir = 4; icon_state = "purplecorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "mGT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -68231,7 +68322,7 @@ inlet_injector_autolink_id = "n2_in"; name = "Nitrogen Supply Control"; outlet_vent_autolink_id = "n2_out"; - autolink_sensors = list("n2_sensor"="Tank") + autolink_sensors = list("n2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 @@ -68260,7 +68351,18 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) +"mIq" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/north) "mIC" = ( /obj/effect/spawner/window/reinforced/plasma/grilled, /obj/machinery/door/poddoor/preopen{ @@ -68450,7 +68552,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "mOs" = ( /obj/structure/bed, /obj/item/bedsheet, @@ -68708,6 +68810,10 @@ icon_state = "white" }, /area/station/medical/surgery/primary) +"mUd" = ( +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/north) "mUf" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -68719,11 +68825,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -68752,7 +68854,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "mUv" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable/yellow{ @@ -68836,6 +68938,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -68878,13 +68981,9 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "mVN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "redcorner" - }, -/area/station/hallway/primary/fore) +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/east) "mVO" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -68905,7 +69004,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "mVZ" = ( /obj/effect/spawner/random_spawners/fungus_probably, /turf/simulated/wall, @@ -68981,11 +69080,11 @@ /area/shuttle/arrival/station) "mXE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -3; pixel_y = 9 }, @@ -68996,11 +69095,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/wood, /area/station/service/cafeteria) "mXQ" = ( @@ -69073,7 +69168,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "mZb" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, @@ -69089,11 +69184,7 @@ }, /area/station/science/rnd) "mZq" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/yellow, /turf/simulated/floor/plating, /area/station/maintenance/aft2) @@ -69292,19 +69383,19 @@ name = "Outer Window"; dir = 8 }, -/obj/machinery/door/window/reinforced/normal{ - name = "Security Desk"; - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ - dir = 4 - }, /obj/item/folder/red, /obj/item/pen{ pixel_x = -3; pixel_y = 5 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 4 + }, +/obj/machinery/door/window/reinforced/normal{ + name = "Security Desk"; + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "ncG" = ( @@ -69341,7 +69432,15 @@ icon_state = "dark" }, /area/station/security/storage) +"ndN" = ( +/turf/simulated/wall, +/area/station/hallway/primary/port/west) "ndR" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, /area/station/science/robotics) "ndS" = ( @@ -69400,7 +69499,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "neW" = ( /obj/machinery/light/small{ dir = 1 @@ -69430,7 +69529,7 @@ /area/station/public/construction) "nfj" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ desc = "Takes you to a whole new level of thinking."; name = "Meta-Cider" }, @@ -69509,7 +69608,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "ngh" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/effect/spawner/window/reinforced/grilled, @@ -69556,12 +69655,17 @@ /area/station/medical/reception) "nhP" = ( /obj/structure/table, -/obj/item/book/manual/wiki/sop_service, +/obj/item/book/manual/wiki/sop_service{ + pixel_x = -6 + }, /obj/item/book/manual/barman_recipes{ - pixel_x = -4; - pixel_y = 7 + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/reagent_containers/drinks/shaker{ + pixel_x = 6; + pixel_y = 2 }, -/obj/item/clothing/head/that, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -69640,7 +69744,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "niQ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -69657,7 +69761,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "niX" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -69714,6 +69818,11 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, /area/station/science/robotics) "nln" = ( @@ -69734,18 +69843,6 @@ }, /area/station/science/xenobiology) "nlp" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "soldock_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -25; - vent_link_id = "soldock_vent"; - ext_door_link_id = "soldock_door_ext"; - int_door_link_id = "soldock_door_int"; - ext_button_link_id = "soldock_btn_ext"; - int_button_link_id = "soldock_btn_int" - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -69753,7 +69850,7 @@ pixel_y = 32 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "nls" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -69766,10 +69863,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, /turf/simulated/floor/plasteel, /area/station/security/brig) "nlw" = ( @@ -69873,7 +69966,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "noA" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -69884,7 +69977,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "noE" = ( /obj/structure/table, /turf/simulated/floor/plating, @@ -70054,12 +70147,6 @@ /area/station/engineering/control) "nsB" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -70117,6 +70204,12 @@ icon_state = "white" }, /area/station/medical/surgery/observation) +"nuz" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "nuC" = ( /obj/machinery/navbeacon{ codes_txt = "delivery"; @@ -70233,15 +70326,11 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "nxr" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, +/obj/machinery/power/apc/important/directional/north, /turf/simulated/floor/plasteel{ icon_state = "whitegreenfull" }, @@ -70320,6 +70409,23 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/distribution) +"nyR" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/starboard/north) "nyT" = ( /obj/machinery/light, /obj/item/radio/intercom{ @@ -70388,7 +70494,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "nzX" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/machinery/atmospherics/meter, @@ -70721,6 +70827,20 @@ icon_state = "vault" }, /area/station/maintenance/asmaint) +"nFj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "nFZ" = ( /obj/machinery/door/airlock/external{ id_tag = "engine_door_ext"; @@ -70762,6 +70882,9 @@ icon_state = "whiteblue" }, /area/station/medical/reception) +"nGC" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "nHi" = ( /obj/structure/cable{ d2 = 2; @@ -70978,11 +71101,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/station/maintenance/fore) -"nNq" = ( -/turf/simulated/floor/plasteel{ - icon_state = "redcorner" - }, -/area/station/security/brig) "nOA" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -71293,6 +71411,14 @@ icon_state = "whitegreenfull" }, /area/station/public/sleep) +"nVp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/central/east) "nVQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10 @@ -71348,7 +71474,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "nWJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71454,7 +71580,7 @@ dir = 4; icon_state = "purple" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "nYH" = ( /obj/structure/closet/secure_closet/RD, /obj/machinery/newscaster{ @@ -71666,7 +71792,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "odO" = ( /obj/machinery/blackbox_recorder, /turf/simulated/floor/bluegrid, @@ -71713,11 +71839,7 @@ network = list("SS13","MiniSat"); start_active = 1 }, -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -71740,7 +71862,22 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) +"ofu" = ( +/obj/machinery/power/apc/directional/west, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/camera{ + c_tag = "Central Primary Hallway - Starboard - Bar"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/east) "ofD" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -71846,12 +71983,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - icon_state = "pipe-j2s"; - name = "Security Junction"; - sort_type_txt = "8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -71930,7 +72061,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C2" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "omG" = ( /obj/structure/table/reinforced, /obj/item/storage/bag/tray, @@ -71982,7 +72113,7 @@ dir = 9; icon_state = "blueyellow" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "ood" = ( /obj/machinery/door_control{ pixel_x = -26; @@ -72147,15 +72278,7 @@ /area/station/public/locker) "orV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, -/obj/machinery/door/window/classic/reversed{ - name = "Kitchen" - }, +/obj/machinery/door/window/classic/reversed, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -72356,6 +72479,23 @@ /obj/item/mecha_parts/core, /turf/simulated/floor/plasteel, /area/station/science/robotics) +"oAL" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/starboard/north) "oBh" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -72471,10 +72611,6 @@ "oDf" = ( /obj/item/paper, /obj/structure/table/reinforced, -/obj/machinery/door/window/reinforced/normal{ - name = "Arrivals Security Checkpoint"; - pixel_y = -8 - }, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -72604,10 +72740,7 @@ /turf/simulated/floor/wood, /area/station/maintenance/starboard2) "oFF" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, -/obj/machinery/light/small{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "oFN" = ( @@ -72658,11 +72791,21 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "oHv" = ( /mob/living/simple_animal/hostile/retaliate/goat/chef, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -72739,7 +72882,7 @@ "oJQ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "oJW" = ( /obj/structure/dispenser, /obj/structure/sign/double/map/left{ @@ -72758,6 +72901,15 @@ }, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"oMj" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "oMk" = ( /obj/machinery/alarm{ dir = 4; @@ -72828,7 +72980,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "oNl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /turf/simulated/floor/plasteel, /area/station/science/robotics) "oNn" = ( @@ -72862,6 +73021,23 @@ }, /turf/simulated/floor/plasteel, /area/station/security/brig) +"oNy" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/starboard/east) "oNz" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer/on{ dir = 1; @@ -72892,11 +73068,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -72916,15 +73088,20 @@ dir = 8 }, /obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "oOu" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "NT" @@ -72996,7 +73173,7 @@ desc = ""; icon_state = "C13" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "oPh" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -73063,7 +73240,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -73164,7 +73342,7 @@ dir = 5; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "oSi" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, @@ -73183,7 +73361,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "oTc" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -73191,7 +73369,7 @@ "oTn" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "oTq" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -73400,18 +73578,13 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "oWO" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "browncorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "oXd" = ( /obj/structure/rack, /obj/item/storage/box/seccarts{ @@ -73490,6 +73663,16 @@ /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, /area/station/maintenance/starboard) +"oXP" = ( +/obj/structure/table, +/obj/item/storage/bag/tray, +/obj/item/reagent_containers/condiment/enzyme{ + layer = 5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "oXS" = ( /obj/structure/chair/office/light{ dir = 4 @@ -73516,7 +73699,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C1" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "oZw" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -73525,6 +73708,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_south) +"oZT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/east) "oZX" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, @@ -73535,10 +73725,6 @@ /obj/effect/turf_decal/woodsiding{ dir = 8 }, -/obj/structure/extinguisher_cabinet{ - name = "south bump"; - pixel_y = -30 - }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -73621,12 +73807,7 @@ /obj/item/melee/chainofcommand, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 8; - name = "west bump Important Area"; - pixel_x = -24 - }, +/obj/machinery/power/apc/important/directional/west, /turf/simulated/floor/wood, /area/station/command/office/captain) "pcz" = ( @@ -73754,8 +73935,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/office) "peo" = ( @@ -73793,7 +73974,7 @@ /area/station/engineering/engine/supermatter) "pfa" = ( /obj/structure/table, -/obj/item/storage/belt, +/obj/item/storage/belt/utility, /obj/item/robotanalyzer, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, @@ -73894,7 +74075,7 @@ inlet_injector_autolink_id = "tox_in"; name = "Toxin Supply Control"; outlet_vent_autolink_id = "tox_out"; - autolink_sensors = list("tox_sensor"="Tank") + autolink_sensors = list("tox_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/structure/window/reinforced{ @@ -73935,7 +74116,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "piB" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 @@ -74140,9 +74321,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -74321,9 +74500,6 @@ /area/station/aisat) "prI" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -74499,6 +74675,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"pwy" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; + name = "KEEP CLEAR: DOCKING AREA" + }, +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/south) "pwN" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -74512,7 +74695,7 @@ /turf/simulated/floor/plasteel{ icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "pwP" = ( /obj/machinery/light/small{ dir = 8 @@ -74537,6 +74720,19 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"pxk" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/west) "pxr" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -74650,10 +74846,7 @@ /area/station/maintenance/asmaint) "pzw" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -74675,7 +74868,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C5" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "pzX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -74734,7 +74927,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "pBl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -74762,14 +74955,14 @@ pixel_y = -24 }, /obj/machinery/camera{ - c_tag = "Starboard Primary Hallway - Engineering"; + c_tag = "Starboard Primary Hallway - East"; dir = 1 }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "pBW" = ( /obj/item/wrench, /obj/structure/cable/yellow{ @@ -74839,6 +75032,20 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"pCy" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "pDA" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -74886,7 +75093,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "pFo" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -75048,11 +75255,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "pHF" = ( -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, +/obj/effect/spawner/random_spawners/grille_often, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_south) "pHM" = ( @@ -75329,6 +75532,11 @@ icon_state = "dark" }, /area/station/security/storage) +"pMV" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "pNo" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; @@ -75428,7 +75636,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "pPA" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -75475,11 +75683,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/telecomms/chamber) "pQv" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -75491,6 +75695,25 @@ "pQx" = ( /turf/simulated/floor/engine, /area/station/command/office/rd) +"pQD" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "pRp" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -75530,16 +75753,13 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "pRQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "pRT" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -75602,7 +75822,7 @@ dir = 5 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "pSM" = ( /obj/machinery/camera{ c_tag = "Head of Security's Office" @@ -75629,11 +75849,7 @@ pixel_y = 2 }, /obj/item/storage/box/syringes, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -75706,8 +75922,8 @@ name = "south bump"; pixel_y = -24 }, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 }, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) @@ -75737,7 +75953,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "pUU" = ( /obj/structure/chair{ dir = 4 @@ -75867,7 +76083,7 @@ pixel_y = 32 }, /turf/simulated/floor/plating, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "pXO" = ( /obj/item/stack/cable_coil, /obj/structure/cable/yellow{ @@ -76015,7 +76231,6 @@ }, /area/station/turret_protected/ai_upload) "qaW" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -76069,6 +76284,15 @@ }, /turf/simulated/floor/plasteel, /area/station/science/research) +"qbw" = ( +/obj/structure/sign/vacuum/external{ + pixel_y = 32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "qbE" = ( /obj/structure/window/reinforced{ dir = 4 @@ -76395,6 +76619,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"qif" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + 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, +/area/station/hallway/primary/central/ne) "qig" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -76417,16 +76652,12 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "qiP" = ( +/obj/effect/spawner/random_spawners/grille_often, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -76616,6 +76847,13 @@ "qmD" = ( /turf/simulated/wall/r_wall, /area/station/science/explab/chamber) +"qmI" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "qmL" = ( /obj/machinery/alarm{ name = "north bump"; @@ -76630,9 +76868,8 @@ }, /area/station/medical/exam_room) "qnp" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 + dir = 6 }, /turf/simulated/floor/engine/vacuum, /area/station/science/toxins/mixing) @@ -76694,11 +76931,6 @@ }, /area/station/public/dorms) "qpH" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -76706,7 +76938,7 @@ dir = 1; icon_state = "browncorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "qpO" = ( /turf/simulated/wall, /area/station/engineering/equipmentstorage) @@ -76719,7 +76951,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "qqC" = ( /obj/machinery/atmospherics/pipe/manifold/visible/green{ dir = 4 @@ -76736,7 +76968,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "qrd" = ( /obj/structure/chair/wood{ dir = 1 @@ -76768,7 +77000,7 @@ pixel_x = 32 }, /turf/simulated/floor/plating, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "qrT" = ( /obj/effect/landmark/start/explorer, /turf/simulated/floor/plasteel{ @@ -76829,7 +77061,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "qta" = ( /obj/machinery/camera{ c_tag = "Science Hallway - Research Director's Office"; @@ -76866,6 +77098,17 @@ icon_state = "dark" }, /area/station/engineering/control) +"qtp" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/nw) "qtt" = ( /obj/structure/window/reinforced{ dir = 1 @@ -77008,21 +77251,21 @@ "qvp" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 }, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/machinery/light{ dir = 1 }, @@ -77030,6 +77273,17 @@ icon_state = "white" }, /area/station/security/permabrig) +"qvE" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "qvN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -77094,6 +77348,16 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"qxG" = ( +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 28 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/north) "qxW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -77126,6 +77390,18 @@ }, /turf/simulated/floor/plating, /area/station/hallway/secondary/bridge) +"qyd" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/lootdrop{ + loot = list(/obj/item/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); + name = "trash spawner" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "qyo" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -77279,6 +77555,15 @@ icon_state = "whiteblue" }, /area/station/medical/surgery/secondary) +"qBb" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/south) "qBO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -77303,7 +77588,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C8" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "qCm" = ( /obj/machinery/recharge_station, /turf/simulated/floor/plasteel, @@ -77420,6 +77705,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/closet/secure_closet/roboticist, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -77439,6 +77725,9 @@ }, /turf/simulated/wall/r_wall, /area/station/engineering/atmos/control) +"qFK" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/east) "qGf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -77465,7 +77754,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/north) "qIh" = ( /obj/machinery/sparker{ id = "Xenobio"; @@ -77604,7 +77893,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "qLK" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -77637,11 +77926,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -77739,6 +78024,15 @@ icon_state = "white" }, /area/station/science/xenobiology) +"qPh" = ( +/obj/machinery/door/poddoor/preopen{ + name = "Biohazard Shutter"; + id_tag = "RnDChem" + }, +/obj/effect/spawner/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/engine, +/area/station/science/test_chamber) "qPp" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -78097,7 +78391,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "qXr" = ( /obj/structure/window/reinforced{ dir = 4 @@ -78162,8 +78456,17 @@ icon_state = "purple" }, /area/station/science/xenobiology) +"qYD" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/station/science/toxins/mixing) "qYT" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/effect/spawner/random_spawners/cobweb_right_rare, /turf/simulated/floor/bluespace, /area/station/maintenance/starboard) @@ -78512,11 +78815,11 @@ }, /area/station/science/break_room) "rfK" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 4 +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 }, -/obj/effect/spawner/random_spawners/wall_rusted_probably, -/turf/simulated/wall/r_wall, +/turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "rgo" = ( /obj/machinery/hydroponics/soil, @@ -78641,11 +78944,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -78667,6 +78966,14 @@ icon_state = "cult" }, /area/station/maintenance/starboard) +"rjb" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkgrey" + }, +/area/station/science/robotics) "rjA" = ( /obj/structure/extinguisher_cabinet{ name = "north bump"; @@ -78693,6 +79000,12 @@ icon_state = "darkbluecorners" }, /area/station/medical/surgery/observation) +"rjC" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/north) "rjU" = ( /obj/machinery/hologram/holopad, /obj/structure/cable/yellow{ @@ -78821,11 +79134,16 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "rmE" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -78834,7 +79152,7 @@ dir = 8; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "rnM" = ( /obj/effect/turf_decal/delivery/white/hollow, /obj/item/mecha_parts/mecha_equipment/extinguisher, @@ -78846,7 +79164,7 @@ locked = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "roi" = ( /obj/structure/rack, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -79047,7 +79365,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "rsq" = ( /obj/machinery/drone_fabricator, /obj/machinery/camera{ @@ -79220,6 +79538,11 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/office) +"rve" = ( +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/starboard/north) "rvu" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -79255,13 +79578,23 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) +"rvX" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Central Primary Hallway - Port"; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "rwh" = ( /obj/machinery/atmospherics/supermatter_crystal/engine, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "rwj" = ( /obj/structure/safe/floor, -/obj/item/reagent_containers/food/snacks/fortunecookie, +/obj/item/food/snacks/fortunecookie, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "rwk" = ( @@ -79656,7 +79989,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) +"rEF" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "rEK" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -79833,6 +80172,7 @@ c_tag = "Brig - Hallway - Starboard"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "rIj" = ( @@ -79940,7 +80280,7 @@ dir = 5; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "rJJ" = ( /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" @@ -80000,6 +80340,13 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, /area/station/maintenance/aft2) +"rKV" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) "rLw" = ( /obj/machinery/atmospherics/air_sensor{ autolink_id = "waste_sensor"; @@ -80034,10 +80381,10 @@ }, /area/station/security/permabrig) "rLS" = ( -/obj/machinery/suit_storage_unit/cmo, /obj/machinery/light{ dir = 4 }, +/obj/machinery/suit_storage_unit/cmo/secure, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" @@ -80181,7 +80528,7 @@ /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "rOY" = ( /obj/structure/table/glass, /obj/machinery/light_switch{ @@ -80261,12 +80608,15 @@ icon_state = "red" }, /area/station/security/prisonlockers) +"rSj" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plasteel{ + icon_state = "darkgrey" + }, +/area/station/hallway/primary/central/north) "rSC" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel, /area/station/science/robotics/chargebay) "rSH" = ( @@ -80308,7 +80658,7 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "rTX" = ( /obj/machinery/computer/general_air_control/large_tank_control{ dir = 1; @@ -80316,7 +80666,7 @@ name = "Mixed Air Supply Control"; outlet_vent_autolink_id = "air_out"; outlet_setting = 2000; - autolink_sensors = list("air_sensor"="Tank") + autolink_sensors = list("air_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 @@ -80352,6 +80702,11 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -80403,7 +80758,7 @@ }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/sw) "rVg" = ( /obj/item/assembly/signaler{ pixel_x = 6; @@ -80545,7 +80900,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "rZt" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -80628,11 +80983,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "sbK" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -80825,7 +81178,7 @@ dir = 8; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "sgk" = ( /obj/machinery/smartfridge/foodcart, /obj/machinery/alarm{ @@ -80934,6 +81287,11 @@ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -80945,11 +81303,7 @@ dir = 8 }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/newscaster{ dir = 1; name = "south bump"; @@ -81125,6 +81479,9 @@ icon_state = "white" }, /area/station/security/permabrig) +"smP" = ( +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/south) "smW" = ( /obj/machinery/space_heater, /obj/effect/landmark/damageturf, @@ -81377,6 +81734,12 @@ }, /turf/simulated/floor/plasteel, /area/station/security/range) +"suO" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor/plasteel{ + icon_state = "darkgrey" + }, +/area/station/hallway/primary/central/north) "svH" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -81392,7 +81755,10 @@ /turf/simulated/floor/plasteel{ icon_state = "C2" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) +"svM" = ( +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/north) "svR" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -81504,7 +81870,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "sxN" = ( /obj/structure/cable/yellow{ d2 = 8; @@ -81548,7 +81914,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "syP" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -81686,19 +82052,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_south) "sDf" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "neutral" }, @@ -82113,6 +82473,23 @@ icon_state = "dark" }, /area/station/engineering/control) +"sLH" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "sLS" = ( /turf/simulated/floor/plasteel{ dir = 9; @@ -82125,6 +82502,21 @@ icon_state = "white" }, /area/station/medical/medbay) +"sMd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) +"sMg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "sMn" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -82229,13 +82621,11 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) "sNG" = ( -/obj/structure/closet{ - name = "Evidence Closet 4" - }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -82340,7 +82730,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "sPr" = ( /obj/machinery/photocopier, /obj/structure/disposalpipe/segment{ @@ -82396,7 +82786,7 @@ dir = 4; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "sQt" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -82473,7 +82863,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "sRU" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -82522,14 +82912,15 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/engimaint) +"sTC" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "sTF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/wood, /area/station/service/bar) @@ -82537,6 +82928,19 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/engimaint) +"sUc" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/west) +"sUQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/west) "sVy" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -82553,7 +82957,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "sVB" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -82586,6 +82990,12 @@ icon_state = "freezerfloor" }, /area/station/public/toilet/lockerroom) +"sVE" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "sVG" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -82660,7 +83070,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "sXt" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, @@ -82760,20 +83170,30 @@ dir = 8; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "sZV" = ( +/obj/effect/spawner/random_spawners/grille_often, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"sZY" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/se) "taf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -82839,12 +83259,10 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "taW" = ( /obj/structure/window/reinforced{ dir = 4 @@ -82946,11 +83364,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" @@ -83073,7 +83487,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel, /area/station/service/hydroponics) "tfp" = ( /obj/structure/cable/yellow{ @@ -83085,7 +83499,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "tfD" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -83113,26 +83527,6 @@ icon_state = "red" }, /area/station/security/processing) -"tfV" = ( -/obj/structure/table/glass, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/reagent_containers/iv_bag/salglu, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/station/medical/surgery/secondary) "tgu" = ( /obj/structure/table, /obj/machinery/recharger, @@ -83235,11 +83629,7 @@ /turf/simulated/floor/carpet/red, /area/station/command/office/hos) "tiq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -83291,7 +83681,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "tjY" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/effect/turf_decal/stripes/line{ @@ -83332,6 +83722,18 @@ }, /turf/space, /area/space/nearstation) +"tkA" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/item/reagent_containers/iv_bag/salglu, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/medical/surgery/secondary) "tlh" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 @@ -83387,9 +83789,7 @@ /obj/effect/turf_decal/woodsiding{ dir = 1 }, -/obj/item/kirbyplants{ - level = 4.1 - }, +/obj/item/kirbyplants, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -31 }, @@ -83466,6 +83866,9 @@ /mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"toy" = ( +/turf/simulated/wall/r_wall, +/area/station/hallway/primary/central/north) "toD" = ( /obj/structure/sign/poster/official/random{ pixel_x = -32 @@ -83532,7 +83935,7 @@ "tpD" = ( /obj/effect/spawner/window, /turf/simulated/floor/plating, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "tpO" = ( /obj/structure/cable/yellow{ d2 = 8; @@ -83614,11 +84017,21 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mail_sorting{ dir = 4 }, /turf/simulated/floor/plasteel, /area/station/supply/office) +"trF" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "tsm" = ( /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plating, @@ -83636,15 +84049,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"tsE" = ( -/obj/structure/girder, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint) "ttA" = ( /obj/structure/rack, /obj/item/hand_labeler, @@ -83727,10 +84131,7 @@ /obj/machinery/photocopier/faxmachine{ department = "Head of Security's Office" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel/dark, /area/station/command/office/hos) @@ -83855,11 +84256,9 @@ /turf/simulated/floor/plasteel{ icon_state = "C10" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "tyW" = ( -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -83984,10 +84383,11 @@ }, /area/station/security/armory/secure) "tCf" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 9 - }, /obj/effect/landmark/start/scientist, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4; + initialize_directions = 11 + }, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "tCr" = ( @@ -84069,10 +84469,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "tFb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -84083,7 +84485,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "tFm" = ( /obj/structure/window/reinforced{ dir = 4 @@ -84160,11 +84562,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "tId" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -84211,6 +84609,22 @@ icon_state = "red" }, /area/station/security/brig) +"tJc" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/west) "tJB" = ( /obj/machinery/light/small{ dir = 4 @@ -84227,7 +84641,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mail_sorting{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -84252,9 +84666,7 @@ }, /area/station/security/armory) "tKL" = ( -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/machinery/light_switch{ dir = 4; name = "custom placement"; @@ -84327,6 +84739,13 @@ /obj/effect/spawner/random_spawners/wall_rusted_probably, /turf/simulated/wall/r_wall, /area/station/maintenance/fore) +"tNg" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/east) "tNh" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/atmospherics/portable/canister/air, @@ -84366,7 +84785,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "tPB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -84561,10 +84980,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -84587,11 +85003,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plating, /area/station/maintenance/engimaint) "tVd" = ( @@ -84633,16 +85045,13 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "tVJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /obj/structure/sign/directions/evac{ pixel_x = -32 }, /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "tVX" = ( /obj/structure/cable{ d1 = 1; @@ -84710,14 +85119,6 @@ icon_state = "whitepurple" }, /area/station/science/robotics) -"tXA" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/wood, -/area/station/service/bar) "tYb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -84771,12 +85172,12 @@ /area/station/security/permabrig) "tYV" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/cans/beer, /obj/machinery/economy/vending/wallmed{ name = "Emergency NanoMed"; pixel_y = 28 @@ -84811,13 +85212,19 @@ icon_state = "bar" }, /area/station/service/bar) +"tZp" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/south) "tZG" = ( /obj/machinery/computer/general_air_control/large_tank_control{ dir = 8; inlet_injector_autolink_id = "waste_in"; name = "Gas Mix Tank Control"; outlet_vent_autolink_id = "waste_out"; - autolink_sensors = list("waste_sensor"="Tank") + autolink_sensors = list("waste_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/plasteel{ @@ -84831,7 +85238,7 @@ }, /obj/structure/chair, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "uak" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, @@ -85082,7 +85489,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "uex" = ( /obj/machinery/light_switch{ dir = 4; @@ -85107,7 +85514,7 @@ icon_state = "1-2" }, /obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "Processing" + id = "qm" }, /turf/simulated/floor/plating, /area/station/supply/qm) @@ -85187,11 +85594,9 @@ /turf/simulated/floor/carpet, /area/station/service/library) "ugy" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - icon_state = "pipe-j2s"; - name = "Security Junction"; - sort_type_txt = "8" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/station/security/brig) @@ -85298,7 +85703,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "uiK" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -85416,6 +85821,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -85690,18 +86096,18 @@ /area/station/command/office/captain) "uuG" = ( /obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 4 + }, /obj/item/storage/box/bodybags{ pixel_x = -4; pixel_y = -4 }, +/obj/item/storage/box/masks, /obj/item/storage/box/gloves{ pixel_x = 4; pixel_y = 4 }, -/obj/item/storage/box/masks, -/obj/structure/window/reinforced{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitepurple" @@ -85717,7 +86123,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "uwk" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -85824,6 +86230,9 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -85898,6 +86307,13 @@ "uzR" = ( /turf/simulated/floor/engine, /area/station/science/test_chamber) +"uzZ" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; + name = "KEEP CLEAR: DOCKING AREA" + }, +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/north) "uAj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -85938,11 +86354,7 @@ /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "uBY" = ( -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -85987,6 +86399,11 @@ "uEa" = ( /obj/structure/chair/e_chair, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -86039,14 +86456,6 @@ /area/station/command/teleporter) "uEX" = ( /obj/structure/table, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/circular_saw, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -86057,11 +86466,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -86085,6 +86490,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -86176,6 +86582,16 @@ }, /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai) +"uIA" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/north) "uIW" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -86231,7 +86647,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "uJL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -86438,7 +86854,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "uNf" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -86451,14 +86867,6 @@ }, /turf/simulated/floor/wood, /area/station/service/bar) -"uNk" = ( -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "uNl" = ( /obj/structure/toilet{ pixel_y = 8 @@ -86700,6 +87108,13 @@ icon_state = "whiteblue" }, /area/station/medical/exam_room) +"uSx" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "uSA" = ( /obj/structure/railing{ dir = 4 @@ -86771,7 +87186,7 @@ /turf/simulated/floor/plasteel{ icon_state = "C1" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "uUI" = ( /obj/machinery/door/airlock/public/glass, /obj/machinery/door/firedoor, @@ -86817,6 +87232,16 @@ icon_state = "dark" }, /area/station/turret_protected/ai) +"uVd" = ( +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/port/west) "uVl" = ( /obj/machinery/light{ dir = 1 @@ -86874,7 +87299,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "uWQ" = ( /obj/machinery/door/window/classic/normal{ name = "Court Cell" @@ -87014,7 +87439,7 @@ dir = 4; icon_state = "blue" }, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "uXX" = ( /obj/structure/chair{ dir = 1 @@ -87044,6 +87469,7 @@ /obj/machinery/light{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "uYo" = ( @@ -87199,10 +87625,10 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "vaO" = ( /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "vaP" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 @@ -87236,7 +87662,7 @@ dir = 6; icon_state = "caution" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "vbF" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 4"; @@ -87303,7 +87729,7 @@ dir = 8; icon_state = "brown" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "vcW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9; @@ -87372,6 +87798,13 @@ /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) +"veb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard/north) "vem" = ( /obj/machinery/status_display{ pixel_y = 32 @@ -87413,7 +87846,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "veO" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, /obj/machinery/light/small{ dir = 8 }, @@ -87424,6 +87856,7 @@ pixel_y = 8; req_access_txt = "8" }, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "vfd" = ( @@ -87619,7 +88052,7 @@ "vkL" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "vkO" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, @@ -87638,7 +88071,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "vkT" = ( /obj/machinery/door/airlock/research{ name = "Xenobiology Space Bridge" @@ -87695,7 +88128,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "vml" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -87768,7 +88201,7 @@ inlet_injector_autolink_id = "co2_in"; name = "Carbon Dioxide Supply Control"; outlet_vent_autolink_id = "co2_out"; - autolink_sensors = list("co2_sensor"="Tank") + autolink_sensors = list("co2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/structure/window/reinforced{ @@ -87799,7 +88232,7 @@ dir = 10; icon_state = "green" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/se) "vow" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -87854,35 +88287,8 @@ icon_state = "grimy" }, /area/station/security/detective) -"voT" = ( -/obj/structure/sink{ - pixel_y = 22 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard2) -"voV" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/pie, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "vpj" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4; - initialize_directions = 11 - }, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) @@ -87908,6 +88314,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"vpZ" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/nw) "vqm" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; @@ -87959,7 +88371,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "vqS" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -88100,6 +88512,16 @@ }, /turf/simulated/floor/engine/n2, /area/station/engineering/atmos) +"vtx" = ( +/obj/item/radio/intercom{ + name = "north bump"; + pixel_y = 35 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard) "vtA" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -88122,7 +88544,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "vtO" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -88201,11 +88623,7 @@ }, /area/station/medical/surgery/secondary) "vuZ" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump Important Area"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -88247,10 +88665,10 @@ /area/station/engineering/atmos) "vwA" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/chips{ +/obj/item/food/snacks/chips{ pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/cans/thirteenloko{ +/obj/item/reagent_containers/drinks/cans/thirteenloko{ pixel_x = -6; pixel_y = 6 }, @@ -88278,10 +88696,14 @@ /area/station/maintenance/asmaint) "vxc" = ( /obj/machinery/door/firedoor, -/obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/preopen{ id_tag = "executionfireblast" }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/execution) "vxi" = ( @@ -88290,11 +88712,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "vxx" = ( -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, +/obj/effect/spawner/random_spawners/grille_often, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "vxI" = ( @@ -88355,11 +88773,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -88697,9 +89111,6 @@ }, /area/station/science/rnd) "vJo" = ( -/obj/structure/closet{ - name = "Evidence Closet 5" - }, /obj/machinery/firealarm{ dir = 4; name = "east bump"; @@ -88709,6 +89120,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -88801,6 +89213,10 @@ pixel_y = 32 }, /obj/structure/chair/stool, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" @@ -88811,10 +89227,14 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "vNe" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -88823,7 +89243,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "vNw" = ( /obj/machinery/alarm{ dir = 8; @@ -88840,11 +89260,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/aft2) "vNV" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -88861,17 +89277,13 @@ /turf/simulated/floor/wood, /area/station/legal/courtroom) "vOJ" = ( +/obj/effect/spawner/random_spawners/grille_often, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, /turf/simulated/floor/plating, /area/station/maintenance/aft) "vPa" = ( @@ -88885,6 +89297,15 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"vPk" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo"; + pixel_x = -5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/service/kitchen) "vPx" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 5 @@ -88900,11 +89321,34 @@ icon_state = "dark" }, /area/station/engineering/atmos) +"vQf" = ( +/obj/structure/table, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/syringe, +/obj/machinery/economy/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_y = 28 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard2) "vQo" = ( /obj/item/stack/sheet/cardboard{ amount = 2 }, -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/drip, /turf/simulated/floor/plasteel, @@ -88975,15 +89419,15 @@ "vSE" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = 7; pixel_y = 1 }, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = -5; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5 }, /turf/simulated/floor/plasteel/dark, @@ -89164,6 +89608,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "vWq" = ( @@ -89171,11 +89616,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -89193,6 +89634,9 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/permabrig) +"vXe" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/east) "vXg" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -89256,7 +89700,7 @@ dir = 9; icon_state = "neutral" }, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "vZo" = ( /turf/simulated/floor/plating, /area/station/maintenance/aft2) @@ -89273,7 +89717,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "vZH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -89511,12 +89955,7 @@ }, /area/station/science/research) "wfa" = ( -/obj/structure/girder, -/obj/effect/spawner/lootdrop{ - icon_state = "grille"; - loot = list(/obj/structure/grille=8,/obj/structure/grille/broken=2); - name = "normal or broken grille spawner" - }, +/obj/effect/spawner/random_spawners/grille_often, /turf/simulated/floor/plating, /area/station/maintenance/port) "wfi" = ( @@ -89561,6 +90000,11 @@ /obj/effect/spawner/random_spawners/cobweb_right_rare, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) +"wgh" = ( +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/central/east) "wgz" = ( /obj/effect/spawner/window/reinforced/plasma/grilled, /obj/machinery/door/poddoor/preopen{ @@ -89672,6 +90116,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -89737,6 +90186,12 @@ /obj/structure/girder, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) +"wkn" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/north) "wku" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -89879,6 +90334,17 @@ }, /turf/simulated/floor/engine/vacuum, /area/station/science/toxins/mixing) +"wnn" = ( +/obj/machinery/power/apc/directional/north, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/starboard) "wnx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10 @@ -89890,7 +90356,7 @@ /area/station/security/prisonlockers) "wnD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -90014,6 +90480,16 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"wsf" = ( +/obj/item/kirbyplants/plant10, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purple" + }, +/area/station/science/xenobiology) "wsu" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -90056,12 +90532,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "HoS Junction"; + sort_type_txt = "7" + }, /turf/simulated/floor/plasteel, /area/station/security/brig) "wtm" = ( @@ -90198,7 +90677,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "wvJ" = ( /turf/simulated/floor/plasteel{ icon_state = "whitepurple" @@ -90268,7 +90747,7 @@ dir = 1; icon_state = "darkblue" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/south) "wxE" = ( /obj/machinery/firealarm{ dir = 8; @@ -90496,6 +90975,17 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"wBR" = ( +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/ne) "wBW" = ( /obj/machinery/firealarm{ dir = 1; @@ -90513,11 +91003,7 @@ /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "wCm" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" @@ -90580,11 +91066,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -90647,7 +91129,6 @@ /obj/item/mmi, /obj/item/mmi, /obj/item/mmi, -/obj/item/robotanalyzer, /obj/machinery/alarm{ dir = 1; name = "south bump"; @@ -90808,15 +91289,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft2) -"wKS" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/station/security/brig) "wLt" = ( /obj/structure/sign/biohazard, /turf/simulated/wall/r_wall, @@ -91242,6 +91714,17 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) +"wVL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/status_display{ + layer = 4; + pixel_x = -32 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/east) "wVO" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -91260,7 +91743,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/west) "wWl" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -91473,13 +91956,15 @@ name = "west bump"; pixel_x = -24 }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/fore/east) +"xaD" = ( +/obj/structure/sign/vacuum/external{ + pixel_y = -32 }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/supply/lobby) +/area/station/hallway/secondary/entry/east) "xaE" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 6 @@ -91531,8 +92016,16 @@ /turf/simulated/floor/plating, /area/station/security/prison/cell_block/A) "xbs" = ( -/obj/structure/sign/poster/official/random, -/turf/simulated/wall, +/obj/structure/dispenser, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Science - Toxins Lab"; + dir = 1; + network = list("Research","SS13") + }, +/turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "xbt" = ( /obj/machinery/atmospherics/portable/canister/nitrogen, @@ -91594,11 +92087,7 @@ }, /area/station/medical/exam_room) "xcw" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -91660,7 +92149,7 @@ dir = 4; pixel_y = -32 }, -/obj/machinery/atmospherics/unary/thermomachine/freezer{ +/obj/machinery/atmospherics/binary/valve{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -91669,7 +92158,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowfull" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "xdC" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "Processing" @@ -91763,7 +92252,7 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "xfG" = ( /obj/machinery/firealarm{ dir = 4; @@ -91774,7 +92263,7 @@ dir = 8; level = 3; name = "Distribution and Waste Monitor"; - autolink_sensors = list("mair_in_meter"="Mixed Air In","air_sensor"="Mixed Air Supply Tank","mair_out_meter"="Mixed Air Out","dloop_atm_meter"="Distribution Loop","wloop_atm_meter"="Waste Loop") + autolink_sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop") }, /turf/simulated/floor/plasteel{ dir = 4; @@ -91824,14 +92313,14 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/east) "xhF" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "xhL" = ( /obj/machinery/door/window/reinforced/normal{ name = "Justice Chamber" @@ -91950,6 +92439,12 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"xki" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/central/se) "xkD" = ( /obj/effect/decal/snow, /obj/structure/snowman/built, @@ -92010,7 +92505,7 @@ "xlE" = ( /obj/structure/cable/yellow, /obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "Processing" + id = "qm" }, /turf/simulated/floor/plating, /area/station/supply/qm) @@ -92176,7 +92671,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/north) "xoI" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -92185,19 +92680,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "xoP" = ( @@ -92207,11 +92695,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -92251,7 +92735,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/east) "xpD" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -92389,11 +92873,7 @@ name = "educational injections"; pixel_x = 2 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkred" @@ -92462,6 +92942,20 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) +"xuG" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/north) "xvh" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -92491,7 +92985,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "xvB" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -92607,11 +93101,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -92689,10 +93179,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/security/brig) "xAI" = ( @@ -92737,6 +93224,12 @@ }, /turf/simulated/floor/plasteel, /area/station/security/brig) +"xBw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "xBS" = ( /obj/machinery/light_switch{ dir = 4; @@ -92816,7 +93309,7 @@ dir = 10; icon_state = "redyellow" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "xCP" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/item/radio/intercom{ @@ -92839,11 +93332,7 @@ "xCY" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -92886,6 +93375,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/grille, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, /obj/machinery/door/poddoor{ id_tag = "SecJusticeChamber"; name = "Justice Vent" @@ -92923,30 +93417,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/primary/central) -"xFW" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/window/classic/reversed{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) +/area/station/hallway/primary/central/south) "xGg" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -92976,6 +93447,10 @@ name = "north bump"; pixel_y = 28 }, +/obj/machinery/camera{ + c_tag = "Cargo Lobby"; + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" @@ -93040,11 +93515,11 @@ /area/station/engineering/atmos) "xIx" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -93093,7 +93568,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/primary/central) +/area/station/hallway/primary/central/nw) "xKQ" = ( /obj/machinery/firealarm{ dir = 4; @@ -93106,22 +93581,22 @@ /turf/simulated/floor/plasteel, /area/station/security/permabrig) "xLd" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/central/north) "xLw" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; @@ -93236,11 +93711,16 @@ dir = 8 }, /obj/effect/turf_decal/tile/bar, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/station/supply/lobby) +/area/station/hallway/primary/fore/east) "xNy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -93304,18 +93784,11 @@ /obj/item/stack/sheet/glass, /obj/item/stack/sheet/glass, /obj/item/stack/sheet/glass, -/obj/machinery/door_control{ - id = "rdrnd"; - name = "Primary Research Shutters Control"; - pixel_x = 24; - pixel_y = 6; - req_access_txt = "7" - }, /obj/machinery/door_control{ id = "rndlab2"; - name = "Secondary Research Shutters Control"; + name = "Research Shutters Control"; pixel_x = 24; - pixel_y = -6; + pixel_y = null; req_access_txt = "7" }, /obj/machinery/cell_charger, @@ -93374,7 +93847,7 @@ /obj/machinery/computer/general_air_control{ dir = 4; name = "Tank Monitor"; - autolink_sensors = list("n2_sensor"="Nitrogen","o2_sensor"="Oxygen","co2_sensor"="Carbon Dioxide","tox_sensor"="Toxins","n2o_sensor"="Nitrous Oxide","waste_sensor"="Gas Mix Tank") + autolink_sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank") }, /turf/simulated/floor/plasteel{ dir = 9; @@ -93400,6 +93873,13 @@ /area/station/medical/surgery/observation) "xPE" = ( /obj/structure/table, +/obj/machinery/door_control{ + id = "rdrnd"; + name = "Experi-mentor shutters"; + pixel_x = -25; + pixel_y = null; + req_access_txt = "7" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -93528,6 +94008,9 @@ name = "south bump"; pixel_y = -28 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/security/brig) "xVd" = ( @@ -93551,7 +94034,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) "xVB" = ( /obj/structure/kitchenspike_frame, /obj/effect/decal/cleanable/blood/old, @@ -93940,6 +94423,17 @@ icon_state = "white" }, /area/station/medical/medbay) +"ycb" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/east) "ycj" = ( /obj/machinery/cooker/deepfryer, /obj/structure/extinguisher_cabinet{ @@ -93984,7 +94478,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/fore) +/area/station/hallway/primary/fore/north) "ydH" = ( /obj/structure/closet/secure_closet/security, /obj/machinery/light{ @@ -93999,10 +94493,7 @@ /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/window/reinforced{ dir = 1 }, @@ -94045,19 +94536,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) -"yev" = ( -/obj/structure/closet{ - name = "Evidence Closet 6" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkred" - }, -/area/station/security/evidence) "yew" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, @@ -94127,7 +94605,7 @@ icon_state = "1-2" }, /turf/simulated/floor/carpet, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/entry/lounge) "yge" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -94189,6 +94667,21 @@ }, /turf/simulated/floor/wood, /area/station/science/robotics/showroom) +"yhF" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/nw) "yhM" = ( /obj/structure/cable{ d2 = 4; @@ -94319,7 +94812,7 @@ dir = 4; icon_state = "cautioncorner" }, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/starboard/east) (1,1,1) = {" aaa @@ -102911,9 +103404,9 @@ aaa aaa ajo abq -aug +uzZ +bOx dUF -oTn abq ajo aaa @@ -102935,9 +103428,9 @@ aaa aaa aaa aaa -oTn +bgW bUO -oTn +bgW aaa aaa abq @@ -103168,7 +103661,7 @@ abq vaO vaO vaO -aJv +svM nlp oTn aaa @@ -103192,9 +103685,9 @@ ajo aef ajo abq -oTn +bgW vZD -oTn +bgW abq abq abq @@ -103425,8 +103918,8 @@ aSq aSq aWG ayC -aJv -gcW +svM +bOx oTn oTn oTn @@ -103439,20 +103932,20 @@ aaa aaa aaa aaa -oTn -oTn -oTn -oTn -oTn +mVN +mVN +mVN +mVN +mVN aaa aaa aaa aaa aaa -oTn +bgW bUO -oTn -oTn +bgW +bgW aaa abq aaa @@ -103697,21 +104190,21 @@ bin aaa aaa abq -oTn +mVN bBr -bcy -oTn +hLZ +mVN aaa aaa aaa aaa aaa -oTn -fgo +bgW +sMg bfl -oTn -oTn -oTn +bgW +bgW +bgW aaa aaa aaa @@ -103940,9 +104433,9 @@ aSq aWG cyt aZj -baJ -cmu -aug +xBw +crg +uzZ abq aaa aaa @@ -103963,9 +104456,9 @@ aaa aaa aaa aaa -vaO +aRu cjn -cmu +kQB rnY vkL rnY @@ -104198,7 +104691,7 @@ aXS bOx vaO wuT -cmu +crg oTn abq aaa @@ -104211,18 +104704,18 @@ bin aaa aaa abq -oTn -baI +mVN +aje cmu -oTn +mVN aaa aaa aaa aaa aaa -oTn +bgW baI -cmu +kQB rnY vkL rnY @@ -104470,19 +104963,19 @@ aaa abq aJv bDo -bDm +iqu aug aaa aaa aaa aaa aaa -aug +pwy ibR -cmu -oTn -oTn -oTn +kQB +bgW +bgW +bgW aaa aaa aaa @@ -104712,7 +105205,7 @@ aLB aXT vaO baK -cmu +crg oTn oTn oTn @@ -104723,21 +105216,21 @@ mXy mXy brp bin -oTn -oTn -oTn +mVN +mVN +mVN bBs cmu -oTn +mVN aaa aaa aaa aaa aaa -oTn +bgW tZW -cmu -oTn +kQB +bgW aaa abq aaa @@ -104922,7 +105415,7 @@ laH laH laH laH -laH +aup laH laH laH @@ -104969,9 +105462,9 @@ aUY aUY aZk myY -cmu +crg bdR -vkL +mUd bdR bip bkb @@ -104980,9 +105473,9 @@ blS blS bkb bip -bdR +jgq bzw -bdR +jgq eGG bFe aJv @@ -104991,10 +105484,10 @@ aaa aaa aaa aaa -aJv -baJ +kjg +cmm juN -oTn +bgW aaa abq aaa @@ -105226,7 +105719,7 @@ aML aXU vaO baX -cmu +crg oTn oTn oTn @@ -105237,21 +105730,21 @@ bkb bkb brq bin -oTn -oTn -oTn +mVN +mVN +mVN bOz cmu -oTn +mVN aaa aaa aaa aaa aaa -oTn -baJ +bgW +cmm cZf -aJv +kjg abq abq aaa @@ -105448,7 +105941,7 @@ laH laH laH laH -laH +aup laH laH aaa @@ -105482,7 +105975,7 @@ aLB aML aXV vaO -bOz +sMd bcR bcy bhb @@ -105494,21 +105987,21 @@ blS blS bkb biq -oTn +mVN bAR fgo tjR cmu -oTn +mVN aaa aaa aaa aaa aaa -oTn -baJ +bgW +cmm bUS -oTn +bgW aaa abq aaa @@ -105739,9 +106232,9 @@ aLB aML aXW aZm -bOz +sMd bBt -cmu +crg bhb oTn bin @@ -105751,21 +106244,21 @@ bkb bkb brr bin -oTn +mVN bAQ baJ xhx cmu -oTn +mVN aaa aaa aaa aaa aaa -oTn -baJ +bgW +cmm bUS -oTn +bgW aaa abq aaa @@ -105996,9 +106489,9 @@ aLB aLB aSw aZm -bOz +sMd bBt -cmu +crg bhW oTn bin @@ -106008,21 +106501,21 @@ blS blS brs bin -oTn -bhb +mVN +pMV baJ xhx -bhV -vaO +xaD +vXe aaa aaa aaa aaa aaa -vaO +aRu cjn odF -aJv +kjg abq abq aaa @@ -106078,7 +106571,7 @@ laH laH laH laH -laH +aup laH laH iju @@ -106265,21 +106758,21 @@ bkb bkb bkb biq -oTn +mVN bDU bzy -baX +gMn cmu -oTn +mVN aaa aaa bKt aaa aaa -oTn +bgW neT rTO -oTn +bgW aaa abq aaa @@ -106511,7 +107004,7 @@ aLB aML vaO bdH -cmu +crg oTn oTn oTn @@ -106522,21 +107015,21 @@ blS blS brt bin -oTn -oTn -oTn +mVN +mVN +mVN bOz -bDm +iqu aJv abq -oTn +bgW bKu -oTn +bgW abq -aJv +kjg bRV uep -oTn +bgW aaa abq aaa @@ -106767,10 +107260,10 @@ aLB aLB aXX vaO -tjR -cmu +ijn +crg bdR -vkL +mUd bdR bip bkb @@ -106779,18 +107272,18 @@ mXy mXy bkb bip -bdR +jgq bzw -bdR +jgq bOz bFG aJv -oTn -oTn -bOx -oTn -oTn -aJv +bgW +bgW +smP +bgW +bgW +kjg cjn dfZ cdT @@ -107025,7 +107518,7 @@ uAA aXY aZn bcf -cmu +crg oTn oTn oTn @@ -107036,19 +107529,19 @@ blU blU bin bin -oTn -oTn -oTn +mVN +mVN +mVN bOz bES -vaO +vXe bMT -oTn +bgW bKu -oTn +bgW bOT -vaO -baJ +aRu +cmm bLC bLD nbG @@ -107294,10 +107787,10 @@ bnF bru bin abq -oTn +mVN bzA pSL -bcR +fqB niH uWq uWq @@ -107541,18 +108034,18 @@ aOB baM bBt bhV +svM +svM aJv -aJv -aJv -oTn -oTn -oTn -oTn -oTn +mVN +mVN +mVN +mVN +mVN aJv aJv aJv -cjn +qbw bBx bDt rmz @@ -107800,15 +108293,15 @@ bcn beQ bfu bky -bky -bky -bky +nFj +brU +brU +brU brU -bky kWi buD bxr -bky +brU bAE bBy bDu @@ -107822,7 +108315,7 @@ lvE cdT cdT cRV -dZP +wfa bBz bWm cdT @@ -108058,15 +108551,15 @@ bdX bfi crd bit -bgW +bnX blW bnX bpz brv -dgj +qFK bzs bxK -dgj +qFK dgj bDv bFo @@ -108323,8 +108816,8 @@ brw btm bxJ bxL -btm -btm +bnX +bnX bFJ bNi cdn @@ -108336,10 +108829,10 @@ eBk aoX auC bTY -dZP +wfa bVR rvu -dZP +wfa clT bTY cQb @@ -108837,8 +109330,8 @@ bry btn bvA bxM -bzB -bpC +jft +ceT bDx bNi bNi @@ -108851,7 +109344,7 @@ cdT cdT cdT cdT -dZP +wfa rvu cdT cKB @@ -109865,7 +110358,7 @@ brC btq bvD bxO -bzB +jft bBG bDB bFp @@ -109937,7 +110430,7 @@ abq abq abq aaa -laH +aup aaa aaa aaa @@ -110194,7 +110687,7 @@ aaa aaa abq aaa -laH +abq aaa aaa aaa @@ -110451,7 +110944,7 @@ abq abq abq abq -laH +abq aaa aaa aaa @@ -110570,7 +111063,7 @@ aaa aaa aaa aaa -laH +aup aaa abq aaa @@ -110658,7 +111151,7 @@ bZP bZP bZP bZP -cve +vxx bZP bZP bZP @@ -110827,7 +111320,7 @@ aaa aaa aaa aaa -laH +aup aaa abq abq @@ -111150,7 +111643,7 @@ bfw btu bVW bxS -bfG +ndN aNQ bDG aRZ @@ -111404,7 +111897,7 @@ tJK tqK bpJ brG -btv +bBI bVW bxT bzG @@ -111661,7 +112154,7 @@ bpD brK bpK aXi -btv +bBI bVW bxT bzH @@ -111686,9 +112179,9 @@ crG wjL fkr bZP -cve -cve -cve +vxx +vxx +vxx clK cSg bZP @@ -111918,7 +112411,7 @@ bmk boh bpL ilJ -btv +bBI bVW bxT bzH @@ -112175,9 +112668,9 @@ bpp boh bpM aXi -btv -bVW -bBp +sUQ +iSY +uVd cdT cdT cdT @@ -112192,10 +112685,10 @@ bRI bRH bWm cdT -dZP +wfa avU bTY -dZP +wfa naY bZP cQu @@ -112412,7 +112905,7 @@ aVl aVl jyW ueF -aCH +xlE aYl aKi aRo @@ -112433,7 +112926,7 @@ boh bpN bfw btz -bVW +jkg bxX cdT arK @@ -112915,14 +113408,14 @@ adY aKy aDB fuy -tsE +fuy aOB aOB aMq aOB aOB aOB -aOB +aVl aPw aMW azN @@ -112952,7 +113445,7 @@ bxZ cdT bBN cms -dZP +wfa bHp bWi bTY @@ -112961,11 +113454,11 @@ bTY cms auC bTr -dZP +wfa aqB cdG -dZP -dZP +wfa +wfa piE avU bZP @@ -113179,7 +113672,7 @@ bgA bmi fuy rwj -aOB +aVl aLS aMZ aNm @@ -113648,7 +114141,7 @@ aaa aaa aaa aaa -laH +aup aaa aaa aaa @@ -113693,11 +114186,11 @@ aEM aDz pGU aAP -aOB -aOB -aOB -aOB -aOB +aVl +aVl +aVl +aVl +aVl aZt uKy aUt @@ -113717,9 +114210,9 @@ bbT boh bhn bfw -btv -bVW -bxT +ftz +sLH +lMU bai bBP bPZ @@ -113975,8 +114468,8 @@ boh fjl bfw btv -bVW -bxT +sLH +lMU bzM bBQ bBQ @@ -114489,8 +114982,8 @@ bcL bfw bkH bhl -bVW -bxT +sLH +lMU bai bBS bBS @@ -114734,7 +115227,7 @@ aVo aZt aZt bos -msj +kBk aOy niB aZH @@ -114746,7 +115239,7 @@ bXD bfw aXt bhl -bVW +sLH byc bzK bzK @@ -115260,8 +115753,8 @@ mqG bfw bfw fMe -bVW -bxT +sLH +lMU bzK mRL bDP @@ -115281,7 +115774,7 @@ bzK cdT cdT bqQ -dZP +wfa cdT cel cJR @@ -115517,7 +116010,7 @@ fdz aux aXi btF -bVW +sLH bBp bzK bzK @@ -115536,7 +116029,7 @@ bXy nBj cgt cdT -dZP +wfa oDZ cCj cdT @@ -115751,7 +116244,7 @@ aGq aBb pXH rrq -wpu +eNp aRG aZt jap @@ -115775,7 +116268,7 @@ nig ruZ brJ bvQ -bxT +lMU bzK bBT bDO @@ -115823,7 +116316,7 @@ cKX cNa cNs cnd -tfV +tkA cyE tSj cry @@ -116008,7 +116501,7 @@ bnv aBb aaa bkS -hDK +iJH bjf oWO kPB @@ -116017,10 +116510,10 @@ qpH xaA aYj aUw -aLV -aRu +nGC +nGC dEG -bcH +nGC aWT ceY bfw @@ -116032,7 +116525,7 @@ uwv aXi btF bUP -bxT +lMU bzK mRL bDP @@ -116278,8 +116771,8 @@ aWu lid lOd xLd -bcX -bcX +nGC +nGC bfw aXi aXi @@ -116546,20 +117039,20 @@ pET pET bkI bhc -bfV +sVE cLE -bfV +sVE bFL bFA -byg -bfV -bfV -bfV -bfV -bfV -bfV -bfV -bjm +oMj +jfN +jfN +jfN +dKB +jfN +jfN +jfN +rKV bfV bsV bZh @@ -116793,32 +117286,32 @@ aMc bTq bcJ bei -mOc +fUo uvM -mOc +dJB mIo -mOc -mOc -mOc +yhF +dJB +dJB kuf btK bvU jPQ eCF -bfI +qtp bOB -bfI -cyB +hCu +fBQ bJc bKL -bfI -bfI -bfI -jFF -bfI +hCu +tJc +hCu +pxk +hCu bQG -bfI -bfI +kLW +kLW cyB caC cby @@ -117049,28 +117542,28 @@ oiC aEQ bTq aFE -bek +xuG bfJ ibQ biX -bhp -bhp +rvX +eLW xKg bXP brO -bhp +vpZ vNb biK bzR sWV -bqb +dPX wWh brN bJd -bdb +gst aZS -bMR -bMR +iYA +sUc bRO bTC bUM @@ -117306,7 +117799,7 @@ rkX mXE lSa aFE -bek +xuG bfK bhq bhq @@ -117510,11 +118003,11 @@ aaa aaa aaa aaa -xFu +hZh ePT uEa ato -vxc +eYD iAY sjz wjq @@ -117563,7 +118056,7 @@ lIM lIM lIM bMC -bek +xuG bfK bhq biY @@ -117767,7 +118260,7 @@ aaa aaa aaa aaa -xFu +cSE wQE xIe kis @@ -118019,10 +118512,10 @@ aaa aaa aaa aaa -kQv -uNk -uNk -uNk +hxz +laH +laH +laH kbN kbN kbN @@ -118076,9 +118569,9 @@ gYO mtd gYO gYO -bQF -ben -bqb +sTC +hdw +hiC bhq bja bkM @@ -118331,10 +118824,10 @@ aaa aaa abq aaa -aZJ -bbg -bNp -bek +toy +suO +nuz +xuG bjA bhq bhK @@ -118592,7 +119085,7 @@ sPp bbh bcM bel -bfO +jmL bhq bhq bkO @@ -118834,7 +119327,7 @@ xbo lXV cvX aJe -aKC +pRQ aMf aaa aOG @@ -118845,9 +119338,9 @@ aUj aXE aOG aaa -aZJ -dbb -bNp +toy +rSj +nuz qWN acw bht @@ -119134,8 +119627,8 @@ bWC bXY bZl can -bek -bfV +jdP +kmz cfi chE eVn @@ -119348,7 +119841,7 @@ dcY lAG aHM aJd -aKC +pRQ aMf aaa aOG @@ -119362,7 +119855,7 @@ aOG bcl aZL bgF -bek +xuG bfR bht bje @@ -119391,7 +119884,7 @@ bWD cBo bZl caN -bek +jdP bcX cdW oHR @@ -119620,7 +120113,7 @@ aZN bbk bdS beq -bdb +jmL jMy abq abq @@ -119648,7 +120141,7 @@ bQn bZw ebs bcX -nWH +fSz bcX cdW chE @@ -119876,8 +120369,8 @@ aOG bco aZL bgH -bek -bdb +xuG +jmL jMy abq abq @@ -120133,8 +120626,8 @@ aOG aZL aZL bdU -bek -bdb +xuG +jmL jMy abq aBV @@ -120162,7 +120655,7 @@ bZl bZl bZl caO -bek +jdP bcX cdW oqO @@ -120387,11 +120880,11 @@ aUn aXG aOG aaa -aZJ +toy bbm -bNp -bek -bdb +nuz +xuG +jmL jMy abq aCV @@ -120418,8 +120911,8 @@ bWb bWG bYb iwv -bMR -bek +tZp +jdP bcX cdW chE @@ -120614,7 +121107,7 @@ kli abW abq tsn -yev +sNG vJo sNG rZA @@ -120648,7 +121141,7 @@ sPp bbn bbr bwn -bdb +jmL jMy abq aBY @@ -120676,7 +121169,7 @@ adP bYJ bSc aoi -bek +jdP bcX cdZ oHR @@ -120901,7 +121394,7 @@ aaa aaa abq aaa -aZJ +toy bbo oYO svH @@ -121146,7 +121639,7 @@ thW pvo aqu aKD -kzm +aJk pRQ aMf ydv @@ -121162,7 +121655,7 @@ aMf bbp fJp jtg -bdb +jmL jMy abq bkW @@ -121404,22 +121897,22 @@ tDc ehh aHM aJk -aKC -aKC +pRQ +pRQ aKw -aKC +pRQ aQp aRC -aKC -aKC +pRQ +pRQ aXR -aKC +pRQ aKw aZP bbq pzV ber -bdb +jmL jMy abq aEh @@ -121456,9 +121949,9 @@ cgw cjH cgw coz -cns -cns -cns +bcH +bcH +bcH ctQ sfS sZI @@ -121467,9 +121960,9 @@ rmE cYL qLo czF -cEX cns -coz +cns +qBb cEm mBr cKq @@ -121478,14 +121971,14 @@ cMT iQm cns cns -ctQ +lyp cns cNS mBr cns cns cEX -ctQ +kzm qqM tVJ cPN @@ -121673,7 +122166,7 @@ kpn aKG aYz aZQ -kuf +gBB bcZ bes bfU @@ -121708,20 +122201,20 @@ cbE qBP mOc cfp -tEL -cgx +jcg +uIA cjI -tPc +jgP niU niU aet xvi -tPc -tPc -tPc -noA +jgP +jgP +jgP +mIq noy -tPc +jgP cyL rEw tPc @@ -121739,7 +122232,7 @@ tEL cgx pPn sbG -tEL +hrO cOO cOO lVz @@ -121933,7 +122426,7 @@ aZR bbs dEM tyF -bfV +wkn jMy abq aDK @@ -121981,22 +122474,22 @@ cuc cuc cyM czH -cAA -cmm +lHZ +lHZ sxv cEv -cmm -cmm -cmm +lHZ +lHZ +lHZ cRS cIt -cPI +bIH cKx khl -cuc +bAt mGK lHZ -cmm +lHZ eaG cxl oSr @@ -122190,7 +122683,7 @@ aMk bZi lDm fHQ -bfV +wkn jMy abq bkW @@ -122414,13 +122907,13 @@ amx amx amx amx -apP -liR +wRx +djR aCu maC -apP +oSi uYf -apP +oSi xAz ugy apP @@ -122432,7 +122925,7 @@ dDn swL aHM aJm -mVN +aNt aMk aNu uWQ @@ -122511,7 +123004,7 @@ tmz qKY lYB avs -cUL +clv lCO coG ech @@ -122665,21 +123158,21 @@ aSm aqd aSm alm -wRx -oSi -oSi oSi oSi oSi oSi -wKS -oSi -oSi -oSi oSi oSi +ugy +liR +apP +apP +apP +apP +apP nls -ceq +apP apP apP apP @@ -122702,9 +123195,9 @@ mZH aYC aMk beD -bcX -bek -bfV +nGC +xuG +wkn jMy abq boe @@ -122732,7 +123225,7 @@ bWN bYN bSc jXC -bek +jdP bcX cef cft @@ -122923,11 +123416,11 @@ uQU uOh glS aGV -sQt -sQt -sQt -sQt -sQt +dNt +xkX +xkX +xkX +xkX mVB ule uFZ @@ -122959,9 +123452,9 @@ sYp baO aMk beR -bMR -bek -bfV +rEF +xuG +wkn jMy abq boe @@ -122989,7 +123482,7 @@ bWQ bYj iwv bNp -bek +jdP bcX cee cHM @@ -123216,9 +123709,9 @@ sYp baL aMk aMk -bMR -bek -bfV +rEF +xuG +wkn jMy abq aEt @@ -123246,7 +123739,7 @@ bZn bZn aZJ caR -nWH +fSz bcX cee cfu @@ -123422,7 +123915,7 @@ aaa aaa aaa aaa -laH +aup aaa apO eXK @@ -123437,7 +123930,7 @@ gRG oXw maV oiX -nNq +aFz iBR hlN eVZ @@ -123473,9 +123966,9 @@ aXd aNC aZT aMk -bMR -bek -bfV +fgN +pQD +wkn jMy abq abq @@ -123730,9 +124223,9 @@ xxA aNC aZU aYA -bMR -bek -bfV +rEF +xuG +wkn jMy abq abq @@ -123760,7 +124253,7 @@ bXW bZn cGX bcX -bek +jdP bcX cee cHM @@ -123782,7 +124275,7 @@ cJp oUU pzC rWk -dQb +rjb eVO cJp cFY @@ -123807,8 +124300,8 @@ tba mZq vZo coG -coG -dif +aaa +abq aef abq abq @@ -124001,7 +124494,7 @@ qgk qgk qgk bAl -bCm +abb bEi bFV qgk @@ -124017,14 +124510,14 @@ bYo bZn bZo bcX -bek +jdP bcX cee cft cgF rFe cjN -clb +jUr cmz fwz daG @@ -124051,9 +124544,9 @@ mAA qbe veO aox -fdt -fjU saM +qnp +fdt cOp rKH vZo @@ -124062,10 +124555,10 @@ jKP jDv xHR cSY -tNn -vZo -vZo vZo +coG +aaa +abq aef abq aaa @@ -124244,8 +124737,8 @@ sjx erv aNC aYA -bMR -nWH +rEF +pCy bfX bhw boM @@ -124274,7 +124767,7 @@ bNh bNh bNh caN -bek +jdP bdb cei cHM @@ -124308,7 +124801,7 @@ klo hQB jFo vZA -wwR +hVw uZk iuI cOp @@ -124319,10 +124812,10 @@ kQj coG coG cUL -clN -coG -coG +cUL coG +aaa +abq aef abq aaa @@ -124501,8 +124994,8 @@ krK aNC aZW aMk -bMR -bek +rEF +xuG bfY bhw bnA @@ -124533,12 +125026,12 @@ bNh cbi ben bqb -bZu +fXo cfw cgu qnt qnt -clc +oic uxR cic bVj @@ -124565,9 +125058,9 @@ mAA kRQ oFF mmG -qnp -hVw wnf +wwR +wwR cOp hqx lYB @@ -124758,9 +125251,9 @@ vrH aYA aMk aMk -bUM -ben -bfZ +qmI +hdw +uSx bhw bjh byk @@ -124787,9 +125280,9 @@ ccl bWW qrT iSE -caM -bek -bdb +fXz +ixQ +eOI bbg cmo bUu @@ -124820,11 +125313,11 @@ cFH cFH bMg mcw +rfK cEK -cEK -nec -agK +jjG agK +nec cOp mtr lYB @@ -125015,9 +125508,9 @@ orm fOf eUz ayu -bMR +rEF bev -bfV +wkn bhw bji rtY @@ -125044,9 +125537,9 @@ cdB bWX tST vtR -caM -nWH -bdb +fXz +sZY +eOI dbb cmo mZe @@ -125079,9 +125572,9 @@ iRd iwB xbs dce -rfK -gQc cQd +gQc +qYD gty coG coG @@ -125303,7 +125796,7 @@ bZD bZX cPD uhY -bdb +eOI dbb cmo hYA @@ -125336,7 +125829,7 @@ hhN cOB jlU hQB -nbM +gWO nbM xdo cOp @@ -125348,7 +125841,7 @@ lTS coG abq aaa -aaa +abq aaa abq aef @@ -125530,7 +126023,7 @@ aRX aRX bbz fEr -uhY +trF bfW bhw bjk @@ -125574,7 +126067,7 @@ gvN bYq qxW cvl -geC +kej lGC nqw eZW @@ -125604,9 +126097,9 @@ kQj avs wSg coG -abq -abq -abq +coG +dif +aef arA arA bcb @@ -125786,9 +126279,9 @@ aTo aYJ aZY ayu -bMR -bek -bfV +rEF +xuG +wkn bhw bnE ble @@ -125859,11 +126352,11 @@ rVg coG wWu vZo +tNn vZo -hXg -abq -aaa -aaa +fpO +vZo +aef abq aef abq @@ -126043,9 +126536,9 @@ paZ aYK aZZ bbA -bMR -bek -bfV +rEF +xuG +wkn bhw bhw bhw @@ -126072,7 +126565,7 @@ bht bht bht bht -bNp +xki cXn bqR cek @@ -126116,11 +126609,11 @@ cKS wxV gWk lYB -vZo +qyd hXg -aaa -aaa -aaa +hXg +hXg +aef abq aef abq @@ -126300,20 +126793,20 @@ ayu cdP aZZ bbB -bMR -nWH -bfV +rEF +pCy +wkn bwl -bjm -bCB -bfV -bsV -bfV +uSx +eNa +wBR +gCA +aUM bvs -bjm +wVL mdE byF -bfV +ofu bCB bEp deE @@ -126322,14 +126815,14 @@ bcN byg cfr bQF -bNp +xki bSW bTW bVn -bNp +kSz bYr bbt -bNp +xki sVy pRL cte @@ -126373,7 +126866,7 @@ dXZ coG kQj mlV -cUL +clN coG abq aaa @@ -126559,21 +127052,21 @@ aZZ xoq bdi bex -hBq +qvE beo -bQG -hlD +etn +dnj bnb boO bqu -bOV -bOB +qif +dFf hlD xpC fHy qsN hlD -bfI +ycb bHM bJF bLt @@ -126818,23 +127311,23 @@ ejd bey bgd oWL -bUM +qmI kaK blg blk -lsQ +jyq deD dwp -lsQ -rOT +wgh +nVp pUF ipa -lsQ -lsQ -lsQ -lsQ -lsQ -lsQ +wgh +wgh +wgh +wgh +wgh +wgh bwS bpI lsQ @@ -126849,7 +127342,7 @@ ccW chO cfA cgN -bBk +ggQ bZu bZu ppH @@ -127334,7 +127827,7 @@ bge blM bjp bez -bnr +vtx boY bqA aHe @@ -127861,9 +128354,9 @@ bEv sTF mBe bHO -voV +jQx nic -bTZ +oXP dnI bVs nic @@ -128118,7 +128611,7 @@ bEv omK udl bHO -xFW +doE nic bQJ aRy @@ -129370,7 +129863,7 @@ bgb aHV iKF aIk -aFG +llW aLd aMt aGM @@ -129390,7 +129883,7 @@ avA alb aLl aLl -bnr +wnn bcP bqA bsp @@ -129659,7 +130152,7 @@ sqp sqp sqp fsh -tXA +bEv bQI soT tRb @@ -130161,9 +130654,9 @@ aaa aaa aaa blo -bnr -hfi -bqA +aIr +nyR +rve blC bxI iGf @@ -130418,7 +130911,7 @@ vuo aZK beC beC -bnr +gFZ boX bqD bsq @@ -130472,7 +130965,7 @@ lLx qEh iKT qTJ -egC +jLt uGh imh sXt @@ -130675,9 +131168,9 @@ bgm bhI bjv beC -bnf +veb cCu -bqA +rve blC xam bbE @@ -130704,7 +131197,7 @@ caS bZv bZv clC -ipj +iFx cte lXi xmO @@ -130933,7 +131426,7 @@ beE bjw beC bnn -boY +oAL bqE bsm bsm @@ -131189,7 +131682,7 @@ beC bbx beC beC -bnr +qxG bQR buV bsp @@ -131235,7 +131728,7 @@ cmB cOR rMb cSl -cLm +loz xXD gqQ mMv @@ -131446,9 +131939,9 @@ bgo bhL bjx bbH -bnr -boY -bqx +aIr +oAL +rjC bsp mwH hvW @@ -131460,9 +131953,9 @@ mpr bTd bJO bQI +vPk bQI -bPe -bQI +eRh bQI bQI bVA @@ -131703,7 +132196,7 @@ bgp bhM bjy bbH -bnr +aIr mUq qIg bsp @@ -131716,9 +132209,9 @@ aoG aoG aoG aoG -aoG -oXK -asJ +bQI +bQI +bQI aNR bEG bZv @@ -131960,7 +132453,7 @@ bgq bhJ bjz bbH -bnk +tNg bpb bqC bsp @@ -131974,7 +132467,7 @@ bHW bHX kZl xbt -aoG +oXK bPg dnm bTP @@ -132009,7 +132502,7 @@ cUQ uOY mfA gZT -eIY +qPh cAS uzR qyw @@ -132166,7 +132659,7 @@ aaa aaa aaa aaa -laH +aup aaa aaa aaa @@ -132217,8 +132710,8 @@ bgr bhJ bnJ bbH -bnr -boY +dSN +fQt bqx aoG aoG @@ -132520,7 +133013,7 @@ cmB cVo cvW cSl -cOk +mhA rHl cRH mMv @@ -132732,7 +133225,7 @@ bhQ bjC bbH bnp -hfi +oNy bqx aoG cZD @@ -132766,7 +133259,7 @@ cYB gSO csV cte -voT +vQf cqi fNl ool @@ -132989,7 +133482,7 @@ bam bam bam bqB -boY +fQt bqx aoG aoG @@ -133245,8 +133738,8 @@ bgu bmm bnM bam -bnr -boY +dSN +fQt bqx aoG aMh @@ -133502,7 +133995,7 @@ bgv bhU aGX bam -bnr +dSN xVd lDD aoG @@ -133759,7 +134252,7 @@ bgw bhU bom bam -bnf +oZT vkR pBB aoG @@ -134273,7 +134766,7 @@ cfd bhU bjH bam -bnr +dSN bsY mGk bHN @@ -137408,7 +137901,7 @@ uQm uQm uQm uQm -gzU +wsf iUe cDI mCu @@ -141414,7 +141907,7 @@ aaa aaa aaa aaa -laH +aup aaa aaa cke @@ -142452,11 +142945,11 @@ laH laH laH laH +aup laH laH laH -laH -laH +abq laH laH aaa @@ -147618,266 +148111,266 @@ aaa aaa aaa aaa -laH -aaa -aaa -aUU -bxl -cko -arA -abq -abq -aXL -aaa -aXL -aXL -aXL -aXL -aXL -aXL -aXL -aXL -aXL -wxE -bvw -bxz -bBn -aXL -aXL -aaa -aXL -aaa -aaa -aaa -aaa -aXL -abq -arA -aUV -wri -aQF -aaa -aaa -laH -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(209,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +laH aaa aaa +aUU +bxl +cko +arA +abq +abq +aXL aaa +aXL +aXL +aXL +aXL +aXL +aXL +aXL +aXL +aXL +wxE +bvw +bxz +bBn +aXL +aXL aaa +aXL aaa aaa aaa aaa +aXL +abq +arA +aUV +wri +aQF aaa aaa laH aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(209,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aup +aaa +aaa aUU bxl fbS @@ -147915,7 +148408,7 @@ wri aQF aaa aaa -laH +aup aaa aaa aaa @@ -150445,7 +150938,7 @@ aaa aaa aaa aaa -laH +aup aaa aaa aUU @@ -152776,8 +153269,8 @@ laH laH cKI laH -laH -laH +abq +aup laH laH laH @@ -152791,7 +153284,7 @@ laH laH laH laH -laH +aup laH laH cKI diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index 1295070c312c..3433ee2ffdd7 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -979,7 +979,7 @@ /turf/simulated/floor/mineral/bananium/lubed, /area/ruin/powered/clownplanet) "bL" = ( -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /obj/structure/table/glass, /turf/simulated/floor/carpet, /area/ruin/powered/clownplanet) diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm index f1b2e315b9ee..3ee31c383d40 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm @@ -36,7 +36,7 @@ /turf/simulated/floor/plating, /area/ruin/powered/snow_biodome) "ah" = ( -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plating, /area/ruin/powered/snow_biodome) "ai" = ( @@ -102,7 +102,7 @@ /area/ruin/powered/snow_cabin) "ax" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/wood, /area/ruin/powered/snow_cabin) "ay" = ( @@ -141,7 +141,7 @@ /area/ruin/powered/snow_cabin) "aF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/h_chocolate, +/obj/item/reagent_containers/drinks/h_chocolate, /turf/simulated/floor/wood, /area/ruin/powered/snow_cabin) "aG" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm index 08d65ad3cf4a..c0fe43694a66 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm @@ -20,9 +20,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner, /obj/effect/landmark/damageturf, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/pod/light{ oxygen = 0; @@ -257,9 +255,7 @@ "aN" = ( /obj/structure/railing, /obj/effect/landmark/damageturf, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/airless, /area/lavaland/surface/outdoors) @@ -272,9 +268,7 @@ /obj/structure/railing, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/damageturf, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/pod/light{ oxygen = 0; @@ -518,9 +512,7 @@ /obj/structure/railing/corner, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/pod/light{ oxygen = 0; @@ -673,7 +665,7 @@ /area/lavaland/surface/outdoors) "ie" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plating/airless, /area/ruin/unpowered/althland_excavation) "iv" = ( @@ -825,9 +817,7 @@ dir = 6 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/off_station/empty_charge{ - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/north, /turf/simulated/floor/plating/airless, /area/ruin/unpowered/althland_excavation) "pI" = ( @@ -907,9 +897,7 @@ /obj/structure/railing, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/damageturf, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/airless, /area/lavaland/surface/outdoors) @@ -959,7 +947,7 @@ "wi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/machinery/constructable_frame, /turf/simulated/floor/pod/light{ oxygen = 0; @@ -1014,9 +1002,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/railing, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/airless, /area/lavaland/surface/outdoors) @@ -1032,9 +1018,7 @@ "yz" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/airless, /area/lavaland/surface/outdoors) @@ -1101,8 +1085,8 @@ "Cs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table_frame, -/obj/item/reagent_containers/food/snacks/badrecipe, -/obj/item/reagent_containers/food/snacks/badrecipe{ +/obj/item/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe{ pixel_y = 14; pixel_x = 14 }, @@ -1145,12 +1129,9 @@ /area/lavaland/surface/outdoors) "Es" = ( /obj/structure/lattice/catwalk/mining, -/obj/structure/ladder/unbreakable/dive_point{ - desc = "The shattered remnants of a ladder hanging over the pitch-black chasm, providing no safe route to the abyss beneath. Its fractured rungs suggest an inevitable plunge, as if the remainder might soon join the void."; - name = "shattered ladder" - }, /obj/effect/baseturf_helper/lava_land/surface, /obj/effect/mapping_helpers/no_lava, +/obj/structure/ladder/unusable, /turf/simulated/floor/chasm, /area/lavaland/surface/outdoors) "Et" = ( @@ -1327,7 +1308,7 @@ /area/lavaland/surface/outdoors) "OX" = ( /obj/structure/table_frame, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plating/airless, /area/ruin/unpowered/althland_excavation) "Pe" = ( @@ -1533,9 +1514,7 @@ "Ya" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/pod/light{ oxygen = 0; diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm index bb91ea362faa..87e12be1426b 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm @@ -37,10 +37,7 @@ /area/lavaland/surface/outdoors) "au" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor{ temperature = 300; oxygen = 14; @@ -181,10 +178,7 @@ "eV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor{ temperature = 300; @@ -1435,11 +1429,11 @@ /area/ruin/unpowered/althland_processing) "Jw" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ temperature = 300; @@ -1903,10 +1897,7 @@ /area/lavaland/surface/outdoors) "Xw" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/item/paper/fluff/ruins/althland/geology, /turf/simulated/floor/plasteel{ temperature = 300; diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 899178dd7177..4cd633eeba32 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -60,7 +60,7 @@ /obj/item/seeds/reishi, /obj/item/seeds/plump, /obj/item/seeds/plump, -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom, +/obj/item/food/snacks/grown/mushroom/glowshroom, /turf/simulated/floor/plating/asteroid/basalt, /area/ruin/powered) "n" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 4f64ee076493..c3df51e78744 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -56,7 +56,7 @@ }, /area/ruin/unpowered/misc_lavaruin) "j" = ( -/obj/item/reagent_containers/food/snacks/mushroompizzaslice, +/obj/item/food/snacks/mushroompizzaslice, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating{ nitrogen = 23; @@ -243,7 +243,7 @@ /area/ruin/unpowered/misc_lavaruin) "D" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/margheritapizzaslice, +/obj/item/food/snacks/margheritapizzaslice, /obj/item/trash/plate, /turf/simulated/floor/wood{ nitrogen = 23; @@ -253,7 +253,7 @@ /area/ruin/unpowered/misc_lavaruin) "E" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meatpizzaslice, +/obj/item/food/snacks/meatpizzaslice, /turf/simulated/floor/wood{ nitrogen = 23; oxygen = 14; @@ -262,7 +262,7 @@ /area/ruin/unpowered/misc_lavaruin) "F" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake, +/obj/item/food/snacks/sliceable/birthdaycake, /turf/simulated/floor/wood{ nitrogen = 23; oxygen = 14; diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index 8e9f26c16a23..01936b0ab7a6 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -115,7 +115,7 @@ /obj/effect/mapping_helpers/no_lava, /obj/effect/mob_spawn/human/corpse/seed_vault_diona, /obj/item/pickaxe/mini, -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom{ +/obj/item/food/snacks/grown/mushroom/glowshroom{ pixel_x = 8; pixel_y = -8 }, @@ -338,14 +338,14 @@ /turf/simulated/floor/plasteel/freezer, /area/ruin/powered/seedvault) "IJ" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4; name = "Ship Auto-Pilot Console" }, /turf/simulated/floor/plasteel/freezer, /area/ruin/powered/seedvault) "JL" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4; name = "Auto-Pilot Traveling Logs" }, diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm index 5607f14a46e8..c6a81c6289b1 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @@ -25,7 +25,7 @@ /area/ruin/unpowered/misc_lavaruin) "f" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/citrus/orange, /turf/simulated/floor/sepia{ slowdown = 10 }, diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm index 94b3daeba793..d87396e356f8 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm @@ -34,7 +34,7 @@ /obj/structure/stone_tile{ dir = 1 }, -/obj/item/reagent_containers/food/snacks/egg/watcher, +/obj/item/food/snacks/egg/watcher, /obj/effect/mapping_helpers/no_lava, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm index 40cb7ab08a1e..9c6403deaf1b 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm @@ -8,7 +8,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/abandoned_engi_sat) "aN" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -53,8 +53,7 @@ "cz" = ( /obj/machinery/status_display{ mode = 0; - pixel_x = 32; - pixel_y = 0 + pixel_x = 32 }, /turf/simulated/floor/plasteel{ icon_state = "delivery" @@ -72,7 +71,6 @@ }, /obj/machinery/status_display{ mode = 0; - pixel_x = 0; pixel_y = 32 }, /turf/simulated/floor/plasteel{ @@ -90,9 +88,7 @@ /area/ruin/space/abandoned_engi_sat) "dk" = ( /obj/machinery/power/solar, -/obj/structure/cable{ - icon_state = "0-1" - }, +/obj/structure/cable, /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel"; name = "floor" @@ -154,7 +150,6 @@ "ex" = ( /obj/item/radio/intercom{ dir = 1; - name = "station intercom (General)"; pixel_y = -28 }, /turf/simulated/floor/plasteel, @@ -193,9 +188,7 @@ icon_state = "0-4"; d2 = 4 }, -/obj/machinery/power/apc/off_station/empty_charge{ - pixel_y = -24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/south, /obj/effect/landmark/burnturf, /turf/simulated/floor/plating, /area/ruin/space/abandoned_engi_sat) @@ -212,7 +205,6 @@ /area/ruin/space/abandoned_engi_sat) "gi" = ( /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "cmo" }, /area/ruin/space/abandoned_engi_sat) @@ -260,7 +252,6 @@ "hP" = ( /obj/machinery/status_display{ mode = 0; - pixel_x = 0; pixel_y = 32 }, /obj/effect/landmark/damageturf, @@ -283,12 +274,10 @@ "jk" = ( /obj/machinery/shower{ dir = 4; - icon_state = "shower"; pixel_x = 5 }, /obj/structure/curtain/open/shower/engineering, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "cmo" }, /area/ruin/space/abandoned_engi_sat) @@ -324,7 +313,6 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - name = "station intercom (General)"; pixel_y = -28 }, /turf/simulated/floor/plasteel, @@ -336,8 +324,7 @@ "kg" = ( /obj/structure/cable{ d2 = 2; - icon_state = "0-2"; - pixel_y = 0 + icon_state = "0-2" }, /obj/machinery/constructable_frame/machine_frame, /turf/simulated/floor/plasteel{ @@ -520,8 +507,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -548,9 +534,9 @@ /obj/item/poster/random_contraband, /obj/item/poster/random_contraband, /obj/item/poster/random_contraband, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel, /area/ruin/space/abandoned_engi_sat) "pb" = ( @@ -612,7 +598,6 @@ desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; - pixel_x = 0; pixel_y = -32 }, /turf/simulated/floor/plasteel{ @@ -670,16 +655,14 @@ /turf/simulated/floor/wood/airless, /area/ruin/space/abandoned_engi_sat) "to" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/ruin/space/abandoned_engi_sat) "tO" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -696,7 +679,6 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - name = "station intercom (General)"; pixel_y = -28 }, /turf/simulated/floor/plating, @@ -707,7 +689,6 @@ icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; - pixel_x = 0; pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -746,27 +727,22 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/space/abandoned_engi_sat) "xp" = ( /obj/machinery/light{ - icon_state = "tube1"; dir = 1 }, /obj/machinery/status_display{ mode = 0; - pixel_x = 0; pixel_y = 32 }, /obj/structure/closet/crate/internals, @@ -839,9 +815,7 @@ "zb" = ( /obj/item/radio/intercom{ dir = 1; - name = "station intercom (General)"; - pixel_x = -28; - pixel_y = 0 + pixel_x = -28 }, /turf/simulated/floor/plasteel, /area/ruin/space/abandoned_engi_sat) @@ -941,15 +915,13 @@ /turf/template_noop, /area/ruin/space/abandoned_engi_sat) "CY" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/abandoned_engi_sat) "Db" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -1045,8 +1017,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -1061,8 +1032,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/ruin/space/abandoned_engi_sat) @@ -1084,7 +1054,6 @@ "Ha" = ( /obj/item/radio/intercom{ dir = 1; - name = "station intercom (General)"; pixel_y = -28 }, /turf/simulated/floor/plating, @@ -1093,7 +1062,6 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - name = "station intercom (General)"; pixel_y = -28 }, /turf/simulated/floor/plasteel{ @@ -1108,9 +1076,7 @@ }, /area/ruin/space/abandoned_engi_sat) "HX" = ( -/obj/structure/cable{ - icon_state = "0-1" - }, +/obj/structure/cable, /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel"; name = "floor" @@ -1136,7 +1102,7 @@ pixel_y = 1; d2 = 2 }, -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -1152,7 +1118,6 @@ }, /obj/item/soap/nanotrasen, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "cmo" }, /area/ruin/space/abandoned_engi_sat) @@ -1263,8 +1228,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; @@ -1293,8 +1257,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; @@ -1308,8 +1271,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/effect/mapping_helpers/airlock/access/all/engineering/external, @@ -1332,9 +1294,7 @@ "QJ" = ( /obj/structure/sink{ dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 + pixel_x = 11 }, /turf/simulated/floor/plasteel{ icon_state = "vault"; @@ -1501,12 +1461,10 @@ dir = 1 }, /obj/structure/window/reinforced/tinted{ - dir = 4; - icon_state = "twindow" + dir = 4 }, /obj/item/bikehorn/rubberducky, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "cmo" }, /area/ruin/space/abandoned_engi_sat) @@ -1544,17 +1502,14 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/ruin/space/abandoned_engi_sat) "ZS" = ( /obj/structure/sink{ dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 + pixel_x = 11 }, /obj/structure/sign/poster/random{ pixel_x = 32 diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm index 390bf2401ea0..610d51e3c23d 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -345,10 +345,7 @@ }, /area/ruin/space/unpowered) "aS" = ( -/obj/machinery/power/apc/worn_out{ - dir = 8; - pixel_x = -24 - }, +/obj/machinery/power/apc/worn_out/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -545,7 +542,7 @@ /area/ruin/space/unpowered) "bn" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/carrotfries, +/obj/item/food/snacks/carrotfries, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm b/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm index 1ea6c1179145..525a0d85a8a9 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm @@ -338,9 +338,7 @@ /turf/template_noop, /area/space/nearstation) "tr" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/tcommsat) @@ -584,7 +582,7 @@ /turf/simulated/wall/r_wall, /area/space/nearstation) "Nw" = ( -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ name = "green mold bread slice" }, /turf/simulated/floor/plating/airless, @@ -812,9 +810,7 @@ /turf/template_noop, /area/space/nearstation) "Yt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/ruin/space/tcommsat) "Yu" = ( @@ -827,11 +823,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/space/tcommsat) "YN" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Worn-out APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/worn_out/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-2" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/debris1.dmm b/_maps/map_files/RandomRuins/SpaceRuins/debris1.dmm index 672218a60d90..67ff96e0ad2c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/debris1.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/debris1.dmm @@ -122,9 +122,7 @@ /turf/space, /area/space) "O" = ( -/obj/machinery/power/apc/worn_out{ - pixel_y = -24 - }, +/obj/machinery/power/apc/worn_out/directional/south, /obj/structure/cable, /turf/simulated/floor/plating/airless, /area/space) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index 0559b278a5d4..2338e405ac25 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -318,20 +318,20 @@ /area/ruin/space/unpowered) "aF" = ( /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "aG" = ( /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "aH" = ( @@ -390,11 +390,11 @@ /area/ruin/space/unpowered) "aP" = ( /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /obj/machinery/light{ dir = 4 }, @@ -649,7 +649,7 @@ /area/ruin/space/unpowered) "bD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -667,11 +667,9 @@ /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "bG" = ( -/obj/machinery/power/apc/off_station{ - dir = 8; +/obj/machinery/power/apc/off_station/directional/west{ keep_preset_name = 1; - name = "Bunker APC"; - pixel_x = -24 + name = "Bunker APC" }, /obj/structure/cable{ d2 = 4; diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm index b7b7e3bc1845..96be2fc177cf 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -261,10 +261,10 @@ /area/ruin/space/unpowered) "SX" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_x = 10 }, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_x = -5 }, /turf/simulated/floor/plasteel, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm b/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm index c633cc96f1d4..8858774e8665 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm @@ -7,10 +7,7 @@ /turf/template_noop, /area/space/nearstation) "ac" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/template_noop, /area/space/nearstation) "ad" = ( @@ -43,10 +40,7 @@ /turf/template_noop, /area/ruin/space/djstation/solars) "ag" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/lattice, /turf/template_noop, /area/space/nearstation) @@ -64,10 +58,7 @@ /area/ruin/space/djstation) "aj" = ( /obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/template_noop, /area/space/nearstation) "al" = ( @@ -284,10 +275,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc/off_station{ - name = "Worn-out APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/worn_out/directional/south, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/djstation) @@ -565,15 +553,15 @@ /area/ruin/space/djstation) "bw" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = 7; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 28; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm b/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm index 4b707a0c38e7..6e07362ccb41 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm @@ -51,7 +51,7 @@ /area/ruin/space/methlab) "l" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating, /area/ruin/space/methlab) "m" = ( @@ -80,11 +80,8 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - layer = 5; - name = "east bump"; - pixel_x = 24 +/obj/machinery/power/apc/directional/east{ + layer = 5 }, /turf/simulated/floor/plating, /area/ruin/space/methlab) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm index 62bb34219c95..cd0277ea77cc 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm @@ -199,6 +199,7 @@ name = "mission briefing" }, /obj/effect/decal/cleanable/dirt, +/obj/item/paper/monitorkey, /turf/simulated/floor/plasteel/dark, /area/ruin/space/syndicate_listening_station) "un" = ( @@ -618,11 +619,7 @@ /turf/simulated/floor/plating, /area/ruin/space/syndicate_listening_station) "Ya" = ( -/obj/machinery/power/apc/off_station{ - dir = 4; - pixel_x = 24; - req_access = list(150) - }, +/obj/machinery/power/apc/syndicate/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm b/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm index 89a5ba26557e..b91380534d3c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm @@ -95,8 +95,8 @@ /area/ruin/unpowered/BMPship/Delta) "ax" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -104,7 +104,7 @@ /area/ruin/unpowered/BMPship/Delta) "ay" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -140,14 +140,11 @@ icon_state = "0-2"; pixel_y = 1 }, -/obj/machinery/power/apc/off_station{ - dir = 1; +/obj/machinery/power/apc/off_station/directional/north{ environment_channel = 2; equipment_channel = 0; lighting_channel = 0; - locked = 0; - pixel_y = 24; - req_access = "" + locked = 0 }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -340,16 +337,12 @@ }, /area/ruin/unpowered/BMPship/Fore) "br" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Fore) "bs" = ( /obj/machinery/light/small, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Fore) "bt" = ( @@ -407,50 +400,31 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bJ" = ( /obj/machinery/light/small, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bK" = ( /obj/structure/kitchenspike, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bL" = ( /obj/structure/closet/crate, /obj/item/analyzer, /obj/item/stack/spacecash/c10, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bM" = ( /obj/structure/closet/crate, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c50, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/BMPship/Delta) -"bN" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/hugemushroomslice, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bO" = ( @@ -459,9 +433,7 @@ pixel_y = -24 }, /obj/machinery/light/small, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bP" = ( @@ -471,9 +443,7 @@ icon_state = "1-2"; tag = "" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Delta) "bQ" = ( @@ -487,14 +457,11 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc/off_station{ - dir = 1; +/obj/machinery/power/apc/off_station/directional/north{ equipment_channel = 0; lighting_channel = 0; locked = 0; - operating = 0; - pixel_y = 24; - req_access = "" + operating = 0 }, /turf/simulated/floor/carpet, /area/ruin/unpowered/BMPship/Fore) @@ -564,7 +531,7 @@ "cb" = ( /obj/structure/table, /obj/item/kitchen/knife/butcher, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -648,7 +615,7 @@ /turf/simulated/wall/mineral/titanium, /area/ruin/unpowered/BMPship/Aft) "cp" = ( -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/hugemushroomslice, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -750,7 +717,7 @@ /turf/simulated/floor/carpet, /area/ruin/unpowered/BMPship/Fore) "cH" = ( -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/hugemushroomslice, /turf/simulated/floor/plasteel, /area/ruin/unpowered/BMPship/Midship) "cI" = ( @@ -766,9 +733,7 @@ }, /area/ruin/unpowered/BMPship/Midship) "cL" = ( -/obj/machinery/door/window{ - dir = 2 - }, +/obj/machinery/door/window, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -792,8 +757,8 @@ /area/ruin/unpowered/BMPship/Aft) "cP" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -827,13 +792,10 @@ icon_state = "0-2"; pixel_y = 1 }, -/obj/machinery/power/apc/off_station{ - dir = 1; +/obj/machinery/power/apc/off_station/directional/north{ environment_channel = 0; locked = 0; - operating = 0; - pixel_y = 24; - req_access = "" + operating = 0 }, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Aft) @@ -898,7 +860,7 @@ }, /area/ruin/unpowered/BMPship/Midship) "di" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -1194,12 +1156,9 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc/off_station{ - dir = 1; +/obj/machinery/power/apc/off_station/directional/north{ locked = 0; - operating = 0; - pixel_y = 24; - req_access = "" + operating = 0 }, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -1944,7 +1903,7 @@ /area/ruin/unpowered/BMPship/Fore) "fS" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -2234,7 +2193,7 @@ /area/ruin/powered) "gO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/item/grenade/chem_grenade/drugs, /turf/simulated/floor/plating/airless, /area/ruin/powered) @@ -2389,7 +2348,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/powered) "hn" = ( -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating/airless, /area/ruin/powered) "ho" = ( @@ -2448,6 +2407,15 @@ }, /turf/simulated/floor/plating, /area/ruin/unpowered/BMPship/Aft) +"IM" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/hugemushroomslice, +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/BMPship/Delta) "PP" = ( /obj/structure/computerframe{ dir = 4 @@ -4968,7 +4936,7 @@ aj aj aj aj -bN +IM ad cl cl diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm index 2a8053abb9da..48f6692898da 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm @@ -20,9 +20,8 @@ /turf/simulated/floor/plating/airless, /area/template_noop) "fr" = ( -/obj/machinery/computer{ - name = "shuttle control console"; - desc = "The screen dims greens with an ERROR message. It looks completely unusable." +/obj/machinery/computer/nonfunctional{ + name = "shuttle control console" }, /turf/simulated/floor/mineral/titanium/blue/airless, /area/ruin/space/powered) @@ -286,13 +285,11 @@ /turf/simulated/floor/mineral/titanium/airless, /area/ruin/space/powered) "Nm" = ( -/obj/machinery/computer{ - name = "exosuit control console"; - desc = "The screen dims green with a bright ERROR message. It looks completely unusable." +/obj/machinery/computer/nonfunctional{ + name = "exosuit control console" }, -/obj/machinery/computer{ - name = "shuttle control console"; - desc = "The screen dims green with an ERROR message. It looks completely unusable." +/obj/machinery/computer/nonfunctional{ + name = "shuttle control console" }, /turf/simulated/floor/mineral/titanium/blue/airless, /area/ruin/space/powered) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm index 9346dea8c35e..7afde38c1526 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm @@ -1071,7 +1071,7 @@ /turf/simulated/wall/mineral/titanium, /area/ruin/space/powered) "dh" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) @@ -2061,10 +2061,10 @@ }, /area/ruin/space/moonbase19) "gy" = ( -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 10; pixel_x = 10 }, @@ -2307,7 +2307,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel{ @@ -2575,7 +2575,7 @@ "hV" = ( /obj/structure/railing, /obj/structure/closet/secure_closet, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -3; pixel_y = -2 }, @@ -3170,7 +3170,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -3723,16 +3723,16 @@ }, /area/ruin/space/moonbase19) "lC" = ( -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans{ pixel_y = 6; pixel_x = 9 }, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_y = 3; pixel_x = 3 }, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_y = 1; pixel_x = -5 }, @@ -4917,7 +4917,7 @@ /area/ruin/space/moonbase19) "pZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) "qa" = ( @@ -5792,6 +5792,23 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) +"ts" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/item/scalpel{ + pixel_y = 12 + }, +/obj/item/circular_saw, +/obj/item/hemostat, +/obj/item/retractor, +/obj/item/stack/cable_coil, +/obj/structure/table/glass, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue"; + dir = 1 + }, +/area/ruin/space/moonbase19) "tv" = ( /obj/structure/largecrate, /turf/simulated/floor/plating/asteroid/ancient, @@ -6124,8 +6141,8 @@ "vh" = ( /obj/structure/rack, /obj/item/mecha_parts/core, -/obj/item/stock_parts/cell/infinite, /obj/effect/turf_decal/delivery/hollow, +/obj/item/stock_parts/cell/infinite/abductor, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -6350,7 +6367,7 @@ }, /area/ruin/space/moonbase19) "wk" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) "wl" = ( @@ -6414,7 +6431,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -6430,7 +6447,7 @@ }, /area/ruin/space/moonbase19) "wL" = ( -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) @@ -6719,7 +6736,7 @@ /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) "yc" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -6935,12 +6952,12 @@ }, /area/ruin/space/moonbase19) "yR" = ( -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice, +/obj/item/food/snacks/xenomeatbreadslice{ pixel_y = 7; pixel_x = 6 }, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ pixel_y = 9; pixel_x = -5 }, @@ -6954,7 +6971,7 @@ }, /area/ruin/space/moonbase19) "yU" = ( -/obj/item/reagent_containers/food/snacks/candy, +/obj/item/food/snacks/candy, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) @@ -6978,7 +6995,7 @@ /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) "zh" = ( -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 @@ -7051,7 +7068,7 @@ /area/ruin/space/moonbase19) "zv" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/snacks/cornchips, +/obj/item/food/snacks/cornchips, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "escape" @@ -7943,8 +7960,8 @@ /obj/structure/closet/crate, /obj/item/reagent_containers/glass/beaker/waterbottle, /obj/item/reagent_containers/glass/beaker/waterbottle, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -8137,7 +8154,7 @@ /area/ruin/space/moonbase19) "DV" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) "Ef" = ( @@ -8269,7 +8286,7 @@ /area/ruin/space/moonbase19) "Ex" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread{ +/obj/item/food/snacks/sliceable/xenomeatbread{ pixel_y = 5 }, /obj/effect/turf_decal/delivery, @@ -8424,7 +8441,7 @@ /turf/simulated/floor/engine, /area/ruin/space/moonbase19) "Ff" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -8799,7 +8816,7 @@ }, /area/ruin/space/moonbase19) "GP" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 8 }, @@ -8860,11 +8877,11 @@ /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "awaykitchen" }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 10; pixel_x = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 7; pixel_x = 11 }, @@ -9459,13 +9476,9 @@ /area/ruin/space/moonbase19) "JU" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/power/apc/off_station/empty_charge{ +/obj/machinery/power/apc/off_station/empty_charge/directional/north{ cell_type = 15000; - locked = 0; - name = "Outpost APC"; - req_access = null; - pixel_y = 24; - dir = 1 + locked = 0 }, /obj/structure/cable{ d2 = 4; @@ -9914,7 +9927,7 @@ pixel_x = 6; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 3; pixel_x = -7 }, @@ -10643,23 +10656,6 @@ dir = 4 }, /area/ruin/space/moonbase19) -"OR" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/table/tray, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/circular_saw, -/obj/item/hemostat, -/obj/item/retractor, -/obj/item/stack/cable_coil, -/turf/simulated/floor/plasteel{ - icon_state = "darkblue"; - dir = 1 - }, -/area/ruin/space/moonbase19) "OT" = ( /obj/effect/turf_decal/delivery/partial{ dir = 4 @@ -10805,7 +10801,7 @@ /area/ruin/space/moonbase19) "PE" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 @@ -11565,7 +11561,7 @@ }, /area/ruin/space/moonbase19) "Tc" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -12230,7 +12226,7 @@ /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) "VO" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) @@ -12402,7 +12398,7 @@ /obj/item/cigbutt{ pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) "WF" = ( @@ -12545,7 +12541,7 @@ }, /area/ruin/space/moonbase19) "Xi" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 1 }, @@ -12618,7 +12614,7 @@ /area/ruin/space/moonbase19) "Xv" = ( /obj/machinery/reagentgrinder, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_y = 4; pixel_x = -12 }, @@ -13121,7 +13117,7 @@ /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) "Zu" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 4 }, @@ -13548,7 +13544,7 @@ vN af dd QI -OR +ts Wd Am Ci diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm index 7393ce0c198e..eb49ebcb8e13 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm @@ -94,27 +94,18 @@ /area/ruin/ancientstation/comm) "au" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/comm) "av" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/item/paper/fluff/ruins/oldstation/damagereport, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/comm) "aw" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/item/paper/fluff/ruins/oldstation/report, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/comm) @@ -164,11 +155,7 @@ /area/ruin/ancientstation/hivebot) "aE" = ( /obj/structure/cable, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 4; - name = "Beta Engineering APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/east, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/airless, /area/ruin/ancientstation/atmo) @@ -272,7 +259,7 @@ /obj/structure/table, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, -/obj/item/coin, +/obj/item/coin/gold, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/comm) "aU" = ( @@ -372,10 +359,7 @@ /area/ruin/ancientstation/comm) "bi" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -383,10 +367,7 @@ /area/ruin/ancientstation/comm) "bj" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "blue" @@ -524,9 +505,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/ancientstation) @@ -566,9 +545,7 @@ /turf/simulated/floor/plasteel, /area/ruin/ancientstation) "bK" = ( -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/ancientstation) @@ -813,9 +790,7 @@ /turf/simulated/floor/plasteel, /area/ruin/ancientstation/thetacorridor) "ct" = ( -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -1020,11 +995,7 @@ icon_state = "0-4" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 1; - name = "Theta Prototype Lab APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/north, /turf/simulated/floor/plasteel/white, /area/ruin/ancientstation/proto) "cW" = ( @@ -1076,11 +1047,7 @@ /area/ruin/ancientstation/comm) "dd" = ( /obj/structure/cable, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 4; - name = "Charlie Main Corridor APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/east, /obj/structure/closet/crate, /obj/item/storage/backpack/old, /obj/item/storage/backpack/old, @@ -1223,10 +1190,7 @@ }, /area/ruin/ancientstation/comm) "dy" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/sec) @@ -1300,9 +1264,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/hivebot/strong, @@ -1416,11 +1378,7 @@ pixel_y = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 4; - name = "Charlie Command APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/east, /turf/simulated/floor/plating, /area/ruin/ancientstation/comm) "dY" = ( @@ -1428,10 +1386,7 @@ /turf/simulated/floor/plasteel, /area/ruin/ancientstation/sec) "dZ" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; @@ -1538,9 +1493,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 9; @@ -1707,9 +1660,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 5; @@ -2491,11 +2442,7 @@ icon_state = "0-2"; pixel_y = 1 }, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 8; - name = "Charlie Security APC"; - pixel_x = -24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/west, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 9; @@ -2612,7 +2559,7 @@ /area/ruin/ancientstation/kitchen) "gu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/sec) @@ -2840,10 +2787,7 @@ /turf/simulated/floor/plasteel, /area/ruin/ancientstation/thetacorridor) "gX" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/item/card/id/away/old/apc, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -3366,11 +3310,11 @@ /area/ruin/ancientstation/kitchen) "ia" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 5; pixel_y = -2 }, @@ -3406,11 +3350,7 @@ pixel_y = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 1; - name = "Theta Main Corridor APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/north, /turf/simulated/floor/plating, /area/ruin/ancientstation/thetacorridor) "ie" = ( @@ -3781,11 +3721,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 1; - name = "Charlie Hydroponics APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/north, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/ancientstation/hydroponics) @@ -3831,9 +3767,7 @@ icon_state = "1-4" }, /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /turf/simulated/floor/plasteel, /area/ruin/ancientstation) "jd" = ( @@ -3858,9 +3792,7 @@ /area/ruin/ancientstation) "jg" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /turf/simulated/floor/plasteel, /area/ruin/ancientstation) "jh" = ( @@ -3871,9 +3803,7 @@ tag = "90Curve" }, /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/thetacorridor) "ji" = ( @@ -3928,9 +3858,7 @@ /area/ruin/ancientstation/thetacorridor) "jo" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead" - }, +/obj/item/kirbyplants/dead, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/thetacorridor) "jp" = ( @@ -4066,10 +3994,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc/off_station/empty_charge{ - name = "Charlie Kitchen APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/south, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/ancientstation/kitchen) @@ -4095,11 +4020,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 4; - name = "Theta RnD APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/east, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/rnd) @@ -4281,10 +4202,7 @@ /area/ruin/ancientstation) "kf" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/powered) "kg" = ( @@ -4326,9 +4244,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel/white, /area/ruin/ancientstation/proto) "kk" = ( @@ -4460,10 +4376,7 @@ /turf/simulated/floor/plasteel/white, /area/ruin/ancientstation/proto) "kA" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, +/obj/machinery/computer/nonfunctional, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/white, /area/ruin/ancientstation/proto) @@ -4665,11 +4578,7 @@ /obj/structure/rack, /obj/item/stack/cable_coil, /obj/structure/cable, -/obj/machinery/power/apc/off_station/empty_charge{ - dir = 4; - name = "Charlie Engineering APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/east, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 6; diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm index 0cbdaba9c8e1..41eef9d8d152 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -254,11 +254,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/power/apc/off_station{ - keep_preset_name = 1; - name = "Hallway APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/off_station/directional/south, /turf/simulated/floor/plasteel/airless, /area/ruin/space/onehalf/hallway) "aM" = ( @@ -370,9 +366,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/space/onehalf/hallway) "aV" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "airlock" - }, +/obj/machinery/door/airlock/medical/glass, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -1290,12 +1284,7 @@ /obj/item/healthanalyzer, /obj/item/reagent_containers/iv_bag/blood/OMinus, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/machinery/power/apc/off_station{ - dir = 4; - keep_preset_name = 1; - name = "Crew Quarters APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/directional/east, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -1305,12 +1294,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc/off_station{ - dir = 1; - keep_preset_name = 1; - name = "Mining Drone Bay APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/directional/north, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -1321,8 +1305,8 @@ /obj/item/tank/internals/oxygen/red, /obj/item/clothing/mask/gas/syndicate, /obj/item/mod/control/pre_equipped/traitor, -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /obj/item/folder/syndicate/blue, /turf/simulated/floor/plating, /area/ruin/space/onehalf/abandonedbridge) @@ -1331,12 +1315,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc/off_station{ - dir = 1; - keep_preset_name = 1; - name = "Bridge APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/directional/north, /turf/simulated/floor/plasteel, /area/ruin/space/onehalf/abandonedbridge) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm index bbafdde4db70..68bca8457f62 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm @@ -336,9 +336,7 @@ /turf/template_noop, /area/space/nearstation) "bt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/space/powered) "bF" = ( @@ -371,7 +369,7 @@ pixel_y = -3 }, /obj/item/clothing/suit/hgpirate, -/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer, +/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer, /obj/item/clothing/gloves/ring/gold, /obj/item/id_decal/gold, /obj/item/screwdriver, @@ -468,7 +466,7 @@ /area/space/nearstation) "mb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/ruin/space/powered/bar) "mu" = ( @@ -544,7 +542,7 @@ /area/ruin/space/powered/bar) "vD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood, /area/ruin/space/powered/bar) "vE" = ( @@ -666,9 +664,7 @@ id_tag = "pod cycle"; name = "airlock dock" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -899,9 +895,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered/bar) "RX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/structure/marker_beacon/dock_marker, /turf/simulated/floor/plating, /area/ruin/space/powered) @@ -970,9 +964,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating/airless, /area/ruin/space/powered) "ZM" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm index d0d197efa6fd..90f121818c81 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm @@ -60,10 +60,7 @@ /turf/simulated/floor/pod/dark, /area/ruin/space/syndicate_druglab) "mA" = ( -/obj/machinery/power/apc/syndicate/off{ - pixel_x = 24; - dir = 4 - }, +/obj/machinery/power/apc/syndicate/off/directional/east, /turf/simulated/floor/plating, /area/ruin/space/syndicate_druglab) "mO" = ( @@ -317,9 +314,7 @@ /turf/simulated/floor/pod/dark, /area/ruin/space/syndicate_druglab) "II" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -328,7 +323,7 @@ /area/ruin/space/syndicate_druglab) "JP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 7 }, @@ -336,15 +331,11 @@ /turf/simulated/floor/pod/dark, /area/ruin/space/syndicate_druglab) "KI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/ruin/space/syndicate_druglab) "LQ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -409,9 +400,7 @@ /turf/simulated/floor/carpet/black, /area/ruin/space/syndicate_druglab) "TJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/blood/oil/streak, /turf/simulated/floor/plating, /area/ruin/space/syndicate_druglab) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm index 0afd68199276..6f5702e29ba4 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm @@ -66,7 +66,7 @@ d2 = 2; icon_state = "0-4" }, -/obj/machinery/power/apc/syndicate/south, +/obj/machinery/power/apc/syndicate/directional/south, /turf/simulated/floor/engine, /area/ruin/unpowered/syndicate_space_base/testlab) "aq" = ( @@ -742,7 +742,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/east, +/obj/machinery/power/apc/syndicate/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkpurple" @@ -1021,7 +1021,7 @@ d2 = 2; icon_state = "0-4" }, -/obj/machinery/power/apc/syndicate/west, +/obj/machinery/power/apc/syndicate/directional/west, /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_space_base/engineering) "fF" = ( @@ -1665,9 +1665,7 @@ /obj/effect/turf_decal/woodsiding{ dir = 5 }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -1895,7 +1893,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/north, +/obj/machinery/power/apc/syndicate/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -1934,7 +1932,7 @@ /obj/machinery/atmospherics/meter{ layer = 3.3 }, -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /turf/simulated/floor/plating, @@ -1988,7 +1986,7 @@ /turf/simulated/floor/engine, /area/ruin/unpowered/syndicate_space_base/testlab) "kK" = ( -/obj/machinery/power/apc/syndicate/south, +/obj/machinery/power/apc/syndicate/directional/south, /obj/structure/cable/green, /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -2121,7 +2119,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/east, +/obj/machinery/power/apc/syndicate/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2164,7 +2162,7 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_space_base/atmos) "lW" = ( -/obj/machinery/power/apc/syndicate/north, +/obj/machinery/power/apc/syndicate/directional/north, /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" @@ -2948,7 +2946,7 @@ /area/ruin/unpowered/syndicate_space_base/chemistry) "pH" = ( /obj/structure/cable/green, -/obj/machinery/power/apc/syndicate/west, +/obj/machinery/power/apc/syndicate/directional/west, /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_space_base/atmos) "pM" = ( @@ -3771,7 +3769,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/north, +/obj/machinery/power/apc/syndicate/directional/north, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3971,7 +3969,7 @@ /area/ruin/unpowered/syndicate_space_base/main) "vO" = ( /obj/structure/cable/green, -/obj/machinery/power/apc/syndicate/west, +/obj/machinery/power/apc/syndicate/directional/west, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -4012,8 +4010,8 @@ }, /obj/item/book/manual/barman_recipes, /obj/item/lighter/zippo, -/obj/item/reagent_containers/food/drinks/flask/barflask, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/structure/table/wood, /obj/machinery/alarm/syndicate{ pixel_x = -24; @@ -4493,9 +4491,7 @@ }, /area/ruin/unpowered/syndicate_space_base/arrivals) "yR" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/grass, /area/ruin/unpowered/syndicate_space_base/service) "za" = ( @@ -4703,7 +4699,7 @@ /obj/machinery/computer/general_air_control/large_tank_control{ inlet_injector_autolink_id = "syndiebase_mix_in"; outlet_vent_autolink_id = "syndiebase_mix_out"; - autolink_sensors = list("syndiebase_mix_sensor"="Burn Mix"); + autolink_sensors = list("syndiebase_mix_sensor" = "Burn Mix"); dir = 8 }, /turf/simulated/floor/plating, @@ -4747,7 +4743,7 @@ /area/ruin/unpowered/syndicate_space_base/telecomms) "Af" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5 }, /turf/simulated/floor/plasteel{ @@ -4791,12 +4787,12 @@ /obj/machinery/atmospherics/meter{ layer = 3.3 }, -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 4 - }, /obj/machinery/light{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_space_base/atmos) "Ao" = ( @@ -5185,7 +5181,7 @@ /area/ruin/unpowered/syndicate_space_base/service) "CC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/light_switch{ dir = 4; pixel_x = -24; @@ -5223,7 +5219,7 @@ /area/ruin/unpowered/syndicate_space_base/arrivals) "CS" = ( /obj/structure/cable/green, -/obj/machinery/power/apc/syndicate/east, +/obj/machinery/power/apc/syndicate/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -5275,7 +5271,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/south, +/obj/machinery/power/apc/syndicate/directional/south, /turf/simulated/floor/catwalk, /area/ruin/unpowered/syndicate_space_base/toxtest) "Dl" = ( @@ -5412,7 +5408,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc/syndicate/north, +/obj/machinery/power/apc/syndicate/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -5964,7 +5960,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc/syndicate/west, +/obj/machinery/power/apc/syndicate/directional/west, /turf/simulated/floor/plasteel{ icon_state = "darkgreen"; dir = 8 @@ -6049,7 +6045,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/east, +/obj/machinery/power/apc/syndicate/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -6076,7 +6072,7 @@ /area/ruin/unpowered/syndicate_space_base/arrivals) "HC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -6100,7 +6096,7 @@ /area/ruin/unpowered/syndicate_space_base/atmos) "HO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -7070,10 +7066,10 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_space_base/atmos) "Nm" = ( -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /obj/structure/table, @@ -8456,7 +8452,7 @@ d2 = 2; icon_state = "0-8" }, -/obj/machinery/power/apc/syndicate/east, +/obj/machinery/power/apc/syndicate/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -8576,9 +8572,7 @@ /obj/effect/turf_decal/woodsiding{ dir = 9 }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm index 062f5ecf81b9..eebd64133f93 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm @@ -16,7 +16,7 @@ /area/ruin/space/unpowered) "bk" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, /obj/effect/decal/cleanable/dirt, @@ -111,11 +111,11 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, -/obj/item/reagent_containers/food/snacks/donut/sprinkles{ +/obj/item/food/snacks/donut/sprinkles{ pixel_y = 8; pixel_x = -9 }, -/obj/item/reagent_containers/food/snacks/donut/sprinkles{ +/obj/item/food/snacks/donut/sprinkles{ pixel_y = -1; pixel_x = 5 }, @@ -123,8 +123,8 @@ /area/ruin/space/unpowered) "fq" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi{ +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi{ pixel_y = 6 }, /turf/simulated/floor/plasteel{ @@ -133,14 +133,14 @@ /area/ruin/space/unpowered) "fs" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = -10 }, /obj/machinery/light/small{ @@ -152,7 +152,7 @@ /area/ruin/space/unpowered) "fE" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -275,11 +275,11 @@ /area/ruin/space/unpowered) "ke" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -369,11 +369,11 @@ /area/ruin/space/unpowered) "qd" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice{ +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice{ pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/breadslice{ +/obj/item/food/snacks/breadslice{ pixel_y = 8 }, /obj/machinery/light/small{ @@ -395,7 +395,7 @@ animal_species = /mob/living/simple_animal/pet/dog; attack_sound = 'sound/weapons/bite.ogg'; attacktext = "bites"; - damage_coeff = list("brute"=1,"fire"=1,"tox"=1,"clone"=1,"stamina"=1,"oxy"=1); + damage_coeff = list("brute" = 1, "fire" = 1, "tox" = 1, "clone" = 1, "stamina" = 1, "oxy" = 1); death_sound = null; deathmessage = ""; desc = "This is no longer a goodboy. Not anymore. He has seen too much."; @@ -480,12 +480,12 @@ /area/ruin/space/unpowered) "tf" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /turf/simulated/floor/plasteel{ @@ -692,10 +692,10 @@ /area/ruin/space/unpowered) "Bh" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = -10 }, /turf/simulated/floor/plasteel{ @@ -747,7 +747,7 @@ /area/ruin/space/unpowered) "Do" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -770,11 +770,11 @@ /area/ruin/space/unpowered) "DY" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_y = 5; pixel_x = 6 }, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_y = 5; pixel_x = -5 }, @@ -831,8 +831,8 @@ /area/ruin/space/unpowered) "Gn" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, /turf/simulated/floor/engine, @@ -876,7 +876,7 @@ /turf/simulated/floor/engine, /area/ruin/space/unpowered) "Iz" = ( -/obj/item/reagent_containers/food/snacks/meat/corgi{ +/obj/item/food/snacks/meat/corgi{ pixel_y = 6 }, /obj/effect/decal/cleanable/dirt, @@ -946,10 +946,10 @@ /area/ruin/space/unpowered) "Lt" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /turf/simulated/floor/plasteel{ @@ -976,8 +976,8 @@ /area/ruin/space/unpowered) "Mw" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, @@ -1002,10 +1002,10 @@ /area/ruin/space/unpowered) "MY" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /turf/simulated/floor/plasteel{ @@ -1034,21 +1034,21 @@ /area/template_noop) "Ov" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = 8 }, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = -8 }, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = -8; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = 8; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/birthdaycakeslice, +/obj/item/food/snacks/birthdaycakeslice, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -1078,7 +1078,7 @@ animal_species = /mob/living/simple_animal/pet/dog; attack_sound = 'sound/weapons/bite.ogg'; attacktext = "bites"; - damage_coeff = list("brute"=1,"fire"=1,"tox"=1,"clone"=1,"stamina"=1,"oxy"=1); + damage_coeff = list("brute" = 1, "fire" = 1, "tox" = 1, "clone" = 1, "stamina" = 1, "oxy" = 1); death_sound = null; deathmessage = ""; desc = "This is no longer a goodboy. Not anymore. He has seen too much."; @@ -1115,12 +1115,12 @@ /area/ruin/space/unpowered) "QF" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /obj/machinery/light/small{ @@ -1161,7 +1161,7 @@ }, /area/ruin/space/unpowered) "SS" = ( -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /turf/simulated/floor/grass, /area/ruin/space/unpowered) "TG" = ( @@ -1193,8 +1193,8 @@ /area/ruin/space/unpowered) "Vt" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 12 }, /turf/simulated/floor/plasteel{ @@ -1202,7 +1202,7 @@ }, /area/ruin/space/unpowered) "VI" = ( -/obj/item/reagent_containers/food/snacks/meat/corgi{ +/obj/item/food/snacks/meat/corgi{ pixel_y = 6 }, /turf/simulated/floor/plasteel{ @@ -1237,7 +1237,7 @@ /area/ruin/space/unpowered) "XZ" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 10; pixel_x = 5 }, @@ -1258,9 +1258,7 @@ /turf/simulated/floor/engine, /area/ruin/space/unpowered) "YE" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/grass, /area/ruin/space/unpowered) "YQ" = ( @@ -1276,7 +1274,7 @@ animal_species = /mob/living/simple_animal/pet/dog; attack_sound = 'sound/weapons/bite.ogg'; attacktext = "bites"; - damage_coeff = list("brute"=1,"fire"=1,"tox"=1,"clone"=1,"stamina"=1,"oxy"=1); + damage_coeff = list("brute" = 1, "fire" = 1, "tox" = 1, "clone" = 1, "stamina" = 1, "oxy" = 1); death_sound = null; deathmessage = ""; desc = "This is no longer a goodboy. Not anymore. He has seen too much."; @@ -1290,14 +1288,14 @@ /turf/simulated/floor/grass, /area/ruin/space/unpowered) "Zs" = ( -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, /area/ruin/space/unpowered) "Zw" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm index 6888c9dfd94d..fc3e95325ab7 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm @@ -53,7 +53,7 @@ }, /area/syndicate_depot/outer) "al" = ( -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/structure/spider, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -85,7 +85,7 @@ /area/syndicate_depot/outer) "ar" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -128,7 +128,7 @@ }, /area/syndicate_depot/core) "ay" = ( -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -614,7 +614,7 @@ /area/syndicate_depot/core) "bO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -986,11 +986,7 @@ /area/syndicate_depot/core) "cJ" = ( /obj/structure/cable, -/obj/machinery/power/apc/off_station{ - dir = 4; - pixel_x = 24; - req_access = list(150) - }, +/obj/machinery/power/apc/syndicate/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -1155,10 +1151,7 @@ }, /area/syndicate_depot/core) "de" = ( -/obj/machinery/power/apc/off_station{ - dir = 4; - pixel_x = 24 - }, +/obj/machinery/power/apc/off_station/directional/east, /obj/structure/cable, /turf/simulated/floor/plating/airless, /area/syndicate_depot/outer) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm index d444f1809b69..fb0523287cb3 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -104,11 +104,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "w" = ( -/obj/machinery/power/apc/off_station{ - keep_preset_name = 1; - name = "Outpost APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/off_station/directional/south, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "x" = ( @@ -231,11 +227,11 @@ /area/ruin/space/unpowered) "P" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = -4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = 3 }, /turf/simulated/floor/plasteel, @@ -259,7 +255,7 @@ /area/ruin/space/unpowered) "S" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, /obj/machinery/light{ dir = 8 }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index b1d1eacd3ca9..c0a150801e61 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -2,7 +2,7 @@ "aa" = ( /obj/effect/landmark/burnturf, /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="cautionfull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "cautionfull"); icon_state = "4-i" }, /area/ruin/space/derelict/hallway/primary) @@ -479,10 +479,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc/off_station{ - dir = 8; - pixel_x = -24 - }, +/obj/machinery/power/apc/off_station/directional/west, /turf/simulated/floor/wood, /area/ruin/space/derelict/bridge) "bp" = ( @@ -621,7 +618,7 @@ /area/ruin/space/derelict/bridge) "bE" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="dark"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "dark"); icon_state = "4-i" }, /area/ruin/space/derelict/arrival) @@ -912,13 +909,13 @@ /area/ruin/space/derelict/bridge) "cr" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, /area/ruin/space/derelict/bridge) "cs" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood{ broken = 1; @@ -1160,7 +1157,7 @@ /area/ruin/space/derelict/bridge) "cV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -1347,10 +1344,7 @@ }, /area/ruin/space/derelict/arrival) "du" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plasteel/airless{ icon_state = "floorscorched2" }, @@ -1411,9 +1405,7 @@ /area/ruin/space/derelict/arrival) "dC" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/classic/reversed{ - dir = 2 - }, +/obj/machinery/door/window/classic/reversed, /obj/item/folder{ pixel_x = 31; pixel_y = 1 @@ -1463,10 +1455,7 @@ /turf/simulated/floor/plating, /area/ruin/space/derelict/arrival) "dG" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard{ icon_state = "small" }, @@ -1543,10 +1532,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc/off_station{ - dir = 1; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/directional/north, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -1712,10 +1698,7 @@ pixel_y = 1 }, /obj/structure/musician/piano, -/obj/machinery/power/apc/off_station{ - dir = 1; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/directional/north, /turf/simulated/floor/wood, /area/ruin/space/derelict/crew_quarters) "em" = ( @@ -1851,7 +1834,7 @@ /area/space/nearstation) "eB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/peanuts, +/obj/item/food/snacks/grown/peanuts, /obj/structure/sign/poster/contraband/random{ pixel_y = 32 }, @@ -1950,7 +1933,7 @@ /area/ruin/space/derelict/hallway/primary) "eM" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="purplefull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "purplefull"); icon_state = "4-i" }, /area/ruin/space/derelict/hallway/primary) @@ -1965,10 +1948,10 @@ }, /area/ruin/space/derelict/hallway/primary) "eO" = ( -/obj/structure/table/tray, /obj/item/scalpel{ pixel_y = 12 }, +/obj/structure/table, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purple" @@ -2063,7 +2046,7 @@ /area/ruin/space/derelict/hallway/primary) "eZ" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="cautionfull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "cautionfull"); icon_state = "4-i" }, /area/ruin/space/derelict/hallway/primary) @@ -2385,10 +2368,10 @@ }, /area/ruin/space/derelict/hallway/primary) "fI" = ( -/obj/structure/table/tray, /obj/item/circular_saw{ pixel_y = 10 }, +/obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/derelict/hallway/primary) "fJ" = ( @@ -2742,10 +2725,7 @@ icon_state = "0-2"; pixel_y = 1 }, -/obj/machinery/power/apc/off_station{ - dir = 1; - pixel_y = 24 - }, +/obj/machinery/power/apc/off_station/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" @@ -2785,11 +2765,11 @@ /area/ruin/space/derelict/crew_quarters) "gI" = ( /obj/structure/closet/secure_closet/bar, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/food/drinks/bottle/kahlua, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/kahlua, /turf/simulated/floor/plasteel/grimy, /area/ruin/space/derelict/crew_quarters) "gJ" = ( @@ -2977,7 +2957,7 @@ dir = 1 }, /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="whiteredfull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "whiteredfull"); icon_state = "4-i" }, /area/ruin/space/derelict/hallway/primary) @@ -3019,7 +2999,7 @@ /area/ruin/space/derelict/crew_quarters) "hn" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel/grimy, /area/ruin/space/derelict/crew_quarters) "ho" = ( @@ -3537,7 +3517,7 @@ /area/ruin/space/derelict/hallway/primary) "iD" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="engine"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "engine"); icon_state = "4-i" }, /area/ruin/space/derelict/hallway/primary) @@ -3750,9 +3730,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/wood, /area/ruin/space/derelict/crew_quarters) "jh" = ( @@ -3962,21 +3940,6 @@ }, /turf/simulated/floor/wood, /area/ruin/space/derelict/crew_quarters) -"jK" = ( -/obj/machinery/door/airlock/external{ - id_tag = "rus2_door_int"; - name = "External Airlock" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ruin/space/derelict/crew_quarters) "jL" = ( /obj/structure/cable{ d1 = 4; @@ -3984,23 +3947,6 @@ icon_state = "4-8" }, /obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "rus2_vent"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ruin/space/derelict/crew_quarters) -"jM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - id_tag = "rus2_door_ext"; - locked = 1; - name = "External Airlock" - }, /turf/simulated/floor/plating, /area/ruin/space/derelict/crew_quarters) "jN" = ( @@ -4500,11 +4446,6 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/access_button{ - autolink_id = "rus2_btn_ext"; - name = "exterior access button"; - pixel_x = -25 - }, /turf/template_noop, /area/ruin/space/derelict/crew_quarters) "kJ" = ( @@ -4739,13 +4680,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - id_tag = "rus2_door_int"; - name = "External Airlock" - }, /turf/simulated/floor/plating, /area/ruin/space/derelict/crew_quarters) "lp" = ( @@ -4757,31 +4691,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/airlock_controller/air_cycler{ - ext_door_link_id = "rus2_door_ext"; - ext_button_link_id = "rus2_btn_ext"; - int_door_link_id = "rus2_door_int"; - int_button_link_id = "rus2_btn_int"; - pixel_y = -25; - vent_link_id = "rus2_vent" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - autolink_id = "rus2_vent" - }, -/turf/simulated/floor/plating, -/area/ruin/space/derelict/crew_quarters) -"lq" = ( -/obj/machinery/door/airlock/external{ - id_tag = "rus2_door_ext"; - locked = 1; - name = "External Airlock" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/plating, /area/ruin/space/derelict/crew_quarters) "lr" = ( @@ -4920,11 +4829,6 @@ /obj/machinery/light/spot{ dir = 4 }, -/obj/machinery/access_button{ - autolink_id = "rus2_btn_int"; - name = "interior access button"; - pixel_x = 25 - }, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -5574,9 +5478,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/door/window/classic/reversed{ - dir = 2 - }, +/obj/machinery/door/window/classic/reversed, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -5623,7 +5525,7 @@ dir = 8 }, /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="whiteredfull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "whiteredfull"); icon_state = "4-i" }, /area/ruin/space/derelict/hallway/primary) @@ -5762,7 +5664,7 @@ /area/ruin/space/derelict/hallway/primary) "nS" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/soup/beetsoup, +/obj/item/food/snacks/soup/beetsoup, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -5793,7 +5695,7 @@ /area/ruin/space/derelict/hallway/primary) "nU" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="hydrofloor"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "hydrofloor"); icon_state = "4-i" }, /area/ruin/space/derelict/crew_quarters) @@ -6037,8 +5939,8 @@ /area/ruin/space/derelict/hallway/primary) "oA" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/plasteel/white, /area/ruin/space/derelict/hallway/primary) "oB" = ( @@ -6280,7 +6182,7 @@ /area/ruin/space/derelict/crew_quarters) "pj" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="orangefull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "orangefull"); icon_state = "4-i" }, /area/ruin/space/derelict/crew_quarters) @@ -6536,11 +6438,11 @@ layer = 2.9 }, /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -6652,7 +6554,7 @@ /area/ruin/space/derelict/arrival) "qk" = ( /turf/simulated/wall/mineral/titanium/nodecon/tileblend{ - fixed_underlay = list("icon"='icons/turf/floors.dmi',"icon_state"="redfull"); + fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "redfull"); icon_state = "4-i" }, /area/ruin/space/derelict/arrival) @@ -6843,7 +6745,7 @@ /obj/item/trash/tapetrash, /obj/item/trash/pistachios, /obj/item/reagent_containers/syringe/charcoal{ - list_reagents = list("charcoal"=13,"salmonella"=2) + list_reagents = list("charcoal" = 13, "salmonella" = 2) }, /turf/simulated/floor/plasteel{ icon_state = "redfull" @@ -7196,9 +7098,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/grass, /area/ruin/space/derelict/arrival) "rz" = ( @@ -7210,9 +7110,7 @@ name = "Cygni Commemorative Statue"; pixel_y = 16 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/structure/flora/ausbushes/fullgrass{ pixel_y = 5 }, @@ -7231,9 +7129,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/grass, /area/ruin/space/derelict/arrival) "rB" = ( @@ -7356,9 +7252,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "red" @@ -7378,9 +7272,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -7394,14 +7286,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/machinery/access_button{ - autolink_id = "rus1_btn_int"; - name = "interior access button"; - pixel_y = -25 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -7417,9 +7302,7 @@ dir = 10; initialize_directions = 10 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -7490,32 +7373,6 @@ /obj/structure/sign/vacuum, /turf/simulated/wall/mineral/titanium/nodecon/nodiagonal, /area/ruin/space/derelict/arrival) -"sa" = ( -/obj/machinery/door/airlock/external{ - id_tag = "rus1_door_int"; - name = "External Airlock" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/ruin/space/derelict/arrival) -"sb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - id_tag = "rus1_door_int"; - name = "External Airlock" - }, -/turf/simulated/floor/plating, -/area/ruin/space/derelict/arrival) "sc" = ( /obj/structure/cable{ d1 = 1; @@ -7525,18 +7382,6 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - autolink_id = "rus1_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = -25; - ext_button_link_id = "rus1_btn_ext"; - ext_door_link_id = "rus1_door_ext"; - int_button_link_id = "rus1_btn_int"; - int_door_link_id = "rus1_door_int"; - vent_link_id = "rus1_vent" - }, /turf/simulated/floor/plating, /area/ruin/space/derelict/arrival) "sd" = ( @@ -7548,31 +7393,9 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - autolink_id = "rus1_vent" - }, /turf/simulated/floor/plating, /area/ruin/space/derelict/arrival) "se" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - id_tag = "rus1_door_ext"; - locked = 1; - name = "External Airlock" - }, -/turf/simulated/floor/plating, -/area/ruin/space/derelict/arrival) -"sf" = ( -/obj/machinery/door/airlock/external{ - id_tag = "rus1_door_ext"; - locked = 1; - name = "External Airlock" - }, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -7590,11 +7413,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/access_button{ - autolink_id = "rus1_btn_ext"; - name = "exterior access button"; - pixel_y = 25 - }, /turf/template_noop, /area/ruin/space/derelict/arrival) "si" = ( @@ -7751,9 +7569,27 @@ }, /turf/simulated/wall/mineral/titanium/nodecon/nodiagonal, /area/ruin/space/derelict/arrival) +"Nv" = ( +/obj/effect/spawner/airlock{ + req_access_txt = 0 + }, +/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal, +/area/ruin/space/derelict/arrival) +"Oh" = ( +/obj/effect/spawner/airlock/w_to_e{ + req_access_txt = 0 + }, +/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal, +/area/ruin/space/derelict/crew_quarters) "QN" = ( /turf/simulated/wall/mineral/titanium/nodecon/nosmooth, /area/ruin/space/derelict/arrival) +"Ud" = ( +/obj/effect/spawner/airlock{ + req_access_txt = 0 + }, +/turf/simulated/wall/mineral/titanium/nodecon, +/area/ruin/space/derelict/arrival) "Xn" = ( /obj/structure/cable{ d1 = 1; @@ -11154,9 +10990,9 @@ rq rq hY rO -rZ bn -aW +bn +Ud ac ac jO @@ -11246,7 +11082,7 @@ rr ry rE rP -sa +se sc se jx @@ -11340,7 +11176,7 @@ qu rQ bn bn -bn +Nv sh ac kJ @@ -11430,9 +11266,9 @@ rt rA qu rR -sb +se sd -sf +se jx jx sk @@ -14157,11 +13993,11 @@ aV bm dH dH -bm -jK kG lo -bm +Oh +lo +Oh dH dH bm @@ -14342,9 +14178,9 @@ ac ac ac aV -jM +lo bm -lq +lo aV ag ag diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm index 9f24bfbf844a..12d6318b4d53 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp_tele.dmm @@ -38,10 +38,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/space/derelict/teleporter) "i" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating/airless, /area/ruin/space/derelict/teleporter) "j" = ( @@ -156,8 +153,7 @@ /obj/effect/landmark/damageturf, /obj/item/kirbyplants/dead{ desc = "A dead potted plant. Must have died from lack of EVA equipment."; - item_state = "plant-dead"; - name = "potted plant" + item_state = "plant-dead" }, /turf/simulated/floor/plasteel/airless{ dir = 6; @@ -169,10 +165,7 @@ /turf/simulated/wall, /area/ruin/space/derelict/teleporter) "B" = ( -/obj/machinery/power/apc/off_station{ - name = "Worn-out APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/worn_out/directional/south, /turf/simulated/floor/plasteel/airless{ icon_state = "floorgrime" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm index 96093d445c81..9fb046586bdf 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm @@ -117,7 +117,6 @@ height = 35; id = "whiteship"; name = "NT Medical Ship"; - roundstart_move = null; width = 21 }, /obj/docking_port/stationary/whiteship{ diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index a443506ad956..d1f0175e1f43 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -9,10 +9,7 @@ /turf/simulated/mineral, /area/ruin/space/unpowered) "ad" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard{ icon_state = "small" }, @@ -21,7 +18,7 @@ }, /area/ruin/space/unpowered) "ae" = ( -/turf/simulated/wall/mineral/titanium, +/turf/simulated/wall/mineral/titanium/nodecon, /area/ruin/space/unpowered) "af" = ( /obj/structure/computerframe, @@ -35,10 +32,7 @@ }, /area/ruin/space/unpowered) "ah" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard, /turf/simulated/floor/wood{ icon_state = "wood-broken3" @@ -230,7 +224,7 @@ /turf/simulated/floor/wood, /area/ruin/space/unpowered) "aP" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/structure/window/reinforced{ dir = 8 }, @@ -296,7 +290,7 @@ /area/ruin/space/unpowered) "bc" = ( /obj/effect/decal/remains/human, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/food/snacks/meat/monkey, /turf/simulated/floor/plating, /area/ruin/space/unpowered) "bd" = ( @@ -307,10 +301,7 @@ }, /area/ruin/space/unpowered) "be" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/wood, /area/ruin/space/unpowered) @@ -321,7 +312,7 @@ /turf/simulated/floor/plating, /area/ruin/space/unpowered) "bg" = ( -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/food/snacks/meat/monkey, /turf/simulated/floor/plating, /area/ruin/space/unpowered) "bh" = ( @@ -337,7 +328,7 @@ }, /area/ruin/space/unpowered) "bj" = ( -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel{ icon_state = "chapel" @@ -438,7 +429,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/window/reinforced, +/obj/structure/window/plasmareinforced, /turf/simulated/floor/mineral/plasma, /area/ruin/space/unpowered) "bC" = ( @@ -477,14 +468,14 @@ /turf/simulated/floor/plating/airless, /area/ruin/space/unpowered) "bH" = ( -/turf/simulated/wall/mineral/titanium, +/turf/simulated/wall/mineral/titanium/nodecon, /area/space/nearstation) "bI" = ( -/obj/structure/window/reinforced, +/obj/structure/window/plasmareinforced, /turf/simulated/floor/mineral/plasma, /area/ruin/space/unpowered) "bJ" = ( -/obj/structure/window/reinforced{ +/obj/structure/window/plasmareinforced{ dir = 4 }, /turf/simulated/floor/mineral/plasma, @@ -494,15 +485,14 @@ /turf/space, /area/ruin/space/unpowered) "bL" = ( -/obj/structure/window/reinforced{ +/obj/structure/window/plasmareinforced{ dir = 8 }, /turf/simulated/floor/mineral/plasma, /area/ruin/space/unpowered) "bM" = ( -/obj/structure/window/reinforced{ - dir = 1; - layer = 2.9 +/obj/structure/window/plasmareinforced{ + dir = 1 }, /turf/simulated/floor/mineral/plasma, /area/ruin/space/unpowered) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm index 6314508d4d22..ce3aad34e220 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm @@ -57,9 +57,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /obj/structure/rack, @@ -225,8 +223,8 @@ /area/ruin/space/wreck_cargoship) "jm" = ( /obj/item/toy/plushie/ipcplushie, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, /obj/item/paper/crumpled{ name = "unintelligible scribbles"; info = "toast... i must... the plushie..." @@ -411,9 +409,7 @@ /area/ruin/space/wreck_cargoship) "nH" = ( /obj/machinery/light/small, -/obj/machinery/power/apc/off_station/empty_charge{ - pixel_y = -24 - }, +/obj/machinery/power/apc/off_station/empty_charge/directional/south, /turf/simulated/floor/plating, /area/ruin/space/wreck_cargoship) "oE" = ( @@ -1116,7 +1112,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/structure/railing, @@ -1210,7 +1206,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/wreck_cargoship) "VF" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm index ad143c5af716..ccfb284c8eac 100644 --- a/_maps/map_files/RandomZLevels/beach.dmm +++ b/_maps/map_files/RandomZLevels/beach.dmm @@ -474,7 +474,7 @@ /area/awaymission/beach) "cX" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/awaymission/beach) "cY" = ( @@ -728,7 +728,7 @@ /turf/simulated/floor/mineral/titanium/blue, /area/awaymission/beach) "ec" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/mineral/titanium/blue, /area/awaymission/beach) "ed" = ( @@ -827,7 +827,7 @@ /area/awaymission/beach) "ev" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /turf/simulated/floor/beach/away/sand, /area/awaymission/beach) "ew" = ( diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index b05add31b3b5..9c21aef6a5d0 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -236,10 +236,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/north) "abJ" = ( @@ -548,11 +545,7 @@ /area/station/hallway/secondary/entry/south) "adb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange, /turf/simulated/floor/plasteel{ icon_regular_floor = "yellowsiding"; @@ -1138,19 +1131,6 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/ai) -"ahc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/starboard) "ahr" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -1345,12 +1325,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/machinery/newscaster{ pixel_y = -28; name = "south bump"; @@ -1968,11 +1943,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/security/prisonershuttle) @@ -2019,12 +1990,7 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/disposal/north) "amy" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -2622,7 +2588,7 @@ }, /obj/structure/railing, /turf/simulated/floor/plating/airless, -/area/space/nearstation) +/area/space/nearstation/disposals) "aqb" = ( /obj/machinery/door/airlock/maintenance{ name = "Disposals Maintenance" @@ -2677,7 +2643,7 @@ }, /obj/structure/railing, /turf/simulated/floor/plating/airless, -/area/space/nearstation) +/area/space/nearstation/disposals) "aqn" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -2733,7 +2699,7 @@ }, /obj/structure/railing, /turf/simulated/floor/plating/airless, -/area/space/nearstation) +/area/space/nearstation/disposals) "aqO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2832,11 +2798,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) "ars" = ( @@ -3088,7 +3050,7 @@ pixel_y = 24; name = "north bump" }, -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /turf/simulated/floor/wood, /area/station/command/office/hos) "ate" = ( @@ -3282,11 +3244,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -3900,7 +3858,7 @@ /area/station/turret_protected/aisat/interior) "axU" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /obj/item/radio{ pixel_x = 5 }, @@ -4014,11 +3972,7 @@ /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fore) "ayH" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -4083,11 +4037,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/stripes/asteroid/end, /turf/simulated/floor/plating{ icon_state = "asteroidplating" @@ -4168,11 +4118,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -4230,9 +4176,7 @@ /turf/simulated/wall, /area/station/command/office/hos) "azX" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/item/radio/intercom{ pixel_y = -28; name = "custom placement" @@ -4326,11 +4270,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -4364,6 +4304,11 @@ /obj/structure/sign/pods, /turf/simulated/wall, /area/station/maintenance/port) +"aBg" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/miningcar, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "aBj" = ( /obj/machinery/newscaster/security_unit{ dir = 8; @@ -4985,11 +4930,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -5027,11 +4968,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/turf_decal/stripes/end{ dir = 4 }, @@ -5088,7 +5025,7 @@ locked = 1; name = "Cargo Docking Hatch" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle, /turf/simulated/floor/plating, /area/station/supply/office) "aGx" = ( @@ -5303,6 +5240,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/public/locker) +"aIi" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/maintenance/disposal/external/southeast) "aIv" = ( /obj/machinery/door/window/classic/reversed{ dir = 1 @@ -5391,9 +5334,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, @@ -5461,11 +5402,7 @@ }, /area/station/public/sleep/secondary) "aJo" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -5488,10 +5425,10 @@ /turf/simulated/floor/plating, /area/station/supply/miningdock) "aJz" = ( -/obj/structure/closet, /obj/structure/window/reinforced{ dir = 4 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -5514,7 +5451,7 @@ /area/station/supply/miningdock) "aJM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -5659,9 +5596,7 @@ }, /area/station/security/main) "aKx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -5683,7 +5618,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "aKI" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 4 }, @@ -5748,11 +5683,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -5977,7 +5908,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/electrical_shop) "aMS" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 4 }, @@ -6278,10 +6209,7 @@ /area/station/security/warden) "aOJ" = ( /obj/structure/cable/orange, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkred" @@ -6312,7 +6240,7 @@ }, /area/station/security/armory/secure) "aOO" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -6358,11 +6286,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore2) "aPd" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -6476,9 +6400,7 @@ }, /area/station/engineering/atmos) "aPA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -6557,9 +6479,7 @@ /area/station/security/lobby) "aPW" = ( /obj/machinery/light, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -6764,6 +6684,11 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) +"aRh" = ( +/obj/structure/lattice, +/obj/structure/railing, +/turf/space, +/area/space/nearstation/disposals) "aRi" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/multi_tile/glass{ @@ -6779,11 +6704,7 @@ }, /area/station/turret_protected/aisat/interior/secondary) "aRn" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -6869,9 +6790,7 @@ /area/station/public/locker) "aSf" = ( /obj/machinery/light, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -6989,11 +6908,7 @@ }, /area/station/command/bridge) "aSG" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -7780,10 +7695,7 @@ }, /area/station/telecomms/computer) "aWT" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -8058,10 +7970,7 @@ /turf/simulated/wall, /area/mine/unexplored/cere/engineering) "aYk" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -8291,23 +8200,6 @@ "aZu" = ( /turf/simulated/floor/plating/asteroid/ancient/airless, /area/mine/unexplored/cere/medical) -"aZD" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = 32 - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/starboard) "aZF" = ( /turf/simulated/wall, /area/station/maintenance/port2) @@ -8512,11 +8404,7 @@ /turf/simulated/floor/transparent/glass/reinforced, /area/station/maintenance/port) "bax" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -8594,11 +8482,7 @@ /turf/simulated/floor/grass/jungle, /area/station/hallway/secondary/garden) "baK" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -8752,9 +8636,7 @@ c_tag = "Rehabilitation Dome Lobby East"; dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central) "bbS" = ( @@ -8882,9 +8764,7 @@ /turf/simulated/floor/grass/jungle, /area/station/hallway/secondary/garden) "bcy" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/light/small{ dir = 1 }, @@ -9039,12 +8919,7 @@ /turf/simulated/floor/plating, /area/station/supply/office) "bcV" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -9629,9 +9504,7 @@ c_tag = "Rehabilitation Dome Lobby South"; dir = 1 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central) "bfW" = ( @@ -9914,9 +9787,7 @@ c_tag = "Dorm Commons North"; dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/economy/vending/wallmed{ name = "Emergency NanoMed"; pixel_y = 28 @@ -10398,18 +10269,6 @@ icon_state = "white" }, /area/station/medical/surgery/primary) -"bjL" = ( -/obj/structure/table, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/reagent_containers/iv_bag/salglu, -/obj/machinery/alarm{ - pixel_y = 24; - name = "north bump" - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/station/medical/surgery/primary) "bjN" = ( /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, @@ -10557,30 +10416,14 @@ }, /area/station/medical/morgue) "bkI" = ( -/obj/structure/table/tray, -/obj/item/scalpel, -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, /obj/machinery/light{ dir = 4 }, +/obj/item/storage/surgical_tray, +/obj/structure/table/tray, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -10618,11 +10461,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -10989,9 +10828,7 @@ pixel_x = 24; name = "east bump" }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "neutral" @@ -11093,11 +10930,7 @@ /turf/simulated/floor/plasteel/white, /area/station/medical/virology) "bmX" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/bodyscanner{ dir = 4 }, @@ -11254,7 +11087,6 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/starboard) "bnv" = ( -/obj/structure/closet, /obj/structure/window/reinforced{ dir = 4 }, @@ -11262,17 +11094,18 @@ pixel_y = -28; name = "custom placement" }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/security/evidence) "bnw" = ( -/obj/structure/closet, /obj/machinery/light_switch{ dir = 1; pixel_y = -24; name = "south bump" }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -11333,11 +11166,7 @@ }, /area/station/public/storage/tools) "bnM" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/stripes/asteroid/end, /obj/structure/cable/orange{ d2 = 2; @@ -12007,10 +11836,7 @@ }, /area/station/medical/virology) "brh" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -12082,9 +11908,7 @@ }, /area/station/supply/office) "brs" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -12379,6 +12203,12 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) +"bsy" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "bsz" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/railing{ @@ -12512,6 +12342,13 @@ "bti" = ( /turf/simulated/floor/carpet/blue, /area/station/command/office/hop) +"btj" = ( +/obj/machinery/atmospherics/portable/canister/air, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "btn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -13260,6 +13097,12 @@ }, /turf/simulated/floor/plating, /area/station/engineering/break_room) +"bwl" = ( +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "bwm" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -13504,9 +13347,7 @@ }, /area/station/engineering/break_room) "bxv" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellowcorners" @@ -13584,9 +13425,7 @@ /area/station/command/office/hop) "bxG" = ( /obj/structure/disposalpipe/segment, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellowcorners" @@ -15243,11 +15082,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint2) "bEP" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15323,11 +15158,7 @@ "bFb" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -15865,11 +15696,7 @@ }, /area/station/maintenance/asmaint) "bGk" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -16294,9 +16121,7 @@ name = "Atmospherics Desk Shutters"; pixel_x = 24 }, -/obj/item/kirbyplants{ - icon_state = "plant-13" - }, +/obj/item/kirbyplants/plant13, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellow" @@ -16457,11 +16282,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -16746,7 +16567,7 @@ /obj/machinery/computer/general_air_control{ dir = 4; name = "Tank Monitor"; - autolink_sensors = list("n2_sensor"="Nitrogen","o2_sensor"="Oxygen","co2_sensor"="Carbon Dioxide","tox_sensor"="Toxins","n2o_sensor"="Nitrous Oxide","waste_sensor"="Gas Mix Tank") + autolink_sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank") }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) @@ -17609,7 +17430,7 @@ }, /area/station/engineering/atmos) "bOu" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -17844,14 +17665,14 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/engineering/atmos) "bPz" = ( /obj/machinery/light, -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /obj/machinery/computer/guestpass{ pixel_x = -28; pixel_y = null @@ -17891,11 +17712,7 @@ /turf/simulated/floor/plasteel, /area/station/command/office/ce) "bPD" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -17922,9 +17739,7 @@ /turf/simulated/floor/plasteel, /area/station/command/office/ce) "bPE" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -18002,11 +17817,7 @@ }, /area/station/engineering/smes) "bPN" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -18485,21 +18296,21 @@ }, /area/station/engineering/smes) "bRK" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkyellow" }, /area/station/engineering/smes) "bRL" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/machinery/light, /turf/simulated/floor/plasteel{ icon_state = "darkyellow" }, /area/station/engineering/smes) "bRM" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkyellow" @@ -19021,9 +18832,7 @@ }, /area/station/service/chapel) "bTX" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/recharger/wallcharger{ pixel_y = -25 }, @@ -19368,7 +19177,7 @@ }, /area/station/security/armory/secure) "bVp" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 4 }, @@ -19473,7 +19282,7 @@ inlet_injector_autolink_id = "co2_in"; name = "Carbon Dioxide Supply Control"; outlet_vent_autolink_id = "co2_out"; - autolink_sensors = list("co2_sensor"="Tank"); + autolink_sensors = list("co2_sensor" = "Tank"); dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible/green{ @@ -19652,7 +19461,7 @@ inlet_injector_autolink_id = "waste_in"; name = "Gas Mix Tank Control"; outlet_vent_autolink_id = "waste_out"; - autolink_sensors = list("waste_sensor"="Tank") + autolink_sensors = list("waste_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 @@ -20066,9 +19875,7 @@ }, /area/station/maintenance/fore2) "bYn" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -20082,9 +19889,7 @@ /turf/simulated/wall, /area/station/maintenance/disposal/south) "bYG" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -20140,11 +19945,7 @@ pixel_y = 6 }, /obj/item/storage/toolbox/electrical, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -20282,11 +20083,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -20628,11 +20425,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -20863,11 +20656,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "cet" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -20947,9 +20736,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "ceR" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ icon_state = "bcircuit" }, @@ -21216,12 +21003,6 @@ name = "custom placement" }, /obj/structure/table, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/surgicaldrill, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -21474,6 +21255,10 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/fore/west) +"chW" = ( +/obj/effect/turf_decal/delivery/hollow, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "chX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -21922,7 +21707,7 @@ /area/station/service/hydroponics) "cld" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/wood, /area/station/maintenance/starboard) "clh" = ( @@ -22285,11 +22070,7 @@ }, /area/station/maintenance/fsmaint) "cnt" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -22387,9 +22168,7 @@ /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_2) "cnT" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitepurple" @@ -23001,9 +22780,7 @@ }, /area/station/science/hallway) "cry" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -23069,7 +22846,7 @@ }, /area/station/security/warden) "crV" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -23314,7 +23091,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /turf/simulated/floor/wood, @@ -23391,11 +23168,7 @@ }, /area/station/maintenance/apmaint) "cuz" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -23661,6 +23434,25 @@ /obj/machinery/chem_heater, /turf/simulated/floor/engine, /area/station/science/misc_lab) +"cvT" = ( +/obj/structure/table, +/obj/machinery/alarm{ + pixel_y = 24; + name = "north bump" + }, +/obj/item/reagent_containers/iv_bag/salglu, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/medical/surgery/secondary) +"cvV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "cvW" = ( /mob/living/simple_animal/slime, /turf/simulated/floor/engine, @@ -23752,11 +23544,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange, /turf/simulated/floor/plasteel{ dir = 4; @@ -24112,11 +23900,7 @@ }, /area/station/hallway/spacebridge/cargocom) "czA" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -24889,9 +24673,10 @@ "cEm" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; - departmentType = 2; - name = "Quartermaster RC"; - pixel_x = 30 + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_x = 30; + announcementConsole = 1 }, /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ @@ -24978,6 +24763,12 @@ /obj/machinery/computer/guestpass{ pixel_y = -28 }, +/obj/machinery/requests_console{ + department = "Warden"; + departmentType = 7; + name = "Warden's Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkred" @@ -25123,11 +24914,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -25458,6 +25245,10 @@ icon_state = "darkblue" }, /area/station/command/bridge) +"cHb" = ( +/obj/effect/spawner/airlock, +/turf/simulated/wall, +/area/station/maintenance/disposal/east) "cHh" = ( /obj/structure/cable/orange{ d1 = 4; @@ -25686,11 +25477,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/effect/turf_decal/stripes/end{ dir = 8 }, @@ -25891,11 +25678,7 @@ }, /area/station/hallway/primary/central) "cJf" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -25925,11 +25708,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -26243,11 +26022,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -26381,8 +26156,8 @@ locked = 1; name = "Cargo Docking Hatch" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle, /turf/simulated/floor/plating, /area/station/supply/office) "cLz" = ( @@ -26570,6 +26345,15 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"cMv" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "cMw" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -26687,11 +26471,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -26779,7 +26559,7 @@ /area/station/maintenance/port) "cNg" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /obj/structure/sign/poster/official/the_owl{ pixel_y = 32 }, @@ -28137,11 +27917,7 @@ /obj/effect/turf_decal/stripes/asteroid/end{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plating, /area/station/legal/lawoffice) "cSW" = ( @@ -28655,11 +28431,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/turbine) @@ -29864,7 +29636,7 @@ pixel_x = -24; name = "custom placement" }, -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 8 @@ -29971,7 +29743,7 @@ inlet_injector_autolink_id = "n2_in"; name = "Nitrogen Supply Control"; outlet_vent_autolink_id = "n2_out"; - autolink_sensors = list("n2_sensor"="Tank") + autolink_sensors = list("n2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/structure/window/reinforced{ @@ -30047,7 +29819,7 @@ inlet_injector_autolink_id = "o2_in"; name = "Oxygen Supply Control"; outlet_vent_autolink_id = "o2_out"; - autolink_sensors = list("o2_sensor"="Tank") + autolink_sensors = list("o2_sensor" = "Tank") }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/structure/window/reinforced{ @@ -30199,7 +29971,7 @@ name = "Mixed Air Supply Control"; outlet_vent_autolink_id = "air_out"; outlet_setting = 2000; - autolink_sensors = list("air_sensor"="Tank") + autolink_sensors = list("air_sensor" = "Tank") }, /obj/structure/window/reinforced{ dir = 8 @@ -30251,7 +30023,7 @@ inlet_injector_autolink_id = "tox_in"; name = "Toxin Supply Control"; outlet_vent_autolink_id = "tox_out"; - autolink_sensors = list("tox_sensor"="Tank") + autolink_sensors = list("tox_sensor" = "Tank") }, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel, @@ -30286,7 +30058,7 @@ inlet_injector_autolink_id = "n2o_in"; name = "Nitrous Oxide Supply Control"; outlet_vent_autolink_id = "n2o_out"; - autolink_sensors = list("n2o_sensor"="Tank") + autolink_sensors = list("n2o_sensor" = "Tank") }, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel, @@ -30429,9 +30201,10 @@ "dgl" = ( /obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel{ icon_state = "darkbrownfull" }, @@ -30589,6 +30362,12 @@ icon_state = "darkbrown" }, /area/station/supply/office) +"dhq" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "dhr" = ( /obj/item/solar_assembly, /obj/item/stack/sheet/glass, @@ -30776,10 +30555,7 @@ }, /area/station/command/bridge) "dji" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/effect/turf_decal/stripes/end{ dir = 1 }, @@ -31115,9 +30891,7 @@ }, /area/station/public/quantum/cargo) "dkK" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -31245,11 +31019,7 @@ }, /area/station/security/lobby) "dlq" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -31373,7 +31143,7 @@ /turf/simulated/wall/r_wall, /area/station/hallway/primary/fore) "dmB" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, /turf/simulated/floor/plasteel{ @@ -32092,10 +31862,6 @@ /obj/item/stock_parts/micro_laser/high, /obj/item/stock_parts/micro_laser/high, /obj/item/stock_parts/micro_laser/high, -/obj/machinery/requests_console{ - department = "Tech storage"; - pixel_y = -32 - }, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) "drr" = ( @@ -32168,11 +31934,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -32645,7 +32407,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "duk" = ( -/obj/structure/closet, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -32719,11 +32481,7 @@ }, /area/station/hallway/primary/fore) "duF" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -32804,13 +32562,6 @@ }, /turf/simulated/floor/plasteel, /area/station/command/office/hop) -"dvc" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/plating/airless, -/area/station/maintenance/disposal/external/east) "dvd" = ( /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; @@ -32978,11 +32729,7 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/disposal/northwest) "dvT" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -34049,11 +33796,7 @@ }, /area/station/medical/medbay) "dBq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -34254,11 +33997,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -34372,6 +34111,11 @@ /obj/item/clothing/gloves/color/yellow, /obj/item/t_scanner, /obj/item/multitool, +/obj/machinery/requests_console{ + department = "Tech Storage"; + name = "Tech Storage Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) "dDB" = ( @@ -34516,6 +34260,18 @@ icon_state = "asteroidplating" }, /area/station/hallway/spacebridge/servsci) +"dFD" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "dFU" = ( /obj/structure/table, /obj/machinery/recharger, @@ -34860,9 +34616,7 @@ }, /area/station/hallway/primary/fore/west) "dKY" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/light/small{ dir = 1 }, @@ -34937,10 +34691,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -35093,6 +34844,20 @@ /obj/structure/closet/firecloset/full, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) +"dOa" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/east) "dOb" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -35259,10 +35024,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "dQv" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -35409,11 +35171,7 @@ }, /area/station/hallway/primary/fore) "dSA" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -35540,11 +35298,7 @@ }, /area/station/security/brig) "dUM" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -35956,13 +35710,6 @@ /obj/structure/girder, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"edM" = ( -/obj/structure/disposalpipe/segment/corner, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "edT" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -36053,10 +35800,7 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -36129,14 +35873,6 @@ icon_state = "red" }, /area/station/hallway/secondary/exit) -"ehH" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/airless, -/area/station/maintenance/disposal/external/east) "ehV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -36485,11 +36221,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -36849,11 +36581,7 @@ pixel_y = -24; name = "south bump" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -37404,10 +37132,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "eGS" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/light/small{ dir = 8 }, @@ -37571,10 +37296,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "eJF" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -37825,18 +37547,6 @@ }, /turf/simulated/floor/plating/asteroid/ancient/airless, /area/mine/unexplored/cere/cargo) -"eNW" = ( -/obj/structure/cable/orange{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "eOf" = ( /obj/structure/chair/sofa/corp, /turf/simulated/floor/plasteel, @@ -37907,10 +37617,7 @@ }, /area/station/hallway/spacebridge/scidock) "ePG" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 1 }, @@ -37920,9 +37627,7 @@ }, /area/station/public/vacant_office) "eQt" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -37941,11 +37646,7 @@ /turf/simulated/wall, /area/station/maintenance/apmaint) "eRT" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -38229,19 +37930,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, /area/station/service/bar) "eXY" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -38383,7 +38078,7 @@ /area/station/hallway/primary/port/south) "eZY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/lighter/zippo/black, /turf/simulated/floor/carpet/black, /area/station/service/chapel) @@ -38807,7 +38502,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space/nearstation) +/area/space/nearstation/disposals) "fka" = ( /obj/structure/cable{ d1 = 2; @@ -39451,6 +39146,11 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) +"fwi" = ( +/obj/structure/railing, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation/disposals) "fwJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -39662,6 +39362,12 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/office) +"fBr" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/spawner/random_spawners/dirt_frequent, +/obj/machinery/door/airlock/maintenance/glass, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "fCc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -39742,6 +39448,19 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/north) +"fEe" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "fEl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 8 @@ -39894,11 +39613,7 @@ name = "Gas to Chamber"; dir = 1 }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_x = 24; +/obj/machinery/power/apc/critical/directional/east{ shock_proof = 1 }, /turf/simulated/floor/engine, @@ -40003,7 +39718,7 @@ /obj/machinery/door/airlock/mining{ name = "Cargo Warehouse" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel{ icon_state = "darkbrownfull" }, @@ -40387,6 +40102,11 @@ icon_state = "darkblue" }, /area/station/command/bridge) +"fPZ" = ( +/obj/item/stack/ore/glass, +/obj/effect/turf_decal/box, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "fQd" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -40545,6 +40265,25 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/station/supply/office) +"fSN" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_y = 32 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "fSQ" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access" @@ -40672,9 +40411,7 @@ }, /area/station/medical/cloning) "fUT" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" @@ -40776,6 +40513,12 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) +"fXl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "fXo" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -40996,10 +40739,10 @@ /area/station/hallway/primary/starboard/south) "fZO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = 10 }, -/obj/item/reagent_containers/food/snacks/chips{ +/obj/item/food/snacks/chips{ pixel_x = -5 }, /obj/structure/railing, @@ -41220,6 +40963,9 @@ pixel_y = 28; name = "custom placement" }, +/obj/item/hand_labeler{ + pixel_y = 6 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -41731,12 +41477,17 @@ }, /area/station/maintenance/asmaint) "gpV" = ( -/obj/structure/disposalpipe/segment/corner, /obj/structure/cable/orange{ d1 = 1; d2 = 4; icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "gpZ" = ( @@ -41801,10 +41552,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -41946,9 +41694,7 @@ c_tag = "Telecomms Control Room"; dir = 6 }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -42247,11 +41993,7 @@ pixel_x = 3; pixel_y = 2 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -42538,7 +42280,7 @@ /area/station/hallway/primary/fore) "gDk" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /obj/item/paper_bin, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -42595,24 +42337,12 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"gEl" = ( -/turf/simulated/wall/r_wall, -/area/station/maintenance/disposal/external/east) "gEn" = ( /obj/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) -"gEv" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 4 - }, -/obj/machinery/atmospherics/portable/canister/air, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/starboard) "gEz" = ( /obj/structure/chair/office/light{ dir = 4 @@ -42628,11 +42358,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/stripes/end, /turf/simulated/floor/plating, @@ -42675,11 +42401,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 8 }, @@ -42951,12 +42673,6 @@ dir = 4 }, /obj/structure/table, -/obj/item/surgicaldrill, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -43159,11 +42875,7 @@ }, /area/station/turret_protected/ai_upload) "gNc" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -43316,9 +43028,7 @@ }, /area/station/hallway/primary/fore) "gQP" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/light_switch{ dir = 1; pixel_y = -24; @@ -43969,11 +43679,7 @@ layer = 4; pixel_y = 32 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -44146,11 +43852,7 @@ }, /area/station/science/robotics) "hfi" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/stripes/asteroid/end, /obj/structure/cable/orange{ d1 = 4; @@ -44270,6 +43972,24 @@ icon_state = "white" }, /area/station/science/misc_lab) +"hiA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/east) +"hiC" = ( +/obj/structure/lattice, +/turf/space, +/area/space/nearstation/disposals) "hiI" = ( /obj/structure/chair/sofa/corp{ dir = 8 @@ -44329,11 +44049,7 @@ }, /area/station/hallway/secondary/exit) "hjJ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -44390,11 +44106,7 @@ pixel_y = 32 }, /obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -44603,9 +44315,7 @@ }, /area/station/medical/medbay) "hoM" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/wood, /area/station/service/library) "hoU" = ( @@ -44881,9 +44591,7 @@ /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "htq" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -45198,11 +44906,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 4 @@ -45213,11 +44917,7 @@ }, /area/station/service/kitchen) "hzs" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -45369,9 +45069,7 @@ }, /area/station/supply/office) "hDf" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, @@ -45819,10 +45517,7 @@ /area/station/maintenance/storage) "hIU" = ( /obj/structure/cable/orange, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/wood{ icon_state = "wood-broken" }, @@ -45874,14 +45569,6 @@ icon_state = "dark" }, /area/station/service/hydroponics) -"hJX" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/random_spawners/dirt_often, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "hKc" = ( /obj/machinery/light/small{ dir = 4 @@ -46004,11 +45691,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -46193,11 +45876,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -46501,13 +46180,10 @@ }, /area/station/medical/storage/secondary) "hUN" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/unary/portables_connector{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ - name = "Starboard Asteroid Maintenance Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "hUO" = ( @@ -47169,11 +46845,7 @@ /turf/simulated/floor/wood, /area/station/service/bar) "ifx" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 4 }, @@ -47484,16 +47156,6 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/hallway/primary/fore) -"ilq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/wirecutters, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "ilR" = ( /obj/docking_port/stationary/whiteship{ dir = 8; @@ -47757,7 +47419,7 @@ /area/station/turret_protected/aisat/interior/secondary) "ipE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -48043,11 +47705,7 @@ /turf/simulated/wall, /area/station/hallway/primary/central) "isE" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -48174,11 +47832,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -48582,11 +48236,7 @@ }, /area/station/hallway/primary/port/south) "iBy" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -48635,11 +48285,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -48683,21 +48329,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating/airless, /area/station/maintenance/disposal/external/north) -"iDO" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/item/radio/intercom{ - pixel_y = 28; - name = "custom placement" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "iDY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -49101,11 +48732,7 @@ "iKs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/turf_decal/stripes/end{ dir = 4 }, @@ -49756,11 +49383,7 @@ /area/station/hallway/primary/port/east) "iVJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -49851,11 +49474,7 @@ dir = 1 }, /obj/effect/landmark/start/clown, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -50272,11 +49891,11 @@ }, /area/station/hallway/secondary/exit) "jcx" = ( -/obj/structure/closet, /obj/machinery/alarm{ pixel_y = 24; name = "north bump" }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -50318,12 +49937,17 @@ pixel_x = -32; pixel_y = 40 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -50439,7 +50063,7 @@ /area/space) "jgd" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -50504,11 +50128,6 @@ icon_state = "cafeteria" }, /area/station/medical/break_room) -"jhp" = ( -/obj/effect/turf_decal/stripes/line, -/obj/item/wrench, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "jht" = ( /obj/machinery/status_display{ layer = 4 @@ -50639,9 +50258,6 @@ network = list("SS13","RD") }, /obj/machinery/optable, -/obj/item/storage/firstaid/machine, -/obj/item/storage/firstaid/machine, -/obj/item/storage/backpack/duffel/medical, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkpurple" @@ -51201,7 +50817,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "jtF" = ( @@ -51210,13 +50826,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) -"jtJ" = ( -/obj/structure/disposalpipe/trunk, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "jtN" = ( /obj/structure/cable{ d1 = 4; @@ -51300,11 +50909,6 @@ }, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/maintcentral) -"juL" = ( -/obj/structure/railing, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation) "juY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -51587,13 +51191,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) -"jzL" = ( -/obj/machinery/conveyor/auto{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "jzO" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable/orange{ @@ -51802,11 +51399,7 @@ }, /area/station/maintenance/apmaint) "jCg" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -52027,6 +51620,13 @@ icon_state = "whitepurple" }, /area/station/science/hallway) +"jFx" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/wirecutters, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "jFG" = ( /obj/structure/closet/secure_closet/blueshield, /turf/simulated/floor/wood, @@ -52158,9 +51758,9 @@ /area/station/command/office/blueshield) "jHz" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/machinery/firealarm{ dir = 4; pixel_x = 24; @@ -53057,11 +52657,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "jWj" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) @@ -53342,6 +52938,13 @@ icon_state = "dark" }, /area/station/maintenance/disposal) +"kcc" = ( +/obj/machinery/light/small, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "kcw" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -53351,11 +52954,7 @@ }, /area/station/service/hydroponics) "kcF" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -53617,9 +53216,7 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "kgd" = ( -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -53810,18 +53407,18 @@ name = "Cargo Desk"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mining{ - dir = 1 - }, /obj/machinery/door/firedoor, /obj/item/desk_bell{ pixel_x = 7; pixel_y = 7; anchored = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mining{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "darkbrownfull" }, @@ -54024,7 +53621,7 @@ "knI" = ( /obj/structure/table, /obj/item/book/manual/wiki/chef_recipes, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -54337,7 +53934,7 @@ "ksD" = ( /obj/structure/safe, /obj/item/clothing/head/bearpelt, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/dice/d20{ desc = "A die with twenty sides. You feel absolutely normal while looking at this."; name = "Die of Mediocre Rolling Capability" @@ -54352,6 +53949,15 @@ icon_state = "bcircuit" }, /area/station/command/vault) +"ksG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/east) "ksK" = ( /obj/structure/cable/orange{ d1 = 4; @@ -54680,7 +54286,6 @@ "kxy" = ( /obj/structure/table, /obj/item/weldingtool/mini, -/obj/item/clothing/suit/space/eva, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southeast) "kxH" = ( @@ -54954,21 +54559,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/east) -"kBm" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/starboard) "kBo" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -55020,7 +54610,7 @@ "kCC" = ( /obj/structure/table, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -55105,11 +54695,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -55569,17 +55155,13 @@ }, /area/station/hallway/primary/port/south) "kMa" = ( -/obj/structure/table/tray, -/obj/item/robotanalyzer, -/obj/item/stack/medical/bruise_pack/advanced{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/storage/box/masks, -/obj/item/storage/box/bodybags, /obj/machinery/light{ dir = 4 }, +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/machine, +/obj/item/storage/firstaid/machine, +/obj/item/robotanalyzer, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkpurple" @@ -55736,12 +55318,12 @@ /area/station/engineering/control) "kNJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 8; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood, /area/station/command/office/ntrep) "kOb" = ( @@ -55825,9 +55407,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "kPx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/wood, /area/station/command/office/ntrep) "kQc" = ( @@ -55857,9 +55437,7 @@ /turf/simulated/floor/wood, /area/station/command/office/ntrep) "kQz" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkgreen" @@ -56030,6 +55608,15 @@ }, /turf/simulated/floor/plating, /area/station/medical/break_room) +"kTa" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "kTd" = ( /obj/machinery/door/poddoor{ density = 0; @@ -56174,12 +55761,12 @@ pixel_x = -24; name = "west bump" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -56301,12 +55888,7 @@ }, /area/station/hallway/primary/fore/east) "kVY" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -56390,12 +55972,12 @@ "kYz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -56751,6 +56333,10 @@ }, /turf/simulated/floor/engine, /area/station/engineering/control) +"lez" = ( +/obj/structure/railing, +/turf/space, +/area/space/nearstation/disposals) "leM" = ( /turf/simulated/wall, /area/station/hallway/spacebridge/sercom) @@ -56815,8 +56401,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "lfX" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkblue" @@ -56973,14 +56559,6 @@ /obj/structure/railing, /turf/space, /area/station/hallway/spacebridge/serveng) -"lhU" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/atmospherics/portable/canister/air, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "lhX" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -57090,7 +56668,7 @@ }, /area/station/service/barber) "liT" = ( -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/table/wood, /turf/simulated/floor/wood, /area/station/maintenance/gambling_den) @@ -57426,7 +57004,7 @@ pixel_x = 4; pixel_y = -4 }, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup{ +/obj/item/reagent_containers/drinks/trophy/bronze_cup{ name = "Rage Cage Champion" }, /turf/simulated/floor/plating/asteroid/ancient, @@ -57623,6 +57201,13 @@ icon_state = "whiteyellow" }, /area/station/science/robotics/chargebay) +"lqC" = ( +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, +/turf/simulated/floor/plasteel, +/area/station/maintenance/disposal/external/southeast) "lqP" = ( /obj/effect/turf_decal/stripes/corner, /obj/item/radio/intercom{ @@ -57637,14 +57222,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/entry) -"lra" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "lrd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -57811,18 +57388,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"lua" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "luv" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "process" @@ -58076,11 +57641,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -58127,6 +57688,10 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) +"lyl" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plasteel, +/area/station/maintenance/disposal/external/southeast) "lym" = ( /obj/structure/ore_box, /obj/effect/turf_decal/delivery, @@ -58215,6 +57780,9 @@ }, /turf/simulated/floor/transparent/glass/reinforced, /area/station/maintenance/fsmaint) +"lzf" = ( +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/east) "lzo" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "process" @@ -58374,11 +57942,6 @@ /turf/simulated/mineral/ancient/outer, /area/station/maintenance/auxsolarport) "lBr" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/light/small{ dir = 8 }, @@ -58426,9 +57989,7 @@ "lBJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel, /area/station/public/locker) "lBX" = ( @@ -58508,9 +58069,9 @@ }, /area/station/hallway/spacebridge/sercom) "lCV" = ( -/obj/structure/disposalpipe/segment/corner, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) @@ -58692,9 +58253,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/station/command/bridge) -"lGk" = ( -/turf/space, -/area/mine/unexplored/cere/civilian) "lHa" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -58710,6 +58268,9 @@ icon_state = "bcircuit" }, /area/station/command/vault) +"lHw" = ( +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "lHC" = ( /obj/item/flashlight/lantern, /turf/simulated/floor/plating{ @@ -58820,15 +58381,16 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/south) -"lJs" = ( -/obj/effect/spawner/random_spawners/wall_rusted_always, -/turf/simulated/wall, -/area/station/maintenance/disposal/external/east) "lJL" = ( /turf/simulated/floor/wood{ icon_state = "wood-broken3" }, /area/station/maintenance/asmaint) +"lJM" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "lJN" = ( /obj/structure/cable/orange{ d1 = 2; @@ -59143,7 +58705,7 @@ "lPU" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -59228,10 +58790,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 1 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /turf/simulated/floor/plasteel{ icon_state = "barber" @@ -59363,10 +58922,6 @@ }, /turf/simulated/wall, /area/station/hallway/primary/starboard/south) -"lSP" = ( -/obj/effect/spawner/airlock/e_to_w, -/turf/simulated/wall/r_wall, -/area/station/maintenance/disposal/external/east) "lSZ" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/disposalpipe/segment, @@ -59687,7 +59242,7 @@ /area/station/service/hydroponics) "lYT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/fried_vox, +/obj/item/food/snacks/fried_vox, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "lYX" = ( @@ -59850,6 +59405,17 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/north) +"mbr" = ( +/obj/structure/table, +/obj/item/reagent_containers/iv_bag/salglu, +/obj/machinery/alarm{ + pixel_y = 24; + name = "north bump" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/medical/surgery/primary) "mbw" = ( /obj/machinery/computer/crew{ dir = 1 @@ -59859,15 +59425,6 @@ icon_state = "whitebluefull" }, /area/station/medical/paramedic) -"mbI" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/space, -/area/space/nearstation) "mbM" = ( /obj/structure/window/reinforced{ dir = 8 @@ -61522,9 +61079,7 @@ pixel_y = 24; name = "north bump" }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/wood, /area/station/service/library) "mHk" = ( @@ -61565,7 +61120,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -62677,11 +62232,7 @@ }, /area/station/maintenance/asmaint) "mZP" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/airless, @@ -62795,11 +62346,11 @@ dir = 1; layer = 2.9 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -62874,11 +62425,7 @@ /turf/simulated/floor/plating, /area/station/command/office/rd) "ndn" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -63297,11 +62844,7 @@ }, /area/station/public/locker) "nkf" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -63363,13 +62906,6 @@ icon_state = "white" }, /area/station/medical/cloning) -"nll" = ( -/obj/machinery/disposal/deliveryChute, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/plating/airless, -/area/station/maintenance/disposal/external/east) "nln" = ( /obj/structure/cable/orange{ d1 = 2; @@ -63441,10 +62977,7 @@ /obj/effect/turf_decal/stripes/asteroid/end{ dir = 1 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -63466,11 +62999,7 @@ }, /area/station/hallway/spacebridge/sercom) "nna" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -64428,11 +63957,7 @@ }, /area/station/science/toxins/mixing) "nEh" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -65093,7 +64618,7 @@ pixel_y = 11 }, /turf/space, -/area/space/nearstation) +/area/space/nearstation/disposals) "nPG" = ( /obj/structure/cable{ d1 = 4; @@ -65225,10 +64750,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -65371,19 +64893,12 @@ /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) "nWt" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /turf/simulated/floor/plasteel, /area/station/science/toxins/launch) "nWA" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/turf_decal/stripes/end{ dir = 4 }, @@ -66235,6 +65750,22 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) +"olr" = ( +/obj/structure/table, +/obj/item/paper{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/paper{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "olz" = ( /obj/machinery/light/small{ dir = 4 @@ -66452,11 +65983,7 @@ }, /area/station/hallway/spacebridge/cargocom) "onY" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -66576,6 +66103,11 @@ "opl" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" @@ -66698,11 +66230,7 @@ /area/station/science/server/coldroom) "oqZ" = ( /obj/effect/turf_decal/stripes/end, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -67047,11 +66575,7 @@ /area/station/maintenance/portsolar) "oyo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable, /turf/simulated/floor/engine{ slowdown = -0.3 @@ -67140,10 +66664,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -67152,6 +66673,12 @@ /area/station/maintenance/storage) "ozW" = ( /obj/structure/closet/secure_closet/freezer/kitchen, +/obj/machinery/requests_console{ + department = "Kitchen"; + departmentType = 2; + name = "Kitchen Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -67264,6 +66791,12 @@ /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/metal/fifty, +/obj/machinery/requests_console{ + department = "Engineering"; + departmentType = 3; + name = "Engineering Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellow" @@ -67615,19 +67148,6 @@ icon_state = "whitebluecorner" }, /area/station/medical/storage/secondary) -"oJD" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/radio/intercom{ - pixel_y = 28; - name = "custom placement" - }, -/obj/effect/spawner/random_spawners/dirt_often, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "oJH" = ( /obj/structure/closet/crate, /obj/item/pickaxe/emergency, @@ -67643,10 +67163,11 @@ }, /area/station/service/hydroponics) "oKi" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 1 +/obj/machinery/door/airlock/maintenance{ + name = "Starboard Asteroid Maintenance Access" }, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable/orange{ @@ -67655,7 +67176,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/station/maintenance/starboard) +/area/station/maintenance/disposal/east) "oKk" = ( /obj/machinery/door/airlock/command{ name = "Expedition Access" @@ -67855,7 +67376,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 1 @@ -67920,10 +67441,7 @@ /turf/simulated/wall, /area/station/service/barber) "oOh" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -68054,11 +67572,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -68496,11 +68010,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -68652,15 +68162,6 @@ "oYZ" = ( /turf/simulated/floor/plasteel/white, /area/station/science/rnd) -"oZn" = ( -/obj/structure/grille/broken, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/portable/canister/air, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "oZo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68827,8 +68328,9 @@ /obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ icon_state = "darkbrownfull" }, @@ -68840,11 +68342,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -68953,7 +68451,7 @@ "per" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "peB" = ( @@ -69039,11 +68537,7 @@ /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/north) "pfM" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange, /turf/simulated/floor/transparent/glass/reinforced, /area/station/hallway/primary/starboard/north) @@ -69061,7 +68555,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/disposal/northeast) "pgO" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /turf/simulated/floor/plasteel{ @@ -69240,15 +68734,6 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) -"pjN" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/spawner/random_spawners/dirt_often, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "pjU" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/deliveryChute{ @@ -69384,11 +68869,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/dockmed) -"pmQ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "pmS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -69556,7 +69036,7 @@ /obj/machinery/computer/general_air_control{ dir = 8; name = "Distribution and Waste Monitor"; - autolink_sensors = list("mair_in_meter"="Mixed Air In","air_sensor"="Mixed Air Supply Tank","mair_out_meter"="Mixed Air Out","dloop_atm_meter"="Distribution Loop","wloop_atm_meter"="Waste Loop") + autolink_sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop") }, /obj/item/radio/intercom{ pixel_x = 28; @@ -69876,6 +69356,10 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) +"ptT" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "pue" = ( /obj/structure/cable/orange{ d1 = 2; @@ -70145,17 +69629,12 @@ /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) "pyz" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "pyE" = ( @@ -70501,11 +69980,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/security/range) "pEA" = ( @@ -70773,7 +70248,7 @@ }, /area/station/medical/morgue) "pII" = ( -/obj/machinery/suit_storage_unit/rd, +/obj/machinery/suit_storage_unit/rd/secure, /obj/machinery/alarm{ dir = 8; name = "east bump"; @@ -70824,7 +70299,7 @@ /turf/simulated/floor/wood, /area/station/service/clown) "pJS" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 8 @@ -70881,6 +70356,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -70919,13 +70399,6 @@ icon_state = "bcircuit" }, /area/station/turret_protected/ai_upload) -"pLe" = ( -/obj/machinery/conveyor/auto{ - dir = 4 - }, -/obj/structure/plasticflaps, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "pLh" = ( /obj/effect/landmark/start/cargo_technician, /obj/structure/disposalpipe/segment, @@ -71038,11 +70511,6 @@ }, /turf/simulated/floor/plating, /area/station/engineering/smes) -"pNi" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "pNo" = ( /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/carpet, @@ -71127,15 +70595,6 @@ icon_state = "dark" }, /area/station/command/bridge) -"pOG" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/space, -/area/space/nearstation) "pOU" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -71157,9 +70616,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "pOY" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -71294,16 +70751,12 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, +/obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkgreen" @@ -71468,12 +70921,6 @@ icon_state = "floorgrime" }, /area/station/security/permabrig) -"pUe" = ( -/obj/machinery/conveyor/auto{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "pUg" = ( /obj/structure/cable{ d1 = 1; @@ -71642,11 +71089,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -71675,7 +71118,7 @@ "pXp" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/item/food/snacks/donkpocket, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "pXq" = ( @@ -72222,7 +71665,7 @@ }, /area/station/engineering/gravitygenerator) "qeX" = ( -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/structure/table/wood, /obj/item/lighter/random, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, @@ -72272,7 +71715,7 @@ }, /area/station/security/checkpoint/secondary) "qgu" = ( -/obj/machinery/suit_storage_unit/clown, +/obj/machinery/suit_storage_unit/clown/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -72683,6 +72126,11 @@ pixel_x = 32; pixel_y = 32 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -72978,8 +72426,8 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -74545,15 +73993,15 @@ "qQb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -75156,6 +74604,12 @@ /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/port) +"rdl" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/spawner/random_spawners/dirt_frequent, +/obj/machinery/door/airlock/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "rdq" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -75230,11 +74684,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/central) -"rec" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/random_spawners/dirt_often, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "rez" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -75552,10 +75001,7 @@ }, /area/station/public/storage/tools) "rmq" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/effect/turf_decal/stripes/end{ dir = 1 }, @@ -75659,12 +75105,13 @@ /obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ icon_state = "darkbrownfull" }, @@ -75803,10 +75250,8 @@ /turf/simulated/floor/wood, /area/station/service/clown) "rpK" = ( -/obj/machinery/suit_storage_unit/cmo{ - name = "chief medical officer's suit storage unit" - }, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/suit_storage_unit/cmo/secure, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkblue" @@ -75925,24 +75370,8 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/aft/west) -"rrV" = ( -/obj/structure/table, -/obj/machinery/alarm{ - pixel_y = 24; - name = "north bump" - }, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/reagent_containers/iv_bag/salglu, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/station/medical/surgery/secondary) "rsj" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -75977,11 +75406,7 @@ /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "rtt" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 8 }, @@ -76318,16 +75743,16 @@ /turf/simulated/floor/carpet/black, /area/station/command/office/captain) "rAM" = ( -/obj/item/bonegel, -/obj/item/surgicaldrill, -/obj/item/bonesetter, -/obj/item/FixOVein, -/obj/item/cautery, -/obj/item/scalpel, -/obj/item/circular_saw, -/obj/item/hemostat, -/obj/item/retractor, -/obj/structure/table/tray, +/obj/structure/table/reinforced, +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, @@ -76336,6 +75761,11 @@ /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, /area/station/maintenance/fore2) +"rBc" = ( +/obj/effect/turf_decal/box, +/obj/item/stack/ore/plasma, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "rBg" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -76619,9 +76049,7 @@ /turf/simulated/floor/wood, /area/station/service/theatre) "rGm" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/light_switch{ dir = 4; pixel_x = -24; @@ -76668,7 +76096,7 @@ "rHk" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -76677,10 +76105,7 @@ /turf/simulated/floor/carpet, /area/station/security/detective) "rHo" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /turf/simulated/floor/plating, /area/station/maintenance/disposal/southwest) @@ -77251,6 +76676,10 @@ /obj/effect/spawner/airlock/e_to_w, /turf/simulated/wall, /area/station/hallway/primary/starboard/south) +"rQM" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "rQO" = ( /obj/structure/cable/orange{ d1 = 2; @@ -77278,27 +76707,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/scalpel, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/structure/table/tray, /obj/machinery/light{ dir = 8 }, +/obj/item/storage/surgical_tray, +/obj/structure/table/tray, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77352,11 +76765,7 @@ }, /area/station/engineering/atmos) "rRE" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -77467,6 +76876,11 @@ /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"rUd" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "rUo" = ( /obj/structure/cable/orange{ d1 = 4; @@ -77505,6 +76919,10 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southeast) +"rVj" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/east) "rVm" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -77558,19 +76976,9 @@ name = "Disposals" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/supply/general, /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint2) -"rVH" = ( -/obj/machinery/light/small, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "rVL" = ( /mob/living/simple_animal/mouse/gray, /turf/simulated/floor/plating/asteroid/ancient, @@ -77591,6 +76999,15 @@ "rWb" = ( /turf/simulated/mineral/ancient, /area/station/maintenance/fsmaint) +"rWp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "rWs" = ( /obj/machinery/light, /obj/structure/disposalpipe/segment{ @@ -77651,12 +77068,12 @@ "rYf" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -77913,12 +77330,6 @@ icon_state = "dark" }, /area/station/security/warden) -"sbG" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/space, -/area/space/nearstation) "scx" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, @@ -77939,11 +77350,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -78152,11 +77559,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /mob/living/simple_animal/hostile/retaliate/kangaroo{ name = "Darwin" }, @@ -78253,17 +77656,12 @@ }, /area/station/turret_protected/aisat/interior) "shk" = ( -/obj/structure/table/tray, /obj/item/clothing/mask/breath/medical, /obj/item/tank/internals/anesthetic, /obj/item/reagent_containers/spray/cleaner{ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner" }, -/obj/item/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, /obj/machinery/button/windowtint{ dir = 1; pixel_y = -24 @@ -78271,6 +77669,7 @@ /obj/structure/window/reinforced/polarized{ dir = 8 }, +/obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, @@ -78467,11 +77866,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -78636,10 +78031,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) -"smT" = ( -/obj/effect/spawner/airlock/w_to_e, -/turf/simulated/mineral/ancient, -/area/mine/unexplored/cere/medical) "smX" = ( /obj/machinery/door/window/classic/normal{ name = "Bar"; @@ -78769,11 +78160,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) @@ -78794,11 +78181,7 @@ /turf/simulated/wall, /area/station/hallway/secondary/entry) "srr" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_y = 24; +/obj/machinery/power/apc/critical/directional/north{ shock_proof = 1 }, /obj/structure/cable{ @@ -79328,7 +78711,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -79626,7 +79009,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 1 @@ -79841,23 +79224,6 @@ }, /turf/simulated/floor/grass/jungle, /area/station/hallway/secondary/garden) -"sGf" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) -"sGo" = ( -/obj/machinery/conveyor/auto{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "sGY" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -79980,10 +79346,7 @@ /turf/simulated/floor/plating, /area/station/command/office/rd) "sJY" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4; @@ -80038,6 +79401,8 @@ }, /area/station/hallway/spacebridge/sercom) "sLj" = ( +/obj/structure/table/reinforced, +/obj/item/storage/surgical_tray, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, @@ -80084,7 +79449,7 @@ dir = 8 }, /turf/space, -/area/space/nearstation) +/area/space/nearstation/disposals) "sMt" = ( /obj/structure/cable{ d1 = 1; @@ -80268,11 +79633,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -80321,11 +79682,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -80488,10 +79845,7 @@ }, /area/station/public/storage/tools) "sSj" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -80665,13 +80019,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/gambling_den) -"sUG" = ( -/obj/structure/grille/broken, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/east) "sUK" = ( /obj/machinery/conveyor/auto{ dir = 8 @@ -80703,8 +80050,8 @@ }, /area/station/legal/lawoffice) "sVv" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkblue" @@ -80868,9 +80215,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 9; @@ -81342,6 +80687,9 @@ icon_state = "neutralcorner" }, /area/station/hallway/secondary/entry/north) +"tgW" = ( +/turf/simulated/wall/r_wall, +/area/mine/unexplored/cere/orbiting) "thf" = ( /obj/structure/flora/ausbushes/sunnybush, /mob/living/simple_animal/chicken/clucky, @@ -81672,10 +81020,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -81696,7 +81041,7 @@ dir = 8 }, /turf/space, -/area/space/nearstation) +/area/space/nearstation/disposals) "tly" = ( /obj/structure/cable/orange{ d1 = 1; @@ -81718,11 +81063,7 @@ /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) "tlN" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -81830,7 +81171,7 @@ "tnY" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/light_switch{ dir = 8; pixel_x = 24; @@ -81957,6 +81298,10 @@ icon_state = "asteroidplating" }, /area/station/maintenance/asmaint) +"tqc" = ( +/obj/structure/chair, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "tqm" = ( /obj/structure/disposalpipe/sortjunction/reversed{ dir = 1; @@ -82135,11 +81480,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -82556,15 +81897,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/east) -"tBd" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/deliveryChute{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "tBo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -82638,11 +81970,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -82654,9 +81982,7 @@ }, /area/station/engineering/gravitygenerator) "tCV" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, @@ -82959,10 +82285,7 @@ /area/station/engineering/control) "tJd" = ( /obj/structure/closet/crate/freezer/iv_storage, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -83333,12 +82656,6 @@ icon_state = "redcorner" }, /area/station/security/main) -"tRT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "tRV" = ( /obj/machinery/door/airlock/medical/glass, /obj/effect/mapping_helpers/airlock/autoname, @@ -83374,19 +82691,20 @@ icon_state = "dark" }, /area/station/service/expedition) -"tTD" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/lootdrop/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "tTE" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, /turf/simulated/floor/wood, /area/station/service/library) +"tTF" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/obj/machinery/power/apc/directional/north, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "tTH" = ( /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/grass, @@ -84085,6 +83403,13 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) +"udx" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/plasticflaps, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "uep" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plating, @@ -84224,11 +83549,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -84759,11 +84084,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel/freezer, /area/station/public/toilet) "upd" = ( @@ -84967,10 +84288,7 @@ }, /area/station/maintenance/disposal) "urU" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -85337,11 +84655,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) "uxM" = ( @@ -85536,7 +84850,7 @@ }, /area/station/medical/virology) "uBe" = ( -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /turf/simulated/floor/wood, /area/station/command/office/captain) "uBs" = ( @@ -85571,6 +84885,9 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "uBC" = ( @@ -85587,9 +84904,7 @@ /turf/simulated/floor/plating, /area/station/security/warden) "uBY" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel{ icon_state = "whitegreen" }, @@ -86183,11 +85498,7 @@ }, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/multitool, /turf/simulated/floor/plasteel{ dir = 8; @@ -86361,11 +85672,7 @@ /obj/structure/table/wood, /obj/item/storage/bible, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -86387,11 +85694,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/stripes/asteroid/end, /obj/structure/cable/orange{ d2 = 8; @@ -87114,6 +86417,11 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) +"vap" = ( +/obj/item/stack/ore/iron, +/obj/effect/turf_decal/box, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "vav" = ( /obj/machinery/door/airlock{ name = "Crematorium" @@ -87187,12 +86495,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) -"vbl" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/girder, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/east) "vbn" = ( /obj/structure/disposalpipe/junction/reversed, /turf/simulated/floor/plating, @@ -87253,11 +86555,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable, /turf/simulated/floor/plating, /area/station/hallway/primary/aft/west) @@ -87277,11 +86575,11 @@ /obj/machinery/door/airlock/glass{ name = "Disposals" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -87343,11 +86641,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "vdF" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -87360,10 +86654,7 @@ }, /area/station/medical/virology) "vdN" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/effect/turf_decal/stripes/end{ dir = 1 }, @@ -87512,6 +86803,15 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/electrical_shop) +"vfN" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "vfQ" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, @@ -87645,7 +86945,7 @@ }, /area/station/maintenance/asmaint) "vjI" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -87811,9 +87111,7 @@ pixel_x = 24; name = "east bump" }, -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkpurple" @@ -88012,7 +87310,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "vpt" = ( @@ -88038,15 +87336,6 @@ }, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) -"vpA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "vpB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -88284,11 +87573,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southwest) @@ -88582,9 +87867,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore2) "vwo" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/light{ dir = 1 }, @@ -88634,6 +87917,15 @@ icon_state = "redyellowfull" }, /area/station/service/bar) +"vxH" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/space, +/area/space/nearstation) "vxJ" = ( /obj/structure/cable/orange{ d1 = 4; @@ -88944,21 +88236,8 @@ icon_state = "white" }, /area/station/science/misc_lab) -"vDy" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/space, -/area/space/nearstation) "vDK" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -88976,7 +88255,7 @@ /area/station/medical/medbay) "vDS" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /obj/machinery/door/window/classic/normal{ dir = 8; name = "Medical Reception" @@ -89115,8 +88394,8 @@ /area/station/hallway/primary/fore/east) "vFa" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/chili, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/chili, /obj/item/seeds/grape, /turf/simulated/floor/plasteel{ icon_state = "darkgreenfull" @@ -89347,9 +88626,7 @@ pixel_y = 24; name = "north bump" }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/wood, /area/station/legal/magistrate) "vIG" = ( @@ -89404,11 +88681,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -90511,13 +89784,6 @@ dir = 4 }, /area/station/medical/reception) -"wdb" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation) "wdl" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance" @@ -90813,11 +90079,7 @@ /turf/simulated/floor/plating, /area/station/supply/miningdock) "whS" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -91068,11 +90330,7 @@ }, /area/station/hallway/secondary/entry/north) "wkS" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/stripes/asteroid/end, /obj/structure/cable/orange{ d2 = 8; @@ -91407,6 +90665,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" @@ -91810,6 +91073,11 @@ }, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) +"wuV" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/box, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "wuW" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -91900,6 +91168,23 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/south) +"wwh" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkredcorners" + }, +/area/station/security/brig) "wwl" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -92052,6 +91337,23 @@ icon_state = "whiteblue" }, /area/station/medical/cloning) +"wxE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "escape" + }, +/area/station/hallway/secondary/entry) "wxI" = ( /obj/structure/morgue, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -92199,7 +91501,7 @@ /area/station/public/storage/tools) "wzA" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -92304,16 +91606,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) -"wAE" = ( -/obj/machinery/conveyor/auto{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/plasticflaps, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "wAG" = ( /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) @@ -92355,11 +91647,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/table, /obj/item/storage/fancy/donut_box, /turf/simulated/floor/plasteel{ @@ -92379,9 +91667,7 @@ pixel_x = 24; name = "east bump" }, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "neutral" @@ -92523,11 +91809,7 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "wDL" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 4 }, @@ -92568,15 +91850,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/south) -"wEk" = ( -/obj/machinery/light/small, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/southeast) "wEo" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -93436,6 +92709,10 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) +"wTe" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/external/southeast) "wTg" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -93699,12 +92976,6 @@ icon_state = "redcorner" }, /area/station/security/prison/cell_block/A) -"wYo" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/grille/broken, -/obj/effect/spawner/random_spawners/dirt_often, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "wYt" = ( /obj/machinery/light{ dir = 1 @@ -93726,19 +92997,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"wYO" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/starboard) "wYY" = ( /obj/machinery/door/airlock/public/glass{ name = "Walkway" @@ -93900,11 +93158,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/wood, /area/station/command/office/hos) "xaD" = ( @@ -93986,6 +93240,12 @@ icon_state = "whiteyellow" }, /area/station/medical/reception) +"xbH" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/disposal/east) "xbJ" = ( /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) @@ -94097,10 +93357,7 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "xdw" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange, /turf/simulated/floor/plating, /area/station/maintenance/disposal/south) @@ -94224,6 +93481,13 @@ /obj/structure/sink/puddle, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/gambling_den) +"xhf" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation/disposals) "xhk" = ( /turf/simulated/floor/carpet, /area/station/legal/courtroom) @@ -94299,11 +93563,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/clonepod, /turf/simulated/floor/plasteel{ dir = 4; @@ -94547,12 +93807,12 @@ pixel_x = -24; name = "west bump" }, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/item/clothing/head/that{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/table/wood, /turf/simulated/floor/wood, /area/station/service/bar) @@ -95066,10 +94326,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar/aft) -"xxs" = ( -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "xxt" = ( /obj/structure/cable{ d1 = 2; @@ -95163,8 +94419,8 @@ /turf/simulated/floor/wood, /area/station/service/bar) "xyF" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, /obj/effect/turf_decal/delivery/hollow, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -95364,6 +94620,12 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) +"xBm" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/space, +/area/space/nearstation/disposals) "xBq" = ( /obj/structure/cable{ d1 = 1; @@ -96006,9 +95268,7 @@ pixel_y = 24; name = "north bump" }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/item/radio/intercom{ pixel_x = 28; name = "custom placement" @@ -96101,12 +95361,16 @@ /turf/simulated/floor/carpet/royalblack, /area/station/command/office/captain) "xNF" = ( -/obj/machinery/door/window{ +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/polarized, +/obj/machinery/door/window/classic/normal{ dir = 8; name = "Robotics Surgery" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -96250,7 +95514,7 @@ }, /obj/machinery/light, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ pixel_x = 9; pixel_y = 9 }, @@ -96745,6 +96009,14 @@ "xYM" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_1) +"xYV" = ( +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Locker Room Requests Console"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel, +/area/station/public/locker) "xYZ" = ( /turf/simulated/wall, /area/station/command/bridge) @@ -97203,10 +96475,7 @@ }, /area/station/medical/patients_rooms) "ygF" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -97254,12 +96523,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/asmaint) -"yhs" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/closet, -/turf/simulated/floor/plating, -/area/station/maintenance/disposal/external/east) "yhz" = ( /obj/structure/window/reinforced/polarized, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -97524,11 +96787,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -104059,19 +103318,19 @@ abd abd mBD abY -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf cXq vuL dom @@ -104316,19 +103575,19 @@ abe abe csP csP -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm fiK fiK don @@ -105124,60 +104383,60 @@ mAJ mAJ vUp nkV -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf utB tOo bZB @@ -105189,55 +104448,55 @@ rpk pWj tOo qtO -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf tlq -wdb -lzH +xhf +hiC rNK -lzH +hiC fjq nPu -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf tlq pjU qyy @@ -105338,8 +104597,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -105360,8 +104619,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi fDu lRR lRR @@ -105381,32 +104640,32 @@ mBK mBK mfN mfN -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm eYp eYp eYp eYp -sbG -sbG -sbG +xBm +xBm +xBm eYp eYp eYp @@ -105417,24 +104676,24 @@ hUU eYp eYp eYp -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm gRZ bTp ycr @@ -105446,56 +104705,56 @@ cCg gRZ gRZ gRZ -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm tlq -sbG -sbG +xBm +xBm rNK rNK rNK tlq sMa tlq -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm cZN cZN tmT @@ -105595,8 +104854,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -105617,8 +104876,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lRR @@ -105852,8 +105111,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -105874,8 +105133,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106109,8 +105368,8 @@ psw psw lBh rNK -euP -juL +lez +fwi rNK abE cRv @@ -106131,8 +105390,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106366,8 +105625,8 @@ iKu cdV lBh ciC -euP -juL +lez +fwi rNK cRv cRv @@ -106388,8 +105647,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106403,8 +105662,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106525,7 +105784,7 @@ rNK rNK rNK rNK -vDy +vxH cZN jVU qyy @@ -106645,8 +105904,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106660,8 +105919,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106782,7 +106041,7 @@ rNK rNK rNK rNK -vDy +vxH cZN gAG cZN @@ -106902,8 +106161,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -106917,8 +106176,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107039,9 +106298,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -107159,8 +106418,8 @@ cRv rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107174,8 +106433,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107296,9 +106555,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -107416,8 +106675,8 @@ cRv rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107431,8 +106690,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107553,9 +106812,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -107673,8 +106932,8 @@ cRv rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107688,8 +106947,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -107810,9 +107069,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -107930,8 +107189,8 @@ cRv rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -108067,9 +107326,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -108139,27 +107398,27 @@ abd abd mBD abY -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -sbG +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xBm xbm mBD aIR @@ -108324,9 +107583,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -108396,27 +107655,27 @@ abe abe xIX xIX -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm csP ciC ciC @@ -108581,9 +107840,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -108838,9 +108097,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -109095,9 +108354,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -109223,8 +108482,8 @@ dom imT vuL jQH -wdb -wdb +xhf +xhf led vUp lPs @@ -109352,9 +108611,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -109418,8 +108677,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -109480,8 +108739,8 @@ ucE gnu gnu fiK -sbG -sbG +xBm +xBm iCE iCE iCE @@ -109609,9 +108868,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -109675,8 +108934,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -109866,9 +109125,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -109932,8 +109191,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -110123,9 +109382,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -110189,8 +109448,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -110380,9 +109639,9 @@ rNK rNK rNK rNK -vDy -euP -juL +vxH +lez +fwi rNK rNK rNK @@ -110446,8 +109705,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -110638,8 +109897,8 @@ rNK rNK rNK ylg -euP -juL +lez +fwi rNK rNK rNK @@ -110703,8 +109962,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -110895,8 +110154,8 @@ rNK rNK rNK ylg -euP -juL +lez +fwi rNK rNK rNK @@ -110960,8 +110219,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -111153,7 +110412,7 @@ rNK cTh rLA bYF -juL +fwi rNK rNK rNK @@ -111217,8 +110476,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -111474,8 +110733,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -111731,8 +110990,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -111988,8 +111247,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -112245,8 +111504,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -112502,8 +111761,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -112759,8 +112018,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -113016,8 +112275,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -113273,8 +112532,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -113530,8 +112789,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -113787,8 +113046,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -113981,8 +113240,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -114044,8 +113303,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -114238,8 +113497,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -114301,8 +113560,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -114495,8 +113754,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -114558,8 +113817,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK cRv @@ -114752,8 +114011,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -114815,8 +114074,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK cRv @@ -115009,8 +114268,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -115072,8 +114331,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK cRv @@ -115266,8 +114525,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -115329,8 +114588,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK cRv @@ -115523,8 +114782,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -115586,8 +114845,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK afd @@ -115780,8 +115039,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -115843,8 +115102,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK fxt @@ -115876,7 +115135,7 @@ rZn rZn rZn rZn -rZn +wwh hRW owb rZn @@ -116037,8 +115296,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK lRR @@ -116100,8 +115359,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK pGX @@ -116294,8 +115553,8 @@ cdb oUM rNK rNK -euP -juL +lez +fwi rNK ayb lRR @@ -116357,8 +115616,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK pGX @@ -116551,8 +115810,8 @@ uyl tDF uyl uyl -euP -juL +lez +fwi rNK rNK lRR @@ -116614,8 +115873,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK pGX @@ -116808,8 +116067,8 @@ cCw wVS yex uyl -euP -juL +lez +fwi rNK lRR lRR @@ -116871,8 +116130,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK yed @@ -117065,8 +116324,8 @@ vRR sAB ipr uyl -euP -juL +lez +fwi rNK lRR jft @@ -117128,8 +116387,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv afd @@ -117322,8 +116581,8 @@ cCc cCw wzl uyl -euP -juL +lez +fwi rNK lRR jft @@ -117385,8 +116644,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv abW @@ -117579,8 +116838,8 @@ vpB cCw baa uyl -euP -juL +lez +fwi rNK lRR jft @@ -117642,8 +116901,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv abW @@ -117836,8 +117095,8 @@ vpB cCw hJz uyl -euP -juL +lez +fwi rNK lRR lRR @@ -117899,8 +117158,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv cRv abW @@ -118093,8 +117352,8 @@ nGd nXw oqO uyl -euP -juL +lez +fwi rNK rNK rNK @@ -118156,8 +117415,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv cRv abW @@ -118350,8 +117609,8 @@ rBg gGM gKO pon -euP -juL +lez +fwi rNK rNK rNK @@ -118413,8 +117672,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv abW @@ -118607,8 +117866,8 @@ pAr vlu qvk pon -euP -juL +lez +fwi rNK rNK rNK @@ -118670,8 +117929,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv cRv @@ -118864,8 +118123,8 @@ oqN hmk vDm pon -euP -juL +lez +fwi rNK rNK rNK @@ -118927,8 +118186,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK cRv @@ -119121,8 +118380,8 @@ gYT pqm hiu pon -euP -juL +lez +fwi rNK rNK rNK @@ -119184,8 +118443,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK cRv @@ -119378,8 +118637,8 @@ pon pon pon pon -euP -juL +lez +fwi rNK rNK rNK @@ -119441,8 +118700,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -119635,8 +118894,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -119892,8 +119151,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -120149,8 +119408,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -120406,8 +119665,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -120663,8 +119922,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -120920,8 +120179,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -121177,8 +120436,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -121434,8 +120693,8 @@ cdb rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -121691,8 +120950,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -121948,8 +121207,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -122017,16 +121276,16 @@ utt utt utt utt -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm shU lEz anW @@ -122205,8 +121464,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -122462,8 +121721,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -122719,8 +121978,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -122976,8 +122235,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -123233,8 +122492,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -123336,7 +122595,7 @@ pNo mmS ksl ksl -qSK +xYV aqC aqC fQm @@ -123490,8 +122749,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -123747,8 +123006,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -124004,8 +123263,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -124261,8 +123520,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -124518,8 +123777,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -124775,8 +124034,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -125032,8 +124291,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -125289,8 +124548,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -125546,8 +124805,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -125803,8 +125062,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -126060,8 +125319,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -126317,8 +125576,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -126574,8 +125833,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -126831,8 +126090,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -127088,8 +126347,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -127168,8 +126427,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -127345,8 +126604,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -127425,8 +126684,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -127602,8 +126861,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -127682,8 +126941,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -127859,8 +127118,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -127939,8 +127198,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -128116,8 +127375,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -128196,8 +127455,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -128373,8 +127632,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -128453,8 +127712,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -128630,8 +127889,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -128710,8 +127969,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -128887,8 +128146,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -128967,8 +128226,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -129144,8 +128403,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -129224,8 +128483,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -129401,8 +128660,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -129481,8 +128740,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -129658,8 +128917,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -129738,8 +128997,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -129915,8 +129174,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -129995,8 +129254,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -130172,8 +129431,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -130252,8 +129511,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -130429,8 +129688,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -130509,8 +129768,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv abW abW @@ -130686,8 +129945,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -130766,8 +130025,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv cRv abW @@ -130943,8 +130202,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -131023,8 +130282,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv abW @@ -131200,8 +130459,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -131280,8 +130539,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK cRv abW @@ -131457,8 +130716,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -131537,8 +130796,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv cRv abW @@ -131714,8 +130973,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -131794,8 +131053,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi cRv cRv cRv @@ -131971,8 +131230,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -132051,8 +131310,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi abE abE abE @@ -132228,8 +131487,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -132308,8 +131567,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK abE @@ -132485,8 +131744,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -132565,8 +131824,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -132742,8 +132001,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -132822,8 +132081,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -132999,8 +132258,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -133256,8 +132515,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -133513,8 +132772,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -133770,8 +133029,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -134027,8 +133286,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -134284,8 +133543,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -134541,8 +133800,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -134798,8 +134057,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -135055,8 +134314,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -135312,8 +134571,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -135569,8 +134828,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -135826,8 +135085,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -135910,8 +135169,8 @@ rNK rNK rNK rNK -ebk -juL +aRh +fwi rNK rNK rNK @@ -136083,8 +135342,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -136167,8 +135426,8 @@ rNK rNK rNK rNK -ebk -juL +aRh +fwi rNK rNK rNK @@ -136340,8 +135599,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -136424,8 +135683,8 @@ rNK rNK rNK rNK -ebk -juL +aRh +fwi rNK rNK rNK @@ -136597,8 +135856,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -136681,8 +135940,8 @@ ahF ahF rNK rNK -ebk -juL +aRh +fwi rNK rNK rNK @@ -136854,8 +136113,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -136939,7 +136198,7 @@ aaf ahF ahF pFc -juL +fwi rNK rNK wIp @@ -137111,8 +136370,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -137196,7 +136455,7 @@ ahF ahF ahF aaf -juL +fwi rNK rNK wIp @@ -137368,8 +136627,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -137453,7 +136712,7 @@ aaf aaf aaf pFc -juL +fwi rNK wIp wIp @@ -137625,8 +136884,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -137710,7 +136969,7 @@ aaf aaf ahF pFc -juL +fwi rNK wIp rRM @@ -137882,8 +137141,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -137967,7 +137226,7 @@ aaf aaf ahF aaf -juL +fwi rNK wIp rRM @@ -138139,8 +137398,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -138224,7 +137483,7 @@ aaf aaf aaf aaf -juL +fwi rNK wIp rRM @@ -138396,8 +137655,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -138481,7 +137740,7 @@ aaf aaf aaf aaf -juL +fwi rNK wIp rRM @@ -138653,8 +137912,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -138738,7 +137997,7 @@ aaf aaf aaf aaf -juL +fwi wIp wIp rRM @@ -138910,8 +138169,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -138995,7 +138254,7 @@ aaf aaf aaf aaf -juL +fwi wIp wIp atJ @@ -139167,8 +138426,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -139424,8 +138683,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK ayb rNK @@ -139681,8 +138940,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK jft ayb @@ -139938,8 +139197,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -140195,8 +139454,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -140452,8 +139711,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -140709,8 +139968,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -140966,8 +140225,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -141223,8 +140482,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -141480,8 +140739,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -141737,8 +140996,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -141994,8 +141253,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -142251,8 +141510,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -142508,8 +141767,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -142765,8 +142024,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -143022,8 +142281,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -143107,7 +142366,7 @@ aaf aaf aaf pFc -juL +fwi rNK ahF mmW @@ -143279,8 +142538,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -143364,7 +142623,7 @@ aaf aaf aaf pFc -juL +fwi rNK ahF mmW @@ -143504,7 +142763,7 @@ eJd rrt hNb pLr -daX +wxE djw sla xMQ @@ -143536,8 +142795,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -143620,8 +142879,8 @@ aaf aaf ahF ahF -euP -juL +lez +fwi rNK ahF aaf @@ -143793,8 +143052,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -143877,8 +143136,8 @@ aaf ahF aaf ahF -euP -juL +lez +fwi rNK ahF ahF @@ -144050,8 +143309,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -144134,8 +143393,8 @@ ahF ahF ahF aaf -euP -juL +lez +fwi rNK rzh rzh @@ -144307,8 +143566,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -144391,8 +143650,8 @@ rNK ahF rNK rNK -euP -juL +lez +fwi rzh rzh lCC @@ -144564,8 +143823,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -144821,8 +144080,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -145078,8 +144337,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -145302,7 +144561,7 @@ imG qds mJk iYL -dJG +oxO sSf nYM jUc @@ -145335,8 +144594,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -145592,8 +144851,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -145849,8 +145108,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -146106,8 +145365,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -146363,8 +145622,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -146620,8 +145879,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -146877,8 +146136,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -147028,7 +146287,7 @@ qGo bhp qCT dzw -bjL +mbr bkI cOO cPa @@ -147134,8 +146393,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -147391,8 +146650,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -147648,8 +146907,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -147732,8 +146991,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rzh rzh @@ -147905,8 +147164,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -147989,8 +147248,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -148162,8 +147421,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -148246,8 +147505,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -148419,8 +147678,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -148503,8 +147762,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -148570,7 +147829,7 @@ kuE gFg itf dzy -rrV +cvT rRb sin syk @@ -148676,8 +147935,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -148760,8 +148019,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -148933,8 +148192,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -149017,8 +148276,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -149190,8 +148449,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -149274,8 +148533,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -149447,8 +148706,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -149531,8 +148790,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK lzH @@ -149704,8 +148963,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK jft @@ -149788,7 +149047,7 @@ rNK rNK rNK rNK -euP +lez apY rNK rzh @@ -149961,8 +149220,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -150045,7 +149304,7 @@ rNK rNK rNK rNK -euP +lez aqM brX brX @@ -150151,10 +149410,10 @@ hFn aZN aZM aZM -gEv -fMl +aZM fMl fMl +aZN lzH lzH lzH @@ -150201,25 +149460,25 @@ rNK lzH ylg lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH rNK -euP -juL +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi rNK rNK rNK @@ -150302,7 +149561,7 @@ rNK rNK rNK rNK -euP +lez aqm rzh rzh @@ -150403,12 +149662,12 @@ vHH swV bbw itf -kBm -ahc -aZD -vFQ +dCS +xAV +gFg +gFg lBr -wYO +aZM aZM fMl aZu @@ -150456,27 +149715,27 @@ rNK rNK rNK lzH -pOG -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -cBw -mbI +ylg lzH rNK -euP -juL +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi rNK rNK rNK @@ -150559,8 +149818,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rzh rzh lCC @@ -150663,10 +149922,10 @@ itf dCS xAV ozK +gFg +gFg aZM aZM -dCS -smT fMl aZu rNK @@ -150713,27 +149972,27 @@ rNK rNK rNK lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH -lzH ylg lzH rNK -euP -juL +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi rNK rNK rNK @@ -150816,8 +150075,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rzh rzh lCC @@ -150922,8 +150181,8 @@ xAV aLH aZM aZM -utF -fMl +aZM +aZM fMl aZu rNK @@ -150969,6 +150228,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -150985,12 +150247,9 @@ rNK rNK rNK rNK -lzH -ylg -lzH rNK -euP -juL +lez +fwi rNK rNK rNK @@ -151073,8 +150332,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rzh lCC lCC @@ -151179,9 +150438,9 @@ egq aLH aZM fMl -utF fMl -aZN +fMl +fMl aZM rNK rNK @@ -151226,6 +150485,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -151242,12 +150504,9 @@ rNK rNK rNK rNK -lzH -ylg -lzH rNK -euP -juL +lez +fwi rNK rNK rNK @@ -151330,8 +150589,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rzh rzh lCC @@ -151436,9 +150695,9 @@ qgX aZM fMl fMl -vDy rNK -lzH +rNK +rNK rNK rNK rNK @@ -151469,7 +150728,6 @@ rNK rNK rNK rNK -lGk rNK rNK rNK @@ -151484,6 +150742,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -151499,13 +150760,11 @@ rNK rNK rNK rNK -lzH -ylg -lzH rNK -cBe -uCU -cBe +rNK +lez +fwi +rNK rNK rNK rNK @@ -151587,8 +150846,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rzh lCC @@ -151693,9 +150952,9 @@ fMl fMl fMl rNK -vDy rNK -lzH +rNK +rNK rNK rNK rNK @@ -151740,6 +150999,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -151756,13 +151018,10 @@ rNK rNK rNK rNK -cBe -sJv -jwa -cBe -cBe -akY -cBe +rNK +lez +fwi +rNK rNK rNK ayb @@ -151844,8 +151103,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -151950,9 +151209,9 @@ rNK rNK rNK rNK -vDy rNK -lzH +rNK +rNK rNK rNK rNK @@ -151997,6 +151256,11 @@ rNK rNK rNK rNK +lzH +ylg +lzH +rNK +rNK rNK rNK rNK @@ -152012,14 +151276,9 @@ rNK rNK rNK rNK +lez +fwi rNK -cBe -wEk -fyo -kxy -xcn -bqd -cBe rNK rNK lRR @@ -152101,8 +151360,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -152207,9 +151466,7 @@ rNK rNK rNK rNK -vDy rNK -lzH rNK rNK rNK @@ -152256,6 +151513,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -152270,13 +151530,12 @@ rNK rNK rNK rNK -cBe -wYi -cBe -eCe -hPj -qyY -fyo +rNK +rNK +rNK +lez +fwi +rNK rNK lRR lRR @@ -152358,8 +151617,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rzh rzh @@ -152459,14 +151718,7 @@ rtW itf gSQ itf -aZN -lzH -lzH -lzH -gEl -ehH -lSP -lzH +fMl rNK rNK rNK @@ -152518,6 +151770,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -152526,14 +151781,18 @@ rNK rNK rNK rNK -fyo -cBe -iDO -oZn -gTd -rdv -jVa -cBe +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi +rNK rNK lRR jft @@ -152615,8 +151874,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rzh lCC @@ -152720,10 +151979,6 @@ fMl fMl rNK rNK -gEl -rVH -gEl -lzH rNK rNK rNK @@ -152772,6 +152027,9 @@ rNK rNK rNK rNK +lzH +ylg +lzH rNK rNK rNK @@ -152783,14 +152041,15 @@ rNK rNK rNK rNK -cBe -lua -pjN -jhp -pUe -rUX -rZc -cBe +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi +rNK jft ayb lRR @@ -152872,8 +152131,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rzh rzh lCC @@ -152977,12 +152236,6 @@ sTj fMl rNK rNK -gEl -lra -gEl -lJs -lJs -gEl rNK rNK rNK @@ -153031,6 +152284,13 @@ rNK rNK rNK rNK +lzH +ylg +lzH +rNK +rNK +rNK +rNK rNK rNK rNK @@ -153039,15 +152299,14 @@ rNK rNK rNK rNK -cBe -cBe -ilq -gTd -tRT -jVa -cBe -cBe -cBe +rNK +rNK +rNK +rNK +rNK +lez +fwi +rNK rNK jft rNK @@ -153129,8 +152388,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rzh lCC lCC @@ -153234,75 +152493,6 @@ gvx fMl rNK rNK -gEl -sGf -lhU -jtJ -pmQ -nll -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -qBS -mxA -dYn -wAE -rUX -rZc -cBe rNK rNK rNK @@ -153334,6 +152524,75 @@ rNK rNK rNK rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lzH +ylg +lzH +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK "} (218,1,1) = {" rNK @@ -153386,8 +152645,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK lCC lCC @@ -153491,75 +152750,6 @@ hMs fMl rNK rNK -gEl -oJD -xxs -jzL -gEl -gEl -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -cBe -cBe -cBe -fyo -fyo -fyo -cBe rNK rNK rNK @@ -153591,6 +152781,75 @@ rNK rNK rNK rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lzH +ylg +lzH +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +lez +fwi +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK "} (219,1,1) = {" rNK @@ -153643,8 +152902,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -153748,11 +153007,6 @@ kwq fMl rNK rNK -gEl -eNW -xxs -sGo -gEl rNK rNK rNK @@ -153798,12 +153052,15 @@ rNK rNK rNK rNK +rNK +rNK +rNK +cBe +sJv +jwa lRR lRR lRR -lRR -rNK -rNK rNK rNK rNK @@ -153818,6 +153075,8 @@ rNK rNK rNK rNK +lez +fwi rNK rNK rNK @@ -153900,8 +153159,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -154005,11 +153264,6 @@ jsE bDv rNK rNK -gEl -gEl -wYo -sGo -gEl rNK rNK rNK @@ -154054,8 +153308,13 @@ rNK rNK rNK rNK -lRR -lRR +rNK +rNK +rNK +rNK +cBe +wYi +fyo jft jft lRR @@ -154073,8 +153332,8 @@ rNK rNK rNK rNK -rNK -rNK +lez +fwi rNK rNK rNK @@ -154157,8 +153416,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -154263,10 +153522,6 @@ bDv rNK rNK rNK -lJs -tTD -sGo -gEl rNK rNK rNK @@ -154310,9 +153565,13 @@ rNK rNK rNK rNK -lRR -lRR -jft +rNK +rNK +rNK +rNK +cBe +wYi +fyo jft jft jft @@ -154330,8 +153589,8 @@ rNK rNK rNK rNK -rNK -rNK +lez +fwi rNK rNK rNK @@ -154414,8 +153673,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -154520,10 +153779,9 @@ bDv rNK rNK rNK -lJs -xxs -sGo -gEl +rNK +rNK +rNK rNK rNK rNK @@ -154568,13 +153826,14 @@ rNK rNK rNK lRR +cBe +fSN +fyo jft -jft -jft -jft -jft -jft -jft +fyo +fyo +fyo +fyo lRR lRR lRR @@ -154587,8 +153846,8 @@ rNK rNK rNK rNK -rNK -rNK +lez +fwi rNK rNK rNK @@ -154671,8 +153930,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -154777,10 +154036,10 @@ fMl rNK rNK rNK -lJs -rec -sGo -gEl +rNK +rNK +rNK +rNK rNK rNK rNK @@ -154824,15 +154083,15 @@ rNK rNK rNK lRR -lRR -jft -jft -jft -jft -jft -jft jft +fEe +fyo jft +fyo +lqC +tqc +olr +fyo jft lRR lRR @@ -154844,8 +154103,8 @@ rNK rNK rNK rNK -rNK -rNK +lez +fwi rNK rNK rNK @@ -154928,8 +154187,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -155034,10 +154293,10 @@ fMl rNK rNK rNK -gEl -pNi -sGo -lJs +rNK +rNK +rNK +rNK rNK rNK rNK @@ -155082,14 +154341,14 @@ rNK lRR lRR jft -jft -jft -jft -jft -jft -jft -jft -jft +dFD +fBr +btj +fyo +lHw +aIi +lyl +fyo jft jft lRR @@ -155101,8 +154360,8 @@ rNK rNK rNK rNK -rNK -rNK +lez +fwi rNK rNK rNK @@ -155185,8 +154444,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -155291,10 +154550,10 @@ rNK rNK rNK rNK -gEl -yhs -sGo -gEl +rNK +rNK +rNK +rNK rNK rNK rNK @@ -155339,13 +154598,13 @@ lRR lRR jft jft +vfN jft jft -jft -jft -jft -jft -jft +fyo +rdl +fyo +fyo jft jft jft @@ -155358,8 +154617,8 @@ rNK rNK rNK rNK -rNK -rNK +lez +fwi rNK rNK rNK @@ -155442,8 +154701,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -155533,12 +154792,12 @@ aZM aZM uBA gpV -eQu +vHH aLH mNd gFg vHH -xiQ +fMl fMl rNK rNK @@ -155548,10 +154807,10 @@ rNK rNK rNK rNK -gEl -xxs -sGo -gEl +rNK +rNK +rNK +rNK rNK rNK rNK @@ -155596,28 +154855,28 @@ lRR jft jft jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft +vfN +rUd +wTe +lHw +bwl +fyo +vap +fPZ +vap +rBc +wuV jft lRR lRR lRR lRR +lRR +lRR rNK -rNK -rNK -rNK -rNK -rNK +cBe +uCU +cBe rNK rNK rNK @@ -155699,8 +154958,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -155788,14 +155047,18 @@ kZs aZM aZM aZM -edM +aUA oKi -vpA +aLH aLH gBM ngw kAz -xiQ +fMl +rNK +rNK +rNK +rNK rNK rNK rNK @@ -155805,10 +155068,6 @@ rNK rNK rNK rNK -gEl -hJX -sGo -gEl rNK rNK rNK @@ -155852,29 +155111,29 @@ rNK lRR jft jft +tgW +tTF +ptT +lHw +lHw +rQM +fyo +dhq +dhq +dhq +dhq +kcc +fyo jft jft jft jft jft jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -lRR -lRR -lRR -rNK -rNK -rNK -rNK +cBe +cBe +akY +cBe rNK rNK rNK @@ -155956,8 +155215,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -156045,14 +155304,18 @@ vZg vZg kZs kZs -kZs -aUA +ksG +hiA hUN kZs dQj -xiQ -xiQ -xiQ +dQj +cHb +fMl +rNK +rNK +rNK +rNK rNK rNK rNK @@ -156062,10 +155325,6 @@ rNK rNK rNK rNK -gEl -wYo -sGo -gEl rNK rNK rNK @@ -156110,28 +155369,28 @@ lRR jft jft jft +aBg +lHw +lHw +lHw +lHw +lHw +lHw +lHw +lHw +lHw +lHw +kxy +jFx +lJM +fyo jft jft jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -lRR -lRR -lRR -rNK -rNK +bsy +xcn +bqd +cBe rNK rNK rNK @@ -156213,8 +155472,8 @@ rNK rNK rNK rNK -euP -juL +lez +fwi rNK rNK rNK @@ -156301,40 +155560,15 @@ fMl vZg ohc mlu -vbl xcF +xbH pyz lCV -kZm -kzK -rNK -rNK -fMl -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -gEl -yhs -sGo -gEl -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK +dOa +lzf +lzf +lzf +qJG rNK rNK rNK @@ -156363,30 +155597,6 @@ rNK rNK rNK rNK -lRR -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -lRR rNK rNK rNK @@ -156412,6 +155622,55 @@ rNK rNK rNK rNK +lRR +jft +jft +jft +chW +lHw +lHw +ptT +ptT +ptT +ptT +ptT +ptT +ptT +lHw +lHw +lHw +rQM +fyo +jft +jft +jft +eCe +hPj +qyY +fyo +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK +rNK rNK rNK rNK @@ -156565,6 +155824,7 @@ gwO dNV kzK dQj +dQj rNK rNK rNK @@ -156576,10 +155836,6 @@ rNK rNK rNK rNK -gEl -gEl -pLe -gEl rNK rNK rNK @@ -156620,32 +155876,35 @@ rNK rNK rNK rNK -lRR -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -lRR -lRR -lRR +rNK +rNK +rNK +cBe +cBe +cBe +fyo +rWp +gTd +gTd +gTd +gTd +gTd +gTd +gTd +gTd +cvV +cvV +gTd +fXl +fXl +fXl +fXl +fXl +fXl +gTd +rdv +jVa +cBe rNK rNK rNK @@ -156820,89 +156079,89 @@ rCJ gZc exL kWC +rVj wxn rBn -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -sbG -dvc -pmQ -tBd -gEl -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -dcv -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -lRR -lRR -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -lRR +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +qBS +mxA +dYn +udx +rUX +rUX +cMv +rUX +rUX +rUX +kTa +cMv +rUX +rUX +rUX +rUX +cMv +rUX +rUX +rUX +rUX +cMv +rUX +rUX +rZc +cBe lRR rNK rNK @@ -157072,94 +156331,94 @@ lUv gTx mcX knc -sUG +kZm kZs lUv lUv lUv dQj dQj -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -gEl -gEl -gEl -gEl -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK -rNK +dQj rNK -lRR -lRR -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft -jft +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +fyo +fyo +fyo +fyo +fyo +fyo +fyo +fyo jft +fyo +fyo +fyo +fyo jft jft +fyo +fyo +fyo +fyo +fyo +fyo +fyo +fyo +cBe +cBe +cBe lRR rNK rNK @@ -157393,8 +156652,8 @@ rNK rNK rNK rNK -lRR -lRR +jft +jft jft jft jft @@ -157504,83 +156763,83 @@ asX pga auy awo -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -rNK -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb -wdb +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +rNK +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf +xhf ycO wxn cNN @@ -157761,83 +157020,83 @@ aqT aqT aoR aoR -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -rNK -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG -sbG +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +rNK +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm +xBm dQj dQj dQj diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 959c1ccbfcc3..6fd1463aa6d9 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -108,7 +108,7 @@ }, /area/station/security/armory/secure) "abP" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -393,7 +393,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "adb" = ( /obj/structure/rack, /obj/item/storage/lockbox/mindshield, @@ -423,7 +423,7 @@ }, /area/station/security/armory/secure) "adh" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -531,13 +531,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/radio/intercom/department/security{ + pixel_y = -28 + }, /turf/simulated/floor/plasteel, /area/station/security/range) "adE" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -556,7 +556,7 @@ /turf/simulated/floor/plasteel, /area/station/security/range) "adH" = ( -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -776,7 +776,7 @@ /area/station/security/main) "aeC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /turf/simulated/floor/carpet, /area/station/command/office/hos) "aeD" = ( @@ -804,7 +804,7 @@ "aeF" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "aeG" = ( /obj/structure/cable{ d1 = 4; @@ -812,7 +812,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "aeH" = ( /obj/machinery/computer/secure_data{ dir = 8 @@ -821,7 +821,7 @@ dir = 5; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "aeI" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -835,7 +835,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "aeP" = ( /obj/machinery/light/small{ dir = 1 @@ -965,7 +965,7 @@ /area/station/command/office/hos) "afa" = ( /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "afc" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/cable{ @@ -974,7 +974,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "afe" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -997,12 +997,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 8; - name = "west bump Important Area"; - pixel_x = -24 - }, +/obj/machinery/power/apc/important/directional/west, /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ dir = 8; @@ -1038,11 +1033,16 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "afp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1053,8 +1053,13 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "afq" = ( /turf/simulated/floor/carpet/black, /area/station/command/meeting_room) @@ -1124,11 +1129,7 @@ dir = 1 }, /obj/effect/landmark/start/mime, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -1151,14 +1152,14 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, /turf/simulated/floor/plasteel{ icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "afV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1181,14 +1182,14 @@ icon_state = "2-8" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, /turf/simulated/floor/plasteel{ icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "afX" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, @@ -1204,7 +1205,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "ago" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -1356,11 +1357,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/camera{ c_tag = "Brig Main Hall Center" }, @@ -1573,10 +1570,6 @@ }, /area/station/security/armory/secure) "ahQ" = ( -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, /obj/machinery/camera{ c_tag = "Brig Main Hall East 1" }, @@ -1636,11 +1629,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump Important Area"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -2693,11 +2682,7 @@ }, /area/station/security/brig) "akF" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -3086,11 +3071,11 @@ }, /area/station/security/prison/cell_block/A) "alS" = ( -/obj/structure/closet, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3108,17 +3093,17 @@ }, /area/station/security/armory/secure) "ama" = ( -/obj/structure/closet, /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/security/evidence) "amb" = ( -/obj/structure/closet, /obj/effect/decal/cleanable/cobweb2, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3138,10 +3123,6 @@ /area/station/security/main) "amd" = ( /obj/structure/closet/secure_closet/security, -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -3329,6 +3310,11 @@ }, /obj/item/flash, /obj/effect/turf_decal/delivery/red/hollow, +/obj/machinery/light_switch{ + name = "north bump"; + pixel_y = 24; + pixel_x = 10 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -3502,7 +3488,7 @@ /turf/simulated/floor/plasteel{ icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "ann" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -4249,7 +4235,6 @@ /turf/simulated/floor/plasteel, /area/station/security/processing) "apd" = ( -/obj/structure/closet, /obj/machinery/alarm{ dir = 4; name = "west bump"; @@ -4258,6 +4243,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -4448,10 +4434,7 @@ /obj/item/reagent_containers/spray/pepper{ pixel_y = -4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -4558,10 +4541,7 @@ /area/station/security/storage) "apU" = ( /obj/structure/table/wood, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -4701,12 +4681,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -4719,12 +4694,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aqQ" = ( -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/critical/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -5076,11 +5046,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "arK" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -5933,7 +5899,7 @@ dir = 8; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "atO" = ( /obj/machinery/door/airlock/public/glass{ name = "Prison Forestry" @@ -6157,7 +6123,7 @@ dir = 1; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "auB" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plating, @@ -6170,7 +6136,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "auF" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -6179,7 +6145,7 @@ }, /area/station/security/lobby) "auI" = ( -/obj/structure/closet, +/obj/structure/closet/secure_closet/evidence, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -6197,11 +6163,7 @@ }, /area/station/security/lobby) "auM" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -6215,11 +6177,7 @@ }, /area/station/security/lobby) "auR" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -6294,13 +6252,9 @@ dir = 4; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "auW" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable, /turf/simulated/floor/plasteel, /area/station/security/processing) @@ -6804,7 +6758,7 @@ dir = 5 }, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "awC" = ( /obj/structure/chair, /obj/structure/cable{ @@ -7302,7 +7256,7 @@ /obj/item/radio{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /turf/simulated/floor/plating, /area/station/maintenance/fore) "axX" = ( @@ -7392,7 +7346,7 @@ dir = 8; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "ayp" = ( /obj/structure/chair{ dir = 4 @@ -7472,7 +7426,7 @@ pixel_y = 7 }, /obj/item/pen/multi, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -7563,7 +7517,7 @@ /obj/machinery/ai_status_display{ pixel_y = -32 }, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 8; @@ -7837,11 +7791,7 @@ }, /area/station/legal/lawoffice) "azB" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -8032,7 +7982,7 @@ dir = 1; icon_state = "redcorner" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "azW" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 5"; @@ -8482,11 +8432,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -8557,7 +8503,7 @@ "aBA" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "aBG" = ( /obj/structure/cable{ d1 = 4; @@ -8579,7 +8525,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "aBI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden, @@ -9027,7 +8973,7 @@ /area/station/maintenance/abandonedbar) "aCW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) @@ -9163,11 +9109,7 @@ /area/station/hallway/primary/fore) "aDm" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -9282,7 +9224,7 @@ /obj/item/clothing/suit/wcoat, /obj/item/clothing/suit/blacktrenchcoat, /obj/item/clothing/under/suit/tan, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aDD" = ( @@ -9469,11 +9411,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -9665,16 +9603,6 @@ /obj/structure/chair, /turf/simulated/floor/wood, /area/station/maintenance/fpmaint2) -"aEM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - id_tag = "evamaint_door_int"; - locked = 1; - name = "EVA Internal Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) "aEN" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, @@ -9762,8 +9690,8 @@ /area/station/maintenance/abandonedbar) "aFb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "aFc" = ( @@ -9807,10 +9735,7 @@ /obj/structure/table, /obj/item/gavelblock, /obj/item/gavelhammer, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "cult" @@ -9903,6 +9828,12 @@ name = "south bump"; pixel_y = -28 }, +/obj/machinery/requests_console{ + department = "Internal Affairs Office"; + name = "Magistrate Requests Console"; + pixel_x = 30; + departmentType = 5 + }, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -10024,10 +9955,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump Engineering"; - pixel_x = -24; +/obj/machinery/power/apc/directional/west{ shock_proof = 1 }, /turf/simulated/floor/plating, @@ -10222,6 +10150,11 @@ /area/station/legal/courtroom) "aGu" = ( /obj/item/kirbyplants, +/obj/machinery/requests_console{ + department = "Internal Affairs Office"; + name = "Courtroom Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/wood, /area/station/legal/courtroom) "aGw" = ( @@ -10327,11 +10260,7 @@ }, /area/station/security/detective) "aGG" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -10368,9 +10297,6 @@ d2 = 4; icon_state = "0-4" }, -/obj/structure/sign/vacuum/external{ - pixel_y = 32 - }, /obj/machinery/power/solar_control{ name = "Fore Starboard Solar Control" }, @@ -10395,6 +10321,9 @@ dir = 8 }, /obj/machinery/atmospherics/portable/canister/air, +/obj/structure/sign/vacuum/external{ + pixel_y = 32 + }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "aGX" = ( @@ -10505,7 +10434,7 @@ /area/station/maintenance/fpmaint) "aHx" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 @@ -10534,7 +10463,7 @@ id = "Courtroom" }, /turf/simulated/floor/plating, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aHB" = ( /obj/structure/chair{ dir = 8 @@ -10550,7 +10479,7 @@ dir = 5; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aHC" = ( /obj/structure/chair{ dir = 8 @@ -10562,14 +10491,14 @@ dir = 9; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aHD" = ( /obj/structure/chair, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aHE" = ( /turf/simulated/wall/r_wall, /area/station/security/detective) @@ -10582,7 +10511,7 @@ dir = 1; icon_state = "darkblue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aHG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -10592,10 +10521,15 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/requests_console{ + department = "Internal Affairs Office"; + name = "Courtroom Gallery Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aHH" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -10804,11 +10738,7 @@ /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "aIu" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -10849,10 +10779,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump Engineering"; - pixel_x = -24; +/obj/machinery/power/apc/directional/west{ shock_proof = 1 }, /turf/simulated/floor/plating, @@ -10991,7 +10918,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/window/reinforced, @@ -11022,16 +10949,21 @@ dir = 4; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aJc" = ( /obj/structure/chair{ dir = 8 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aJd" = ( /obj/structure/window/reinforced{ dir = 8 @@ -11039,7 +10971,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aJe" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law, @@ -11119,14 +11051,10 @@ name = "south bump"; pixel_y = -24 }, -/obj/structure/closet/secure_closet{ - anchored = 1; - name = "Evidence Storage"; - req_access_txt = "4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/closet/secure_closet/evidence/detective, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -11213,7 +11141,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aJH" = ( /obj/structure/sign/electricshock, /turf/simulated/wall/r_wall, @@ -11232,7 +11160,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aJK" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating, @@ -11390,7 +11318,7 @@ dir = 4; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aKs" = ( /turf/simulated/floor/plasteel{ icon_state = "cult" @@ -11404,12 +11332,12 @@ dir = 4; icon_state = "rampbottom" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aKu" = ( /turf/simulated/floor/plasteel{ icon_state = "rampbottom" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aKv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -11422,7 +11350,7 @@ /turf/simulated/floor/plasteel{ icon_state = "rampbottom" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aKw" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/plasteel{ @@ -11554,11 +11482,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aKT" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -11806,7 +11730,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aLG" = ( -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -11904,7 +11828,7 @@ dir = 4; icon_state = "bluecorner" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aLU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -11916,7 +11840,7 @@ dir = 4; icon_state = "rampbottom" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aLV" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -11933,7 +11857,7 @@ dir = 1; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aLW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -11945,7 +11869,7 @@ dir = 1; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aLX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/disposalpipe/segment, @@ -11959,7 +11883,7 @@ dir = 1; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aLY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -11976,7 +11900,7 @@ dir = 1; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aLZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12001,7 +11925,7 @@ dir = 1; icon_state = "bluecorner" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aMb" = ( /obj/structure/cable{ d1 = 4; @@ -12035,7 +11959,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aMe" = ( /obj/structure/cable{ d1 = 4; @@ -12066,7 +11990,7 @@ /area/station/maintenance/fore) "aMl" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/donut, +/obj/item/food/snacks/donut, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aMo" = ( @@ -12134,7 +12058,7 @@ /obj/machinery/atmospherics/portable/canister/air, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aMC" = ( /obj/structure/table, /obj/machinery/computer/mob_healer_terminal, @@ -12147,13 +12071,13 @@ }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aME" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aMF" = ( /obj/structure/cable{ d1 = 1; @@ -12258,7 +12182,7 @@ /area/station/maintenance/fpmaint) "aMT" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -12307,7 +12231,7 @@ /area/station/legal/courtroom) "aNb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -12447,7 +12371,7 @@ "aNu" = ( /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aNv" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, @@ -12455,7 +12379,7 @@ "aNw" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aNx" = ( /obj/machinery/space_heater, /turf/simulated/floor/plating, @@ -12515,7 +12439,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aNH" = ( /obj/structure/chair/stool{ dir = 8 @@ -12539,11 +12463,16 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "rampbottom" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aNK" = ( /obj/machinery/light{ dir = 8 @@ -12571,14 +12500,14 @@ /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aNN" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aNO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12597,7 +12526,7 @@ dir = 8; icon_state = "bluecorner" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aNQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -12672,7 +12601,7 @@ /area/station/maintenance/fpmaint2) "aOo" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -12728,7 +12657,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/window/reinforced{ @@ -12765,7 +12694,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aOA" = ( /obj/structure/cable{ d1 = 1; @@ -12773,10 +12702,10 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aOB" = ( /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aOC" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -12816,7 +12745,7 @@ "aOH" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aOI" = ( /turf/simulated/wall, /area/station/public/dorms) @@ -12867,14 +12796,14 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aOQ" = ( /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "aOR" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aOS" = ( /obj/machinery/light{ dir = 4 @@ -12933,7 +12862,7 @@ "aPa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/item/clothing/mask/face/fox, /turf/simulated/floor/plasteel, /area/station/maintenance/fpmaint2) @@ -13072,16 +13001,18 @@ /turf/simulated/floor/plasteel{ icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aPC" = ( /obj/structure/chair{ dir = 8 }, +/obj/structure/cable, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aPD" = ( /obj/structure/cable{ d1 = 1; @@ -13091,24 +13022,29 @@ /turf/simulated/floor/plasteel{ icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aPE" = ( /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -35 + }, /turf/simulated/floor/plasteel{ icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aPF" = ( /obj/machinery/economy/vending/cola, +/obj/machinery/light, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aPG" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -13122,7 +13058,7 @@ /turf/simulated/floor/plasteel{ icon_state = "blue" }, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "aPH" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -13138,7 +13074,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aPK" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "maint3"; @@ -13163,7 +13099,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aPR" = ( /obj/machinery/light{ dir = 1 @@ -13175,16 +13111,13 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aPS" = ( /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump Engineering"; - pixel_y = 24; +/obj/machinery/power/apc/directional/north{ shock_proof = 1 }, /turf/simulated/floor/plating, @@ -13201,7 +13134,7 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aPW" = ( /obj/structure/mirror{ icon_state = "mirror_broke"; @@ -13221,21 +13154,25 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aPZ" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod" }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aQa" = ( /obj/structure/sign/pods, /turf/simulated/wall, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aQb" = ( /obj/item/wrench, /turf/simulated/floor/plating, @@ -13394,16 +13331,21 @@ dir = 1; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aQy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/important/directional/east, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aQA" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel{ @@ -13586,29 +13528,34 @@ c_tag = "Arrivals Escape Pods" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRd" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRe" = ( /obj/structure/sign/vacuum/external{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRf" = ( /obj/structure/extinguisher_cabinet{ name = "east bump"; pixel_x = 27 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRg" = ( /mob/living/simple_animal/mouse, /turf/simulated/floor/plating, @@ -13835,11 +13782,7 @@ /obj/structure/chair/comfy/brown{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/carpet, /area/station/service/bar) "aRM" = ( @@ -13869,17 +13812,14 @@ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRP" = ( /obj/machinery/economy/vending/coffee, /obj/machinery/light, /turf/simulated/floor/wood, /area/station/legal/courtroom) "aRQ" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/wood, /area/station/legal/courtroom) @@ -13895,14 +13835,14 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRU" = ( /obj/machinery/door/airlock/external{ name = "Arrival Airlock" @@ -13922,11 +13862,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aRX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -13961,7 +13906,7 @@ "aSd" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aSe" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -14022,19 +13967,14 @@ }, /area/station/public/dorms) "aSn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "arrival" - }, -/area/station/hallway/secondary/entry) +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/south) "aSo" = ( /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aSp" = ( @@ -14142,7 +14082,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "aSG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -14242,22 +14182,27 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aSX" = ( /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aSY" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ pixel_x = 1; pixel_y = 5 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aTa" = ( /obj/machinery/firealarm{ name = "north bump"; @@ -14361,11 +14306,16 @@ "aTt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aTu" = ( /turf/simulated/wall, /area/station/hallway/secondary/garden) @@ -14689,7 +14639,7 @@ /area/station/public/dorms) "aUe" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /obj/effect/landmark/spawner/nukedisc_respawn, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, @@ -14744,21 +14694,21 @@ /obj/structure/closet/emcloset, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aUl" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "aUm" = ( /obj/machinery/economy/vending/coffee, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aUn" = ( /obj/machinery/camera{ c_tag = "Arrivals North"; @@ -14767,14 +14717,14 @@ /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aUo" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; + name = "KEEP CLEAR: DOCKING AREA" }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/south) "aUp" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -14927,7 +14877,7 @@ /obj/item/roller{ pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitehall" @@ -14981,14 +14931,11 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aUV" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "aUW" = ( /obj/machinery/space_heater, /turf/simulated/floor/plating, @@ -15011,12 +14958,14 @@ /turf/simulated/wall, /area/station/security/checkpoint/secondary) "aVd" = ( -/obj/machinery/camera{ - c_tag = "Arrivals East"; - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" @@ -15059,11 +15008,7 @@ }, /area/station/command/vault) "aVl" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -15358,11 +15303,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aWc" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -15496,11 +15437,7 @@ /turf/simulated/floor/plasteel, /area/station/public/storage/tools) "aWp" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -15852,10 +15789,6 @@ }, /area/station/service/chapel/office) "aXk" = ( -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -15889,14 +15822,18 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 15000; - dir = 4; - name = "Cryo and Arrivals Super APC"; - pixel_x = 24 - }, +/obj/machinery/power/apc/important/directional/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera{ + c_tag = "Arrivals East"; + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" @@ -16256,11 +16193,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -16289,6 +16222,12 @@ /obj/machinery/camera{ c_tag = "Medbay Paramedic" }, +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Paramedic Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel, /area/station/medical/paramedic) "aYx" = ( @@ -16345,8 +16284,13 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel/goonplaque, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "aYE" = ( /obj/structure/chair/stool{ dir = 4 @@ -16509,10 +16453,7 @@ /area/station/security/checkpoint/secondary) "aZc" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "aZd" = ( @@ -16642,7 +16583,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -16779,6 +16720,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" @@ -16861,7 +16805,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "baa" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bab" = ( @@ -16905,7 +16849,7 @@ }, /area/station/ai_monitored/storage/eva) "bai" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /obj/effect/turf_decal/delivery/blue/hollow, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -17034,11 +16978,7 @@ /turf/simulated/floor/wood, /area/station/service/library) "baw" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -17266,6 +17206,10 @@ /turf/simulated/wall/r_wall, /area/station/command/vault) "bbr" = ( +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" @@ -17358,7 +17302,7 @@ /area/station/maintenance/fpmaint) "bbH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bbI" = ( @@ -17379,7 +17323,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bbJ" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/item/storage/backpack/duffel/clown, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) @@ -17623,7 +17567,7 @@ "bcu" = ( /obj/structure/table/wood, /obj/item/pen, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /obj/machinery/light{ dir = 1 }, @@ -17745,14 +17689,14 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bcM" = ( /obj/structure/extinguisher_cabinet{ name = "north bump"; pixel_y = 30 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bcN" = ( /obj/machinery/light, /obj/structure/chair/comfy/shuttle{ @@ -17854,7 +17798,7 @@ dir = 5; icon_state = "vault" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bda" = ( /obj/structure/cable{ d1 = 2; @@ -17961,7 +17905,7 @@ "bdp" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/alarm{ name = "north bump"; pixel_y = 24 @@ -17983,7 +17927,7 @@ c_tag = "Port Hallway 2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bdr" = ( /obj/structure/table/wood, /obj/item/stamp/clown, @@ -18178,11 +18122,6 @@ }, /area/station/service/kitchen) "bdK" = ( -/obj/machinery/access_button{ - autolink_id = "evamaint_btn_int"; - pixel_y = 25; - req_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -18284,11 +18223,7 @@ icon_state = "0-2" }, /obj/machinery/reagentgrinder, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -18353,10 +18288,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -18555,7 +18487,7 @@ dir = 5; icon_state = "vault" }, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "beP" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -18659,10 +18591,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 @@ -18856,21 +18785,8 @@ }, /area/station/public/dorms) "bfx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/public/dorms) +/turf/simulated/wall, +/area/station/supply/sorting) "bfy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -18906,11 +18822,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -19092,11 +19004,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -19152,10 +19060,10 @@ /area/station/service/chapel) "bgj" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/food/snacks/chips, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/carpet, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgk" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -19164,7 +19072,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgl" = ( /obj/structure/cable{ d1 = 1; @@ -19198,26 +19106,22 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bgr" = ( /obj/machinery/status_display{ layer = 4; pixel_y = 32 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bgs" = ( /obj/item/kirbyplants, /obj/machinery/camera{ @@ -19237,7 +19141,7 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgu" = ( /obj/structure/cable{ d1 = 1; @@ -19248,13 +19152,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgv" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgw" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -19267,7 +19171,7 @@ }, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgx" = ( /obj/structure/table, /obj/item/camera_film{ @@ -19283,29 +19187,29 @@ /area/station/public/storage/office) "bgz" = ( /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bgA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bgB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgC" = ( /obj/structure/sign/double/map/left{ pixel_y = 31 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgD" = ( /obj/structure/sign/double/map/right{ pixel_y = 31 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bgE" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -19314,11 +19218,11 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bgF" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bgG" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, @@ -19355,7 +19259,7 @@ pixel_y = 24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bgK" = ( /obj/structure/chair/stool{ dir = 8 @@ -19566,7 +19470,7 @@ /area/station/service/mime) "bhm" = ( /turf/simulated/floor/carpet, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhn" = ( /obj/item/stack/sheet/metal{ amount = 10 @@ -19602,10 +19506,15 @@ /obj/structure/chair/comfy/beige{ dir = 8 }, +/obj/machinery/power/apc/important/directional/east, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhw" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -19670,7 +19579,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhF" = ( /obj/structure/table, /obj/item/vending_refill/snack{ @@ -19689,6 +19598,10 @@ /obj/machinery/recharger{ pixel_y = 4 }, +/obj/machinery/light_switch{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -19729,7 +19642,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhM" = ( /obj/machinery/light{ dir = 1 @@ -19750,7 +19663,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhO" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -19759,7 +19672,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhP" = ( /obj/machinery/ai_status_display{ pixel_x = 32 @@ -19782,7 +19695,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bhR" = ( /obj/machinery/chem_master, /turf/simulated/floor/plasteel{ @@ -19904,11 +19817,6 @@ }, /area/station/service/hydroponics) "bih" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/light{ dir = 8 }, @@ -20012,7 +19920,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "biw" = ( /obj/machinery/newscaster{ dir = 1; @@ -20063,7 +19971,7 @@ dir = 8; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "biC" = ( /obj/structure/cable{ d1 = 1; @@ -20071,7 +19979,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "biD" = ( /obj/structure/cable{ d1 = 1; @@ -20084,7 +19992,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "biE" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/generic, @@ -20099,7 +20007,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "biG" = ( /obj/structure/cable{ d1 = 4; @@ -20113,7 +20021,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "biH" = ( /obj/structure/cable{ d1 = 1; @@ -20150,7 +20058,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "biK" = ( /turf/simulated/floor/plasteel{ icon_state = "L9" @@ -20350,10 +20258,6 @@ }, /area/station/service/bar) "bjc" = ( -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, /obj/structure/closet/secure_closet/bar{ req_access_txt = "25" }, @@ -20540,14 +20444,14 @@ "bjO" = ( /obj/structure/table/wood, /turf/simulated/floor/carpet, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bjP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bjQ" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; @@ -20638,7 +20542,7 @@ pixel_y = -30 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bjZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 @@ -20667,7 +20571,7 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bkc" = ( /obj/structure/table/wood, /obj/item/storage/fancy/cigarettes{ @@ -20680,13 +20584,13 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bkd" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bke" = ( /obj/machinery/firealarm{ dir = 1; @@ -20716,24 +20620,24 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bkg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bkh" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bki" = ( /obj/machinery/light, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bkj" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -20761,7 +20665,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bkl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20772,7 +20676,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bkn" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -20792,7 +20696,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bkp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -21088,11 +20992,7 @@ pixel_y = 2 }, /obj/item/vending_refill/coffee, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -21180,11 +21080,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/closet/secure_closet/personal, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ @@ -21208,11 +21104,16 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bli" = ( /obj/structure/bookcase{ name = "bookcase (Religious)" @@ -21263,6 +21164,19 @@ }, /turf/simulated/floor/wood, /area/station/service/library) +"blq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutral" + }, +/area/station/hallway/secondary/entry/lounge) "blr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -21280,7 +21194,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "blt" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/carpet, @@ -21318,7 +21232,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "blz" = ( /obj/structure/table/wood, /turf/simulated/floor/carpet, @@ -21350,7 +21264,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "blG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -21378,13 +21292,13 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "blJ" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "blK" = ( /obj/structure/grille/broken, /obj/item/stack/rods, @@ -21414,7 +21328,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "blP" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -21432,7 +21346,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "blQ" = ( /turf/simulated/wall, /area/station/maintenance/port) @@ -21451,15 +21365,15 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "blW" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "blX" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bmc" = ( /turf/simulated/wall/r_wall, /area/station/command/bridge) @@ -21480,7 +21394,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bmf" = ( /obj/structure/cable{ d1 = 4; @@ -21497,7 +21411,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bmg" = ( /obj/machinery/door/morgue{ name = "Confession Booth" @@ -21542,7 +21456,7 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bmp" = ( /obj/structure/chair/sofa/pew/left{ dir = 1 @@ -21578,7 +21492,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bmt" = ( /obj/structure/sink/kitchen{ pixel_y = 25 @@ -21617,7 +21531,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bmy" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -21687,11 +21601,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -22010,7 +21920,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bnv" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/portable/pump, @@ -22390,7 +22300,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "boy" = ( /obj/machinery/door/morgue{ name = "Private Study"; @@ -22517,8 +22427,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "boS" = ( /obj/structure/closet/crate/freezer, /turf/simulated/floor/plasteel{ @@ -22532,7 +22447,7 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "boU" = ( /turf/simulated/floor/carpet, /area/station/public/mrchangs) @@ -22553,7 +22468,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "boX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -22593,7 +22508,7 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bpd" = ( /obj/effect/landmark/lightsout, /turf/simulated/floor/plasteel, @@ -22627,7 +22542,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bpi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -22645,7 +22560,7 @@ icon_state = "pipe-y" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bpk" = ( /obj/structure/cable{ d1 = 1; @@ -22656,7 +22571,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bpl" = ( /obj/structure/rack{ dir = 1 @@ -22740,12 +22655,12 @@ "bpu" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/sop_command, -/obj/item/aicard, -/obj/item/multitool/command, /obj/machinery/keycard_auth{ pixel_x = -6; pixel_y = 8 }, +/obj/item/aicard, +/obj/item/multitool/command, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -22830,7 +22745,7 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bpG" = ( /obj/structure/table, /obj/item/reagent_containers/glass/bucket, @@ -23065,7 +22980,7 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "bqm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -23322,7 +23237,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "brf" = ( /obj/machinery/alarm{ dir = 4; @@ -23374,11 +23289,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "brl" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -23390,7 +23310,7 @@ dir = 1; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "brm" = ( /obj/structure/table, /obj/item/kitchen/rollingpin, @@ -23409,11 +23329,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bro" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -23427,11 +23352,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "brq" = ( /turf/simulated/floor/plasteel{ icon_state = "stairs-r" @@ -23543,6 +23473,12 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/requests_console{ + department = "Primary Tool Storage"; + name = "Chapel Request Console"; + pixel_x = -30; + departmentType = 2 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -23680,7 +23616,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "bsf" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/visible/cyan, @@ -23715,6 +23651,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitecorner" @@ -23768,6 +23709,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/light, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/south) "bss" = ( @@ -23775,7 +23717,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bst" = ( /obj/machinery/light/small{ dir = 1 @@ -23785,7 +23727,7 @@ "bsx" = ( /obj/machinery/light, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bsB" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, @@ -23858,15 +23800,15 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "bsQ" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, /turf/simulated/floor/plating, /area/station/public/storage/emergency/port) "bsR" = ( @@ -23881,7 +23823,7 @@ /area/station/maintenance/port) "bsS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5 }, /obj/item/stack/packageWrap, @@ -23904,10 +23846,10 @@ /area/station/service/kitchen) "bsU" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /turf/simulated/floor/plasteel{ @@ -23948,16 +23890,13 @@ }, /area/station/service/kitchen) "bsY" = ( -/obj/machinery/hydroponics/constructable, /obj/machinery/alarm{ - dir = 8; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" + dir = 1; + name = "south bump"; + pixel_y = -24 }, -/area/station/service/hydroponics) +/turf/simulated/floor/plasteel, +/area/station/supply/lobby) "bsZ" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -24006,12 +23945,12 @@ /turf/simulated/floor/wood, /area/station/service/bar) "btg" = ( -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -24159,11 +24098,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/wood, /area/station/public/vacant_office) "btI" = ( @@ -24454,7 +24389,7 @@ /area/station/service/kitchen) "bus" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -24473,7 +24408,7 @@ /area/station/service/kitchen) "buu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/cream, +/obj/item/reagent_containers/drinks/bottle/cream, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -24641,7 +24576,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "buT" = ( /obj/machinery/economy/vending/cigarette, /obj/machinery/light{ @@ -24764,7 +24699,7 @@ locked = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bvm" = ( /obj/machinery/light_switch{ dir = 4; @@ -24839,11 +24774,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "bvx" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable, /turf/simulated/floor/plasteel, /area/station/public/locker) @@ -24884,11 +24815,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/carpet, /area/station/service/library) "bvP" = ( @@ -25064,10 +24991,7 @@ "bwo" = ( /obj/structure/cable, /obj/machinery/light, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -25142,7 +25066,7 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "bwy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -25219,7 +25143,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bwP" = ( /obj/structure/toilet{ pixel_y = 8 @@ -25249,7 +25173,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bwZ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -25272,7 +25196,7 @@ id = "packageSort2" }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "bxe" = ( /obj/machinery/conveyor{ dir = 4; @@ -25282,7 +25206,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "bxf" = ( /obj/machinery/conveyor{ dir = 4; @@ -25293,7 +25217,7 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "bxg" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -25302,7 +25226,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "bxi" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -25497,7 +25421,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "byl" = ( /obj/machinery/conveyor_switch/oneway{ id = "packageSort2" @@ -25507,7 +25431,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bym" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -25565,13 +25489,13 @@ id = "packageSort1" }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "byz" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "byD" = ( /obj/structure/chair/wood/wings{ dir = 4 @@ -25751,7 +25675,7 @@ pixel_x = -28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bzs" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, @@ -25819,11 +25743,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bzF" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bzG" = ( /obj/machinery/conveyor_switch/oneway{ id = "packageSort1" @@ -25834,8 +25758,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -26; + pixel_x = -5 + }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bzH" = ( /obj/structure/table, /obj/machinery/requests_console{ @@ -25861,7 +25791,7 @@ dir = 1; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bzI" = ( /obj/item/storage/box, /obj/structure/table, @@ -25882,7 +25812,7 @@ dir = 1; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bzJ" = ( /turf/simulated/wall, /area/station/supply/office) @@ -25892,11 +25822,15 @@ /obj/item/stack/packageWrap, /obj/item/stack/packageWrap, /obj/item/rcs, +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bzL" = ( /obj/structure/cable{ d1 = 1; @@ -25916,6 +25850,12 @@ icon_state = "browncorner" }, /area/station/hallway/primary/central/west) +"bzN" = ( +/obj/effect/spawner/airlock/w_to_e/long{ + req_access_txt = 11 + }, +/turf/simulated/wall/r_wall, +/area/station/engineering/ai_transit_tube) "bzO" = ( /obj/structure/chair, /turf/simulated/floor/plasteel, @@ -26010,11 +25950,6 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/west) "bAl" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/camera{ c_tag = "Central Hallway East"; dir = 4 @@ -26240,7 +26175,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bBj" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel, @@ -26288,7 +26223,7 @@ /obj/machinery/hologram/holopad, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bBp" = ( /obj/structure/table, /obj/machinery/light{ @@ -26299,7 +26234,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bBq" = ( /obj/machinery/economy/atm{ pixel_x = -32 @@ -26345,7 +26280,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bBt" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -26544,11 +26479,6 @@ /turf/simulated/floor/plasteel, /area/station/supply/storage) "bCv" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -26588,14 +26518,12 @@ dir = 4; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bCF" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/structure/disposalpipe/segment, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "browncorner" @@ -26728,6 +26656,11 @@ "bDk" = ( /obj/item/kirbyplants, /obj/machinery/light, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/wood, /area/station/legal/courtroom) "bDl" = ( @@ -26797,7 +26730,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bDv" = ( /obj/structure/sink{ dir = 4; @@ -26832,7 +26765,7 @@ locked = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bDH" = ( /obj/structure/cable{ d1 = 2; @@ -26874,7 +26807,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bDO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -26922,7 +26855,7 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "bDV" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -26956,7 +26889,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bEg" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -26995,7 +26928,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bEn" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, @@ -27023,6 +26956,12 @@ }, /turf/simulated/floor/wood, /area/station/command/office/captain) +"bEt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "bEu" = ( /turf/simulated/wall, /area/station/medical/morgue) @@ -27288,11 +27227,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -27341,7 +27276,7 @@ /obj/effect/turf_decal/delivery/partial, /obj/effect/turf_decal/arrows/black, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bFy" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, @@ -27349,7 +27284,7 @@ dir = 4; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bFz" = ( /obj/item/radio/intercom{ name = "north bump"; @@ -27369,7 +27304,7 @@ /obj/effect/turf_decal/delivery/partial, /obj/effect/turf_decal/arrows/black, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bFB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27427,8 +27362,10 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable, +/obj/machinery/power/apc/important/directional/east, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bFO" = ( /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/se) @@ -27563,7 +27500,7 @@ dir = 5 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bGm" = ( /obj/machinery/light/small{ dir = 1 @@ -27572,7 +27509,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bGn" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -27743,6 +27680,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" @@ -27823,7 +27765,7 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "bHf" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 @@ -27844,19 +27786,19 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bHn" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 8; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" }, -/area/station/supply/office) +/area/station/supply/sorting) "bHo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -28068,7 +28010,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bHY" = ( /obj/structure/sign/radiation/rad_area, /obj/effect/spawner/window/reinforced, @@ -28076,6 +28018,7 @@ id_tag = "Engineering"; name = "Engineering Security Doors" }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple, /turf/simulated/floor/plating, /area/station/engineering/equipmentstorage) "bHZ" = ( @@ -28100,7 +28043,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bId" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28256,7 +28199,7 @@ dir = 8; icon_state = "brown" }, -/area/station/supply/office) +/area/station/supply/sorting) "bIH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 @@ -28281,14 +28224,14 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bIK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bIM" = ( /obj/machinery/light/small{ dir = 1 @@ -28417,10 +28360,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/west) "bJe" = ( @@ -28536,7 +28476,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bJt" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -28555,10 +28495,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/port) "bJx" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" @@ -28588,16 +28525,14 @@ }, /area/station/service/expedition) "bJE" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 +/obj/machinery/light{ + dir = 8 }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/supply/office) +/area/station/supply/sorting) "bJF" = ( /obj/machinery/firealarm{ dir = 8; @@ -28647,7 +28582,7 @@ /area/station/public/toilet/unisex) "bJV" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/gun/projectile/revolver/doublebarrel, /obj/item/stack/sheet/metal{ amount = 50 @@ -28695,7 +28630,7 @@ pixel_x = -30 }, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /obj/item/storage/box/patch_packs, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -28749,7 +28684,7 @@ /area/station/science/robotics) "bKo" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -28761,7 +28696,7 @@ locked = 1 }, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bKs" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -28807,7 +28742,7 @@ pixel_x = 28 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bKD" = ( /obj/structure/cable{ d1 = 4; @@ -28845,14 +28780,16 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "bKI" = ( -/obj/machinery/light{ - dir = 8 +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/supply/office) +/area/station/supply/sorting) "bKN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -28863,8 +28800,8 @@ dir = 8; layer = 2.9 }, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, @@ -28908,7 +28845,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bKW" = ( /obj/structure/cable{ d1 = 1; @@ -28938,11 +28875,16 @@ /area/station/maintenance/port) "bKZ" = ( /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/supply/office) +/area/station/supply/sorting) "bLh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -29014,7 +28956,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bLt" = ( /obj/structure/cable{ d1 = 4; @@ -29065,7 +29007,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bLE" = ( /turf/simulated/floor/mech_bay_recharge_floor, /area/station/science/robotics/chargebay) @@ -29168,32 +29110,32 @@ dir = 6 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bLY" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bLZ" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bMa" = ( /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bMb" = ( /obj/machinery/light, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bMc" = ( /obj/machinery/hologram/holopad, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "bMd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -29256,11 +29198,7 @@ pixel_y = 24; req_access_txt = "31" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -29270,7 +29208,7 @@ "bMk" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bMm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -29348,7 +29286,7 @@ "bMx" = ( /obj/machinery/status_display/supply_display, /turf/simulated/wall, -/area/station/supply/office) +/area/station/supply/sorting) "bMy" = ( /obj/structure/cable{ d1 = 4; @@ -29366,7 +29304,7 @@ "bMA" = ( /obj/machinery/mineral/ore_redemption, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bMG" = ( /turf/simulated/wall/r_wall, /area/station/command/office/hop) @@ -29569,11 +29507,6 @@ /area/station/hallway/secondary/exit) "bNx" = ( /obj/machinery/light, -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -29743,7 +29676,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bNW" = ( /obj/structure/cable{ d1 = 4; @@ -29764,8 +29697,13 @@ dir = 8; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bNX" = ( /obj/structure/cable{ d1 = 4; @@ -29777,7 +29715,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "bNY" = ( /obj/structure/cable{ d1 = 4; @@ -29871,7 +29809,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bOv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -30009,11 +29947,7 @@ /obj/item/storage/box/beakers{ pixel_y = 2 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/storage/box/syringes{ pixel_x = 3 }, @@ -30228,9 +30162,10 @@ pixel_y = 24 }, /obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo Requests Console"; + announcementConsole = 1; + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; pixel_x = -30 }, /turf/simulated/floor/carpet, @@ -30254,7 +30189,7 @@ "bPW" = ( /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bPX" = ( /obj/structure/closet/emcloset, /obj/structure/extinguisher_cabinet{ @@ -30367,26 +30302,6 @@ "bQo" = ( /turf/simulated/wall, /area/station/command/office/hop) -"bQw" = ( -/obj/structure/table/wood, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/item/storage/fancy/matches, -/obj/item/reagent_containers/food/drinks/flask/gold, -/obj/item/clothing/mask/cigarette/cigar, -/obj/item/razor{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/carpet, -/area/station/command/office/captain/bedroom) "bQy" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -30581,11 +30496,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/se) "bRh" = ( @@ -30606,16 +30517,13 @@ id_tag = "Engineering"; name = "Engineering Security Doors" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "bRj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkyellowcorners" @@ -30636,6 +30544,9 @@ c_tag = "Quartermaster's Office" }, /obj/machinery/computer/card/minor/qm, +/obj/machinery/keycard_auth{ + pixel_y = 28 + }, /turf/simulated/floor/carpet, /area/station/supply/qm) "bRp" = ( @@ -30910,10 +30821,7 @@ desc = "This cuts gloves."; name = "Glove Snippers" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -31052,10 +30960,7 @@ }, /area/station/medical/morgue) "bSH" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -31111,7 +31016,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bST" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -31498,14 +31403,14 @@ "bUo" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bUp" = ( /obj/structure/chair{ dir = 8 }, /obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bUr" = ( /turf/simulated/floor/carpet, /area/station/command/office/hop) @@ -31621,7 +31526,7 @@ "bUU" = ( /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bUV" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -31630,7 +31535,7 @@ dir = 6 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bUW" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -31640,7 +31545,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bUX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -31649,7 +31554,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bUY" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -31704,7 +31609,7 @@ "bVt" = ( /obj/machinery/economy/vending/cart, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bVx" = ( /obj/structure/cable{ d1 = 1; @@ -31804,7 +31709,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bVS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -31899,13 +31804,15 @@ /area/station/science/genetics) "bWi" = ( /obj/structure/chair, -/obj/machinery/light{ - dir = 1 +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "bWj" = ( /turf/simulated/wall, /area/station/science/robotics/chargebay) @@ -32006,7 +31913,7 @@ dir = 8; icon_state = "whitebluecorner" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bWu" = ( /obj/machinery/disposal, /obj/machinery/light{ @@ -32018,7 +31925,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bWv" = ( /turf/simulated/floor/plasteel{ icon_state = "whitepurple" @@ -32040,7 +31947,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bWA" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/plasteel{ @@ -32110,7 +32017,7 @@ /obj/machinery/light, /obj/machinery/economy/merch, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bWV" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -32147,9 +32054,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/keycard_auth{ - pixel_y = -28 - }, /turf/simulated/floor/carpet, /area/station/supply/qm) "bXh" = ( @@ -32168,6 +32072,11 @@ dir = 4; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, /area/station/supply/office) "bXi" = ( @@ -32188,8 +32097,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bXk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -32201,8 +32115,13 @@ dir = 8; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bXn" = ( /obj/machinery/shieldwallgen, /obj/effect/turf_decal/delivery/hollow, @@ -32225,13 +32144,13 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bXI" = ( /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bXK" = ( /obj/structure/table/glass, /obj/item/roller{ @@ -32350,7 +32269,7 @@ /turf/simulated/floor/plasteel{ icon_state = "rampbottom" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "bXV" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -32449,7 +32368,7 @@ /area/station/maintenance/asmaint2) "bYm" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/wood, /area/station/maintenance/asmaint2) "bYr" = ( @@ -32551,7 +32470,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "bYG" = ( /obj/structure/table, /obj/item/storage/firstaid/regular{ @@ -32580,10 +32499,7 @@ }, /area/station/supply/office) "bYI" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -32687,7 +32603,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bZj" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -32704,12 +32620,12 @@ "bZl" = ( /obj/structure/flora/ausbushes/brflowers, /turf/simulated/floor/grass, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bZm" = ( /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bZq" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10; @@ -32780,7 +32696,7 @@ dir = 8; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "bZC" = ( /obj/structure/cable{ d1 = 1; @@ -32812,11 +32728,7 @@ }, /area/station/medical/sleeper) "bZE" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -32876,7 +32788,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bZK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -32891,7 +32803,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "bZL" = ( /obj/machinery/door/firedoor, /obj/machinery/status_display{ @@ -32941,6 +32853,11 @@ c_tag = "Medbay Corridor East"; dir = 6 }, +/obj/machinery/power/apc/directional/north, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -33055,11 +32972,7 @@ }, /area/station/medical/reception) "cao" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/item/kirbyplants, /obj/structure/cable{ d2 = 2; @@ -33110,15 +33023,9 @@ /area/station/science/robotics) "cav" = ( /obj/structure/table, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/hemostat, -/obj/item/retractor, -/obj/item/stack/medical/bruise_pack/advanced{ - pixel_x = -4; - pixel_y = 4 - }, +/obj/item/storage/firstaid/machine, +/obj/item/storage/firstaid/machine, +/obj/item/robotanalyzer, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -33181,18 +33088,18 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "caF" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/grass, -/area/station/medical/medbay2) +/area/station/medical/medbay) "caH" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "caL" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden, @@ -33250,12 +33157,8 @@ /area/station/command/office/cmo) "caR" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/item/reagent_containers/drinks/coffee, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -33282,7 +33185,7 @@ dir = 8; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cba" = ( /obj/structure/cable{ d1 = 1; @@ -33313,8 +33216,6 @@ /obj/machinery/optable{ name = "Robotics Operating Table" }, -/obj/item/storage/firstaid/machine, -/obj/item/storage/firstaid/machine, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -33439,13 +33340,27 @@ icon_state = "whiteblue" }, /area/station/medical/sleeper) +"cby" = ( +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/engineering/secure_storage) "cbE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "rampbottom" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cbH" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -33511,7 +33426,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cbR" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -33696,25 +33611,6 @@ icon_state = "freezerfloor" }, /area/station/science/robotics) -"cck" = ( -/obj/structure/table/glass, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/machinery/firealarm{ - name = "north bump"; - pixel_y = 24 - }, -/obj/item/reagent_containers/iv_bag/salglu, -/turf/simulated/floor/plasteel{ - icon_state = "whiteblue" - }, -/area/station/medical/surgery/primary) "ccm" = ( /obj/machinery/door/airlock/public/glass{ name = "Central Access" @@ -33744,7 +33640,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "ccr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33757,16 +33653,18 @@ /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/floor/grass, -/area/station/medical/medbay2) +/area/station/medical/medbay) "ccv" = ( -/obj/machinery/light{ - dir = 4 +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "ccx" = ( /obj/machinery/light{ dir = 8 @@ -33851,7 +33749,7 @@ dir = 4; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "ccJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -33859,7 +33757,7 @@ dir = 10; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "ccL" = ( /obj/machinery/light{ dir = 1 @@ -33889,7 +33787,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "cdb" = ( /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, @@ -34125,11 +34023,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/sw) "cdT" = ( @@ -34172,11 +34066,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -34273,10 +34163,15 @@ dir = 1; icon_state = "pipe-c" }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24; + name = "south bump" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cem" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -34292,7 +34187,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgreenfull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cen" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -34313,7 +34208,7 @@ dir = 5; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cep" = ( /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -34329,7 +34224,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgreenfull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cev" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -34441,11 +34336,7 @@ }, /area/station/command/office/rd) "ceP" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -34613,7 +34504,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cfq" = ( /obj/structure/cable{ d1 = 2; @@ -34717,7 +34608,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cfE" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "Surgery 1" @@ -34727,7 +34618,7 @@ "cfF" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/grass, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cfG" = ( /obj/structure/cable{ d1 = 1; @@ -34749,7 +34640,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cfH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -34771,7 +34662,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cfI" = ( /obj/structure/railing/corner{ dir = 8 @@ -34780,7 +34671,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cfJ" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer/on{ name = "Temperature control unit" @@ -34817,25 +34708,25 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cfX" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/item/radio/intercom{ - name = "west bump"; - pixel_x = -28 +/obj/machinery/camera{ + c_tag = "Virology Lobby"; + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cfY" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cfZ" = ( /obj/structure/window/reinforced{ dir = 8 @@ -35202,7 +35093,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "chx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -35223,15 +35114,11 @@ /area/station/medical/storage/secondary) "chA" = ( /turf/simulated/wall/r_wall, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "chB" = ( /obj/structure/closet/l3closet, /obj/item/clothing/mask/gas, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -35252,19 +35139,19 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "chE" = ( /obj/structure/table, /obj/item/storage/box/syringes, /turf/simulated/floor/plasteel{ icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "chH" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "chI" = ( @@ -35343,7 +35230,7 @@ c_tag = "Research Director's Office"; network = list("Research","SS13") }, -/obj/item/reagent_containers/food/drinks/mug/rd, +/obj/item/reagent_containers/drinks/mug/rd, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkpurple" @@ -35361,10 +35248,10 @@ pixel_y = 32 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = -9 }, /turf/simulated/floor/wood, @@ -35501,7 +35388,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "ciG" = ( /obj/structure/table/wood, /obj/item/ashtray/glass{ @@ -35562,7 +35449,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "ciO" = ( /obj/structure/cable{ d1 = 4; @@ -35708,7 +35595,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "cjh" = ( -/obj/machinery/light, /obj/structure/cable{ d1 = 2; d2 = 8; @@ -35852,12 +35738,12 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cjB" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/grass, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cjC" = ( /obj/structure/cable{ d1 = 1; @@ -35874,22 +35760,24 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cjF" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/light{ - dir = 8 - }, /obj/structure/disposalpipe/segment, +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "cjG" = ( /obj/machinery/firealarm{ dir = 4; @@ -36138,7 +36026,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "ckS" = ( /obj/structure/cable{ d1 = 1; @@ -36155,14 +36043,14 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "ckV" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "ckW" = ( /obj/machinery/economy/vending/medical, /obj/item/radio/intercom{ @@ -36173,7 +36061,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "ckX" = ( /obj/machinery/computer/crew{ dir = 8 @@ -36182,7 +36070,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "ckZ" = ( /obj/structure/railing{ dir = 1 @@ -36190,7 +36078,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cla" = ( /turf/simulated/wall, /area/station/command/office/rd) @@ -36216,7 +36104,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cle" = ( /obj/machinery/defibrillator_mount/loaded{ pixel_y = 30 @@ -36225,7 +36113,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "clf" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -36237,7 +36125,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "clg" = ( /turf/simulated/floor/wood{ icon_state = "wood-broken7" @@ -36398,7 +36286,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "clR" = ( /turf/simulated/floor/wood, /area/station/command/office/blueshield) @@ -36458,7 +36346,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cma" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Laser Room" @@ -36525,7 +36413,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "cmm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36541,7 +36429,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cmn" = ( /obj/machinery/sleeper, /obj/item/radio/intercom{ @@ -36551,13 +36439,13 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cmo" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, /obj/machinery/camera{ c_tag = "Medbay Secure Storage"; dir = 4 }, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -36648,12 +36536,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/science/storage) -"cmG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) "cmH" = ( /obj/structure/closet/emcloset, /obj/effect/spawner/lootdrop/maintenance, @@ -36678,7 +36560,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "cmM" = ( /obj/structure/cable{ d1 = 1; @@ -36708,6 +36590,10 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -36749,7 +36635,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "cnb" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -36784,11 +36670,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "cno" = ( @@ -36851,13 +36733,13 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cnx" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cny" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -36866,7 +36748,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cnD" = ( /obj/structure/cable{ d1 = 1; @@ -36876,14 +36758,14 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cnF" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cnH" = ( /obj/machinery/bodyscanner, /obj/machinery/light{ @@ -36892,16 +36774,16 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cnI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cnJ" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -37004,7 +36886,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "cnX" = ( /obj/structure/closet/secure_closet/ntrep, /turf/simulated/floor/carpet/royalblack, @@ -37014,19 +36896,19 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cnZ" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "med1" }, /turf/simulated/floor/plating, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "coa" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cob" = ( /obj/structure/cable{ d1 = 1; @@ -37038,7 +36920,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "coc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -37046,27 +36928,24 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cod" = ( /turf/simulated/wall/r_wall, /area/station/science/explab) "coe" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cof" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "med2" }, /turf/simulated/floor/plating, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cog" = ( /obj/machinery/mineral/equipment_vendor, /turf/simulated/floor/plasteel{ @@ -37241,7 +37120,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cpa" = ( /obj/structure/table, /obj/machinery/firealarm{ @@ -37253,7 +37132,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cpb" = ( /obj/machinery/alarm{ dir = 8; @@ -37264,7 +37143,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cpc" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -37272,7 +37151,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cpd" = ( /obj/structure/mopbucket/full, /obj/item/mop, @@ -37304,12 +37183,9 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cpn" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/machinery/camera{ c_tag = "Medbay Cryogenics"; @@ -37627,7 +37503,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cqA" = ( /obj/structure/closet/secure_closet/miner, /turf/simulated/floor/plasteel{ @@ -38027,7 +37903,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "crV" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -38035,7 +37911,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "crX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, @@ -38043,7 +37919,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "crY" = ( /obj/structure/cable{ d1 = 1; @@ -38060,7 +37936,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "crZ" = ( /obj/structure/railing/corner{ dir = 1 @@ -38069,7 +37945,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "csb" = ( /obj/structure/table, /obj/item/handheld_defibrillator, @@ -38561,7 +38437,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cto" = ( /obj/structure/sign/nosmoking_2{ pixel_y = -30 @@ -38604,7 +38480,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "ctu" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -38756,7 +38632,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cuc" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -38777,7 +38653,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cuf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -38839,7 +38715,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "cup" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -38895,7 +38771,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cuv" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -38941,7 +38817,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cuD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ @@ -38949,7 +38825,7 @@ locked = 1; name = "Cargo Docking Hatch" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle, /turf/simulated/floor/plating, /area/station/supply/storage) "cuE" = ( @@ -38970,7 +38846,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "cuI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39162,11 +39038,7 @@ pixel_y = -6; pixel_x = 6 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) "cvz" = ( @@ -39220,7 +39092,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cvK" = ( /obj/structure/cable{ d1 = 4; @@ -39289,7 +39161,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "cvU" = ( /obj/structure/bed, /turf/simulated/floor/plasteel{ @@ -39519,7 +39391,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "cxj" = ( /obj/structure/table, /obj/machinery/recharger, @@ -39528,11 +39400,7 @@ }, /area/station/medical/storage/secondary) "cxk" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -40156,7 +40024,6 @@ /area/station/maintenance/aft) "cyM" = ( /obj/item/clothing/under/rank/medical/gown, -/obj/structure/table/tray, /obj/item/hemostat{ pixel_x = 6 }, @@ -40234,11 +40101,7 @@ }, /area/station/medical/surgery/secondary) "cyW" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -40432,7 +40295,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "czA" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -40450,7 +40313,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "czB" = ( /obj/item/radio/intercom{ name = "west bump"; @@ -40466,9 +40329,7 @@ /area/station/engineering/controlroom) "czC" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump Engineering"; - pixel_y = -24; +/obj/machinery/power/apc/directional/south{ shock_proof = 1 }, /obj/structure/disposalpipe/segment{ @@ -40565,11 +40426,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) @@ -40710,7 +40567,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cAp" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/alarm{ @@ -40845,23 +40702,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cAN" = ( /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, /obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cAO" = ( /obj/machinery/firealarm{ dir = 8; @@ -40869,9 +40722,6 @@ pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) @@ -41156,7 +41006,7 @@ dir = 4; icon_state = "caution" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cBB" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -41204,22 +41054,11 @@ /area/station/science/rnd) "cBE" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) -"cBF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 - }, -/turf/simulated/wall, -/area/station/engineering/controlroom) +/area/station/hallway/primary/aft/south) "cBG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -41269,13 +41108,6 @@ icon_state = "purple" }, /area/station/maintenance/asmaint2) -"cBJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/controlroom) "cBL" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -41561,10 +41393,6 @@ }, /area/station/maintenance/asmaint2) "cDi" = ( -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "yellowcorner" @@ -41602,10 +41430,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump Engineering"; - pixel_y = 24; +/obj/machinery/power/apc/directional/north{ shock_proof = 1 }, /turf/simulated/floor/plasteel, @@ -41676,7 +41501,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cDz" = ( /obj/machinery/camera{ c_tag = "Atmospherics Access"; @@ -41689,18 +41514,13 @@ name = "west bump"; pixel_x = -28 }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "cDA" = ( /obj/machinery/drone_fabricator, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 @@ -41747,9 +41567,6 @@ name = "Emergency NanoMed"; pixel_y = -28 }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "cDF" = ( @@ -41965,7 +41782,7 @@ dir = 8; icon_state = "arrival" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cEj" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -41973,6 +41790,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 10 + }, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "cEk" = ( @@ -42151,11 +41971,7 @@ "cFc" = ( /obj/machinery/atmospherics/portable/canister/oxygen, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -42182,7 +41998,7 @@ dir = 8; icon_state = "arrival" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cFj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9 @@ -42212,7 +42028,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cFt" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -42222,7 +42038,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cFw" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, @@ -42442,7 +42258,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cGp" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -42454,20 +42270,27 @@ /turf/simulated/floor/plasteel{ icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cGq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cGr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cGs" = ( /obj/machinery/recharge_station, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 10 + }, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cGt" = ( @@ -42479,10 +42302,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cGu" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" @@ -42501,10 +42321,7 @@ /obj/item/multitool{ pixel_x = 5 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump Engineering"; - pixel_y = 24; +/obj/machinery/power/apc/directional/north{ shock_proof = 1 }, /turf/simulated/floor/plasteel, @@ -42563,7 +42380,7 @@ dir = 8; icon_state = "escape" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cGK" = ( /turf/simulated/wall/r_wall, /area/station/engineering/atmos/control) @@ -42590,8 +42407,8 @@ /area/station/medical/storage) "cGN" = ( /obj/machinery/atmospherics/meter, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 10 }, /turf/simulated/wall, /area/station/engineering/controlroom) @@ -42657,27 +42474,6 @@ icon_state = "darkbluecorners" }, /area/station/service/expedition) -"cGW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - autolink_id = "scibomb_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = 27; - req_access_txt = "13"; - vent_link_id = "scibomb_vent"; - ext_door_link_id = "scibomb_door_ext"; - int_door_link_id = "scibomb_door_int"; - ext_button_link_id = "scibomb_btn_ext"; - int_button_link_id = "scibomb_btn_int" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "cGX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -42776,13 +42572,14 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cHo" = ( @@ -42843,6 +42640,7 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" @@ -42906,7 +42704,7 @@ /area/station/command/office/ntrep) "cHD" = ( /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/structure/cable{ @@ -42919,11 +42717,11 @@ "cHG" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHH" = ( /obj/structure/flora/ausbushes/genericbush, /turf/simulated/floor/grass, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHL" = ( /obj/item/radio/intercom/locked/prison{ name = "Prison Intercom (General)"; @@ -42956,7 +42754,7 @@ dir = 4; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHN" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -42971,7 +42769,7 @@ dir = 8; icon_state = "escape" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -42989,7 +42787,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cHP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43001,6 +42799,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cHQ" = ( @@ -43013,9 +42812,7 @@ /area/station/engineering/break_room) "cHU" = ( /obj/structure/sign/securearea, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/purple, /turf/simulated/wall, /area/station/engineering/break_room) "cHV" = ( @@ -43088,10 +42885,7 @@ }, /area/station/command/office/ce) "cIe" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump Engineering"; - pixel_x = 24; +/obj/machinery/power/apc/directional/east{ shock_proof = 1 }, /obj/structure/cable{ @@ -43251,7 +43045,6 @@ pixel_x = 3; pixel_y = -3 }, -/obj/machinery/atmospherics/pipe/simple/insulated, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -43308,7 +43101,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cIT" = ( /obj/structure/cable{ d1 = 1; @@ -43321,6 +43114,7 @@ dir = 2; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cIV" = ( @@ -43409,6 +43203,7 @@ /obj/machinery/light{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cJp" = ( @@ -43607,14 +43402,17 @@ /turf/simulated/floor/engine, /area/station/science/misc_lab) "cJR" = ( -/obj/machinery/door/poddoor/preopen{ - name = "Biohazard Shutter"; - id_tag = "RnDChem" +/obj/machinery/atmospherics/meter{ + layer = 3.3 }, -/obj/machinery/atmospherics/pipe/simple/insulated, -/obj/effect/spawner/window/reinforced/plasma, -/turf/simulated/floor/engine, -/area/station/science/misc_lab) +/obj/structure/grille, +/obj/structure/window/plasmareinforced, +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/plating, +/area/station/science/toxins/mixing) "cJV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -43628,7 +43426,7 @@ /area/station/maintenance/port) "cJZ" = ( /turf/simulated/wall, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "cKb" = ( /turf/simulated/wall, /area/station/maintenance/assembly_line) @@ -43741,7 +43539,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cKn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -43824,7 +43622,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cKN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden, @@ -43878,6 +43676,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cKV" = ( @@ -43986,17 +43785,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/assembly_line) -"cLq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/camera{ - c_tag = "Aft Primary Hallway 1"; - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "cautioncorner" - }, -/area/station/hallway/primary/aft) "cLw" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -44162,7 +43950,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cLU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -44392,7 +44180,7 @@ dir = 1; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cMH" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, /obj/structure/cable{ @@ -44456,6 +44244,7 @@ icon_state = "2-8" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "cMX" = ( @@ -44686,13 +44475,13 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cNT" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cNU" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -44958,7 +44747,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "cON" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -45000,10 +44789,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump Engineering"; - pixel_x = -24; +/obj/machinery/power/apc/directional/west{ shock_proof = 1 }, /obj/structure/cable{ @@ -45074,6 +44860,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cPo" = ( @@ -45086,10 +44873,7 @@ icon_state = "0-4" }, /obj/structure/closet/secure_closet/engineering_personal, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump Engineering"; - pixel_x = -24; +/obj/machinery/power/apc/directional/west{ shock_proof = 1 }, /turf/simulated/floor/plasteel{ @@ -45140,10 +44924,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/window/reinforced{ dir = 1 }, @@ -45227,6 +45008,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cPN" = ( @@ -45236,7 +45018,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cPO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -45416,6 +45198,16 @@ "cQE" = ( /turf/simulated/floor/plasteel, /area/station/command/office/ce) +"cQF" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/directional/east, +/turf/simulated/floor/plasteel{ + icon_state = "yellowcorner" + }, +/area/station/hallway/primary/aft/north) "cQH" = ( /obj/machinery/power/terminal{ dir = 1 @@ -45468,6 +45260,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/landmark/lightsout, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cQL" = ( @@ -45866,6 +45659,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cRP" = ( @@ -45931,8 +45725,8 @@ /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cRV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) @@ -46072,10 +45866,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) "cSE" = ( @@ -46139,6 +45930,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cSK" = ( @@ -46195,6 +45987,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cSP" = ( @@ -46204,7 +45999,7 @@ /obj/structure/sign/poster/official/random{ pixel_x = 32 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -46266,26 +46061,26 @@ /turf/simulated/floor/carpet, /area/station/public/mrchangs) "cSY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, /obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cSZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, /obj/machinery/computer/atmos_alert{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "cTa" = ( @@ -46347,7 +46142,7 @@ }, /area/station/command/office/ce) "cTj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ dir = 4 }, /turf/simulated/wall/r_wall, @@ -46430,6 +46225,10 @@ icon_state = "bluefull" }, /area/station/medical/storage) +"cTz" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "cTA" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer{ dir = 8 @@ -46511,21 +46310,22 @@ /area/station/command/office/ce) "cTN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 5 }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cTO" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/item/painter, /obj/item/painter{ pixel_x = -4; pixel_y = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cTP" = ( @@ -46544,15 +46344,15 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/gloves/color/black, /obj/item/storage/box/lights/mixed, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/newscaster{ dir = 1; name = "south bump"; pixel_y = -28 }, /obj/item/crowbar/engineering, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cTU" = ( @@ -46584,11 +46384,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 4 @@ -46683,7 +46479,7 @@ /area/station/engineering/control) "cUm" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -46717,14 +46513,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "cUs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cUt" = ( @@ -46753,7 +46549,7 @@ /turf/simulated/floor/plasteel, /area/station/command/office/ce) "cUx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /turf/simulated/wall/r_wall, @@ -46920,9 +46716,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump Engineering"; - pixel_y = -24; +/obj/machinery/power/apc/directional/south{ shock_proof = 1 }, /turf/simulated/floor/plating, @@ -47119,11 +46913,7 @@ dir = 4; pixel_x = -22 }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_y = 24; +/obj/machinery/power/apc/critical/directional/north{ shock_proof = 1 }, /obj/machinery/atmospherics/binary/pump{ @@ -47168,6 +46958,12 @@ }, /turf/simulated/floor/carpet/royalblack, /area/station/maintenance/apmaint) +"cWm" = ( +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "cWo" = ( /obj/structure/table/wood, /obj/machinery/bottler, @@ -47306,9 +47102,7 @@ }, /area/station/command/office/ce) "cWE" = ( -/obj/structure/flora/tree/palm{ - pixel_x = 0 - }, +/obj/structure/flora/tree/palm, /obj/effect/overlay/coconut{ pixel_y = -6 }, @@ -47335,6 +47129,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 5 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cWL" = ( @@ -47352,6 +47149,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "cWM" = ( @@ -47557,7 +47357,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "yellow" @@ -47604,7 +47404,7 @@ "cXQ" = ( /obj/machinery/atmospherics/binary/volume_pump/on{ dir = 8; - name = "Filter to External" + name = "Air to External" }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) @@ -47919,6 +47719,12 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "cZa" = ( +/obj/machinery/requests_console{ + department = "Bar"; + departmentType = 2; + name = "Expedition Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkbluecorners" @@ -48000,11 +47806,7 @@ "cZp" = ( /obj/item/stack/cable_coil, /obj/structure/table/glass, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -48073,11 +47875,7 @@ /area/station/science/xenobiology) "cZz" = ( /obj/structure/reagent_dispensers/watertank, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -48153,12 +47951,6 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "cZV" = ( -/obj/machinery/access_button{ - autolink_id = "barmaint_btn_int"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, @@ -48256,18 +48048,11 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "dap" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fpsolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "dar" = ( @@ -48545,10 +48330,7 @@ }, /area/station/ai_monitored/storage/eva) "dby" = ( -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -49430,7 +49212,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "deu" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -49610,10 +49392,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 6 }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump Engineering"; - pixel_x = -24; +/obj/machinery/power/apc/directional/west{ shock_proof = 1 }, /turf/simulated/floor/plasteel, @@ -49642,10 +49421,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump Engineering"; - pixel_x = -24; +/obj/machinery/power/apc/directional/west{ shock_proof = 1 }, /turf/simulated/floor/plating, @@ -49919,9 +49695,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - name = "south bump Engineering"; - pixel_y = -24; +/obj/machinery/power/apc/directional/south{ shock_proof = 1 }, /turf/simulated/floor/plasteel{ @@ -50022,21 +49796,6 @@ /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"dgv" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - id_tag = "assolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/simulated/floor/plating, -/area/station/maintenance/starboardsolar) "dgy" = ( /obj/effect/landmark/spawner/nukedisc_respawn, /obj/structure/table, @@ -50045,14 +49804,14 @@ /area/station/maintenance/asmaint2) "dgz" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 10 }, /turf/simulated/floor/beach/sand, @@ -50063,21 +49822,6 @@ }, /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_4) -"dgH" = ( -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/wood, -/area/station/public/mrchangs) "dgI" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 @@ -50162,7 +49906,7 @@ "dgY" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/item/food/snacks/donkpocket, /turf/simulated/floor/plating, /area/station/maintenance/aft) "dgZ" = ( @@ -50227,7 +49971,7 @@ pixel_y = -24 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -50242,6 +49986,11 @@ /obj/structure/chair/wood{ dir = 8 }, +/obj/machinery/newscaster{ + dir = 8; + name = "east bump"; + pixel_x = 28 + }, /turf/simulated/floor/wood, /area/station/public/mrchangs) "dhv" = ( @@ -50683,11 +50432,7 @@ /area/space/nearstation) "dje" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -50734,6 +50479,7 @@ }, /obj/item/book/manual/barman_recipes, /obj/item/lighter/zippo, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -50759,8 +50505,8 @@ dir = 4 }, /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/flask/barflask, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/machinery/status_display{ pixel_y = 32 }, @@ -50847,10 +50593,6 @@ /turf/simulated/wall/r_wall, /area/station/engineering/control) "djw" = ( -/obj/machinery/alarm{ - name = "north bump"; - pixel_y = 24 - }, /obj/machinery/camera{ c_tag = "Hydroponics Pasture" }, @@ -50923,11 +50665,7 @@ icon_state = "0-8" }, /obj/structure/chair, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -51022,11 +50760,7 @@ }, /area/station/turret_protected/aisat/interior) "djV" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -51321,9 +51055,6 @@ dir = 6 }, /obj/machinery/ai_slipper, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -51363,11 +51094,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "dkR" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/light/small{ dir = 8 }, @@ -51428,9 +51154,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -51517,13 +51240,13 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "dlj" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; + name = "KEEP CLEAR: DOCKING AREA" }, /turf/simulated/floor/plating, -/area/station/maintenance/asmaint) +/area/station/hallway/secondary/entry/north) "dlk" = ( /obj/structure/cable{ d1 = 4; @@ -51761,7 +51484,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "dmw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -51781,7 +51504,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "dmy" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -52456,8 +52179,9 @@ /area/station/maintenance/storage) "dot" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4 + dir = 1 }, +/obj/machinery/atmospherics/meter, /turf/simulated/wall, /area/station/engineering/controlroom) "dou" = ( @@ -52676,6 +52400,12 @@ layer = 4; pixel_y = -32 }, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24; + pixel_y = -5 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -52801,7 +52531,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dpV" = ( /obj/machinery/light/small{ dir = 4 @@ -52831,11 +52561,7 @@ icon_state = "0-4" }, /obj/machinery/atmospherics/portable/scrubber, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -52873,11 +52599,7 @@ icon_state = "0-8" }, /obj/machinery/power/port_gen/pacman, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plating, /area/station/aisat/service) "dql" = ( @@ -52899,6 +52621,11 @@ /area/station/aisat/hall) "dqq" = ( /obj/machinery/porta_turret/ai_turret, +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -53007,11 +52734,7 @@ /area/station/turret_protected/ai) "drh" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -53027,6 +52750,11 @@ pixel_y = 7 }, /obj/item/pen/multi, +/obj/machinery/light_switch{ + dir = 4; + name = "west bump"; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -53183,11 +52911,7 @@ network = list("SS13","MiniSat"); start_active = 1 }, -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai) "drS" = ( @@ -53316,11 +53040,6 @@ /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai) "dsh" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -53376,7 +53095,7 @@ pixel_x = 24 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "dsH" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -53387,11 +53106,7 @@ dir = 1 }, /obj/structure/closet/secure_closet/engineering_electrical, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_y = 24; +/obj/machinery/power/apc/critical/directional/north{ shock_proof = 1 }, /obj/structure/cable{ @@ -53401,7 +53116,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "dsK" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "dsL" = ( @@ -53495,13 +53210,13 @@ /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "dtc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, /obj/machinery/light{ dir = 8 }, /obj/machinery/economy/vending/atmosdrobe, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "dtk" = ( @@ -53525,7 +53240,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "dtn" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "dto" = ( @@ -53557,10 +53272,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "dts" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump Engineering"; - pixel_y = 24; +/obj/machinery/power/apc/directional/north{ shock_proof = 1 }, /obj/structure/reagent_dispensers/watertank, @@ -53706,13 +53418,10 @@ /turf/simulated/floor/plasteel, /area/station/medical/sleeper) "dvb" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, /obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/e_to_w/arrivals, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "dvv" = ( /mob/living/simple_animal/pet/sloth/paperwork, /turf/simulated/floor/carpet, @@ -53879,7 +53588,7 @@ dir = 1; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dAA" = ( /obj/machinery/mass_driver{ dir = 4; @@ -53972,19 +53681,19 @@ /area/station/maintenance/apmaint) "dEb" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "dEq" = ( /obj/structure/rack{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -54184,7 +53893,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "dHU" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -54252,7 +53961,7 @@ dir = 10; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "dJG" = ( /obj/structure/cable{ d1 = 4; @@ -54365,7 +54074,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "dLZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 @@ -54391,7 +54100,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "dMD" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-y" @@ -54415,7 +54124,7 @@ /area/station/maintenance/asmaint) "dOb" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /obj/item/reagent_containers/glass/rag{ pixel_x = -7 }, @@ -54493,20 +54202,6 @@ icon_state = "whitepurple" }, /area/station/science/xenobiology) -"dQn" = ( -/obj/machinery/access_button{ - autolink_id = "evamaint_btn_ext"; - pixel_x = 25; - req_access_txt = "13" - }, -/obj/machinery/door/airlock/external{ - id_tag = "evamaint_door_ext"; - locked = 1; - name = "EVA External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) "dQC" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -54514,6 +54209,10 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/light_switch{ + name = "north bump"; + pixel_y = 24 + }, /turf/simulated/floor/bluegrid, /area/station/telecomms/chamber) "dQE" = ( @@ -54580,21 +54279,11 @@ /turf/simulated/floor/plating, /area/station/aisat/hall) "dRz" = ( -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/cautery, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/structure/table/tray, -/obj/item/scalpel, /obj/machinery/status_display{ layer = 4; pixel_x = -32 }, +/obj/structure/table/tray, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, @@ -54883,7 +54572,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "dYV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -54984,7 +54673,7 @@ id = "Courtroom" }, /turf/simulated/floor/wood, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "eba" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mecha_wreckage/durand/old, @@ -55268,12 +54957,12 @@ /obj/structure/rack{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -55304,17 +54993,22 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) +"egd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "egi" = ( /mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "egq" = ( /obj/structure/closet/secure_closet/brig, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -55407,7 +55101,7 @@ /obj/structure/sign/vacuum/external, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "ehg" = ( /obj/structure/cable{ d1 = 1; @@ -55607,7 +55301,7 @@ /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "eje" = ( /obj/structure/railing{ dir = 8 @@ -55812,7 +55506,7 @@ sort_type_txt = "1" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "epT" = ( /obj/effect/spawner/window/reinforced/plasma, /turf/simulated/floor/plating, @@ -55972,11 +55666,11 @@ /area/station/maintenance/disposal) "esV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -56047,12 +55741,12 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "evw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -56084,11 +55778,9 @@ }, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "exh" = ( @@ -56274,6 +55966,19 @@ }, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"eCx" = ( +/obj/structure/chair/comfy/beige{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/station/hallway/secondary/entry/lounge) "eDs" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -56396,6 +56101,21 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"eGE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "eGU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -56548,13 +56268,6 @@ icon_state = "dark" }, /area/station/security/prison/cell_block/A) -"eIz" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "evamaint_vent" - }, -/turf/simulated/floor/plating/airless, -/area/station/maintenance/fpmaint2) "eIN" = ( /obj/structure/table/reinforced, /obj/effect/spawner/lootdrop/maintenance, @@ -56582,11 +56295,7 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "eJG" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -56733,6 +56442,12 @@ pixel_x = -5 }, /obj/item/storage/briefcase, +/obj/machinery/requests_console{ + department = "Medbay"; + name = "Psych Requests Console"; + pixel_x = -30; + departmentType = 2 + }, /turf/simulated/floor/wood, /area/station/medical/psych) "eNV" = ( @@ -56778,6 +56493,19 @@ /obj/effect/spawner/lootdrop/maintenance/three, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) +"eOZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple, +/turf/simulated/floor/plasteel, +/area/station/engineering/break_room) "ePp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -56802,7 +56530,7 @@ "ePP" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/grass, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "ePR" = ( /obj/structure/cable{ d2 = 2; @@ -57047,19 +56775,14 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "eXd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - id_tag = "southatmos_door_int"; - locked = 1; - name = "Atmospherics External Access" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/s_to_n/engineer{ + req_access_txt = 13 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, -/area/station/maintenance/storage) +/area/station/maintenance/auxsolarstarboard) "eXy" = ( /obj/machinery/alarm{ dir = 1; @@ -57208,6 +56931,10 @@ }, /turf/simulated/floor/carpet, /area/station/supply/qm) +"fay" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/north) "faK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -57415,6 +57142,9 @@ /obj/machinery/computer/mob_battle_terminal/red, /turf/simulated/floor/plasteel, /area/station/public/dorms) +"feN" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "feR" = ( /obj/structure/chair/office/light{ dir = 4 @@ -57715,7 +57445,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "flN" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -57859,6 +57589,15 @@ /obj/machinery/door/airlock/command/glass, /turf/simulated/floor/plasteel, /area/station/supply/qm) +"fof" = ( +/obj/structure/rack, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "fog" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 5 @@ -57972,6 +57711,9 @@ icon_state = "rampbottom" }, /area/station/security/prison/cell_block/A) +"fqr" = ( +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/south) "fqt" = ( /obj/item/storage/bag/plasticbag, /obj/item/trash/fried_vox, @@ -58137,6 +57879,28 @@ icon_state = "redcorner" }, /area/station/command/bridge) +"fvs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "fvy" = ( /obj/structure/cable{ d1 = 4; @@ -58152,7 +57916,7 @@ dir = 4; icon_state = "redcorner" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "fvV" = ( /obj/structure/table, /obj/item/toy/crayon/spraycan, @@ -58224,7 +57988,7 @@ /area/station/science/hallway) "fxN" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/maintenance/asmaint) "fxP" = ( @@ -58265,7 +58029,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "fyQ" = ( /obj/structure/table, /obj/item/stack/medical/bruise_pack/advanced, @@ -58403,11 +58167,7 @@ desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -58538,7 +58298,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "fDJ" = ( /turf/simulated/wall/r_wall, /area/station/science/toxins/launch) @@ -58706,11 +58466,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, @@ -58737,6 +58493,11 @@ icon_state = "cafeteria" }, /area/station/public/dorms) +"fIS" = ( +/obj/structure/cable, +/obj/machinery/power/apc/directional/south, +/turf/simulated/floor/plasteel, +/area/station/supply/lobby) "fJa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/purple, /obj/structure/cable{ @@ -58980,21 +58741,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) -"fRa" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - id_tag = "apsolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/simulated/floor/plating, -/area/station/maintenance/portsolar) "fRh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -59109,6 +58855,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/assembly_line) +"fTL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry) "fTR" = ( /obj/item/radio/intercom{ name = "south bump"; @@ -59124,7 +58877,7 @@ icon_state = "pipe-j2" }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "fUd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -59186,7 +58939,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "fVy" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -59220,11 +58973,7 @@ dir = 6 }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -59372,7 +59121,7 @@ dir = 10; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "gcJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -59440,7 +59189,7 @@ dir = 8; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "gdY" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -59474,7 +59223,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "gea" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -59557,10 +59306,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -59643,13 +59389,12 @@ /turf/simulated/floor/carpet/royalblack, /area/station/maintenance/apmaint) "ghR" = ( -/obj/structure/sign/vacuum/external{ - pixel_x = -32 - }, /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/sign/vacuum/external{ + pixel_x = 32 + }, /turf/simulated/floor/plating, /area/station/maintenance/aft) "gif" = ( @@ -59683,11 +59428,7 @@ /turf/simulated/floor/grass, /area/station/hallway/secondary/exit) "gir" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/item/flag/nt, /obj/structure/cable{ d2 = 4; @@ -59987,7 +59728,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "gqA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -60033,20 +59774,6 @@ }, /turf/simulated/floor/plating, /area/station/science/xenobiology) -"gru" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/access_button{ - autolink_id = "southatmos_btn_int"; - pixel_x = 22; - pixel_y = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/storage) "gsd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -60168,11 +59895,7 @@ /turf/simulated/floor/carpet, /area/station/command/office/captain) "gtr" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -60198,7 +59921,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "guy" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -60215,8 +59938,8 @@ /area/station/security/prisonlockers) "guQ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -7 }, /obj/effect/spawner/lootdrop/maintenance, @@ -60494,16 +60217,6 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"gCP" = ( -/obj/machinery/door/airlock/external{ - id_tag = "scimaint_door_int"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "gCU" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/delivery/hollow, @@ -60593,7 +60306,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "gEU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -60700,6 +60413,9 @@ icon_state = "dark" }, /area/station/security/prison/cell_block/A) +"gIc" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "gId" = ( /obj/structure/cable{ d1 = 4; @@ -60831,13 +60547,20 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) +"gLE" = ( +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/north) "gLG" = ( /turf/simulated/wall, /area/station/engineering/hardsuitstorage) "gMa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/dough{ +/obj/item/food/snacks/dough{ desc = "A piece of dough. It looks moldy and is hard as a rock. Hope you're not planning on turning this into a pizza.."; name = "old dough" }, @@ -60853,11 +60576,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 1; - name = "Engineering Engine Super APC"; - pixel_x = -24; +/obj/machinery/power/apc/critical/directional/west{ shock_proof = 1 }, /turf/simulated/floor/engine, @@ -60980,12 +60699,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 }, -/obj/machinery/access_button{ - autolink_id = "apsolar_btn_int"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "13" - }, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "gOr" = ( @@ -61103,9 +60816,21 @@ icon_state = "dark" }, /area/station/medical/morgue) +"gQO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/station/medical/medbay) "gRe" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/maintenance/asmaint2) "gRg" = ( @@ -61274,11 +60999,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -61486,26 +61207,6 @@ }, /turf/simulated/floor/wood, /area/station/command/meeting_room) -"gXU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - id_tag = "sol_door_int"; - locked = 1; - name = "Arrivals External Access" - }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) -"gYf" = ( -/obj/machinery/access_button{ - autolink_id = "southatmos_btn_ext"; - pixel_x = -25; - pixel_y = -8 - }, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation) "gYq" = ( /obj/machinery/atmospherics/pipe/manifold/visible, /turf/simulated/floor/plating, @@ -62037,9 +61738,7 @@ dir = 1 }, /obj/structure/table, -/obj/item/bonegel, -/obj/item/bonesetter, -/obj/item/FixOVein, +/obj/item/storage/surgical_tray, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -62048,7 +61747,7 @@ /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/grass, -/area/station/medical/medbay2) +/area/station/medical/medbay) "hoB" = ( /obj/docking_port/stationary{ dwidth = 2; @@ -62060,12 +61759,6 @@ /turf/space, /area/space) "hoD" = ( -/obj/machinery/access_button{ - autolink_id = "fpsolar_btn_int"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "13" - }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -62434,19 +62127,20 @@ id = "Courtroom" }, /turf/simulated/floor/wood, -/area/station/legal/courtroom) +/area/station/legal/courtroom/gallery) "hyk" = ( /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) "hyv" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/item/radio/intercom{ + name = "east bump"; + pixel_x = 28 + }, /turf/simulated/floor/bluegrid, /area/station/telecomms/chamber) "hyx" = ( @@ -62517,12 +62211,6 @@ /turf/simulated/floor/plasteel, /area/station/science/storage) "hzG" = ( -/obj/machinery/access_button{ - autolink_id = "scimaint_btn_int"; - pixel_x = -28; - pixel_y = -5; - req_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -62541,34 +62229,6 @@ /obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/grass, /area/station/security/permabrig) -"hAl" = ( -/obj/structure/table/glass, -/obj/item/hemostat{ - pixel_x = 6 - }, -/obj/item/retractor{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/reagent_containers/iv_bag/salglu, -/obj/machinery/holosign_switch{ - id = "surgery2"; - pixel_x = -24; - pixel_y = 4; - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - dir = 4; - name = "custom placement"; - pixel_y = -4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/surgery/secondary) "hAG" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/disposalpipe/segment, @@ -62643,21 +62303,6 @@ icon_state = "red" }, /area/station/security/permabrig) -"hDJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/access_button{ - autolink_id = "assolar_btn_ext"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/station/engineering/solar/starboard) "hDQ" = ( /obj/structure/table/wood, /obj/machinery/recharger{ @@ -62671,7 +62316,7 @@ /area/station/command/meeting_room) "hDS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /obj/machinery/light{ dir = 8 }, @@ -62722,6 +62367,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/light_switch{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -62804,15 +62454,15 @@ /turf/simulated/floor/plating, /area/station/service/chapel) "hFM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "hGb" = ( @@ -62912,7 +62562,7 @@ icon_state = "pipe-j2s" }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "hJb" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -63037,8 +62687,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/lobby) "hMm" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -63251,6 +62906,19 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) +"hRa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/legal/courtroom/gallery) "hRq" = ( /obj/machinery/firealarm{ name = "north bump"; @@ -63312,17 +62980,22 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "hTA" = ( /obj/structure/disposalpipe/junction{ dir = 8; icon_state = "pipe-j2" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" }, -/area/station/supply/office) +/area/station/supply/sorting) "hTD" = ( /obj/effect/turf_decal/woodsiding{ dir = 8 @@ -63419,6 +63092,9 @@ icon_state = "freezerfloor" }, /area/station/security/permabrig) +"hVy" = ( +/turf/simulated/wall/r_wall, +/area/station/hallway/secondary/entry/north) "hVP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -63668,6 +63344,10 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"idr" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/lounge) "idz" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -63735,11 +63415,7 @@ /area/station/maintenance/fore) "ifH" = ( /obj/item/kirbyplants, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -63857,6 +63533,18 @@ }, /turf/simulated/floor/plasteel, /area/station/public/storage/tools) +"iib" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/requests_console{ + department = "Library"; + departmentType = 2; + name = "Library Requests Console"; + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/station/service/library) "iim" = ( /obj/machinery/computer/shuttle/mining, /obj/item/radio/intercom{ @@ -63944,6 +63632,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"ikL" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "ilh" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -64134,6 +63826,12 @@ }, /turf/simulated/floor/plasteel, /area/station/science/toxins/launch) +"ipX" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "iqf" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/flasher{ @@ -64202,11 +63900,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -64494,6 +64188,10 @@ icon_state = "neutralcorner" }, /area/station/public/dorms) +"iAI" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/supply/sorting) "iAZ" = ( /obj/machinery/door/poddoor/shutters{ id_tag = "brig_courtroom"; @@ -64524,6 +64222,9 @@ /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, /area/station/maintenance/disposal) +"iCd" = ( +/turf/simulated/wall, +/area/station/medical/patients_rooms1) "iCq" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/alarm{ @@ -64904,11 +64605,7 @@ /turf/simulated/floor/plasteel, /area/station/public/dorms) "iME" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/machinery/bluespace_beacon, /obj/structure/cable{ d2 = 8; @@ -65007,7 +64704,7 @@ }, /obj/machinery/light, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "iPo" = ( /obj/structure/cable{ d2 = 2; @@ -65085,6 +64782,23 @@ icon_state = "freezerfloor" }, /area/station/medical/cryo) +"iRG" = ( +/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/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel, +/area/station/supply/office) "iRS" = ( /obj/machinery/door/airlock/medical{ locked = 1; @@ -65242,7 +64956,13 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) +"iUj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "iUo" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -65288,6 +65008,10 @@ }, /turf/simulated/floor/plating, /area/station/command/office/ce) +"iWr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/purple, +/turf/simulated/floor/plasteel, +/area/station/engineering/break_room) "iWs" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -65603,7 +65327,7 @@ }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "jfa" = ( /obj/machinery/light{ dir = 1 @@ -65738,6 +65462,9 @@ icon_state = "whitecorner" }, /area/station/maintenance/aft) +"jje" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/south) "jjs" = ( /obj/effect/decal/cleanable/ash, /turf/simulated/floor/plating, @@ -65809,19 +65536,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/assembly_line) -"jmd" = ( -/obj/machinery/door/airlock/external{ - id_tag = "sol_door_ext"; - locked = 1; - name = "Arrivals External Access" - }, -/obj/machinery/access_button{ - autolink_id = "sol_btn_ext"; - pixel_x = -10; - pixel_y = -23 - }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) "jmM" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable, @@ -65879,7 +65593,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "jnA" = ( /obj/structure/cable{ d1 = 2; @@ -66161,7 +65875,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "jsC" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; @@ -66229,7 +65943,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "jtP" = ( /obj/item/kirbyplants, /turf/simulated/floor/wood{ @@ -66513,7 +66227,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "jAz" = ( /obj/machinery/light, /obj/effect/decal/cleanable/dirt, @@ -66635,16 +66349,6 @@ }, /turf/simulated/floor/plasteel, /area/station/public/dorms) -"jEq" = ( -/obj/machinery/access_button{ - autolink_id = "barmaint_btn_ext"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "jFf" = ( /obj/structure/closet/crate/secure{ req_one_access = list(33,41); @@ -66669,7 +66373,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "jFC" = ( /obj/structure/cable{ d2 = 4; @@ -66795,6 +66499,14 @@ icon_state = "yellowcorner" }, /area/station/engineering/hardsuitstorage) +"jJs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/directional/south, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "jKZ" = ( /obj/machinery/atmospherics/binary/pump/on, /turf/simulated/floor/plating, @@ -66821,6 +66533,20 @@ icon_state = "freezerfloor" }, /area/station/medical/cryo) +"jLz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/lounge) "jLT" = ( /obj/structure/bed, /obj/machinery/status_display{ @@ -66887,13 +66613,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/external{ - id_tag = "fssolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "jOA" = ( @@ -66910,10 +66629,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -66932,16 +66648,6 @@ }, /turf/simulated/floor/plasteel, /area/station/science/xenobiology) -"jPd" = ( -/obj/machinery/door/airlock/external{ - id_tag = "barmaint_door_int"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/station/maintenance/fsmaint) "jPk" = ( /obj/structure/cable{ d2 = 2; @@ -66962,6 +66668,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"jPF" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/supply/lobby) "jPN" = ( /obj/machinery/computer/mob_battle_terminal/blue{ pixel_x = -32 @@ -66985,7 +66695,7 @@ dir = 4; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "jPZ" = ( /obj/structure/sign/poster/official/cleanliness{ pixel_x = 32 @@ -67036,20 +66746,9 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "jRo" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "barmaint_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - req_access_txt = "13"; - vent_link_id = "barmaint_vent"; - ext_door_link_id = "barmaint_door_ext"; - int_door_link_id = "barmaint_door_int"; - ext_button_link_id = "barmaint_btn_ext"; - int_button_link_id = "barmaint_btn_int" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/fsmaint) +/obj/effect/spawner/airlock/s_to_n/long/square/engineer, +/turf/simulated/wall, +/area/station/maintenance/fpmaint2) "jRx" = ( /obj/machinery/photocopier, /turf/simulated/floor/wood, @@ -67356,6 +67055,12 @@ icon_state = "whitegreen" }, /area/station/public/sleep) +"jXy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "jYt" = ( /obj/structure/cable{ d1 = 1; @@ -67498,7 +67203,7 @@ "kdh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "kdk" = ( @@ -67570,6 +67275,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"keI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "keJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ @@ -67601,7 +67312,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "kgc" = ( -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "kgg" = ( @@ -68044,11 +67755,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "kpz" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -68074,7 +67781,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "kre" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Maintenance" @@ -68171,8 +67878,8 @@ }, /obj/item/clothing/mask/cigarette/random, /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -68246,7 +67953,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "kvp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -68445,7 +68152,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "kBl" = ( /obj/structure/table/reinforced, /obj/machinery/flasher{ @@ -68480,7 +68187,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "kBF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -68553,7 +68260,7 @@ "kCk" = ( /obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "kDd" = ( /obj/machinery/door/window/reinforced/normal{ name = "Research Director"; @@ -68608,6 +68315,12 @@ icon_state = "wood-broken7" }, /area/station/maintenance/asmaint) +"kEt" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "kEx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, @@ -68631,14 +68344,30 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "kEK" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/security/permabrig) +"kFd" = ( +/obj/machinery/requests_console{ + department = "Primary Tool Storage"; + name = "Chapel Office Request Console"; + departmentType = 2; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/station/service/chapel/office) "kFj" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -68660,7 +68389,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "kFS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -68671,7 +68400,21 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) +"kGt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue" + }, +/area/station/medical/medbay) "kGB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood, @@ -68820,6 +68563,12 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) +"kKA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "kKD" = ( /obj/machinery/power/port_gen/pacman, /obj/effect/turf_decal/stripes/line{ @@ -68856,10 +68605,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/east) "kKV" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -69043,6 +68789,16 @@ icon_state = "cult" }, /area/station/legal/lawoffice) +"kOU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, +/turf/simulated/floor/plasteel, +/area/station/supply/sorting) "kPo" = ( /obj/structure/chair/sofa/corp/right{ dir = 8 @@ -69055,7 +68811,7 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "kPY" = ( /obj/structure/closet/secure_closet/medical3, /obj/structure/mirror{ @@ -69074,7 +68830,7 @@ dir = 10; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "kQg" = ( /obj/machinery/flasher{ id = "AI"; @@ -69318,6 +69074,11 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/alarm{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, @@ -69458,12 +69219,6 @@ /turf/simulated/floor/wood, /area/station/security/permabrig) "laU" = ( -/obj/machinery/access_button{ - autolink_id = "fpsolar_btn_ext"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "13" - }, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -69588,19 +69343,6 @@ /turf/simulated/floor/grass/jungle/no_creep, /area/station/command/bridge) "lcl" = ( -/obj/machinery/airlock_controller/air_cycler{ - name = "EVA Airlock Console"; - pixel_x = 25; - req_one_access_txt = "1;5;11;18;24"; - vent_link_id = "evamaint_vent"; - ext_door_link_id = "evamaint_door_ext"; - int_door_link_id = "evamaint_door_int"; - ext_button_link_id = "evamaint_btn_ext"; - int_button_link_id = "evamaint_btn_int" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, /turf/simulated/floor/plating/airless, /area/station/maintenance/fpmaint2) "lcw" = ( @@ -69683,6 +69425,9 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/assembly_line) +"ler" = ( +/turf/simulated/wall, +/area/station/legal/courtroom/gallery) "let" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -69724,21 +69469,6 @@ icon_state = "white" }, /area/station/science/genetics) -"lgb" = ( -/obj/machinery/access_button{ - autolink_id = "fssolar_btn_ext"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "10;13" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/station/engineering/solar/auxstarboard) "lgS" = ( /obj/structure/closet/secure_closet/brig, /turf/simulated/floor/plasteel{ @@ -69832,6 +69562,12 @@ icon_state = "purplecorner" }, /area/station/science/robotics) +"lje" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/supply/sorting) "ljA" = ( /obj/structure/window/reinforced{ dir = 4 @@ -70003,7 +69739,7 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "lnQ" = ( /obj/effect/turf_decal/delivery/partial, /turf/simulated/floor/plasteel, @@ -70233,15 +69969,6 @@ /obj/machinery/light/small, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) -"lrP" = ( -/obj/machinery/door/airlock/external{ - id_tag = "southatmos_door_ext"; - locked = 1; - name = "Atmospherics External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/storage) "lsa" = ( /obj/machinery/economy/slot_machine, /obj/machinery/camera{ @@ -70327,6 +70054,9 @@ icon_state = "freezerfloor" }, /area/station/security/permabrig) +"lvc" = ( +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/south) "lvk" = ( /obj/machinery/door_control{ id = "atmos"; @@ -70486,7 +70216,7 @@ /obj/machinery/keycard_auth{ pixel_y = -26 }, -/obj/machinery/suit_storage_unit/cmo, +/obj/machinery/suit_storage_unit/cmo/secure, /obj/machinery/light{ dir = 8 }, @@ -70557,7 +70287,7 @@ /turf/simulated/floor/plasteel{ icon_state = "arrival" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "lBq" = ( /obj/structure/cable{ d1 = 1; @@ -70663,10 +70393,7 @@ dir = 4 }, /obj/structure/closet/firecloset, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) @@ -70728,7 +70455,7 @@ dir = 6; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "lFP" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/door/poddoor/preopen{ @@ -70940,6 +70667,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -70965,7 +70697,7 @@ dir = 10; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "lLn" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -71014,13 +70746,30 @@ layer = 4; pixel_y = 32 }, -/obj/machinery/camera{ - c_tag = "Virology Lobby" +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) +"lLN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutral" + }, +/area/station/hallway/secondary/entry/lounge) "lMP" = ( /obj/structure/sign/poster/contraband/random{ pixel_y = 32 @@ -71204,13 +70953,24 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet, /area/station/command/office/captain/bedroom) +"lQE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "lQS" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 8 @@ -71218,12 +70978,12 @@ /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_3) "lRi" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 8 - }, /obj/machinery/atmospherics/binary/pump{ name = "cooling loop to port" }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -71374,7 +71134,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "lVb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10 @@ -71608,11 +71368,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "mcw" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -71719,7 +71475,7 @@ }, /area/station/command/server) "mdX" = ( -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/cigarette/medical_marijuana, /turf/simulated/floor/wood{ @@ -71753,7 +71509,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "mem" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -71844,6 +71600,9 @@ icon_state = "dark" }, /area/station/maintenance/aft) +"mgM" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/lounge) "mgZ" = ( /obj/structure/chair/stool{ dir = 1 @@ -72144,7 +71903,7 @@ icon_state = "0-4" }, /turf/simulated/floor/plating, -/area/station/security/brig) +/area/station/security/prisonershuttle) "mnp" = ( /obj/structure/statue/cyberiad/north, /obj/structure/cable{ @@ -72156,6 +71915,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/south) +"mnr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "mnx" = ( /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, @@ -72239,7 +72005,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "mrc" = ( /obj/structure/chair/stool{ dir = 1 @@ -72508,7 +72274,7 @@ c_tag = "Medbay Reception Break Room"; dir = 4 }, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -72627,7 +72393,7 @@ locked = 1; name = "Cargo Docking Hatch" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle, /turf/simulated/floor/plating, /area/station/supply/storage) "mDF" = ( @@ -73067,11 +72833,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) "mMB" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -73132,7 +72894,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "mNZ" = ( /obj/structure/cable{ d1 = 1; @@ -73169,7 +72931,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "mOA" = ( /obj/structure/cable{ d1 = 4; @@ -73188,7 +72950,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "mOR" = ( /obj/structure/chair/stool{ dir = 4 @@ -73476,7 +73238,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "mXZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -73641,6 +73403,13 @@ icon_state = "darkred" }, /area/station/hallway/secondary/exit) +"nee" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/s_to_n{ + req_access_txt = "11,13" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/auxsolarport) "neo" = ( /obj/effect/spawner/window/reinforced/tinted, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -73684,6 +73453,12 @@ }, /turf/simulated/floor/plating, /area/station/security/detective) +"nff" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "nfo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -73845,14 +73620,12 @@ /turf/simulated/floor/plasteel, /area/station/medical/virology) "nnF" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fpmaint_door_ext"; - locked = 1; - name = "External Access" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/s_to_n/engineer{ + req_access_txt = 13 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, -/area/station/maintenance/apmaint) +/area/station/maintenance/fsmaint) "noq" = ( /obj/machinery/conveyor/west{ id = "QMLoad"; @@ -73878,16 +73651,6 @@ icon_state = "whitehall" }, /area/station/science/genetics) -"npm" = ( -/obj/machinery/access_button{ - autolink_id = "scimaint_btn_ext"; - pixel_x = 8; - pixel_y = 25; - req_access_txt = "13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "nps" = ( /obj/machinery/atmospherics/binary/valve/open{ dir = 4 @@ -73941,7 +73704,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -73953,6 +73715,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/storage) "nrh" = ( @@ -73980,6 +73743,18 @@ }, /turf/simulated/floor/engine, /area/station/engineering/control) +"nsq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutral" + }, +/area/station/hallway/secondary/entry/lounge) "nst" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -74083,19 +73858,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "apsolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -25; - req_access_txt = "13"; - vent_link_id = "apsolar_vent"; - ext_door_link_id = "apsolar_door_ext"; - int_door_link_id = "apsolar_door_int"; - ext_button_link_id = "apsolar_btn_ext"; - int_button_link_id = "apsolar_btn_int" - }, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "nuq" = ( @@ -74187,6 +73949,9 @@ icon_state = "4-8" }, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/general{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "nwj" = ( @@ -74347,19 +74112,9 @@ }, /area/station/science/toxins/mixing) "nBq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - autolink_id = "scimaint_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = -25; - pixel_y = -6; - req_access_txt = "13"; - vent_link_id = "scimaint_vent"; - ext_door_link_id = "scimaint_door_ext"; - int_door_link_id = "scimaint_door_int"; - ext_button_link_id = "scimaint_btn_ext"; - int_button_link_id = "scimaint_btn_int" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/long/engineer{ + req_access_txt = 13 }, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -74537,7 +74292,7 @@ dir = 6; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "nEK" = ( /obj/structure/chair/sofa/corp/corner{ dir = 6 @@ -74590,7 +74345,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "nFG" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -74688,6 +74443,19 @@ }, /turf/simulated/floor/engine/xenobio, /area/station/science/xenobiology) +"nKN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/central/sw) "nKO" = ( /obj/structure/table, /obj/item/reagent_containers/spray/pestspray, @@ -75401,7 +75169,16 @@ dir = 4; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) +"oan" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "arrival" + }, +/area/station/hallway/secondary/entry/north) "oap" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -75495,11 +75272,24 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) +"ocM" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/north) "ocX" = ( /obj/structure/table, -/obj/item/circular_saw, -/obj/item/surgicaldrill, -/obj/item/cautery, +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -75553,20 +75343,6 @@ }, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) -"oeE" = ( -/obj/machinery/door/airlock/external{ - id_tag = "scibomb_door_ext"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "oeO" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -75621,7 +75397,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "ogr" = ( /obj/structure/table, /obj/item/storage/belt/medical, @@ -75705,13 +75481,8 @@ /turf/simulated/floor/plasteel, /area/station/security/main) "oiA" = ( +/obj/item/storage/surgical_tray, /obj/structure/table/glass, -/obj/item/circular_saw, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/surgicaldrill, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" @@ -75725,6 +75496,13 @@ icon_state = "whitegreenfull" }, /area/station/public/sleep) +"oiK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple, +/turf/simulated/floor/plasteel, +/area/station/engineering/equipmentstorage) "oiL" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -75793,7 +75571,7 @@ dir = 8; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "ojp" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "MiniSat Maintenance" @@ -76096,11 +75874,7 @@ pixel_y = 24 }, /obj/structure/dresser, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -76272,11 +76046,7 @@ }, /area/station/engineering/gravitygenerator) "osZ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -76353,6 +76123,21 @@ }, /turf/simulated/floor/plasteel, /area/station/science/storage) +"ouf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "ouo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -76387,7 +76172,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "ouO" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -76420,7 +76205,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "owa" = ( /obj/machinery/ai_status_display{ pixel_x = 32; @@ -76453,9 +76238,6 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/asmaint) "oxe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/airless, /area/station/maintenance/fpmaint2) @@ -76487,7 +76269,7 @@ dir = 5; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "oxX" = ( /obj/structure/cable{ d1 = 1; @@ -76501,6 +76283,24 @@ icon_state = "bluecorner" }, /area/station/hallway/primary/central/west) +"oyt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreenfull" + }, +/area/station/medical/medbay3) "oyv" = ( /obj/structure/chair/comfy/beige{ dir = 8 @@ -76550,15 +76350,6 @@ /area/station/supply/storage) "ozX" = ( /obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, /obj/item/tank/internals/anesthetic, /obj/item/clothing/mask/breath/medical, /turf/simulated/floor/plasteel{ @@ -76614,20 +76405,10 @@ /turf/simulated/floor/mech_bay_recharge_floor, /area/station/maintenance/asmaint) "oBF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - id_tag = "fssolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/s_to_n/long/engineer, /turf/simulated/floor/plating, -/area/station/maintenance/auxsolarstarboard) +/area/station/maintenance/fpmaint2) "oBJ" = ( /obj/structure/chair/stool{ dir = 8 @@ -76767,7 +76548,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "oEG" = ( /obj/structure/chair{ dir = 8 @@ -76906,13 +76687,13 @@ }, /area/station/science/genetics) "oGU" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ - dir = 8 - }, /obj/machinery/atmospherics/binary/valve{ dir = 1; name = "port to space" }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77136,7 +76917,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "oKv" = ( /obj/structure/rack, /obj/item/extinguisher, @@ -77227,11 +77008,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/firealarm{ dir = 8; name = "west bump"; @@ -77622,10 +77399,7 @@ "oYC" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -77655,7 +77429,7 @@ dir = 4; icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "oZr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -78058,25 +77832,6 @@ icon_state = "dark" }, /area/station/medical/morgue) -"pjq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/turret_protected/aisat/interior) "pko" = ( /obj/structure/chair/stool{ dir = 8 @@ -78209,17 +77964,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) "pop" = ( +/obj/item/storage/surgical_tray, /obj/structure/table/tray, -/obj/item/cautery, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/bonegel{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/scalpel, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -78466,6 +78212,23 @@ icon_state = "white" }, /area/station/maintenance/asmaint) +"puM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "pvP" = ( /obj/machinery/defibrillator_mount/loaded{ pixel_x = -30 @@ -78490,11 +78253,7 @@ /area/station/science/misc_lab) "pwk" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -78607,11 +78366,7 @@ /turf/simulated/floor/plating, /area/station/security/prison/cell_block/A) "pzh" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -78677,7 +78432,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "pAs" = ( /obj/effect/spawner/window/reinforced/plasma, /obj/machinery/door/poddoor/preopen{ @@ -78769,11 +78524,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -78809,6 +78560,11 @@ }, /turf/simulated/floor/engine, /area/station/science/misc_lab) +"pCT" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/legal/courtroom/gallery) "pDd" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -78922,11 +78678,7 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "pFI" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -79008,7 +78760,7 @@ /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Warehouse Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plating, /area/station/maintenance/port) "pIR" = ( @@ -79027,11 +78779,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "pKi" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -79146,11 +78894,7 @@ /turf/simulated/floor/wood, /area/station/command/office/ntrep) "pNL" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -79185,7 +78929,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -79281,7 +79025,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "pRD" = ( /obj/machinery/computer/supplycomp, /obj/machinery/light{ @@ -79398,12 +79142,6 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) "pTK" = ( -/obj/machinery/access_button{ - autolink_id = "arrivalsmaint_btn_int"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, @@ -79516,15 +79254,6 @@ }, /turf/simulated/floor/engine/xenobio, /area/station/science/xenobiology) -"pWR" = ( -/obj/machinery/door/airlock/external{ - id_tag = "evamaint_door_int"; - locked = 1; - name = "EVA Internal Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) "pWW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/spawner/nukedisc_respawn, @@ -79636,14 +79365,12 @@ /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "qaB" = ( -/obj/machinery/door/airlock/external{ - id_tag = "evamaint_door_ext"; - locked = 1; - name = "EVA External Access" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/engineer{ + req_access_txt = 13 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) +/area/station/maintenance/apmaint) "qaI" = ( /obj/item/clothing/suit/chef/classic, /turf/simulated/floor/plating, @@ -79788,11 +79515,7 @@ /turf/simulated/floor/plasteel, /area/station/service/janitor) "qei" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -79917,7 +79640,7 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/station/security/brig) +/area/station/security/prisonershuttle) "qhq" = ( /turf/simulated/wall, /area/station/science/misc_lab) @@ -79928,6 +79651,24 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) +"qhI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "arrival" + }, +/area/station/hallway/secondary/entry/north) "qhL" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -80054,12 +79795,17 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) +"qjH" = ( +/turf/simulated/floor/plasteel{ + icon_state = "yellowcorner" + }, +/area/station/hallway/primary/aft/north) "qjX" = ( /obj/structure/railing, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "qkc" = ( /obj/machinery/hologram/holopad, /obj/effect/landmark/start/doctor, @@ -80067,7 +79813,7 @@ dir = 9; icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "qky" = ( /obj/structure/closet/firecloset, /obj/effect/decal/cleanable/dirt, @@ -80075,6 +79821,9 @@ /area/station/maintenance/fpmaint2) "qkz" = ( /obj/structure/chair/comfy/corp, +/obj/machinery/camera{ + c_tag = "Science lab" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purple" @@ -80336,8 +80085,8 @@ /area/station/engineering/atmos) "qpi" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, /turf/simulated/floor/plasteel, @@ -80424,6 +80173,23 @@ icon_state = "freezerfloor" }, /area/station/medical/cloning) +"qrk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "qrr" = ( /obj/machinery/door/poddoor/shutters{ id_tag = "maint_house" @@ -80440,11 +80206,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) "qrx" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -80559,6 +80321,10 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"qtx" = ( +/obj/effect/spawner/random_spawners/fungus_maybe, +/turf/simulated/wall, +/area/station/legal/courtroom/gallery) "qup" = ( /obj/structure/curtain/open/shower, /obj/machinery/shower{ @@ -80574,7 +80340,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "qvf" = ( /obj/structure/table, /obj/item/melee/baton/cattleprod, @@ -80778,6 +80544,10 @@ /obj/effect/landmark/start/psychiatrist, /turf/simulated/floor/carpet, /area/station/medical/psych) +"qzx" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/legal/courtroom/gallery) "qzV" = ( /obj/structure/chair{ dir = 1 @@ -81058,7 +80828,7 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /obj/structure/fans/tiny, /turf/simulated/floor/plating, -/area/station/security/brig) +/area/station/security/prisonershuttle) "qDJ" = ( /obj/structure/table_frame, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -81305,16 +81075,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/obj/machinery/access_button{ - autolink_id = "sol_btn_int"; - pixel_x = -22; - pixel_y = -23 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/north) "qIz" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/on{ dir = 1 @@ -81345,7 +81110,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "qKh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -81420,6 +81185,9 @@ icon_state = "barber" }, /area/station/service/barber) +"qMv" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/north) "qMY" = ( /obj/effect/turf_decal{ dir = 8 @@ -81677,8 +81445,8 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "qRw" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, /obj/effect/spawner/window/reinforced/plasma/grilled, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/station/science/toxins/mixing) "qRE" = ( @@ -81788,6 +81556,21 @@ /obj/machinery/smartfridge/id, /turf/simulated/floor/wood, /area/station/command/office/hop) +"qWF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/east) "qWJ" = ( /obj/structure/cable{ d1 = 4; @@ -81835,6 +81618,16 @@ /obj/machinery/light, /turf/simulated/floor/plasteel, /area/station/science/xenobiology) +"qZp" = ( +/obj/machinery/alarm{ + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "blue" + }, +/area/station/hallway/primary/central/nw) "qZD" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -81854,7 +81647,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/supply/sorting) "qZN" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/asmaint2) @@ -81961,11 +81754,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitegreen" @@ -82016,6 +81805,17 @@ icon_state = "dark" }, /area/station/security/execution) +"rcq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/equipmentstorage) "rcs" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -82032,7 +81832,7 @@ icon_state = "0-2" }, /turf/simulated/floor/plating, -/area/station/security/brig) +/area/station/security/prisonershuttle) "rcW" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -82041,7 +81841,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "rcY" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -82333,7 +82133,7 @@ "rkL" = ( /obj/effect/decal/cleanable/dirt, /obj/item/seeds/cannabis, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "rkS" = ( @@ -82342,6 +82142,16 @@ icon_state = "purple" }, /area/station/science/hallway) +"rlj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/aft/south) "rlm" = ( /obj/machinery/atmospherics/pipe/manifold/visible, /turf/simulated/floor/plasteel{ @@ -82550,16 +82360,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - level = 2 - }, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, /obj/effect/decal/cleanable/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 5 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "rqs" = ( @@ -82767,7 +82576,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -82777,6 +82585,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/office) "rwZ" = ( @@ -82810,7 +82620,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "rxW" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -82842,11 +82652,7 @@ /obj/structure/mopbucket/full, /obj/item/mop, /obj/item/reagent_containers/glass/bucket, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -83056,13 +82862,13 @@ dir = 8; icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "rDI" = ( /obj/machinery/economy/vending/medical, /turf/simulated/floor/plasteel{ icon_state = "darkgreen" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "rDM" = ( /obj/structure/grille, /obj/structure/barricade/wooden, @@ -83112,11 +82918,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plating, /area/station/maintenance/port) "rEz" = ( @@ -83196,21 +82998,6 @@ icon_state = "blue" }, /area/station/command/bridge) -"rFZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button{ - autolink_id = "scibomb_btn_ext"; - pixel_x = -24; - pixel_y = 25; - req_access_txt = "10;13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "rGg" = ( /obj/structure/cable{ d2 = 4; @@ -83286,16 +83073,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) -"rIX" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fpmaint_door_int"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/station/maintenance/apmaint) "rJb" = ( /obj/structure/cable{ d1 = 1; @@ -83424,25 +83201,16 @@ }, /area/station/turret_protected/ai) "rMP" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "fpsolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - req_access_txt = "13"; - vent_link_id = "fpsolar_vent"; - ext_door_link_id = "fpsolar_door_ext"; - int_door_link_id = "fpsolar_door_int"; - ext_button_link_id = "fpsolar_btn_ext"; - int_button_link_id = "fpsolar_btn_int" - }, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, /turf/simulated/floor/plating, -/area/station/maintenance/auxsolarport) +/area/station/maintenance/fpmaint2) "rMX" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 8 @@ -83462,25 +83230,33 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) +"rOl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, +/turf/simulated/floor/plasteel, +/area/station/supply/sorting) "rOm" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, /area/station/command/bridge) -"rOS" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - autolink_id = "sol_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -25; - vent_link_id = "sol_vent"; - ext_door_link_id = "sol_door_ext"; - int_door_link_id = "sol_door_int"; - ext_button_link_id = "sol_btn_ext"; - int_button_link_id = "sol_btn_int" - }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) "rOW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -83509,7 +83285,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "rPs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -83569,6 +83345,15 @@ icon_state = "freezerfloor" }, /area/station/security/permabrig) +"rRy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/engineering/controlroom) "rSd" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -83720,9 +83505,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -83730,8 +83512,11 @@ dir = 2; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "rVK" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ @@ -83879,7 +83664,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "rZE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -83925,15 +83710,19 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"sbt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" +"sbd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/station/supply/office) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/medbay) "sbD" = ( /obj/machinery/atmospherics/unary/outlet_injector/on{ dir = 8; @@ -84036,9 +83825,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -84050,8 +83836,11 @@ d2 = 8; icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "sfc" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -84421,21 +84210,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) -"spJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - id_tag = "assolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/station/maintenance/starboardsolar) "spK" = ( /obj/structure/cable{ d1 = 4; @@ -84452,6 +84226,9 @@ icon_state = "white" }, /area/station/science/xenobiology) +"spM" = ( +/turf/simulated/wall/r_wall, +/area/station/security/prisonershuttle) "sqb" = ( /obj/structure/bed, /obj/structure/window/reinforced{ @@ -84576,7 +84353,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "stX" = ( /obj/structure/chair/office/light{ dir = 8 @@ -84633,6 +84410,26 @@ }, /turf/simulated/floor/wood, /area/station/command/office/hop) +"suJ" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/iv_bag/salglu, +/obj/machinery/holosign_switch{ + id = "surgery2"; + pixel_x = -24; + pixel_y = 4; + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = -24; + dir = 4; + name = "custom placement"; + pixel_y = -4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/station/medical/surgery/secondary) "suM" = ( /obj/structure/flora/grass/jungle, /obj/machinery/light{ @@ -84688,7 +84485,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "syf" = ( /turf/simulated/floor/plasteel{ dir = 5; @@ -84759,7 +84556,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "sAl" = ( /turf/simulated/floor/plasteel{ icon_state = "whitecorner" @@ -84851,12 +84648,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/access_button{ - autolink_id = "fssolar_btn_int"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, @@ -84931,7 +84722,7 @@ dir = 1; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "sFm" = ( /obj/effect/turf_decal{ dir = 8 @@ -84949,7 +84740,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "sFy" = ( /obj/structure/closet/l3closet/scientist, /turf/simulated/floor/plating, @@ -85154,11 +84945,7 @@ /area/station/public/arcade) "sMJ" = ( /obj/structure/chair, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -85286,6 +85073,23 @@ /obj/item/clothing/suit/mantle/old, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) +"sPw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "sPx" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -85332,13 +85136,17 @@ /turf/simulated/floor/plasteel{ icon_state = "grimy" }, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/lounge) "sQt" = ( /obj/structure/table, /obj/structure/sign/poster/official/random{ pixel_y = -32 }, /obj/item/trash/gum, +/obj/machinery/camera{ + c_tag = "Virology Observation"; + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whitegreen" @@ -85497,19 +85305,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - req_access_txt = "13"; - vent_link_id = "assolar_vent"; - ext_door_link_id = "assolar_door_ext"; - int_door_link_id = "assolar_door_int"; - ext_button_link_id = "assolar_btn_ext"; - int_button_link_id = "assolar_btn_int" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - autolink_id = "assolar_vent" - }, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "sTQ" = ( @@ -85521,7 +85316,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "sTX" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, @@ -85616,6 +85411,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) +"sYi" = ( +/obj/structure/table/glass, +/obj/machinery/firealarm{ + name = "north bump"; + pixel_y = 24 + }, +/obj/item/reagent_containers/iv_bag/salglu, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/station/medical/surgery/primary) "sYp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -85643,6 +85449,9 @@ icon_state = "whitepurplecorner" }, /area/station/science/hallway) +"sYL" = ( +/turf/simulated/wall, +/area/station/hallway/secondary/entry/lounge) "sYT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -85698,11 +85507,7 @@ pixel_y = -24 }, /obj/structure/closet/wardrobe/pjs, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -85746,15 +85551,6 @@ /mob/living/simple_animal/slime, /turf/simulated/floor/engine, /area/station/science/xenobiology) -"taW" = ( -/obj/machinery/door/airlock/external{ - id_tag = "scimaint_door_ext"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "tbr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/binary/pump, @@ -85817,12 +85613,12 @@ /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plating, /area/station/maintenance/port) "tcM" = ( @@ -85860,6 +85656,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) +"tdg" = ( +/obj/structure/table/wood, +/obj/machinery/power/apc/directional/south, +/obj/structure/cable, +/obj/item/reagent_containers/drinks/mug, +/turf/simulated/floor/wood, +/area/station/public/mrchangs) "tdj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -86116,18 +85919,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - autolink_id = "southatmos_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = -25; - vent_link_id = "southatmos_vent"; - ext_door_link_id = "southatmos_door_ext"; - int_door_link_id = "southatmos_door_int"; - ext_button_link_id = "southatmos_btn_ext"; - int_button_link_id = "southatmos_btn_int" - }, /turf/simulated/floor/plating, /area/station/maintenance/storage) "tle" = ( @@ -86224,7 +86015,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "tpM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -86357,6 +86148,9 @@ icon_state = "wood-broken5" }, /area/station/maintenance/asmaint) +"tum" = ( +/turf/simulated/floor/plasteel, +/area/station/supply/lobby) "tuZ" = ( /obj/structure/weightmachine/stacklifter, /turf/simulated/floor/plasteel, @@ -86432,21 +86226,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) -"tvQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "arrivalsmaint_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - req_access_txt = "13"; - vent_link_id = "arrivalsmaint_vent"; - ext_door_link_id = "arrivalsmaint_door_ext"; - int_door_link_id = "arrivalsmaint_door_int"; - ext_button_link_id = "arrivalsmaint_btn_ext"; - int_button_link_id = "arrivalsmaint_btn_int" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) "twe" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -86517,7 +86296,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "twL" = ( /obj/structure/bed{ dir = 4 @@ -86584,11 +86363,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "tzW" = ( @@ -86732,7 +86507,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/north) "tDv" = ( /obj/structure/cable{ d1 = 4; @@ -87053,7 +86828,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "tLs" = ( /obj/structure/safe/floor, /obj/item/coin/mythril, @@ -87170,12 +86945,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/access_button{ - autolink_id = "assolar_btn_int"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "10;13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -87188,7 +86957,7 @@ /area/station/maintenance/starboardsolar) "tNc" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/maintenance/aft) "tNn" = ( @@ -87384,6 +87153,25 @@ icon_state = "vault" }, /area/station/maintenance/apmaint) +"tRF" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, +/obj/item/reagent_containers/drinks/flask/gold, +/obj/item/clothing/mask/cigarette/cigar, +/obj/item/razor{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/carpet, +/area/station/command/office/captain/bedroom) "tRO" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -87421,7 +87209,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "tSM" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -87476,11 +87264,7 @@ /turf/simulated/floor/plasteel, /area/station/security/storage) "tTh" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -87489,7 +87273,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "tTj" = ( /obj/structure/cable{ d1 = 1; @@ -87508,7 +87292,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "tUd" = ( /obj/structure/closet/cabinet, /obj/item/clothing/accessory/stethoscope, @@ -87591,7 +87375,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "tWz" = ( /obj/item/radio/beacon, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -87601,17 +87385,17 @@ /area/station/science/test_chamber) "tWD" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -87676,7 +87460,7 @@ dir = 1; icon_state = "whiteblue" }, -/area/station/medical/medbay3) +/area/station/medical/patients_rooms_secondary) "tYe" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -87870,12 +87654,6 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/machinery/access_button{ - autolink_id = "fpmaint_btn_int"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "13" - }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "uco" = ( @@ -88027,6 +87805,17 @@ /obj/effect/spawner/random_spawners/grille_maybe, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"ugH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/plasteel, +/area/station/security/prisonershuttle) "ugW" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/decal/cleanable/dirt, @@ -88083,12 +87872,6 @@ }, /area/station/science/misc_lab) "uhA" = ( -/obj/machinery/access_button{ - autolink_id = "scibomb_btn_int"; - pixel_x = 24; - pixel_y = 25; - req_access_txt = "10;13" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88166,10 +87949,7 @@ pixel_y = 5 }, /obj/item/clothing/gloves/color/latex/nitrile, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ dir = 1; @@ -88178,8 +87958,8 @@ /area/station/medical/storage) "uls" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, /turf/simulated/floor/wood{ @@ -88241,15 +88021,12 @@ }, /area/station/command/office/hop) "unh" = ( -/obj/machinery/door/airlock/external{ - id_tag = "arrivalsmaint_door_ext"; - locked = 1; - name = "Engineering External Access" +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/w_to_e/engineer{ + req_access_txt = 13 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) +/area/station/maintenance/asmaint) "uno" = ( /obj/structure/cable{ d1 = 1; @@ -88390,7 +88167,7 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "urf" = ( /obj/effect/landmark/start/scientist, /obj/structure/chair{ @@ -88484,7 +88261,7 @@ dir = 1; icon_state = "yellowcorner" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "usZ" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -88495,26 +88272,6 @@ }, /turf/simulated/floor/carpet/green, /area/station/command/bridge) -"utp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "fssolar_vent" - }, -/obj/machinery/airlock_controller/air_cycler{ - pixel_x = 25; - req_access_txt = "13"; - vent_link_id = "fssolar_vent"; - ext_door_link_id = "fssolar_door_ext"; - int_door_link_id = "fssolar_door_int"; - ext_button_link_id = "fssolar_btn_ext"; - int_button_link_id = "fssolar_btn_int" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/auxsolarstarboard) "utu" = ( /obj/structure/cable{ d1 = 1; @@ -88807,16 +88564,6 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) -"uBQ" = ( -/obj/machinery/access_button{ - autolink_id = "fpmaint_btn_ext"; - pixel_x = 25; - pixel_y = 8; - req_access_txt = "13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "uCf" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/unary/passive_vent, @@ -88953,7 +88700,7 @@ /area/station/engineering/atmos/distribution) "uGf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/grilledcheese{ +/obj/item/food/snacks/grilledcheese{ pixel_y = 9 }, /turf/simulated/floor/wood, @@ -89029,15 +88776,12 @@ pixel_y = 9 }, /obj/item/clothing/gloves/color/latex/nitrile, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "uIo" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -89115,7 +88859,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "uLo" = ( /obj/structure/chair/sofa/corp/right, /turf/simulated/floor/plasteel, @@ -89264,7 +89008,7 @@ /area/station/maintenance/apmaint2) "uRK" = ( /obj/item/organ/internal/heart/vox, -/obj/item/reagent_containers/food/snacks/fried_vox, +/obj/item/food/snacks/fried_vox, /obj/structure/table, /obj/item/scalpel, /turf/simulated/floor/plating, @@ -89299,7 +89043,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89308,6 +89051,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/storage) "uTj" = ( @@ -89468,12 +89212,9 @@ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "uVH" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -89693,11 +89434,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 8; - name = "Engineering Engine Super APC"; - pixel_x = -24; +/obj/machinery/power/apc/critical/directional/west{ shock_proof = 1 }, /obj/structure/cable, @@ -89853,10 +89590,7 @@ }, /area/station/medical/surgery) "vfy" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/structure/cable{ d1 = 1; @@ -89960,7 +89694,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "vic" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -90080,7 +89814,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "vmA" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -90220,23 +89954,6 @@ icon_state = "whiteyellow" }, /area/station/medical/chemistry) -"vpQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - id_tag = "apsolar_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/portsolar) "vpR" = ( /obj/machinery/door/airlock/security/glass{ name = "Solitary Confinement 2" @@ -90340,20 +90057,10 @@ }, /area/station/maintenance/asmaint) "vrV" = ( -/obj/machinery/door/airlock/external{ - id_tag = "fpsolar_door_ext"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/engineer, /turf/simulated/floor/plating, -/area/station/maintenance/auxsolarport) +/area/station/maintenance/starboardsolar) "vsw" = ( /obj/effect/decal/cleanable/dirt, /obj/item/flag/rnd, @@ -90419,7 +90126,7 @@ /turf/simulated/floor/plasteel{ icon_state = "red" }, -/area/station/security/brig) +/area/station/security/prisonershuttle) "vtG" = ( /obj/machinery/door/airlock/external{ id_tag = "aisat_door_ext"; @@ -90502,7 +90209,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "vwg" = ( /obj/structure/cable{ d1 = 2; @@ -90530,9 +90237,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -90569,6 +90273,9 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"vwz" = ( +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/entry/south) "vwC" = ( /obj/structure/closet/secure_closet/RD, /obj/machinery/light_switch{ @@ -90774,18 +90481,6 @@ icon_state = "dark" }, /area/station/engineering/smes) -"vBv" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, -/obj/machinery/atmospherics/meter{ - layer = 3.3 - }, -/obj/structure/grille, -/obj/structure/window/plasmareinforced, -/obj/structure/window/plasmareinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/station/science/toxins/mixing) "vBC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet, @@ -90827,11 +90522,7 @@ /turf/simulated/floor/carpet/royalblue, /area/station/command/office/captain) "vCM" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -91051,11 +90742,14 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "vJn" = ( /obj/structure/girder, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -91365,23 +91059,6 @@ name = "Old Note #6" }, /area/station/maintenance/assembly_line) -"vQt" = ( -/obj/machinery/airlock_controller/air_cycler{ - pixel_y = 6; - req_access_txt = "13"; - vent_link_id = "fpmaint_vent"; - ext_door_link_id = "fpmaint_door_ext"; - int_door_link_id = "fpmaint_door_int"; - pixel_x = 24; - ext_button_link_id = "fpmaint_btn_ext"; - int_button_link_id = "fpmaint_btn_int" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - autolink_id = "fpmaint_vent" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/apmaint) "vQZ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -91564,11 +91241,7 @@ /area/station/maintenance/port) "vWe" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) "vWw" = ( @@ -91615,11 +91288,7 @@ }, /area/station/science/toxins/mixing) "vXp" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -91651,7 +91320,7 @@ pixel_x = 28 }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "vYx" = ( /obj/item/flag/med, /turf/simulated/floor/plating, @@ -91726,7 +91395,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "waF" = ( /obj/structure/cable{ d2 = 4; @@ -91739,7 +91408,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "waK" = ( /obj/structure/cable{ d1 = 4; @@ -91835,7 +91504,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, -/area/station/supply/office) +/area/station/supply/sorting) "wcf" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -91904,7 +91573,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/west) "weq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -91997,6 +91666,9 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/south) +"wgW" = ( +/turf/simulated/wall, +/area/station/medical/patients_rooms_secondary) "whn" = ( /obj/machinery/door/airlock/virology/glass{ name = "Workstation" @@ -92107,7 +91779,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkgreenfull" }, -/area/station/medical/medbay2) +/area/station/medical/medbay3) "wjV" = ( /obj/structure/chair/sofa/bench{ dir = 1; @@ -92262,16 +91934,6 @@ /obj/effect/spawner/random_spawners/cobweb_right_frequent, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) -"wnU" = ( -/obj/machinery/alarm{ - dir = 4; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/engineering/control) "woA" = ( /obj/machinery/shower{ dir = 8 @@ -92433,6 +92095,15 @@ }, /turf/simulated/floor/plating, /area/station/command/office/ntrep) +"wrY" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "blue" + }, +/area/station/legal/courtroom/gallery) "wss" = ( /obj/machinery/computer/cryopod{ pixel_x = 30; @@ -92458,7 +92129,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/station/security/brig) +/area/station/security/prisonershuttle) "wsY" = ( /obj/structure/table, /obj/item/storage/box/prisoner, @@ -92549,10 +92220,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "wuC" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -92746,6 +92414,11 @@ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light_switch{ + dir = 8; + name = "east bump"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -92867,8 +92540,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10; - level = 2 + dir = 10 }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) @@ -93021,6 +92693,13 @@ }, /turf/simulated/floor/plating/airless, /area/station/maintenance/asmaint) +"wHK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple, +/turf/simulated/floor/plasteel, +/area/station/engineering/equipmentstorage) "wHN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -93064,6 +92743,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"wIt" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Virology Lobby"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "cautioncorner" + }, +/area/station/hallway/primary/aft/north) "wIB" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -93107,6 +92797,9 @@ icon_state = "blue" }, /area/station/command/bridge) +"wKl" = ( +/turf/simulated/floor/plasteel, +/area/station/supply/sorting) "wKx" = ( /obj/structure/railing{ dir = 1 @@ -93599,21 +93292,6 @@ icon_state = "whitegreen" }, /area/station/public/sleep) -"wZp" = ( -/obj/machinery/access_button{ - autolink_id = "apsolar_btn_ext"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "13" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/station/engineering/solar/port) "wZy" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -93621,7 +93299,7 @@ icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/station/security/brig) +/area/station/security/prisonershuttle) "wZM" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -93705,6 +93383,16 @@ icon_state = "white" }, /area/station/science/xenobiology) +"xbm" = ( +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "yellowcorner" + }, +/area/station/hallway/primary/aft/south) "xbn" = ( /obj/vehicle/janicart, /obj/machinery/requests_console{ @@ -93791,16 +93479,6 @@ icon_state = "whitepurplecorner" }, /area/station/science/hallway) -"xdO" = ( -/obj/machinery/access_button{ - autolink_id = "arrivalsmaint_btn_ext"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "xdY" = ( /obj/structure/chair/office/light{ dir = 4 @@ -94039,11 +93717,7 @@ }, /area/station/maintenance/fsmaint) "xjV" = ( -/obj/machinery/power/apc{ - cell_type = 5000; - name = "south bump Important Area"; - pixel_y = -24 - }, +/obj/machinery/power/apc/important/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" @@ -94092,6 +93766,23 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"xlR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/port/west) "xlV" = ( /obj/machinery/atmospherics/binary/pump/on, /obj/machinery/access_button{ @@ -94196,23 +93887,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) -"xmS" = ( -/obj/machinery/door/airlock/external{ - id_tag = "scibomb_door_int"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "xnn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -94247,10 +93921,7 @@ }, /area/station/security/permabrig) "xol" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /obj/machinery/economy/vending/robodrobe, /turf/simulated/floor/plasteel{ @@ -94258,11 +93929,7 @@ }, /area/station/science/robotics) "xoE" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -94484,7 +94151,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) +/area/station/hallway/secondary/entry/south) "xuG" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 @@ -94495,6 +94162,10 @@ icon_state = "dark" }, /area/station/engineering/control) +"xve" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/purple, +/turf/simulated/floor/plasteel, +/area/station/engineering/equipmentstorage) "xvg" = ( /obj/structure/cable{ d1 = 1; @@ -94536,7 +94207,7 @@ }, /area/station/science/hallway) "xwJ" = ( -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /obj/machinery/requests_console{ announcementConsole = 1; department = "Captain's Desk"; @@ -94588,7 +94259,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "xxI" = ( /obj/structure/cable{ d1 = 1; @@ -94969,7 +94640,7 @@ /area/station/medical/surgery/observation) "xII" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pistachios, +/obj/item/food/snacks/pistachios, /obj/item/poster/random_contraband, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -95425,15 +95096,10 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint2) "xSF" = ( -/obj/machinery/door/airlock/external{ - id_tag = "arrivalsmaint_door_int"; - locked = 1; - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/spawner/airlock/e_to_w/engineer, /turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) +/area/station/maintenance/portsolar) "xSH" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -95474,12 +95140,6 @@ pixel_y = 24 }, /obj/structure/table/glass, -/obj/item/circular_saw, -/obj/item/surgicaldrill, -/obj/item/bonesetter{ - pixel_x = 5; - pixel_y = 5 - }, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 @@ -95571,28 +95231,6 @@ icon_state = "freezerfloor" }, /area/station/public/toilet/unisex) -"xVr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/supply/office) "xVy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -95763,7 +95401,7 @@ dir = 8; icon_state = "yellow" }, -/area/station/hallway/primary/aft) +/area/station/hallway/primary/aft/south) "xWO" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -95856,7 +95494,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup, +/obj/item/reagent_containers/drinks/trophy/bronze_cup, /obj/machinery/light/small{ dir = 1 }, @@ -96070,6 +95708,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint2) +"ygg" = ( +/turf/simulated/floor/plating, +/area/station/hallway/secondary/entry/north) +"ygh" = ( +/turf/simulated/wall, +/area/station/security/prisonershuttle) "ygr" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -96100,6 +95744,9 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"ygM" = ( +/turf/space, +/area/station/hallway/secondary/entry/north) "ygR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -96333,7 +95980,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/hallway/primary/port) +/area/station/hallway/primary/port/east) "yku" = ( /turf/simulated/floor/plasteel{ dir = 5; @@ -96357,15 +96004,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft) -"yky" = ( -/obj/machinery/door/airlock/external{ - id_tag = "barmaint_door_ext"; - locked = 1; - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/simulated/floor/plating, -/area/station/maintenance/fsmaint) "ykF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/girder, @@ -96389,7 +96027,7 @@ /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/station/medical/medbay) +/area/station/medical/patients_rooms1) "ylC" = ( /obj/structure/chair/sofa/corp, /turf/simulated/floor/plasteel, @@ -96403,7 +96041,7 @@ dir = 8; icon_state = "whiteblue" }, -/area/station/medical/medbay2) +/area/station/medical/medbay) "ylP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/purple{ dir = 4 @@ -105031,8 +104669,8 @@ aaa aaa aaa aaa -apx -jmd +dlj +ygg dvb aab aab @@ -105288,11 +104926,11 @@ aaa aaa aaa aaa -apx -rOS -apx +fay +ygg +fay aab -aLd +hVy aaa aaa aVV @@ -105542,14 +105180,14 @@ aaa aaa aaa aaa -aMs -aMs -aMs -aLd -gXU -apx -aMs -aLd +qMv +qMv +qMv +hVy +ygg +fay +qMv +hVy aaa aVV aVV @@ -105575,7 +105213,7 @@ aaa aaa aaa aaa -bjQ +aUo aaa aaa aaa @@ -105802,12 +105440,12 @@ aJP aJP aRm aOP -aMs +qMv qIw aMB -apx -apx -apx +fay +fay +fay aVV aXr jyO @@ -105832,7 +105470,7 @@ aaa aaa aaa aaa -aLd +fqr aaa aaa aaa @@ -106058,13 +105696,13 @@ aJS aLb aMp aNt -aOQ +ygg aPZ -aMd -aSf -aRU -aOQ -aRU +keI +feN +gLE +ygg +gLE aVX aXs aYZ @@ -106083,13 +105721,13 @@ aaa aaa aaa aaa -bjQ +aUo aaa aaa aaa aaa aaa -apx +aSn aaa aaa aaa @@ -106317,11 +105955,11 @@ aJP aRm aOR aQa -aMd +keI aMD -apx -apx -apx +fay +fay +fay aVV aXt aXs @@ -106340,13 +105978,13 @@ aaa aaa aaa aaa -aLd +fqr aaa aaa aaa aaa aaa -apx +aSn aaa aaa aaa @@ -106570,15 +106208,15 @@ aaa aaa aaa aaa -aMs -aMs -aMs -aLd +qMv +qMv +qMv +hVy aRa -aME -aTo -aUl -apx +ipX +aUV +ocM +fay aVV aXu aYZ @@ -106597,16 +106235,16 @@ aaa aaa aaa aaa -apx +aSn aaa aaa aaa aaa aaa -apx -apx -apx -apx +aSn +aSn +aSn +aSn aaa aaa aaa @@ -106830,12 +106468,12 @@ aJR aJR aRV aOP -aMs +qMv aPJ -aSf -aSf +feN +feN aUk -apx +fay aVY aXv aXs @@ -106854,13 +106492,13 @@ aaa aaa aaa aaa -apx +aSn aaa aaa aaa aaa aaa -apx +aSn bGm bLY bKp @@ -107086,13 +106724,13 @@ aJV aLf aMt aNy -aOQ +ygg aPZ aPQ -aSf -aSf +feN +feN aUn -apx +fay aVY aXw aYZ @@ -107111,13 +106749,13 @@ aaa aaa aaa aaa -apx +aSn aaa aaa aaa aaa aaa -apx +aSn bGl bLX bKp @@ -107347,9 +106985,9 @@ aOR aQa aPQ aRd -aTp +nff aUm -apx +fay aVV aXx aXs @@ -107368,13 +107006,13 @@ aaa aaa aaa aaa -aMs +jje aaa aaa aaa aaa aaa -apx +aSn bKp bKp ehf @@ -107598,15 +107236,15 @@ aab aab aab aab -aMs +qMv aNw aNw -aLd +hVy aPT aMD -apx -apx -apx +fay +fay +fay aVV aXy aYZ @@ -107625,16 +107263,16 @@ aaa aaa aaa aaa -aMs +jje aaa aaa aaa aaa aaa -apx +aSn aMd bLZ -apx +aSn aaa aaa aaa @@ -107860,10 +107498,10 @@ mxz aKa aGn aPR -aSf -aRU -aOQ -aRU +feN +gLE +ygg +gLE aVX aXs jyO @@ -107882,16 +107520,16 @@ aaa bvf aaa aaa -aMs +jje aaa aaa bCi aaa aaa -apx +aSn aMd bLZ -apx +aSn aaa aaa aaa @@ -108112,15 +107750,15 @@ doE loS loS loS -loS +oBF aHl aLg pUb aQw aRe -apx -apx -apx +fay +fay +fay aVV aVV aYV @@ -108135,20 +107773,20 @@ blB bsh apx aab -apx +aSn bvl -apx +aSn aab -aMs +jje aab -apx +aSn bDC -apx +aSn aaa -apx +aSn aMd bLZ -apx +aSn aaa aaa aaa @@ -108365,19 +108003,19 @@ aaa aaa aaa aaa -xdO -unh +doE +aHS +aHS +aHS aHS -tvQ -xSF pTK aND aGn -aPY -aME +oan +ipX aRO -apx -aUZ +fay +ygM aVV aXn aYT @@ -108391,21 +108029,21 @@ bpX bmS bgR aLd -apx -apx -aOQ -apx -apx -aMs -apx -apx -aOQ -apx -apx -apx +aSn +aSn +lvc +aSn +aSn +jje +aSn +aSn +lvc +aSn +aSn +aSn aMd bMa -bjQ +aUo aaa aaa aaa @@ -108631,10 +108269,10 @@ aNC tmn aGn aPY -aSf +feN aRT -aLd -aLd +hVy +hVy aLd apx apx @@ -108649,20 +108287,20 @@ aSf bsl aMs aUl -apx +aSn bvl -apx +aSn bwO -aMs +jje aUl -apx +aSn bDC -apx +aSn bBg bLs -bmS +kEt bMb -aLd +fqr aaa aaa aaa @@ -108887,12 +108525,12 @@ loS aNA aKN aGn -aPY -aSf +oan +feN aRS -aUo aUV -aTo +aUV +fTL aTo aTo aTo @@ -108906,20 +108544,20 @@ aSf aSj bgG aME -aTo -aSf -aTo -bmS +jXy +vwz +jXy +kEt bzr aME bHW -aSf -aTo -bmS -aSj -aSf +vwz +jXy +kEt +iUj +vwz bLZ -apx +aSn aaa aaa aaa @@ -109147,7 +108785,7 @@ aGn aQy aRf aRW -aSn +qhI aTt aVd aXq @@ -109163,7 +108801,7 @@ brj bsq buf buS -boR +ouf boR bBs bDu @@ -109176,7 +108814,7 @@ bKU bLC bwT bMc -apx +aSn aaa aaa aaa @@ -109417,7 +109055,7 @@ aSd aSd aSd bre -bgG +idr bqr bqr bqr @@ -109432,7 +109070,7 @@ xuz vYh dsG sFv -bwx +cWm blQ aaa aaa @@ -109673,7 +109311,7 @@ aSW bgt bkc bmo -brk +nsq bwx bqr brU @@ -109930,8 +109568,8 @@ aSW bgj bjO bmo -brk -aSf +nsq +mgM bqr buX btF @@ -110159,7 +109797,7 @@ aaa aaa ymb ymb -ymb +nee aDu aEC aFQ @@ -110187,7 +109825,7 @@ aSX bhm bhm aSX -brk +nsq bpF bqr btF @@ -110222,7 +109860,7 @@ fJK rcY cgQ lRv -lRv +qaB aab aaa aaa @@ -110414,8 +110052,8 @@ asb asb asb laU -vrV -rMP +dap +dap dap hoD aEE @@ -110477,10 +110115,10 @@ bGn jWI noP ubK -rIX -vQt -nnF -uBQ +coL +coL +coL +doE aaa aaa aaa @@ -110698,10 +110336,10 @@ aUt bgB bhO sQe -bhv +eCx bhv aSY -brk +lLN boT bqr btF @@ -110954,12 +110592,12 @@ aZb aVc bcG bhN -aMs -aMs -aMs -aMs +sYL +sYL +sYL +sYL brn -aSf +mgM bqr bvb btA @@ -111216,7 +110854,7 @@ biv bkd blJ brk -aSf +mgM bqr bvc btH @@ -111470,8 +111108,8 @@ bgC bhQ biA blh -biA -biA +blq +blq brp bsx bqr @@ -111724,11 +111362,11 @@ aVe aUr aTu bgD -aSf -aSf +mgM +mgM aYD blV -boW +jLz bnu boW jyy @@ -111984,7 +111622,7 @@ aTu aTu bgn blr -bgG +idr blM blM blM @@ -113268,8 +112906,8 @@ aTu aTu aTu bgr -biJ -bgz +sPw +kKA blM bpa bpa @@ -113525,7 +113163,7 @@ bbj bdb beR bgz -biJ +puM bgz blM bnr @@ -114019,7 +113657,7 @@ bat aGn aKW aGn -aGn +jRo aUy fAQ aNB @@ -114039,7 +113677,7 @@ bbl bdd beR bgz -biJ +puM bki blM bnB @@ -114273,11 +113911,11 @@ aaa aaa doE doE -qaB -eIz -eIz -pWR -aLx +aHS +lcl +lcl +aHS +rMP blG aHl aLu @@ -114296,7 +113934,7 @@ bal bde aVi bgz -biJ +xlR bkb blM bnC @@ -114530,10 +114168,10 @@ aaa aaa aaa doE -dQn +aHS oxe lcl -aEM +aHS hFM blG aHS @@ -114553,7 +114191,7 @@ bal bcT aVi bgz -biJ +puM bgz bkx bnD @@ -115066,9 +114704,9 @@ aXQ bal bdh aVi -bgz -biJ -bkg +cTz +eGE +bEt blM bnF bpd @@ -115324,8 +114962,8 @@ aMV aNv beR bgz -biJ -bkf +puM +lQE blM bnG bnD @@ -115582,7 +115220,7 @@ bgQ aVh aSF wem -bkg +bEt blM bnH bnD @@ -117122,8 +116760,8 @@ aZi bbq xxt kFu -bgA -biJ +mnr +qWF bkg blR blR @@ -117183,7 +116821,7 @@ aab aab aaa aaa -wZp +cPG aaa aaa aaa @@ -117440,8 +117078,8 @@ aaa aab aaa swl -fRa -swl +ntD +xSF aab aab aab @@ -117954,7 +117592,7 @@ aaa aab swl swl -vpQ +ntD swl swl aab @@ -118151,8 +117789,8 @@ aUE aab gdZ bgA -biJ -bkg +qrk +egd blR iFm bsM @@ -118665,8 +118303,8 @@ aSu aSu aSu bgE -bmf -bkg +fvs +jJs blR bqA bsI @@ -118921,7 +118559,7 @@ aSz aLI aSz qeM -bgF +ikL bmx bpj blR @@ -118937,10 +118575,10 @@ byy qZK dHH bDU -bzJ +bfx bHc -bzJ -xVr +bfx +rOl bMx bSM bUn @@ -119135,7 +118773,7 @@ aaa aaa aaa aaa -aqI +spM mnj abN abN @@ -119192,18 +118830,18 @@ bxd byk byz bzG -bzJ -bzJ -bzJ +bfx +bfx +bfx rZp -bDX +iAI vhH -bDX +iAI bSK bPV bRN bTv -hLL +iRG bBn bYJ bzJ @@ -119392,12 +119030,12 @@ aaa aaa aaa aaa -aqI +spM ayo atN rCT kQb -auc +ygh qNk pYa pzZ @@ -119435,7 +119073,7 @@ bkT cGR cYH dim -bgz +gIc biG bkg blW @@ -119447,15 +119085,15 @@ bBU blQ bxd bDN -bBn -bPS +wKl +lje bIG bJE bKI hTA bKZ bNW -bzJ +bfx bzJ gdY bDX @@ -119654,7 +119292,7 @@ auC jeQ awB vtj -auc +ygh hiO uGA dFG @@ -119705,20 +119343,20 @@ blQ oKs byl wbT -bPS -bBn -bBn -bBn -bPS +lje +wKl +wKl +wKl +lje bMk bNV -bzJ +bfx bOt bHi bUU bUU hLL -bBn +bsY cgW cao cdQ @@ -119911,7 +119549,7 @@ fvy aBA wsT ank -auc +ygh akm lJf anu @@ -119949,7 +119587,7 @@ bkW cGS cYK dim -bgz +gIc dmx bpk bql @@ -119960,7 +119598,7 @@ bqJ bwA blQ bxf -bzJ +bfx bzI kCk bIK @@ -119969,7 +119607,7 @@ bzE hIR bzE bNX -sbt +kOU bzF fTS bzF @@ -120163,12 +119801,12 @@ aaa aaa aaa aaa -aqI +spM auy aeF -wsT -auc -auc +ugH +ygh +ygh gWZ eiv uFa @@ -120206,7 +119844,7 @@ aSA aSA aSA aSA -bgz +gIc blF bko blQ @@ -120217,13 +119855,13 @@ bnK sZe blQ lnv -bzJ +bfx bzH bBo bIJ qus box -bBn +wKl bKC bFx bMA @@ -120232,7 +119870,7 @@ bUo bUV bVL bXj -bBn +fIS cgW caq ckw @@ -120474,20 +120112,20 @@ svp bwz blQ bxg -bzJ +bfx bzK bBp bCE bEf bFy bHn -bzJ +bfx rxg -bzJ +bfx bSQ bUp bUX -bBn +tum bVt bWU cgW @@ -120730,23 +120368,23 @@ bnT cGD blQ blQ -bzJ -bzJ -bzJ -bzJ -bzJ +bfx +bfx +bfx +bfx +bfx kPH -bDX -bDX -bzJ +iAI +iAI +bfx ccZ -bzJ -bDX -bDX +bfx +jPF +jPF bUW bPW -bDX -bDX +jPF +jPF cgW cgW wrU @@ -120934,7 +120572,7 @@ aaa aaa aaa aaa -aqI +spM aeI afc afp @@ -120977,7 +120615,7 @@ aUF cGZ rmK aSA -bgP +qZp bmV ukX dnN @@ -121191,7 +120829,7 @@ aaa aaa aaa aaa -aqI +spM aeH auV afo @@ -121820,7 +121458,7 @@ dts cYq dcP dcP -dcP +cby dar aaa aaa @@ -122036,7 +121674,7 @@ hwK bSi cdT cfm -cfl +nKN cgQ gYs tGO @@ -122763,8 +122401,8 @@ aHA hxA aHA aHA -aEl -lQx +ler +qtx tkb aRw bah @@ -123014,13 +122652,13 @@ aDi aFo aIl aHC -aJc +wrY aKt aLU aNJ aJc aPC -aEl +ler gZn aRr aRw @@ -123055,7 +122693,7 @@ qPl bOK kdk jdt -bQw +tRF oRE bTS tvD @@ -123277,7 +122915,7 @@ aLT aNG aOz aPB -aEl +ler aGb aRr aRw @@ -123534,7 +123172,7 @@ aLW aJJ aOB aPE -aEl +ler aQl aRr aRw @@ -123785,7 +123423,7 @@ aCm aFp aDe aHD -aDL +pCT aKu aLV aJF @@ -123893,7 +123531,7 @@ pMy cSU vXQ ePY -wnU +ePY ePY cUM cSU @@ -124042,13 +123680,13 @@ aEd aFs aDe aHD -aDL +pCT aKu aLY aNN aOH aPG -aEl +ler bag aRr aQl @@ -124299,13 +123937,13 @@ aCn aFr ksh aHG -aHG +hRa aKv aLX aNM aKr aPF -aEl +ler aPi aVK aYb @@ -124555,14 +124193,14 @@ aDi aEg aFt aIl -aEl -aBn -aBn +ler +qzx +qzx aMa aNP -aBn -aBn -aEl +qzx +qzx +ler aad vEH aYh @@ -125130,11 +124768,11 @@ fku ckO ckO cua -cLq +wIt tpi crX czA -ckO +cBE cAN cBE cDx @@ -125393,7 +125031,7 @@ ctt czz gtZ cAM -cvJ +rlj was mXT tTj @@ -125639,12 +125277,12 @@ cdN ciN cfn clZ -cnA +cQF lUC crV ctl cue -cnA +qjH lUC cuu cnA @@ -125658,7 +125296,7 @@ cGq cHO cGq dMr -clZ +xbm cnA lBg cRR @@ -126163,7 +125801,7 @@ cxd cyx csD csD -cBF +csD dot cFj cGN @@ -126677,23 +126315,23 @@ cxf cxv czC csD -cmG -cBL +ctY +rRy cDE csD cGs cHu -cHX -dcj -dcj -dcj -dcj -dcj +eOZ +iWr +iWr +iWr +iWr +iWr bHY -cRX -cPO -cRX -cRS +xve +wHK +xve +oiK cWJ cPO gLG @@ -126886,7 +126524,7 @@ bgT biR bpR cSX -dgH +tdg aDN bhq bnn @@ -126935,7 +126573,7 @@ cxr cGI cvB cAR -cBJ +cBL cDA csD cHQ @@ -127465,7 +127103,7 @@ cRX cRX cRX cRS -cWJ +rcq cPO cYM cNV @@ -128516,7 +128154,7 @@ ouA ouA deW dgI -gru +mhG mhG dop dor @@ -128772,8 +128410,8 @@ dcq dcq dcq dcq -eXd -dOc +ddr +bzN dfx eLY dOc @@ -129543,7 +129181,7 @@ bbM dlv cZS dcq -lrP +ddr dOc jhW dfT @@ -129799,7 +129437,7 @@ qRU dkO dkO cZS -gYf +aab aaa dOc fXw @@ -130267,10 +129905,10 @@ pZl tfv kAp bWa -bQV +iCd oDG -bQV -bQV +iCd +iCd cCW xTJ pNL @@ -130786,7 +130424,7 @@ nEA oxN der cCW -cck +sYi tsJ cAr cuf @@ -131798,7 +131436,7 @@ ogI ogI ogI bZJ -cbO +gQO bWu bXF bZh @@ -132054,7 +131692,7 @@ bPh bSq rdL kSv -uTX +kGt jAv bWt cnY @@ -132079,7 +131717,7 @@ hpR cDf dRz oiA -hAl +suJ chq cDf cKj @@ -132825,7 +132463,7 @@ can bNz can iev -mPX +sbd kFS cnY cfI @@ -132899,7 +132537,7 @@ dpw dpf dkb dkg -pjq +dlb dqx dqm wny @@ -133348,9 +132986,9 @@ bTZ bWd bWd cfK -pAi +bQV kUE -ckr +wgW cof jnh cuB @@ -133563,7 +133201,7 @@ aVq aZE aPm aPm -bfx +bdN aOI aQI bbI @@ -133607,7 +133245,7 @@ sZh bWd chp ciJ -ckr +wgW clc kBk cnD @@ -133864,7 +133502,7 @@ oPO bWd cht geX -ckr +wgW clf nFp cuG @@ -134121,7 +133759,7 @@ eGV sqx chs ciP -ckr +wgW cle lFH cnF @@ -134635,7 +134273,7 @@ hNr bWd cfJ ciR -ckr +wgW jFo cmn cnH @@ -137197,9 +136835,9 @@ bEu pAi pAi pAi -pAi +ckr psm -pAi +ckr lLM cem cfW @@ -137403,7 +137041,7 @@ aab aab fnH fnH -fnH +eXd aGU aHK aIB @@ -137456,9 +137094,9 @@ bVV cuQ vxz pMM -pAi +ckr bWi -wjQ +oyt qJN chD cpy @@ -137657,10 +137295,10 @@ aqZ azU awQ axq -lgb +axq +jOz +jOz jOz -utp -oBF sDz aHI aIA @@ -137771,8 +137409,8 @@ chf klf klf klf -klf -npm +nBq +doE aaa aaa aaa @@ -137970,7 +137608,7 @@ bVX cuQ cKQ bXW -pAi +ckr vmr cer kBr @@ -138025,10 +137663,10 @@ cyJ cyJ cep hzG -gCP +cep ghR -nBq -taW +cep +cep doE aaa aaa @@ -138203,7 +137841,7 @@ dnU bov bqa brt -bsY +bqa buL bws bxN @@ -139459,7 +139097,7 @@ aab doE ici ici -ici +nnF aGY aOC aGX @@ -139713,10 +139351,10 @@ aab aqZ aaa aaa -jEq -yky -jRo -jPd +doE +aGY +aGY +aGY cZV aGY dys @@ -141280,7 +140918,7 @@ bax bcj bep bfT -bkQ +iib bjF bll bcp @@ -143674,7 +143312,7 @@ kdc csL djP cQC -dlj +fof dlz dSu csL @@ -143849,7 +143487,7 @@ baz bcC bcz bcz -bcz +kFd baz bjD bpO @@ -145957,7 +145595,7 @@ cDG cFU cHp cIF -cJR +cJP oEK cLe tWz @@ -146762,7 +146400,7 @@ dfb dfn fNh fNh -fNh +vrV aaa aaa aab @@ -147017,10 +146655,10 @@ jZT deN dfa tMT -spJ sTF -dgv -hDJ +sTF +sTF +ddE ddE ddE ddN @@ -148765,7 +148403,7 @@ cgs pMj eis nTk -vBv +cJR vXo ijP eAb @@ -149022,7 +148660,7 @@ cgs gZe ooY plq -vBv +cJR evw tHH iFq @@ -149279,7 +148917,7 @@ cgs iUx jzz lVB -vBv +cJR oGw cqe wuZ @@ -150063,8 +149701,8 @@ aab ciY ycI ycI -xmS -ycI +cNq +unh ciY pCv ciY @@ -150320,7 +149958,7 @@ aaa aaa aab ycI -cGW +cNq ycI ciY sKQ @@ -150577,7 +150215,7 @@ aab aaa doE ycI -oeE +cNq ycI ciY qlE @@ -150834,7 +150472,7 @@ aab aab doE doE -rFZ +cxm doE ciY ciY diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm index 9ac44c603b06..e3cd67a5917c 100644 --- a/_maps/map_files/generic/Lavaland.dmm +++ b/_maps/map_files/generic/Lavaland.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/simulated/wall/boss, +/turf/simulated/wall/indestructible/boss, /area/lavaland/surface/outdoors) "ab" = ( /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, @@ -481,11 +481,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 @@ -605,11 +601,7 @@ /turf/simulated/floor/plasteel, /area/mine/laborcamp) "bB" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Labor Camp APC"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /obj/machinery/computer/cryopod{ pixel_y = 38 }, @@ -960,11 +952,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkfull" @@ -972,7 +960,7 @@ /area/mine/outpost/storage) "cl" = ( /obj/structure/lattice/catwalk/mining, -/obj/item/reagent_containers/food/snacks/fortunecookie{ +/obj/item/food/snacks/fortunecookie{ pixel_y = -5; pixel_x = -6 }, @@ -1037,11 +1025,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkfull" @@ -1217,11 +1201,7 @@ /obj/structure/cable/cyan{ icon_state = "0-2" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/bluegrid, /area/mine/outpost/comms) "cR" = ( @@ -1284,10 +1264,7 @@ }, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/mine/outpost/production) "cY" = ( @@ -1327,10 +1304,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; @@ -1348,7 +1322,7 @@ "de" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 @@ -1503,10 +1477,7 @@ dir = 8; pixel_y = -5 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ icon_state = "purplecorner"; @@ -2070,11 +2041,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/catwalk, /area/mine/outpost/engineering) "ex" = ( @@ -2206,31 +2173,27 @@ /area/mine/outpost/medbay) "eJ" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -1; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 7; pixel_y = 5 }, /obj/item/storage/box/donkpockets, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /obj/structure/cable{ icon_state = "0-4" }, @@ -2375,11 +2338,11 @@ /area/mine/outpost/hallway/west) "eW" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -2886,10 +2849,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkyellowcorners" @@ -3788,10 +3748,7 @@ /area/lavaland/surface/outdoors) "km" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "ko" = ( @@ -5398,11 +5355,7 @@ }, /area/mine/outpost/storage) "vf" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Labor Camp Security APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -5819,7 +5772,7 @@ "ya" = ( /obj/effect/mapping_helpers/no_lava, /obj/effect/mapping_helpers/no_lava, -/turf/simulated/wall/boss, +/turf/simulated/wall/indestructible/boss, /area/lavaland/surface/outdoors) "yb" = ( /obj/structure/table/glass, @@ -6139,6 +6092,10 @@ icon_state = "darkred" }, /area/mine/laborcamp/security) +"Ad" = ( +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/wall/indestructible/boss, +/area/lavaland/surface/outdoors) "Ai" = ( /obj/machinery/alarm{ dir = 1; @@ -6328,7 +6285,7 @@ /area/mine/outpost/production) "Bu" = ( /obj/structure/reagent_dispensers/oil, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "By" = ( @@ -6344,11 +6301,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkpurplecorners" @@ -6960,11 +6913,7 @@ "FH" = ( /obj/structure/cable, /obj/effect/spawner/random_spawners/dirt_maybe, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, +/obj/machinery/power/apc/directional/west, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/east) "FL" = ( @@ -7514,11 +7463,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/machinery/power/apc/directional/east, /turf/simulated/floor/carpet, /area/mine/outpost/quartermaster) "Kc" = ( @@ -8459,11 +8404,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, +/obj/machinery/power/apc/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkfull" @@ -41293,7 +41234,7 @@ aa aa aa aa -Rl +Ad gG pP kg @@ -41557,8 +41498,8 @@ pH Ol ag le -Rl -Rl +Ad +Ad ls Aw Aw @@ -41570,8 +41511,8 @@ Aw Aw Aw lI -Rl -Rl +Ad +Ad wr Ly Ly @@ -41828,7 +41769,7 @@ XU KO KO Eq -Rl +Ad hF Ly Ly @@ -42342,7 +42283,7 @@ pS bc Qr bc -Rl +Ad IZ Ly Ly @@ -42585,8 +42526,8 @@ Pl hk gr hH -Rl -Rl +Ad +Ad lw Aw Aw @@ -42598,8 +42539,8 @@ Aw Aw lw Aw -Rl -Rl +Ad +Ad Vq Ly Ly @@ -42835,7 +42776,7 @@ aa aa aa aa -Rl +Ad gr pP kl diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index afd70a1a1f52..6201efae4930 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -747,7 +747,6 @@ /turf/simulated/floor/carpet/black, /area/ghost_bar) "cS" = ( -/obj/effect/landmark/spawner/teleport_scroll, /obj/structure/table/wood/fancy/black, /obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet{ name = "our demands"; @@ -855,7 +854,7 @@ /area/centcom) "du" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/plasteel/freezer, /area/ninja/holding) "dv" = ( @@ -876,7 +875,7 @@ /area/ninja/holding) "dy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel/freezer, /area/ninja/holding) "dz" = ( @@ -1099,7 +1098,7 @@ pixel_y = 5; pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/mugwort{ +/obj/item/reagent_containers/drinks/mugwort{ pixel_y = 6; pixel_x = 8 }, @@ -1413,7 +1412,7 @@ /area/ninja/holding) "fv" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/novelty, +/obj/item/reagent_containers/drinks/mug/novelty, /obj/item/candle/eternal/wizard{ pixel_y = 11 }, @@ -1449,24 +1448,24 @@ /area/shuttle/administration) "fF" = ( /obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/spaghetti, +/obj/item/food/snacks/spaghetti, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -2391,11 +2390,11 @@ /area/ghost_bar) "iv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/tonic{ +/obj/item/reagent_containers/drinks/cans/tonic{ pixel_x = 7; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel, /area/centcom/evac) "iw" = ( @@ -2634,7 +2633,7 @@ /area/syndicate_mothership) "jo" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss, +/obj/item/reagent_containers/drinks/drinkingglass/devilskiss, /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) "jp" = ( @@ -3734,7 +3733,7 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/clothing/suit/space/hardsuit/shielded/wizard, +/obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/clothing/suit/space/santa{ pixel_x = 3; pixel_y = -3 @@ -3844,7 +3843,7 @@ /area/admin) "mV" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup/toolbox_win, +/obj/item/reagent_containers/drinks/trophy/bronze_cup/toolbox_win, /turf/simulated/floor/plasteel/dark, /area/tdome/tdomeobserve) "mW" = ( @@ -4105,7 +4104,7 @@ /area/shuttle/administration) "nI" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -2; pixel_y = 5 }, @@ -4218,7 +4217,7 @@ /area/centcom/suppy) "nY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/mushroompizzaslice{ +/obj/item/food/snacks/mushroompizzaslice{ pixel_x = -5; pixel_y = 5 }, @@ -4233,7 +4232,7 @@ /area/admin) "ob" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 5; pixel_y = -2 }, @@ -4293,7 +4292,7 @@ /area/ghost_bar) "om" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /turf/simulated/floor/plasteel/dark, /area/tdome/tdomeobserve) "on" = ( @@ -4398,11 +4397,11 @@ /area/shuttle/trade/sol) "oJ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/kitchen/knife, @@ -4411,7 +4410,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/machinery/reagentgrinder{ @@ -4791,7 +4790,7 @@ /area/holodeck/source_thunderdomecourt) "ql" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /obj/machinery/light{ dir = 8 }, @@ -4856,7 +4855,7 @@ /area/syndicate_mothership) "qw" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/machinery/newscaster{ dir = 1; @@ -4976,7 +4975,7 @@ "qT" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /turf/simulated/floor/wood, /area/syndicate_mothership) "qU" = ( @@ -5113,13 +5112,13 @@ /area/admin) "ro" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/berries, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/berries, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/mushroom/amanita, /turf/simulated/floor/plasteel/freezer, /area/admin) "rp" = ( @@ -5347,7 +5346,7 @@ "rT" = ( /obj/structure/table/wood/poker, /obj/item/clothing/mask/cigarette/cigar/havana, -/obj/item/reagent_containers/food/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/cognac, /turf/simulated/floor/transparent/glass, /area/tdome/tdomeobserve) "rU" = ( @@ -5514,7 +5513,7 @@ pixel_y = -32 }, /obj/structure/rack/skeletal_bar/left, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/wood, /area/syndicate_mothership) "sD" = ( @@ -5522,7 +5521,7 @@ pixel_y = -32 }, /obj/structure/rack/skeletal_bar/right, -/obj/item/reagent_containers/food/drinks/bottle/gin, +/obj/item/reagent_containers/drinks/bottle/gin, /turf/simulated/floor/wood, /area/syndicate_mothership) "sE" = ( @@ -5536,7 +5535,7 @@ /area/syndicate_mothership) "sF" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/light{ dir = 4 }, @@ -6695,15 +6694,15 @@ /area/ghost_bar) "wN" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/machinery/reagentgrinder{ @@ -7163,22 +7162,22 @@ /area/holodeck/source_boxingcourt) "zj" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/citrus/lime, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/citrus/lime, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/deus, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -7375,9 +7374,7 @@ /area/wizard_station) "Ak" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/radio/phone{ - desc = "How else would the wizards order pizza?" - }, +/obj/structure/pondering_orb, /obj/effect/turf_decal/woodsiding{ dir = 6 }, @@ -7407,6 +7404,7 @@ /obj/item/surgicaldrill, /obj/item/bonegel, /obj/item/FixOVein, +/obj/item/stack/medical/ointment/advanced, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -7457,7 +7455,7 @@ /area/admin) "As" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss, +/obj/item/reagent_containers/drinks/drinkingglass/devilskiss, /turf/simulated/floor/wood, /area/admin) "At" = ( @@ -7535,9 +7533,9 @@ "AL" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/syndicate, -/obj/item/reagent_containers/food/drinks/cans/adminbooze, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, -/obj/item/reagent_containers/food/drinks/cans/madminmalt, +/obj/item/reagent_containers/drinks/cans/adminbooze, +/obj/item/reagent_containers/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/madminmalt, /turf/simulated/floor/plasteel, /area/admin) "AM" = ( @@ -7676,7 +7674,7 @@ "Bo" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel{ @@ -7900,7 +7898,7 @@ /area/centcom/suppy) "Cj" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/madminmalt{ +/obj/item/reagent_containers/drinks/cans/madminmalt{ pixel_y = 2 }, /turf/simulated/floor/plasteel, @@ -8283,10 +8281,7 @@ }, /area/centcom/suppy) "DD" = ( -/obj/machinery/power/apc{ - name = "Gamma Armory APC"; - pixel_y = -24 - }, +/obj/machinery/power/apc/directional/south, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -8294,7 +8289,7 @@ /obj/structure/sign/securearea{ pixel_x = -32 }, -/obj/machinery/suit_storage_unit/gamma, +/obj/machinery/suit_storage_unit/gamma/secure, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/gamma/space) "DE" = ( @@ -9894,22 +9889,22 @@ /area/shuttle/escape) "Jl" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/citrus/lime, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/citrus/lime, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/deus, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -9980,24 +9975,24 @@ /area/centcom/specops) "JB" = ( /obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/spaghetti, +/obj/item/food/snacks/spaghetti, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -10268,25 +10263,25 @@ /area/centcom/evac) "Kw" = ( /obj/structure/closet/secure_closet/freezer/kitchen, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -10939,8 +10934,8 @@ /area/centcom/evac) "MF" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/bottle/cognac{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/cognac{ pixel_x = 10 }, /turf/simulated/floor/carpet/black, @@ -10953,7 +10948,7 @@ /area/centcom/specops) "MH" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/carpet/black, /area/centcom/evac) "MI" = ( @@ -11100,8 +11095,8 @@ /area/centcom/suppy) "MY" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka{ pixel_x = -12 }, /turf/simulated/floor/carpet/black, @@ -11349,11 +11344,11 @@ /area/centcom/gamma) "NT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/sodawater{ +/obj/item/reagent_containers/drinks/cans/sodawater{ pixel_x = 6; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/cans/starkist, +/obj/item/reagent_containers/drinks/cans/starkist, /turf/simulated/floor/plasteel, /area/centcom/evac) "NU" = ( @@ -11413,25 +11408,25 @@ /obj/structure/closet/secure_closet/freezer/kitchen{ req_access = null }, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -11499,13 +11494,13 @@ /area/wizard_station) "Ov" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/madminmalt, +/obj/item/reagent_containers/drinks/cans/madminmalt, /turf/simulated/floor/wood, /area/centcom/evac) "Ow" = ( /obj/structure/table, /obj/item/lighter/zippo, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /turf/simulated/floor/wood, /area/centcom/evac) "Ox" = ( @@ -11517,12 +11512,12 @@ /area/tdome/arena) "Oy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/wood, /area/centcom/evac) "Oz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/centcom/evac) "OA" = ( @@ -11556,7 +11551,7 @@ /area/centcom/control) "OE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind, +/obj/item/reagent_containers/drinks/cans/space_mountain_wind, /turf/simulated/floor/wood, /area/centcom/evac) "OF" = ( @@ -11845,7 +11840,7 @@ "Pw" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel/dark, @@ -13325,7 +13320,7 @@ /area/ghost_bar) "Vs" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/wood, /area/centcom/evac) "Vt" = ( @@ -13343,7 +13338,7 @@ /area/tdome/tdomeadmin) "Vv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/madminmalt, +/obj/item/reagent_containers/drinks/cans/madminmalt, /turf/simulated/floor/plasteel, /area/centcom/evac) "Vx" = ( @@ -13352,7 +13347,7 @@ "Vy" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel{ @@ -13390,7 +13385,7 @@ /area/centcom/evac) "VH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/tonic, +/obj/item/reagent_containers/drinks/cans/tonic, /turf/simulated/floor/wood, /area/centcom/evac) "VI" = ( @@ -13565,14 +13560,14 @@ /area/shuttle/escape) "Wr" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -50120,7 +50115,7 @@ IS LN LN LN -NF +vy Mb LR LR diff --git a/_maps/map_files/shuttles/admin_armory.dmm b/_maps/map_files/shuttles/admin_armory.dmm index cf88f4744262..c9304f924b24 100644 --- a/_maps/map_files/shuttles/admin_armory.dmm +++ b/_maps/map_files/shuttles/admin_armory.dmm @@ -340,10 +340,6 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/administration) -"wQ" = ( -/obj/effect/spawner/window/shuttle, -/turf/space, -/area/shuttle/administration) "xm" = ( /obj/structure/table/reinforced, /obj/item/rcd/preloaded, @@ -960,7 +956,7 @@ vk NQ NQ NQ -wQ +NQ vk vk vk diff --git a/_maps/map_files/shuttles/admin_hospital.dmm b/_maps/map_files/shuttles/admin_hospital.dmm index c6d87689ecaa..167f4c130b61 100644 --- a/_maps/map_files/shuttles/admin_hospital.dmm +++ b/_maps/map_files/shuttles/admin_hospital.dmm @@ -304,18 +304,8 @@ /turf/simulated/floor/mineral/titanium, /area/shuttle/administration) "bw" = ( +/obj/item/storage/surgical_tray, /obj/structure/table/tray, -/obj/item/stack/medical/bruise_pack/advanced, -/obj/item/scalpel, -/obj/item/hemostat, -/obj/item/retractor, -/obj/item/circular_saw, -/obj/item/bonegel, -/obj/item/bonesetter, -/obj/item/cautery, -/obj/item/FixOVein, -/obj/item/surgicaldrill, -/obj/item/storage/backpack/duffel/medical, /turf/simulated/floor/mineral/titanium, /area/shuttle/administration) "bx" = ( @@ -548,12 +538,12 @@ /turf/simulated/floor/mineral/titanium, /area/shuttle/administration) "cp" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage, /turf/simulated/floor/mineral/titanium, /area/shuttle/administration) "cq" = ( /obj/machinery/light, -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage, /turf/simulated/floor/mineral/titanium, /area/shuttle/administration) "cr" = ( diff --git a/_maps/map_files/shuttles/emergency_bar.dmm b/_maps/map_files/shuttles/emergency_bar.dmm index 3a9aeaf95116..96ee62dfcff4 100644 --- a/_maps/map_files/shuttles/emergency_bar.dmm +++ b/_maps/map_files/shuttles/emergency_bar.dmm @@ -45,7 +45,7 @@ /area/shuttle/escape) "an" = ( /obj/structure/table/wood/poker, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/carpet/red, /area/shuttle/escape) "ao" = ( @@ -245,7 +245,7 @@ "aU" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -296,7 +296,7 @@ "bd" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/clothing/mask/cigarette/cigar, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" diff --git a/_maps/map_files/shuttles/emergency_clown.dmm b/_maps/map_files/shuttles/emergency_clown.dmm index 4f474c5dda29..1aa2399414c1 100644 --- a/_maps/map_files/shuttles/emergency_clown.dmm +++ b/_maps/map_files/shuttles/emergency_clown.dmm @@ -148,7 +148,7 @@ icon_state = "greentext"; name = "greentext" }, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /turf/simulated/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "aI" = ( diff --git a/_maps/map_files/shuttles/emergency_cyb.dmm b/_maps/map_files/shuttles/emergency_cyb.dmm index ffd77b68bc53..0577f3c6e123 100644 --- a/_maps/map_files/shuttles/emergency_cyb.dmm +++ b/_maps/map_files/shuttles/emergency_cyb.dmm @@ -891,7 +891,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /turf/simulated/floor/plasteel{ icon_state = "cmo" }, @@ -1013,7 +1013,7 @@ aO aH aH aH -bj +ac bg ba ba diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm index 1a170bf230c5..d6f6a2b87054 100644 --- a/_maps/map_files/shuttles/emergency_dept.dmm +++ b/_maps/map_files/shuttles/emergency_dept.dmm @@ -341,7 +341,7 @@ /area/shuttle/escape) "bd" = ( /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/table/wood, /obj/machinery/light{ dir = 4 diff --git a/_maps/map_files/shuttles/emergency_jungle.dmm b/_maps/map_files/shuttles/emergency_jungle.dmm index 8f2900e751ad..13184bd06f12 100644 --- a/_maps/map_files/shuttles/emergency_jungle.dmm +++ b/_maps/map_files/shuttles/emergency_jungle.dmm @@ -607,7 +607,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /mob/living/carbon/human/monkey, /turf/simulated/floor/grass, /area/shuttle/escape) diff --git a/_maps/map_files/shuttles/ferry_meat.dmm b/_maps/map_files/shuttles/ferry_meat.dmm index 0d0a4f7fab4c..8a21a1c75e2d 100644 --- a/_maps/map_files/shuttles/ferry_meat.dmm +++ b/_maps/map_files/shuttles/ferry_meat.dmm @@ -36,13 +36,13 @@ /obj/structure/closet/secure_closet/freezer/meat, /obj/item/grenade/chem_grenade/meat, /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/pug, -/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct, -/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/ham, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/monkey, +/obj/item/food/snacks/meat/pug, +/obj/item/food/snacks/meat/slab/meatproduct, +/obj/item/food/snacks/meat/syntiflesh, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, diff --git a/_maps/map_files/templates/biodome_beach.dmm b/_maps/map_files/templates/biodome_beach.dmm index 2f3f5db29c94..994144d3207e 100644 --- a/_maps/map_files/templates/biodome_beach.dmm +++ b/_maps/map_files/templates/biodome_beach.dmm @@ -110,8 +110,8 @@ /area/ruin/powered/beach) "au" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/wood, /area/ruin/powered/beach) "av" = ( @@ -120,7 +120,7 @@ dir = 8; name = "Beach Bar Desk" }, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar{ dir = 8 @@ -363,7 +363,7 @@ /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) "bP" = ( -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) "bQ" = ( diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index a5d11498f77d..0ea165cfb5e2 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -165,16 +165,16 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/bottle/wine, /turf/simulated/floor/carpet/black, /area/survivalpod) "B" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 1 }, diff --git a/_maps/map_files220/MetaStation/MetaStation.dmm b/_maps/map_files220/MetaStation/MetaStation.dmm index 44ce8c9b69ca..c7558bb09d0d 100644 --- a/_maps/map_files220/MetaStation/MetaStation.dmm +++ b/_maps/map_files220/MetaStation/MetaStation.dmm @@ -56,11 +56,11 @@ /area/space/nearstation) "abv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -229,7 +229,7 @@ /area/station/security/detective) "adc" = ( /obj/structure/closet/secure_closet/clown, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/newscaster/directional/south, /turf/simulated/floor/wood, /area/station/service/clown) @@ -260,7 +260,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/processing) "adA" = ( @@ -551,7 +551,7 @@ /area/shuttle/pod_3) "afT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, @@ -664,7 +664,7 @@ /obj/item/restraints/handcuffs, /obj/item/flash, /obj/machinery/alarm/directional/south, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /obj/item/storage/lockbox/spy_kit, /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -683,9 +683,6 @@ dir = 8; name = "Inner Pipe Access" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos{ - dir = 8 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -750,20 +747,20 @@ /area/station/public/fitness) "aii" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = -5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, @@ -818,6 +815,11 @@ d2 = 8; icon_state = "0-8" }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ icon_state = "yellow" }, @@ -886,9 +888,7 @@ /obj/machinery/computer/mob_battle_terminal/red{ pixel_y = 30 }, -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -1074,7 +1074,7 @@ /area/station/maintenance/fore) "ajS" = ( /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "akg" = ( @@ -1197,7 +1197,7 @@ c_tag = "Engineering - Storage" }, /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "akR" = ( @@ -1235,9 +1235,8 @@ /area/station/public/fitness) "alh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/fitness) "alj" = ( @@ -1618,8 +1617,7 @@ "anf" = ( /obj/effect/landmark/damageturf, /obj/machinery/airlock_controller/air_cycler{ - pixel_x = -25; - pixel_y = 4; + pixel_y = -24; req_access_txt = "13"; vent_link_id = "arrivalsmaint_vent"; ext_door_link_id = "arrivalsmaint_door_ext"; @@ -1743,10 +1741,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "anC" = ( @@ -1964,7 +1962,7 @@ /obj/structure/window/plasmareinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter{ layer = 3.3 }, @@ -2099,6 +2097,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "apb" = ( @@ -2252,7 +2251,6 @@ /area/station/public/arcade) "apV" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2294,12 +2292,12 @@ /area/station/public/fitness) "aqc" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aqd" = ( @@ -2598,7 +2596,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "arT" = ( @@ -2784,13 +2782,11 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "asQ" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Gravity Generator Area" - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2824,13 +2820,12 @@ /turf/simulated/floor/plating/airless, /area/space/nearstation) "atc" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Conveyor Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "atd" = ( @@ -3169,13 +3164,8 @@ /turf/space, /area/space/nearstation) "auq" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/break_room) +/turf/simulated/wall/r_wall, +/area/station/engineering/ai_transit_tube) "aus" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -3321,10 +3311,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/iaa, /obj/effect/mapping_helpers/airlock/polarized{ id = "IAA" }, +/obj/effect/mapping_helpers/airlock/access/any/security/iaa, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -3427,7 +3417,7 @@ }, /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) "avF" = ( @@ -3508,14 +3498,12 @@ /turf/simulated/floor/plating, /area/station/supply/storage) "avL" = ( -/obj/machinery/door/airlock/atmos{ - name = "Fore Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/fore) "avM" = ( @@ -3614,9 +3602,8 @@ /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "avW" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Supply Bay Bridge Access" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3647,9 +3634,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "awb" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel, /area/station/supply/office) "awe" = ( @@ -3886,9 +3871,8 @@ /turf/simulated/floor/wood, /area/station/public/mrchangs) "awW" = ( -/obj/machinery/door/airlock/public/glass{ - name = "space-bridge access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door_control/shutter/north{ id = "supplybridge"; name = "Shuttle Bay Space Bridge Control" @@ -3944,14 +3928,12 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/airlock/highsecurity, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "axe" = ( -/obj/machinery/door/airlock/public/glass{ - name = "space-bridge access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door_control/shutter/north{ id = "supplybridge"; name = "Shuttle Bay Space Bridge Control" @@ -3968,13 +3950,13 @@ /area/station/maintenance/fpmaint) "axg" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "axh" = ( @@ -4110,7 +4092,7 @@ /area/station/maintenance/fore) "axH" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) "axM" = ( @@ -4211,12 +4193,14 @@ "aya" = ( /obj/structure/chair/wood, /obj/item/radio/intercom/directional/west, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood, /area/station/public/mrchangs) "ayb" = ( /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "ayc" = ( @@ -4355,12 +4339,12 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, /obj/machinery/door/airlock/command/glass, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, -/area/station/supply/storage) +/area/station/supply/qm) "ayI" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -4531,10 +4515,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "azu" = ( @@ -4649,7 +4633,7 @@ /area/station/supply/storage) "azP" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/port) "azQ" = ( @@ -4719,9 +4703,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "aAg" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Supply Bay Bridge Access" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ d1 = 1; @@ -4801,11 +4784,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"aAL" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "aAM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4923,9 +4901,8 @@ "aBy" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock{ - name = "Recreation Area" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -5094,9 +5071,8 @@ /area/station/engineering/control) "aCe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Recreation Area" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -5233,16 +5209,8 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "aCH" = ( -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/spawner/window/reinforced/polarized/grilled{ - id = "Processing" - }, -/turf/simulated/floor/plating, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, /area/station/supply/storage) "aCV" = ( /obj/structure/cable/yellow{ @@ -5298,14 +5266,13 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "aDb" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Gravity Generator Foyer" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "aDc" = ( @@ -5433,10 +5400,10 @@ "aDA" = ( /obj/machinery/door/airlock/external{ id_tag = "supply_home"; - locked = 1; - name = "Supply Dock Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/supply/storage) "aDB" = ( @@ -5716,6 +5683,12 @@ /area/station/maintenance/fsmaint) "aEy" = ( /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/classic/normal{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/control) "aEz" = ( @@ -5906,7 +5879,11 @@ "aFy" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plating, /area/station/maintenance/fore) "aFz" = ( @@ -6173,12 +6150,12 @@ /area/station/public/arcade) "aGL" = ( /obj/structure/chair/comfy/black, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "aGM" = ( -/obj/machinery/door/airlock{ - name = "Dormitories" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 1; @@ -6259,7 +6236,7 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -29 }, -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -6386,6 +6363,7 @@ /obj/machinery/door/airlock/vault{ locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -6393,8 +6371,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/mapping_helpers/airlock/access/any/supply/vault, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -6415,9 +6392,7 @@ "aHH" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/delivery/hollow, -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "aHI" = ( @@ -6451,7 +6426,7 @@ /area/station/security/armory/secure) "aHP" = ( /obj/machinery/light_switch/east, -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -6655,7 +6630,7 @@ "aIz" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "aIA" = ( @@ -6758,7 +6733,6 @@ "aIP" = ( /obj/machinery/door/airlock/hatch, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -6767,6 +6741,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -7103,10 +7078,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aJL" = ( @@ -7168,7 +7143,7 @@ /obj/effect/turf_decal/delivery/hollow, /obj/machinery/door/airlock/engineering/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tech_storage, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "aJT" = ( @@ -7206,9 +7181,9 @@ /area/station/maintenance/fpmaint) "aKe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining, +/obj/machinery/door/airlock/multi_tile/supply/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "aKf" = ( @@ -7221,9 +7196,6 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/mining, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "aKg" = ( @@ -7233,9 +7205,8 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Vault Storage" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -7292,7 +7263,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "aKv" = ( @@ -7452,9 +7423,9 @@ /area/station/legal/lawoffice) "aKX" = ( /obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" + id_tag = "Toilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -7853,9 +7824,7 @@ /area/station/supply/lobby) "aLW" = ( /obj/machinery/alarm/directional/west, -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, +/obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel, /area/station/supply/lobby) "aLY" = ( @@ -7947,15 +7916,6 @@ }, /turf/simulated/floor/carpet, /area/station/security/detective) -"aMm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/legal/courtroom) "aMn" = ( /turf/simulated/wall, /area/station/legal/lawoffice) @@ -7975,7 +7935,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aMr" = ( @@ -8464,9 +8424,9 @@ /area/station/hallway/primary/fore) "aNK" = ( /obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" + id_tag = "Toilet1" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -8569,12 +8529,11 @@ /turf/simulated/floor/plasteel, /area/station/supply/qm) "aOa" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/engine, /area/station/engineering/control) "aOd" = ( @@ -8658,7 +8617,7 @@ }, /obj/machinery/door/airlock/public/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/public/storage/tools/auxiliary) "aOG" = ( @@ -8723,7 +8682,7 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aOX" = ( @@ -8911,10 +8870,11 @@ "aPw" = ( /obj/structure/table, /obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo Requests Console"; - pixel_y = 30 + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_y = 30; + announcementConsole = 1 }, /obj/machinery/photocopier/faxmachine/longrange{ pixel_y = 4; @@ -9492,7 +9452,8 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aRC" = ( @@ -9533,7 +9494,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/structure/window/reinforced{ @@ -9945,9 +9906,7 @@ /area/station/maintenance/starboard2) "aTh" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plating, /area/station/maintenance/fore) "aTi" = ( @@ -10057,6 +10016,7 @@ dir = 1 }, /obj/machinery/light_switch/west, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "aTF" = ( @@ -10185,7 +10145,7 @@ /area/station/maintenance/fpmaint) "aUa" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -10250,15 +10210,14 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "aUi" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Bridge Access" - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/door/poddoor/preopen{ id_tag = "bridge blast"; name = "Bridge Blast Doors" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -10356,7 +10315,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/wood, /area/station/legal/courtroom) "aUt" = ( @@ -10601,7 +10560,7 @@ "aVc" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aVe" = ( @@ -10647,17 +10606,16 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Monitoring" - }, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" @@ -10821,10 +10779,9 @@ }, /area/station/legal/courtroom) "aVF" = ( -/obj/machinery/door/airlock/engineering{ - name = "Arrivals Expansion Area" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/maintenance/fpmaint) "aVG" = ( @@ -11015,9 +10972,7 @@ /area/station/maintenance/fsmaint) "aWi" = ( /obj/structure/extinguisher_cabinet/directional/east, -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /turf/simulated/floor/wood, /area/station/legal/courtroom) "aWj" = ( @@ -11075,10 +11030,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aWr" = ( @@ -11157,13 +11112,12 @@ dir = 1; pixel_y = 2 }, -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /turf/simulated/floor/wood, /area/station/command/office/captain/bedroom) "aWF" = ( -/obj/machinery/door/airlock/titanium{ - name = "Escape Pod Airlock" - }, +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/pod{ id = "pod1"; name = "escape pod 1" @@ -11677,9 +11631,8 @@ /turf/simulated/floor/plasteel, /area/station/supply/office) "aYy" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -11687,8 +11640,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -11962,17 +11915,15 @@ /turf/simulated/wall/r_wall, /area/station/engineering/control) "aZj" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod One" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "aZk" = ( -/obj/machinery/door/airlock/engineering{ - name = "Arrivals Expansion Area" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "aZm" = ( @@ -11985,11 +11936,10 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/engineering{ - name = "Arrivals Expansion Area" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "aZr" = ( @@ -12084,9 +12034,8 @@ /area/station/turret_protected/ai_upload/foyer) "aZM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Power Monitoring" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12094,7 +12043,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/smes) "aZN" = ( @@ -12435,9 +12384,8 @@ }, /area/station/maintenance/fsmaint) "baE" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod Four" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/engimaint) "baF" = ( @@ -12618,9 +12566,8 @@ }, /area/station/medical/surgery/observation) "bbk" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Secure Network Access" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -12629,16 +12576,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, /area/station/turret_protected/ai_upload/foyer) "bbm" = ( /obj/machinery/alarm/directional/north, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "neutral" @@ -12717,9 +12662,8 @@ }, /area/station/public/locker) "bbx" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Secure Tech Storage" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -12733,9 +12677,8 @@ /area/station/engineering/tech_storage) "bby" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Crew Quarters Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -12745,9 +12688,8 @@ /area/station/public/locker) "bbz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Crew Quarters Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -12810,9 +12752,7 @@ }, /area/station/command/office/ce) "bbM" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /obj/structure/sign/electricshock{ pixel_x = -32 }, @@ -12851,10 +12791,6 @@ }, /obj/item/reagent_containers/spray/cleaner, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -12862,6 +12798,9 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -12968,12 +12907,6 @@ dir = 4; pixel_x = -29 }, -/obj/machinery/turretid/stun{ - control_area = "\improper AI Upload Chamber"; - name = "AI Upload Turret Control"; - pixel_y = 28; - req_access = list(75) - }, /obj/effect/landmark/start/cyborg, /obj/machinery/power/apc/important/south, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -13053,12 +12986,6 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/station/supply/storage) -"bcu" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint) "bcv" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -13195,24 +13122,24 @@ /area/station/hallway/primary/central) "bcO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/machinery/newscaster/directional/north, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) @@ -13522,7 +13449,8 @@ }, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/effect/mapping_helpers/airlock/access/any/engineering/ce, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/command/office/ce) "bdE" = ( @@ -13617,12 +13545,6 @@ icon_state = "arrival" }, /area/station/hallway/secondary/entry) -"bdR" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Airlock" - }, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/entry) "bdS" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -13637,10 +13559,8 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/central) "bdT" = ( -/obj/machinery/door/airlock/security{ - name = "Detective's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/forensics, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; @@ -13670,6 +13590,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -14130,9 +14051,7 @@ /area/station/hallway/secondary/entry) "beR" = ( /obj/structure/extinguisher_cabinet/directional/east, -/obj/item/kirbyplants{ - icon_state = "plant-16" - }, +/obj/item/kirbyplants/plant16, /obj/item/radio/intercom/directional/north, /turf/simulated/floor/plasteel{ dir = 5; @@ -14242,10 +14161,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port2) "bfl" = ( @@ -14273,9 +14192,9 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, -/area/station/supply/storage) +/area/station/maintenance/port2) "bfp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -14790,7 +14709,7 @@ "bgD" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox_storage, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "bgF" = ( @@ -15024,21 +14943,21 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, /turf/simulated/floor/plasteel, /area/station/service/janitor) "bht" = ( /turf/simulated/wall, /area/station/maintenance/maintcentral) "bhu" = ( -/obj/machinery/door/airlock{ - name = "Central Emergency Storage" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bhv" = ( @@ -15338,7 +15257,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "bik" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -15394,9 +15313,8 @@ /turf/simulated/wall/mineral/titanium, /area/shuttle/arrival/station) "bip" = ( -/obj/machinery/door/airlock/titanium{ - name = "Arrivals Shuttle Airlock" - }, +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/shuttle/arrival/station) "biq" = ( @@ -15541,7 +15459,7 @@ }, /area/station/supply/storage) "biJ" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -15943,6 +15861,7 @@ /area/station/command/office/ce) "bjK" = ( /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -15955,8 +15874,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -16142,17 +16060,6 @@ icon_state = "red" }, /area/station/security/checkpoint/secondary) -"bkr" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "bks" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -16174,9 +16081,9 @@ "bku" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plating, -/area/station/supply/office) +/area/station/maintenance/port2) "bkw" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -16284,7 +16191,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bkP" = ( @@ -16475,7 +16382,6 @@ "bln" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "blo" = ( @@ -16492,13 +16398,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/engineering, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tech_storage, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, /area/station/engineering/tech_storage) "blr" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /obj/machinery/atmospherics/pipe/manifold/visible/purple{ dir = 1 }, @@ -16562,7 +16468,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "blA" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple, /turf/simulated/floor/plating, @@ -16832,9 +16738,8 @@ /area/station/supply/office) "bmh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engine Room" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -16844,7 +16749,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/delivery/hollow, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) "bmi" = ( @@ -17077,9 +16982,7 @@ /obj/item/storage/photo_album{ pixel_y = -4 }, -/obj/item/camera{ - pixel_y = 4 - }, +/obj/item/camera, /obj/item/radio/intercom/private{ pixel_x = -28 }, @@ -17088,7 +16991,7 @@ "bmV" = ( /obj/machinery/light_switch/south, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor{ pixel_x = -4; pixel_y = 2 @@ -17248,7 +17151,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -17450,7 +17353,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/security, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel, /area/station/security/checkpoint/secondary) "bob" = ( @@ -17481,10 +17384,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port2) "boe" = ( @@ -17958,9 +17861,6 @@ dir = 1; name = "Head of Personnel's Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/hop{ - dir = 1 - }, /obj/machinery/door/window/classic/normal{ name = "Reception Window" }, @@ -17968,6 +17868,9 @@ id_tag = "hop"; name = "privacy shutters" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/hop{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/station/command/office/hop) "bpt" = ( @@ -18037,10 +17940,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/airlock/mining/glass{ - name = "Mailroom" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "bpF" = ( @@ -18365,10 +18267,8 @@ }, /area/station/command/office/captain/bedroom) "bqp" = ( -/obj/machinery/door/airlock/silver{ - name = "Bathroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/machinery/door/airlock/silver, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -18882,12 +18782,6 @@ dir = 1; id = "packageExternal" }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, /turf/simulated/floor/plating, /area/station/supply/office) "brI" = ( @@ -19063,12 +18957,12 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, /turf/simulated/floor/carpet, /area/station/command/office/captain/bedroom) "bsl" = ( @@ -19137,7 +19031,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "bsE" = ( /obj/machinery/light/small/directional/south, /obj/vehicle/janicart, @@ -19182,7 +19076,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "bsK" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_4) @@ -19291,7 +19185,7 @@ /area/station/hallway/primary/port) "btq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -19675,7 +19569,7 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/eva, +/obj/effect/mapping_helpers/airlock/access/any/command/eva, /turf/simulated/floor/plasteel, /area/station/ai_monitored/storage/eva) "bul" = ( @@ -19766,6 +19660,13 @@ id_tag = "bridge blast"; name = "Bridge Blast Doors" }, +/obj/machinery/door/window/classic/normal{ + name = "Bridge Delivery"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/command/bridge) "buy" = ( @@ -20120,7 +20021,6 @@ "bvx" = ( /obj/machinery/ai_slipper, /obj/machinery/turretid/stun{ - control_area = "\improper AI Satellite Antechamber"; name = "AI Antechamber Turret Control"; pixel_x = 24; req_access_txt = "75" @@ -20141,6 +20041,7 @@ /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "bvA" = ( @@ -20635,8 +20536,6 @@ /turf/simulated/floor/wood, /area/station/service/bar) "bwA" = ( -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, @@ -20646,6 +20545,8 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "bwC" = ( @@ -20699,6 +20600,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "bwI" = ( @@ -20925,9 +20827,8 @@ /turf/simulated/floor/carpet, /area/station/legal/lawoffice) "bxw" = ( -/obj/machinery/door/airlock/titanium{ - name = "Escape Pod Airlock" - }, +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/pod{ dir = 4; id = "pod4"; @@ -20942,7 +20843,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "bxy" = ( /obj/machinery/hologram/holopad, /obj/structure/cable/yellow{ @@ -21241,7 +21142,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -21407,14 +21308,14 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "byF" = ( @@ -21436,6 +21337,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "byJ" = ( @@ -21669,9 +21571,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bzA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -21679,9 +21579,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bzB" = ( -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -21752,8 +21650,9 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/library, /turf/simulated/floor/plating, /area/station/maintenance/port) "bzK" = ( @@ -21810,7 +21709,8 @@ }, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood, /area/station/command/office/hop) "bzT" = ( @@ -21895,7 +21795,8 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -21908,12 +21809,11 @@ }, /area/station/command/bridge) "bAg" = ( -/obj/machinery/door/airlock/command{ - name = "Command Desk" - }, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -21926,7 +21826,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -22020,7 +21920,7 @@ /area/station/turret_protected/aisat/interior) "bAB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/light/small/directional/north, /obj/structure/sign/poster/random{ pixel_y = 32 @@ -22231,9 +22131,7 @@ }, /area/station/hallway/primary/port) "bBr" = ( -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -22633,6 +22531,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "bCy" = ( @@ -22699,6 +22598,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood, /area/station/service/bar) "bCG" = ( @@ -22713,6 +22613,7 @@ /area/station/science/research) "bCH" = ( /obj/structure/chair/stool, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "bCJ" = ( @@ -22867,11 +22768,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ - name = "Expedition Maintenance" - }, +/obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bDm" = ( @@ -23046,9 +22946,8 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - name = "Garden" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "bDH" = ( @@ -23163,16 +23062,16 @@ /area/station/command/bridge) "bDX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Council Chamber" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/command/bridge) "bDY" = ( /obj/structure/chair/comfy/beige, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/command/bridge) "bDZ" = ( @@ -23180,6 +23079,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/command/bridge) "bEf" = ( @@ -23211,7 +23111,8 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -23242,7 +23143,7 @@ /area/station/command/office/captain) "bEl" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -23303,6 +23204,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "bEr" = ( @@ -23481,9 +23383,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock{ - name = "Vacant Office" - }, +/obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood, /area/station/public/vacant_office) @@ -23600,6 +23500,7 @@ /obj/structure/chair/comfy/black{ dir = 4 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/command/bridge) "bFN" = ( @@ -23623,6 +23524,7 @@ /obj/structure/chair/comfy/black{ dir = 8 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/command/bridge) "bFR" = ( @@ -23966,9 +23868,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/bridge) "bHx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/wood, /area/station/service/library) "bHz" = ( @@ -24047,10 +23947,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bHL" = ( @@ -24180,25 +24080,18 @@ /turf/simulated/wall, /area/station/engineering/hardsuitstorage) "bIg" = ( -/obj/machinery/door/airlock/hatch{ - name = "Xenobiology Maintenance" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/science/xenobiology) -"bIm" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, -/turf/simulated/floor/plating, -/area/station/maintenance/aft2) "bIu" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -24228,9 +24121,7 @@ }, /area/station/telecomms/computer) "bIA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -24244,9 +24135,7 @@ }, /area/station/telecomms/computer) "bID" = ( -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/woodsiding{ dir = 1 @@ -24257,8 +24146,8 @@ /area/station/service/bar) "bIE" = ( /obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/effect/turf_decal/woodsiding, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -24359,9 +24248,8 @@ /area/station/hallway/primary/central) "bJe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Command Hallway" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -24698,9 +24586,8 @@ /area/station/hallway/secondary/bridge) "bJD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Command Hallway" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -24786,6 +24673,7 @@ /obj/structure/chair/wood/wings{ dir = 8 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood, /area/station/service/theatre) "bJP" = ( @@ -24925,6 +24813,7 @@ id_tag = "ferry_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "bKv" = ( @@ -24986,9 +24875,8 @@ /area/station/hallway/primary/central) "bKN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Command Hallway" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -25119,9 +25007,8 @@ /area/station/hallway/secondary/bridge) "bLr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Command Hallway" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -25193,10 +25080,10 @@ /area/station/service/bar) "bLB" = ( /obj/machinery/door/airlock, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -25217,8 +25104,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "bLH" = ( @@ -25424,10 +25311,11 @@ "bML" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/library, /turf/simulated/floor/plating, /area/station/maintenance/port) "bMM" = ( @@ -25536,7 +25424,7 @@ }, /obj/machinery/door/airlock/engineering/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "bNh" = ( @@ -25567,14 +25455,14 @@ /area/station/hallway/secondary/entry) "bNo" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bNp" = ( @@ -25719,12 +25607,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/eva, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/eva, /turf/simulated/floor/plasteel, /area/station/ai_monitored/storage/eva) "bNP" = ( @@ -25779,6 +25667,7 @@ "bOe" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -25786,8 +25675,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, /turf/simulated/floor/plasteel, /area/station/command/teleporter) "bOf" = ( @@ -26271,7 +26159,7 @@ /area/station/science/research) "bPB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/ale, +/obj/item/reagent_containers/drinks/cans/ale, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "bPE" = ( @@ -26303,9 +26191,9 @@ /area/station/public/vacant_office) "bPS" = ( /obj/structure/closet/secure_closet/blueshield, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "bPT" = ( @@ -26346,16 +26234,20 @@ /turf/simulated/floor/wood, /area/station/service/library) "bQa" = ( -/obj/structure/lattice, -/obj/machinery/access_button{ - autolink_id = "aiaccess_btn_ext"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = -7; - req_access_txt = "75;13" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 }, -/turf/space, -/area/space/nearstation) +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, +/turf/simulated/floor/plating, +/area/station/maintenance/apmaint) "bQb" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ @@ -26574,12 +26466,12 @@ /area/station/service/kitchen) "bQP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/glass/beaker{ pixel_x = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -27257,10 +27149,10 @@ }, /obj/machinery/door/airlock/medical/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /obj/effect/mapping_helpers/airlock/polarized{ id = "psych" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -27457,7 +27349,7 @@ pixel_x = 5; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -4; pixel_y = 4 }, @@ -27691,16 +27583,14 @@ /area/station/public/vacant_office) "bUI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Quiet Room" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/carpet, /area/station/service/library) "bUJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Quiet Room" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -27715,6 +27605,7 @@ name = "Private Study"; req_access_txt = "37" }, +/obj/effect/mapping_helpers/airlock/access/any/service/library, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -27727,7 +27618,7 @@ }, /area/station/hallway/primary/central) "bUN" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -27740,6 +27631,7 @@ id_tag = "specops_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "bUP" = ( @@ -27835,7 +27727,7 @@ /turf/simulated/floor/engine, /area/station/command/office/rd) "bVb" = ( -/obj/machinery/suit_storage_unit/clown, +/obj/machinery/suit_storage_unit/clown/secure, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -27876,8 +27768,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/medical, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "bVg" = ( @@ -27896,12 +27787,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plating, /area/station/maintenance/fore) "bVj" = ( @@ -28088,9 +27983,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/item/kirbyplants{ - icon_state = "plant-16" - }, +/obj/item/kirbyplants/plant16, /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) @@ -28193,8 +28086,9 @@ /area/station/maintenance/port) "bWo" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bWp" = ( @@ -28361,6 +28255,7 @@ dir = 1 }, /obj/effect/decal/cleanable/blood/old, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "bWI" = ( @@ -28501,17 +28396,14 @@ }, /area/station/service/expedition) "bWZ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Expedition Maintenance" - }, +/obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/expedition, +/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "bXb" = ( -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -28520,6 +28412,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -28636,9 +28529,7 @@ /area/station/command/office/ntrep) "bXy" = ( /obj/machinery/newscaster/directional/west, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -28666,9 +28557,7 @@ /area/station/supply/office) "bXF" = ( /obj/effect/turf_decal/stripes/corner, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /obj/machinery/door_control/shutter/south{ id = "mechbay"; name = "Mech Bay Shutters Control"; @@ -28718,8 +28607,9 @@ /area/station/maintenance/portsolar) "bXK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/port) "bXN" = ( @@ -28985,9 +28875,9 @@ "bYs" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/service/bar, /turf/simulated/floor/wood, /area/station/maintenance/starboard) "bYv" = ( @@ -29170,7 +29060,6 @@ "bZb" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -29186,6 +29075,7 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "bZc" = ( @@ -29408,10 +29298,8 @@ /area/station/service/library) "bZX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Expedition Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/expedition, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -29420,6 +29308,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -29712,11 +29601,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock{ - name = "Hydroponics Backroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) "caT" = ( @@ -30140,13 +30028,13 @@ /area/station/medical/reception) "ccc" = ( /obj/machinery/door/airlock/security/glass{ - name = "Prison Wing"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/brig) "cci" = ( @@ -30261,9 +30149,8 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "ccB" = ( -/obj/machinery/door/airlock{ - name = "Maintenance Bathroom" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/aft) "ccC" = ( @@ -30277,7 +30164,8 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/library, /turf/simulated/floor/plating, /area/station/maintenance/port) "ccE" = ( @@ -30537,7 +30425,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cdw" = ( @@ -30610,7 +30498,7 @@ /area/station/service/hydroponics) "cdJ" = ( /obj/structure/lattice, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /turf/space, /area/space/nearstation) "cdM" = ( @@ -30651,7 +30539,7 @@ }, /obj/machinery/door/airlock/atmos, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" @@ -30754,9 +30642,7 @@ /area/station/hallway/primary/central) "cei" = ( /obj/machinery/firealarm/directional/east, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, @@ -30774,11 +30660,11 @@ "cek" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "cel" = ( @@ -30936,7 +30822,7 @@ "ceW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/gin, +/obj/item/reagent_containers/drinks/bottle/gin, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "ceY" = ( @@ -31009,9 +30895,7 @@ /area/station/command/bridge) "cfi" = ( /obj/structure/extinguisher_cabinet/directional/west, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" @@ -31039,6 +30923,7 @@ "cfm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/holosign/surgery{ id = "surgery1" }, @@ -31050,8 +30935,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -31069,6 +30953,7 @@ "cfo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "bluecorner" @@ -31082,6 +30967,7 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -31089,6 +30975,7 @@ "cfq" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, @@ -31213,10 +31100,10 @@ }, /obj/structure/table/glass, /obj/structure/extinguisher_cabinet/directional/west, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/grapes, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "green" @@ -31260,11 +31147,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/atmos{ - name = "Turbine Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "cfR" = ( @@ -31504,7 +31389,7 @@ "cgH" = ( /obj/machinery/light/directional/north, /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -31577,12 +31462,12 @@ /area/station/hallway/primary/central) "cgP" = ( /obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "green" @@ -31748,9 +31633,9 @@ /obj/item/seeds/potato, /obj/item/seeds/apple, /obj/item/grown/corncob, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/pumpkin{ +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/pumpkin{ pixel_y = 5 }, /obj/machinery/light/directional/south, @@ -31814,10 +31699,6 @@ pixel_x = -3; pixel_y = 5 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -31825,6 +31706,9 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -31876,13 +31760,13 @@ }, /area/station/hallway/primary/central) "chO" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Hydroponics Storage" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel{ icon_state = "greenfull" }, @@ -31899,10 +31783,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -32016,6 +31900,7 @@ /area/station/science/research) "cig" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -32024,8 +31909,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "cii" = ( @@ -32467,12 +32351,6 @@ }, /turf/simulated/floor/plasteel, /area/station/security/brig) -"cjV" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard2) "cjX" = ( /obj/structure/cable{ d1 = 1; @@ -32710,6 +32588,7 @@ /obj/structure/chair/stool{ dir = 8 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "ckL" = ( @@ -32802,7 +32681,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -32819,7 +32698,7 @@ "cli" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/wall, -/area/station/maintenance/fpmaint) +/area/station/supply/qm) "cll" = ( /obj/structure/sign/poster/random{ pixel_y = -32 @@ -33096,6 +32975,7 @@ /area/station/medical/reception) "cmr" = ( /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -33104,8 +32984,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -33316,8 +33195,8 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/wood, /area/station/science/robotics/showroom) "cnn" = ( @@ -33663,9 +33542,8 @@ /area/station/maintenance/turbine) "cov" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Foyer" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -33905,7 +33783,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -33913,6 +33790,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "cpD" = ( @@ -34022,7 +33900,6 @@ "cpQ" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -34030,6 +33907,8 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/chemistry, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "cpW" = ( @@ -34040,7 +33919,7 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/ywflowers, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -34078,10 +33957,11 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/aft) "cqi" = ( @@ -34511,7 +34391,7 @@ }, /obj/machinery/door/airlock/research/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -34562,6 +34442,7 @@ /area/station/maintenance/starboard2) "csh" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "csi" = ( @@ -35224,6 +35105,7 @@ "cuF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/holosign/surgery{ id = "surgery2" }, @@ -35235,8 +35117,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -35506,9 +35387,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/aft) "cvJ" = ( -/obj/item/kirbyplants{ - icon_state = "plant-20" - }, +/obj/item/kirbyplants/plant20, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" }, @@ -35518,6 +35397,7 @@ dir = 1 }, /obj/effect/landmark/damageturf, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cvS" = ( @@ -35576,6 +35456,14 @@ dir = 2; icon_state = "pipe-c" }, +/obj/machinery/door/window/classic/reversed{ + dir = 8; + name = "Research Division" + }, +/obj/structure/window/reinforced, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitepurple" @@ -35688,12 +35576,12 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/wood, /area/station/science/robotics/showroom) "cww" = ( @@ -35843,9 +35731,7 @@ /area/station/science/research) "cwW" = ( /obj/machinery/firealarm/directional/west, -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /obj/machinery/light/directional/west, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" @@ -36000,6 +35886,7 @@ "cxA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -36011,13 +35898,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /obj/structure/cable/yellow{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/cmo, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -36263,6 +36150,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/chair/stool, /obj/effect/landmark/damageturf, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cyy" = ( @@ -36512,7 +36400,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -36691,8 +36579,8 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/wood, /area/station/science/robotics/showroom) "czO" = ( @@ -36773,7 +36661,6 @@ "cAi" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -36784,6 +36671,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/cmo, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "cAj" = ( @@ -36837,6 +36725,7 @@ /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cAy" = ( @@ -37003,9 +36892,8 @@ "cAT" = ( /obj/machinery/door/airlock/medical, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -37059,10 +36947,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "cBo" = ( @@ -37249,13 +37137,11 @@ /area/station/science/misc_lab) "cBS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Server Access" - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -37324,7 +37210,6 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -37332,6 +37217,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -37405,11 +37291,11 @@ }, /obj/machinery/light/small/directional/north, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/carpet, /area/station/service/chapel) "cCu" = ( @@ -37771,10 +37657,10 @@ /area/station/command/office/rd) "cDM" = ( /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -37783,7 +37669,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -37799,6 +37684,8 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/rd, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -37861,6 +37748,7 @@ /area/station/medical/cloning) "cDZ" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -37883,11 +37771,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, /obj/effect/mapping_helpers/airlock/polarized{ id = "clon" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -37943,7 +37831,7 @@ pixel_y = 2 }, /obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cEk" = ( @@ -38096,6 +37984,7 @@ /area/station/maintenance/asmaint) "cEP" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -38103,9 +37992,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -38117,6 +38003,7 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "clon" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -38468,9 +38355,8 @@ }, /area/station/medical/cloning) "cGc" = ( -/obj/machinery/door/airlock{ - name = "Crematorium" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -38577,8 +38463,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/medical, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/aft) "cGo" = ( @@ -38678,7 +38563,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -39014,10 +38899,10 @@ /area/station/science/research) "cHO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /turf/simulated/floor/plating, @@ -39274,10 +39159,12 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plating, /area/station/maintenance/aft) "cIE" = ( @@ -39477,7 +39364,7 @@ "cJo" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light/small/directional/north, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -39670,7 +39557,7 @@ }, /area/station/security/permabrig) "cKm" = ( -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /turf/simulated/floor/plasteel/dark, /area/station/command/office/hos) "cKn" = ( @@ -39743,7 +39630,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/suit_storage_unit/rd, +/obj/machinery/suit_storage_unit/rd/secure, /turf/simulated/floor/plasteel{ icon_state = "darkgreycheck" }, @@ -39770,9 +39657,7 @@ }, /area/station/medical/cloning) "cKA" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkgreencorners" @@ -39941,8 +39826,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/access/any/medical/virology, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -39950,9 +39833,9 @@ name = "Quarantine Lockdown"; opacity = 0 }, -/obj/machinery/door/airlock/virology{ - name = "Virology Access" - }, +/obj/machinery/door/airlock/virology, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -39966,9 +39849,7 @@ /turf/simulated/floor/grass, /area/station/maintenance/aft2) "cLm" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -40172,7 +40053,7 @@ "cMx" = ( /obj/machinery/light/directional/north, /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -40216,7 +40097,7 @@ /area/station/maintenance/portsolar) "cMF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_x = -2; pixel_y = 2 }, @@ -40228,8 +40109,8 @@ /area/station/service/chapel/office) "cMK" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 16; pixel_y = 6 }, @@ -40247,7 +40128,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/tequila, +/obj/item/reagent_containers/drinks/bottle/tequila, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "cMP" = ( @@ -40313,7 +40194,6 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) "cNf" = ( @@ -40447,14 +40327,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/virology/glass{ - name = "Isolation A" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -40697,9 +40576,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft2) "cOk" = ( -/obj/item/kirbyplants{ - icon_state = "plant-18" - }, +/obj/item/kirbyplants/plant18, /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -41068,9 +40945,8 @@ /area/station/hallway/secondary/exit) "cPN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -41083,18 +40959,16 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "cPP" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -41133,14 +41007,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/virology/glass{ - name = "Test Subject Cell" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -41298,18 +41171,14 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "cQN" = ( -/obj/machinery/door/airlock/external{ - name = "Space Shack" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/spacehut) "cQP" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Teleporter Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -41321,6 +41190,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -41404,22 +41274,6 @@ "cRt" = ( /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"cRu" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/medmaint) "cRv" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -41694,10 +41548,9 @@ /area/station/maintenance/apmaint) "cSJ" = ( /obj/machinery/door/airlock/command{ - id_tag = "ntrepofficedoor"; - name = "NT Representative's Office" + id_tag = "ntrepofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/ntrep, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -41712,6 +41565,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/access/any/command/ntrep, /turf/simulated/floor/wood, /area/station/command/office/ntrep) "cSK" = ( @@ -41755,11 +41609,11 @@ /area/station/maintenance/apmaint) "cSR" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -41799,8 +41653,11 @@ "cSV" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "cSX" = ( @@ -41892,9 +41749,7 @@ /area/station/security/prison/cell_block/A) "cTq" = ( /obj/machinery/light/directional/west, -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -41927,7 +41782,7 @@ /area/station/security/interrogation) "cTz" = ( /obj/structure/lattice/catwalk, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, @@ -42051,9 +41906,7 @@ "cTV" = ( /obj/machinery/light/directional/east, /obj/structure/extinguisher_cabinet/directional/east, -/obj/item/kirbyplants{ - icon_state = "plant-14" - }, +/obj/item/kirbyplants/plant14, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -42185,9 +42038,8 @@ /area/station/hallway/secondary/exit) "cUC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Departure Lounge Security Post" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -42204,7 +42056,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -42486,8 +42338,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -42706,9 +42558,8 @@ }, /area/station/medical/morgue) "cWK" = ( -/obj/machinery/door/airlock/research{ - name = "Sci Chem and Xenobio Access" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 4; @@ -42724,7 +42575,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -42779,7 +42630,6 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -42789,6 +42639,9 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plating, /area/station/maintenance/aft) "cXh" = ( @@ -42879,9 +42732,9 @@ "cXz" = ( /obj/machinery/door/airlock/external{ id_tag = "emergency_home"; - locked = 1; - name = "Departure Lounge Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) @@ -42991,11 +42844,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock/security/glass{ - name = "Solitary Confinement 2" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "cYa" = ( @@ -43006,9 +42858,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "cYd" = ( -/obj/effect/mapping_helpers/airlock/access/all/service/clown, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -43021,6 +42871,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/bananium, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/clown, /turf/simulated/floor/wood, /area/station/service/clown) "cYe" = ( @@ -43129,7 +42981,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -43226,8 +43078,6 @@ }, /area/station/service/chapel) "cZo" = ( -/obj/effect/mapping_helpers/airlock/access/all/service/mime, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 4; @@ -43241,6 +43091,8 @@ dir = 4 }, /obj/machinery/door/airlock/tranquillite, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/mime, /turf/simulated/floor/mineral/tranquillite, /area/station/service/mime) "cZp" = ( @@ -43280,12 +43132,6 @@ /mob/living/carbon/human/monkey, /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) -"cZz" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/fore) "cZA" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -43324,9 +43170,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/public/glass{ - name = "Funeral Parlour" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -43672,8 +43517,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "dbE" = ( @@ -43825,19 +43671,18 @@ /area/station/maintenance/starboard) "dcK" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, /obj/effect/mapping_helpers/airlock/polarized{ id = "clon" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -43845,6 +43690,7 @@ "dcN" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -43856,8 +43702,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -44499,7 +44344,7 @@ /area/station/medical/surgery/primary) "dgI" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "dgO" = ( @@ -44729,7 +44574,6 @@ "diT" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -44739,6 +44583,8 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "diU" = ( @@ -44835,10 +44681,9 @@ autoclose = 0; heat_proof = 1; id_tag = "turbine_door_ext"; - locked = 1; - name = "Incinerator Interior Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/airlock_controller/access_controller{ name = "Turbine Access Console"; pixel_x = 40; @@ -44848,6 +44693,7 @@ ext_button_link_id = "turbine_btn_ext"; int_button_link_id = "turbine_btn_int" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/engine, /area/station/maintenance/turbine) "dmr" = ( @@ -44954,12 +44800,11 @@ }, /area/station/security/permabrig) "dnY" = ( -/obj/machinery/door/airlock, +/obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, -/area/station/maintenance/port) +/area/station/maintenance/aft2) "dog" = ( /obj/effect/landmark/spawner/xeno, /turf/simulated/floor/plasteel, @@ -44997,6 +44842,12 @@ icon_state = "whitepurple" }, /area/station/command/office/rd) +"dpT" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "dpZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -45137,9 +44988,6 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -45199,19 +45047,6 @@ icon_state = "whiteblue" }, /area/station/medical/reception) -"dvY" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/fsmaint) "dwp" = ( /obj/effect/turf_decal/tile/bar, /obj/machinery/door/firedoor, @@ -45443,8 +45278,7 @@ /area/station/science/storage) "dCn" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/forensics, -/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -45463,7 +45297,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -45527,7 +45361,7 @@ name = "Cargo Desk"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -45595,22 +45429,22 @@ /area/station/maintenance/fore) "dGs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/aisat/service) "dGK" = ( /obj/structure/weightmachine/weightlifter, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "black" @@ -45666,7 +45500,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "dJx" = ( /obj/structure/filingcabinet, /turf/simulated/floor/plasteel{ @@ -45901,7 +45735,7 @@ name = "Containment Pen #7"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -45910,7 +45744,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -45929,6 +45762,8 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/any/science/rd, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -45940,13 +45775,12 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/virology/glass{ - name = "Containment Cells" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitegreenfull" }, @@ -45981,6 +45815,7 @@ /area/station/science/toxins/mixing) "dSv" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -46017,11 +45852,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/access_button/east{ - autolink_id = "enginesm_btn_ext"; - name = "Supermatter Access Button"; - req_access_txt = "10" - }, /obj/machinery/camera{ c_tag = "Engineering - Central"; dir = 8 @@ -46030,6 +45860,7 @@ /area/station/engineering/control) "dTT" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "dTW" = ( @@ -46041,7 +45872,7 @@ /turf/simulated/wall/r_wall, /area/station/engineering/atmos) "dTX" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 }, @@ -46058,26 +45889,26 @@ /area/station/medical/cloning) "dUv" = ( /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "dUF" = ( /obj/machinery/door/airlock/external{ id_tag = "soldock_door_ext"; - locked = 1; - name = "Arrivals External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /obj/machinery/access_button{ autolink_id = "soldock_btn_ext"; name = "exterior access button"; - pixel_x = -7; - pixel_y = -25 + pixel_y = -24 }, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) @@ -46211,6 +46042,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/station/engineering/atmos/distribution) +"dYk" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "dYn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/reinforced, @@ -46286,15 +46126,13 @@ "dZy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance" + id_tag = "MedbayFoyerPort" }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -46361,7 +46199,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plating, -/area/station/supply/storage) +/area/station/supply/qm) "eaG" = ( /obj/structure/sign/poster/official/random/east, /turf/simulated/floor/plasteel{ @@ -46456,9 +46294,9 @@ /turf/simulated/floor/wood, /area/station/public/mrchangs) "edj" = ( -/obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/security/range) "edw" = ( @@ -46595,11 +46433,10 @@ "efR" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "aisat_door_ext"; - locked = 1; - name = "MiniSat External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -46672,6 +46509,7 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "eib" = ( @@ -46773,8 +46611,8 @@ "ejD" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "ejG" = ( @@ -46970,7 +46808,6 @@ /obj/machinery/door/window/classic/reversed{ name = "Botany Delivery" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) @@ -47009,13 +46846,9 @@ name = "Mass Driver"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/maintenance{ - dir = 1 - }, /obj/machinery/door/window/classic/normal{ name = "Mass Driver" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/maintenance, /obj/effect/turf_decal/loading_area{ dir = 1 }, @@ -47175,7 +47008,6 @@ /obj/machinery/door/window/classic/normal{ name = "Kitchen" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/structure/window/reinforced{ @@ -47186,11 +47018,19 @@ id_tag = "kitchen_counter"; name = "Kitchen Counter Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, /area/station/service/kitchen) +"euM" = ( +/obj/structure/chair/stool{ + dir = 8 + }, +/obj/effect/landmark/damageturf, +/obj/effect/landmark/start/uncertain, +/turf/simulated/floor/wood, +/area/station/maintenance/apmaint) "euU" = ( /obj/machinery/economy/vending/virodrobe, /obj/item/radio/intercom/directional/east, @@ -47635,7 +47475,7 @@ icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/station/supply/storage) +/area/station/supply/qm) "eFw" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -47747,7 +47587,8 @@ }, /obj/item/stamp/captain, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield, /turf/simulated/floor/wood, /area/station/command/office/captain) "eJg" = ( @@ -47816,13 +47657,10 @@ /turf/space, /area/space/nearstation) "eKW" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/brig) "eLh" = ( @@ -47879,7 +47717,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "eMF" = ( @@ -47924,17 +47762,16 @@ "eNT" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchen_counter"; name = "Kitchen Counter Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, /obj/machinery/door/window/classic/normal{ name = "Kitchen" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -48103,7 +47940,10 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/chemistry{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -48147,8 +47987,8 @@ "eTh" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "eTo" = ( @@ -48167,15 +48007,15 @@ /obj/machinery/door/airlock/atmos/glass{ autoclose = 0; id_tag = "atmossm_door_ext"; - locked = 1; - name = "Atmospherics Access Chamber" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/east{ autolink_id = "atmossm_btn_ext"; name = "Atmospherics Access Button"; req_access_txt = "24" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48254,9 +48094,8 @@ /turf/simulated/wall/r_wall, /area/station/maintenance/xenobio_north) "eUL" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Secure Equipment Storage" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -48266,12 +48105,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48334,16 +48173,16 @@ /area/station/security/storage) "eXm" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "eXK" = ( @@ -48574,7 +48413,7 @@ }, /area/station/medical/cryo) "fcB" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 6 }, @@ -48624,9 +48463,7 @@ /turf/simulated/floor/plasteel, /area/station/security/brig) "fdz" = ( -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /turf/simulated/floor/plasteel, /area/station/supply/office) "feD" = ( @@ -48660,7 +48497,7 @@ }, /obj/machinery/door/airlock/engineering/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "fgb" = ( @@ -48671,11 +48508,13 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/door/window/classic/reversed{ dir = 8; name = "Glass Door" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -48740,9 +48579,7 @@ }, /area/station/engineering/atmos) "fhC" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -48750,15 +48587,13 @@ /area/station/hallway/primary/fore) "fhN" = ( /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /obj/effect/mapping_helpers/airlock/polarized{ id = "psych" }, /obj/machinery/door/airlock/psych/glass{ - id_tag = "psych_bolt"; - name = "Psychiatrist Office" + id_tag = "psych_bolt" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -48766,6 +48601,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/wood, /area/station/medical/psych) "fhR" = ( @@ -48832,7 +48668,7 @@ }, /area/station/supply/office) "fjU" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 }, @@ -48855,6 +48691,7 @@ /area/station/engineering/atmos) "fkN" = ( /obj/machinery/economy/vending/wallmed/directional/north, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "fkW" = ( @@ -48939,12 +48776,12 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "PermaLockdown"; name = "Lockdown Shutters" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "fma" = ( @@ -48998,7 +48835,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, -/area/station/maintenance/port) +/area/station/hallway/primary/central) "fmP" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -49154,7 +48991,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "fqX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -49343,16 +49180,15 @@ /area/station/medical/exam_room) "fuv" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/forensics, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -49378,6 +49214,7 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -49515,13 +49352,12 @@ /area/station/science/storage) "fyS" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49532,6 +49368,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "fza" = ( @@ -49591,7 +49428,7 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "fzW" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/machinery/camera{ c_tag = "Armory - Internal"; dir = 8 @@ -49679,7 +49516,7 @@ /area/station/engineering/control) "fCn" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -49882,7 +49719,8 @@ name = "Quarantine Lockdown"; opacity = 0 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, /turf/simulated/floor/plasteel{ icon_state = "whiteyellowfull" }, @@ -49908,13 +49746,13 @@ "fHw" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -49986,17 +49824,18 @@ /area/station/science/server) "fIl" = ( /obj/structure/chair/stool, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "fIv" = ( /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "fIA" = ( @@ -50009,10 +49848,8 @@ }, /area/station/science/research) "fJd" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -50021,8 +49858,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/brig) "fJm" = ( @@ -50074,9 +49910,7 @@ /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "fKW" = ( -/obj/item/kirbyplants{ - icon_state = "plant-16" - }, +/obj/item/kirbyplants/plant16, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -50255,7 +50089,6 @@ /area/station/medical/morgue) "fPT" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/security/forensics, /obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 @@ -50263,6 +50096,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plating, /area/station/security/detective) "fQi" = ( @@ -50639,11 +50473,16 @@ "fZt" = ( /obj/machinery/door/airlock/external{ id_tag = "atmossouth_door_ext"; - locked = 1; - name = "Atmospherics External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "atmossouth_btn_ext"; + name = "exterior access button"; + pixel_y = -24; + req_access_txt = "24;13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, /area/station/engineering/atmos) "fZU" = ( @@ -50772,8 +50611,14 @@ }, /obj/machinery/door/airlock/external{ id_tag = "soldock_door_int"; - locked = 1; - name = "Arrivals External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "soldock_btn_int"; + name = "interior access button"; + pixel_y = -24 }, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) @@ -50828,9 +50673,7 @@ }, /area/station/security/permabrig) "geC" = ( -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/machinery/camera{ c_tag = "Science Hallway - Research"; network = list("Research","SS13") @@ -50900,9 +50743,6 @@ id = "Cell 1"; name = "Cell 1" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -50914,6 +50754,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -51292,18 +51135,11 @@ dir = 8 }, /obj/effect/turf_decal/stripes/corner, -/obj/machinery/access_button{ - autolink_id = "aiaccess_btn_int"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -7; - req_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "gpV" = ( /obj/machinery/door/window/classic/normal{ name = "Mass Driver Door"; @@ -51312,7 +51148,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/tox{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -51442,6 +51278,7 @@ /area/station/science/xenobiology) "gsQ" = ( /obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -51450,8 +51287,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "gsR" = ( @@ -51488,6 +51324,17 @@ /obj/machinery/firealarm/directional/south, /turf/simulated/floor/plasteel, /area/station/security/main) +"gvt" = ( +/obj/structure/chair, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/security/permabrig) "gvJ" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -51495,11 +51342,10 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/engineering/glass{ - heat_proof = 1; - name = "Supermatter Chamber" + heat_proof = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "gvN" = ( @@ -51524,13 +51370,13 @@ /area/station/public/construction) "gxm" = ( /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "gxC" = ( @@ -51590,9 +51436,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, +/obj/item/kirbyplants/plant10, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purple" @@ -51658,9 +51502,8 @@ /area/station/security/brig) "gBG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Foyer" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -51730,7 +51573,8 @@ name = "Quarantine Lockdown"; opacity = 0 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, /turf/simulated/floor/plasteel{ icon_state = "whiteyellowfull" }, @@ -52264,7 +52108,7 @@ /turf/simulated/floor/engine, /area/station/science/explab/chamber) "gNG" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /turf/simulated/wall/r_wall, @@ -52299,7 +52143,7 @@ dir = 1 }, /obj/machinery/keycard_auth/east, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/ntrep{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ntrep{ dir = 1 }, /turf/simulated/floor/carpet/royalblack, @@ -52360,7 +52204,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/engineering/atmos/control) "gRF" = ( @@ -52403,10 +52247,9 @@ "gSd" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; - locked = 1; - name = "Labor Camp Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Perma Gate"; name = "Prison Blast Door" @@ -52415,6 +52258,7 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "gSu" = ( @@ -52680,28 +52524,6 @@ icon_state = "white" }, /area/station/science/toxins/launch) -"gXj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Antechamber" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/turret_protected/aisat/interior) "gXp" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; @@ -52716,11 +52538,10 @@ }, /obj/machinery/door/airlock/external/glass{ id_tag = "aisat_door_int"; - locked = 1; - name = "MiniSat External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -52772,19 +52593,19 @@ "gZB" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "gZP" = ( /obj/machinery/door/airlock/engineering/glass{ autoclose = 0; id_tag = "enginesm_door_ext"; - locked = 1; - name = "Supermatter Exterior Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -52796,7 +52617,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -52924,12 +52745,10 @@ /turf/simulated/floor/plating, /area/station/service/mime) "hds" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Maintenance" - }, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "hdE" = ( @@ -52957,14 +52776,15 @@ /turf/simulated/floor/bluegrid/telecomms/server, /area/station/science/server/coldroom) "heq" = ( -/obj/machinery/door/airlock/hatch{ - name = "Observation Room" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_south) "heC" = ( @@ -53212,9 +53032,7 @@ /area/station/command/office/cmo) "hjr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, +/obj/item/kirbyplants/plant22, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 4; @@ -53278,7 +53096,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "hkF" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_2) @@ -53566,10 +53384,10 @@ name = "Atmospherics Access"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -53577,6 +53395,8 @@ "hqm" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "cmo" }, @@ -53594,7 +53414,7 @@ pixel_y = -3 }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/hydroponics{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -53669,6 +53489,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"hsT" = ( +/obj/structure/chair/stool{ + dir = 1 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "htr" = ( /obj/machinery/disposal, /obj/structure/sign/deathsposal{ @@ -53683,6 +53510,7 @@ /area/station/medical/virology) "hts" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -53695,20 +53523,20 @@ /area/station/maintenance/starboard) "htP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = 6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_x = 6; pixel_y = -2 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5; pixel_y = -2 }, @@ -53732,10 +53560,10 @@ }, /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/prison/cell_block/A) "hvz" = ( @@ -53781,10 +53609,9 @@ /turf/simulated/floor/wood, /area/station/service/bar) "hwb" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Slime Euthanization Chamber" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/xenobiology) "hwF" = ( @@ -53888,24 +53715,23 @@ /obj/machinery/door/window/classic/reversed{ name = "Upload Console Window" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/ai_upload, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/turret_protected/ai_upload) "hyp" = ( /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, /obj/machinery/door/firedoor/heavy{ opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -54050,6 +53876,7 @@ "hBB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -54064,8 +53891,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -54106,6 +53932,7 @@ /obj/structure/chair/wood{ dir = 1 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood, /area/station/public/mrchangs) "hCr" = ( @@ -54178,7 +54005,7 @@ "hDY" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/brig{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -54231,7 +54058,7 @@ name = "Containment Pen #5"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -54250,7 +54077,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "hED" = ( /obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ @@ -54264,13 +54091,13 @@ dir = 8; name = "Warden's Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ - dir = 8 - }, /obj/machinery/door/window/classic/normal{ dir = 4; name = "Outer Window" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/security/warden) "hEZ" = ( @@ -54392,11 +54219,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/permabrig) -"hHA" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/aft2) "hHE" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -54605,11 +54427,11 @@ /area/station/turret_protected/ai) "hLT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -54787,9 +54609,8 @@ /area/station/engineering/atmos) "hRH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -54819,7 +54640,7 @@ /obj/machinery/door/window/reinforced/normal{ name = "Command Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -54967,7 +54788,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "hVw" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, @@ -55417,7 +55238,7 @@ /obj/machinery/door/window/classic/reversed{ name = "Cryo Tank Storage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -55486,9 +55307,6 @@ dir = 8; name = "Inner Pipe Access" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos{ - dir = 8 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -55652,9 +55470,6 @@ dir = 1; name = "Delivery Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ - dir = 1 - }, /turf/simulated/floor/plasteel, /area/station/supply/office) "ima" = ( @@ -55757,12 +55572,6 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics) "inw" = ( -/obj/machinery/access_button{ - autolink_id = "soldock_btn_int"; - name = "interior access button"; - pixel_x = -25; - pixel_y = -25 - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, @@ -55924,7 +55733,7 @@ }, /area/station/service/chapel) "irW" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /obj/effect/turf_decal/delivery/blue, /turf/simulated/floor/plasteel{ dir = 1; @@ -55947,9 +55756,9 @@ /obj/machinery/door/airlock/engineering/glass{ autoclose = 0; id_tag = "enginesm_door_int"; - locked = 1; - name = "Supermatter Interior Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -55961,7 +55770,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -56001,10 +55810,7 @@ /obj/structure/table/reinforced, /obj/item/scalpel, /obj/item/autopsy_scanner, -/obj/item/camera/autopsy{ - pixel_x = -2; - pixel_y = -2 - }, +/obj/item/camera/autopsy, /obj/structure/window/reinforced{ dir = 4 }, @@ -56023,7 +55829,7 @@ name = "Containment Pen #5"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/engine, @@ -56429,22 +56235,21 @@ }, /area/station/medical/medbay) "iBI" = ( -/obj/machinery/door/airlock/research{ - name = "Sci Chem and Xenobio Access" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -56639,12 +56444,12 @@ pixel_x = -25 }, /obj/machinery/door/airlock/highsecurity{ - locked = 1; - name = "AI Chamber" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -56799,9 +56604,8 @@ }, /area/station/security/armory) "iKV" = ( -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay" - }, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -56814,7 +56618,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/lobby) "iKZ" = ( @@ -56893,7 +56697,7 @@ "iLI" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -57050,6 +56854,7 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -57061,10 +56866,10 @@ "iQk" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "iQm" = ( @@ -57122,10 +56927,16 @@ "iRV" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "arrivalsmaint_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/access_button{ + autolink_id = "arrivalsmaint_btn_ext"; + name = "exterior access button"; + pixel_y = -24; + req_access_txt = "13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/port) "iSf" = ( @@ -57148,7 +56959,7 @@ }, /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/processing) "iSE" = ( @@ -57327,25 +57138,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/science/toxins/test) -"iYm" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Solitary Confinement 1" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/station/security/permabrig) "iZl" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -57377,10 +57169,11 @@ /area/station/science/robotics) "jap" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Warehouse" +/obj/machinery/door/airlock/multi_tile/supply/glass{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/storage) "jau" = ( @@ -57483,9 +57276,9 @@ /obj/machinery/door/airlock/research{ autoclose = 0; id_tag = "xeno_door_int"; - locked = 1; - name = "Xenobiology Internal Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -57497,7 +57290,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/machinery/access_button{ autolink_id = "xeno_btn_int"; name = "Xenobiology Access Button"; @@ -57505,6 +57297,7 @@ pixel_y = 26; req_access_txt = "55" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -57642,7 +57435,7 @@ }, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/blueshield, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "jll" = ( @@ -57665,9 +57458,6 @@ /obj/machinery/conveyor/northwest/ccw{ id = "garbage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/maintenance{ - dir = 4 - }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "jma" = ( @@ -57713,15 +57503,22 @@ /obj/machinery/door/airlock/engineering/glass{ autoclose = 0; id_tag = "enginesm_door_int"; - locked = 1; - name = "Supermatter Interior Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/access_button/east{ + autolink_id = "enginesm_btn_int"; + name = "Supermatter Access Button"; + pixel_x = 0; + pixel_y = 24; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -57732,9 +57529,7 @@ c_tag = "Detective's Office"; dir = 8 }, -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/carpet, /area/station/security/detective) @@ -57744,7 +57539,7 @@ pixel_y = -1 }, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -6 }, /obj/machinery/requests_console{ @@ -57792,7 +57587,8 @@ name = "Primate Pen" }, /obj/effect/turf_decal/siding, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/genetics, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, /turf/simulated/floor/grass/no_creep, /area/station/science/genetics) "jrp" = ( @@ -57866,16 +57662,10 @@ dir = 8; name = "glass door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ - dir = 8 - }, /obj/machinery/door/window/classic/normal{ dir = 4; name = "glass door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ - dir = 4 - }, /turf/simulated/floor/plating/airless, /area/station/engineering/atmos) "jta" = ( @@ -58060,7 +57850,7 @@ }, /area/station/engineering/control) "jxj" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, +/obj/item/food/snacks/monkeycube, /turf/simulated/floor/grass, /area/station/maintenance/aft2) "jyP" = ( @@ -58074,11 +57864,6 @@ icon_state = "dark" }, /area/station/science/misc_lab) -"jyT" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard2) "jyW" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -58108,6 +57893,7 @@ /area/station/public/locker) "jzk" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58122,11 +57908,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "jzA" = ( @@ -58144,6 +57930,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/command/bridge) "jAh" = ( @@ -58160,14 +57947,24 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) +"jAY" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/woodsiding{ + dir = 1 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/plasteel{ + icon_state = "bar" + }, +/area/station/service/bar) "jAZ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ autoclose = 0; id_tag = "xeno_door_ext"; - locked = 1; - name = "Xenobiology External Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/south{ autolink_id = "xeno_btn_ext"; name = "Xenobiology Access Button"; @@ -58178,7 +57975,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -58282,6 +58079,7 @@ /area/station/maintenance/starboard2) "jEC" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -58293,8 +58091,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -58302,6 +58098,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "jEO" = ( @@ -58439,7 +58236,7 @@ id_tag = "kitchen_service"; name = "Service Desk Shutter" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -58779,7 +58576,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -58806,7 +58603,7 @@ name = "Containment Pen #6"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/engine, @@ -59052,14 +58849,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/machinery/door/airlock/hatch{ - name = "Observation Room" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_north) "jSA" = ( @@ -59113,15 +58911,15 @@ /obj/machinery/door/airlock/atmos/glass{ autoclose = 0; id_tag = "atmossm_door_int"; - locked = 1; - name = "Atmospherics Access Chamber" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/west{ autolink_id = "atmossm_btn_int"; name = "Atmospherics Access Button"; req_access_txt = "24" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/engineering/control) "jTK" = ( @@ -59225,6 +59023,7 @@ "jWJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -59238,7 +59037,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) "jXi" = ( @@ -59305,6 +59104,9 @@ /obj/machinery/door/window/classic/reversed{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ + dir = 8 + }, /turf/simulated/floor/wood, /area/station/command/office/captain/bedroom) "jXS" = ( @@ -59527,12 +59329,12 @@ /area/station/maintenance/medmaint) "keY" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/effect/mapping_helpers/airlock/access/any/service/bar, /turf/simulated/floor/wood, /area/station/service/bar) "kfe" = ( @@ -59580,10 +59382,10 @@ name = "Coffin Storage"; dir = 4 }, +/obj/structure/closet/coffin, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/chapel_office{ dir = 4 }, -/obj/structure/closet/coffin, /turf/simulated/floor/plating, /area/station/service/chapel) "kfI" = ( @@ -59659,9 +59461,7 @@ }, /area/station/science/research) "kiq" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -59696,9 +59496,8 @@ }, /area/station/science/xenobiology) "kkw" = ( -/obj/machinery/door/airlock/titanium{ - name = "Escape Pod Airlock" - }, +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/pod{ id = "pod3"; name = "escape pod 3" @@ -59926,7 +59725,7 @@ }, /area/station/security/main) "krx" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /turf/simulated/floor/plasteel, @@ -60351,7 +60150,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/station/supply/storage) +/area/station/supply/qm) "kBs" = ( /obj/machinery/alarm/directional/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -60375,9 +60174,6 @@ id = "Cell 3"; name = "Cell 3" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -60389,6 +60185,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -60434,10 +60233,9 @@ "kDC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance" + id_tag = "MedbayFoyerPort" }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -60447,8 +60245,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, @@ -60457,6 +60253,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -60515,7 +60312,7 @@ name = "Containment Pen #1"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 4 }, /turf/simulated/floor/engine, @@ -60813,6 +60610,12 @@ }, /turf/simulated/floor/plating, /area/station/command/office/cmo) +"kJS" = ( +/obj/effect/landmark/start/barber, +/turf/simulated/floor/plasteel{ + icon_state = "darkneutralfull" + }, +/area/station/public/fitness) "kJT" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -61151,17 +60954,12 @@ /turf/simulated/floor/grass, /area/station/maintenance/aft2) "kQv" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/structure/grille/broken, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/plating/airless, /area/space/nearstation) "kQx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-11" - }, +/obj/item/kirbyplants/plant11, /turf/simulated/floor/wood, /area/station/legal/courtroom) "kQD" = ( @@ -61183,9 +60981,8 @@ }, /area/station/security/armory/secure) "kRm" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell 4" - }, +/obj/machinery/door/airlock/centcom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -61549,6 +61346,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood, /area/station/service/theatre) "kZm" = ( @@ -61561,11 +61359,8 @@ }, /area/station/medical/reception) "kZt" = ( -/obj/machinery/door/airlock/atmos{ - name = "Fore-Starboard Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -61654,9 +61449,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "lbv" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell 2" - }, +/obj/machinery/door/airlock/centcom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -61694,6 +61488,16 @@ dir = 10 }, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "yellow" }, @@ -61744,15 +61548,15 @@ autoclose = 0; heat_proof = 1; id_tag = "turbine_door_int"; - locked = 1; - name = "Incinerator Exterior Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/engine, /area/station/maintenance/turbine) "leh" = ( @@ -61764,9 +61568,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -61883,7 +61685,7 @@ id_tag = "roboticsprivacy2"; name = "Robotics Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/robotics{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -61905,13 +61707,13 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/engimaint) "lfV" = ( @@ -61946,7 +61748,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/morgue{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -61971,26 +61773,26 @@ /area/station/science/misc_lab) "lhd" = ( /obj/machinery/smartfridge/medbay, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ - dir = 8 - }, /obj/machinery/door/window/classic/normal{ dir = 4 }, /obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/window/antitheft/normal{ dir = 8; name = "Anti-Theft Shield" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whiteyellowfull" }, @@ -62082,7 +61884,7 @@ /obj/machinery/door/window{ name = "HoP's Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/hop, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/hop, /turf/simulated/floor/wood, /area/station/command/office/hop) "liL" = ( @@ -62170,15 +61972,15 @@ dir = 1; name = "Weapon Distribution" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ - dir = 1 - }, /obj/machinery/door/window/classic/normal{ name = "Request Window" }, /obj/item/pen, /obj/item/paper, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -62197,7 +61999,7 @@ name = "Containment Pen #1"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -62212,13 +62014,13 @@ /area/station/command/office/hos) "lkH" = ( /obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -62293,6 +62095,9 @@ dir = 1; name = "gas ports" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -62399,15 +62204,15 @@ "lpp" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/carrotcakeslice{ +/obj/item/food/snacks/carrotcakeslice{ pixel_x = 8; pixel_y = -2 }, -/obj/item/reagent_containers/food/snacks/poppypretzel{ +/obj/item/food/snacks/poppypretzel{ pixel_x = -8; pixel_y = -3 }, @@ -62461,7 +62266,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield, /turf/simulated/floor/wood, /area/station/command/office/captain) "lrA" = ( @@ -62499,6 +62305,13 @@ }, /turf/simulated/floor/plasteel, /area/station/science/research) +"lsc" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/wood, +/area/station/service/bar) "lsi" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -62629,10 +62442,11 @@ /area/station/science/toxins/launch) "lvE" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "lvP" = ( @@ -62692,21 +62506,21 @@ /turf/simulated/floor/plasteel, /area/station/security/brig) "lyn" = ( -/obj/machinery/door/airlock/hatch{ - name = "Xenobiology Maintenance" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/science/xenobiology) "lyD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -62815,10 +62629,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -62826,6 +62639,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -62999,24 +62813,19 @@ /area/station/security/permabrig) "lFu" = ( /obj/machinery/door/airlock/security/glass{ - name = "Prison Wing"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/brig) "lFv" = ( -/obj/machinery/access_button{ - autolink_id = "engine_btn_ext"; - name = "interior access button"; - pixel_x = -22; - pixel_y = 20; - req_access_txt = "10;13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard2) "lFF" = ( /obj/machinery/hologram/holopad, /obj/effect/landmark/start/scientist, @@ -63030,9 +62839,6 @@ name = "Cell 4"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -63044,6 +62850,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -63253,20 +63062,10 @@ dir = 4; location = "Bridge" }, +/obj/effect/turf_decal/delivery/hollow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/turf_decal/delivery/hollow, -/obj/machinery/door/window/classic/normal{ - dir = 8; - name = "Bridge Delivery" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ - dir = 8 - }, /turf/simulated/floor/plasteel, /area/station/maintenance/maintcentral) "lJq" = ( @@ -63576,7 +63375,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/hydroponics, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "lPV" = ( @@ -63658,11 +63457,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -63673,9 +63467,8 @@ }, /area/station/engineering/break_room) "lQQ" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Patients Room" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -63876,7 +63669,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/command/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -63910,7 +63703,7 @@ name = "Containment Pen #4"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -63939,7 +63732,7 @@ id_tag = "roboticsprivacy"; name = "Robotics Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/robotics{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -64052,6 +63845,7 @@ "mcj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -64063,8 +63857,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/effect/mapping_helpers/airlock/access/any/medical/morgue, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -64409,15 +64202,10 @@ dir = 4; location = "Engineering" }, +/obj/effect/turf_decal/delivery/hollow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/turf_decal/delivery/hollow, -/obj/machinery/door/window/classic/normal{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, /turf/simulated/floor/plasteel, /area/station/maintenance/fsmaint) "mjP" = ( @@ -64449,9 +64237,6 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -64515,16 +64300,16 @@ /area/station/science/toxins/mixing) "mle" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "mlj" = ( @@ -64547,17 +64332,17 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/magistrate, /obj/effect/mapping_helpers/airlock/polarized{ id = "Magistrate" }, /obj/machinery/door/airlock/glass{ id_tag = "magistrateofficedoor" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/magistrate, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -64620,7 +64405,7 @@ /obj/structure/window/plasmareinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter{ layer = 3.3 }, @@ -65027,9 +64812,6 @@ dir = 1; name = "Warden's Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ - dir = 1 - }, /obj/machinery/door/window/classic/normal{ name = "Reception Window" }, @@ -65049,6 +64831,9 @@ icon_state = "1-8" }, /obj/item/storage/fancy/donut_box, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/station/security/warden) "mAt" = ( @@ -65102,7 +64887,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "mBn" = ( /turf/simulated/floor/plating/airless, /area/station/engineering/solar/starboard) @@ -65157,11 +64942,9 @@ }, /area/station/medical/morgue) "mCT" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -65170,6 +64953,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/engineering/control) "mCX" = ( @@ -65461,10 +65245,9 @@ /obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig" }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/brig) "mLC" = ( @@ -65539,20 +65322,6 @@ icon_state = "showroomfloor" }, /area/station/medical/coldroom) -"mOC" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell 3" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/permabrig) "mOD" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -65581,8 +65350,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/effect/turf_decal/woodsiding{ dir = 4 }, @@ -65751,10 +65520,11 @@ /area/station/service/library) "mSm" = ( /obj/machinery/door/airlock/freezer, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -65799,6 +65569,8 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "mUf" = ( @@ -65847,6 +65619,7 @@ /area/station/hallway/primary/starboard) "mUv" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -65857,7 +65630,6 @@ /area/station/maintenance/medmaint) "mUU" = ( /obj/machinery/door/airlock/command, -/obj/effect/mapping_helpers/airlock/access/all/security/hos, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -65884,6 +65656,8 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/hos, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/command/office/hos) "mVl" = ( @@ -65969,11 +65743,10 @@ /turf/simulated/floor/redgrid, /area/station/turret_protected/ai_upload) "mVS" = ( -/obj/machinery/door/airlock/research{ - name = "Toxins Loop Observation" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "mVW" = ( @@ -66006,9 +65779,9 @@ dir = 4 }, /obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 2; + d2 = 4; + icon_state = "2-4" }, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) @@ -66063,11 +65836,11 @@ /area/shuttle/arrival/station) "mXE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -3; pixel_y = 9 }, @@ -66304,7 +66077,7 @@ name = "Containment Pen #4"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/engine, @@ -66333,7 +66106,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "ncC" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/classic/normal{ @@ -66344,15 +66117,15 @@ name = "Security Desk"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ - dir = 4 - }, /obj/item/folder/red, /obj/item/pen{ pixel_x = -3; pixel_y = 5 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "ncG" = ( @@ -66477,7 +66250,7 @@ /area/station/public/construction) "nfj" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ desc = "Takes you to a whole new level of thinking."; name = "Meta-Cider" }, @@ -66500,24 +66273,11 @@ }, /area/station/engineering/atmos) "nfB" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/access_button{ - autolink_id = "engine_btn_int"; - name = "interior access button"; - pixel_x = -22; - pixel_y = -20; - req_access_txt = "10;13" - }, -/turf/simulated/floor/engine, -/area/station/engineering/control) +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/turf/simulated/floor/plating, +/area/station/maintenance/fpmaint) "nfR" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/color/latex, @@ -66572,10 +66332,10 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "ngG" = ( @@ -66602,7 +66362,7 @@ name = "Cargo Desk" }, /obj/item/paper/crumpled, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "nht" = ( @@ -66712,7 +66472,7 @@ pixel_y = 7; anchored = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "niC" = ( @@ -67059,6 +66819,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood, /area/station/public/mrchangs) "nru" = ( @@ -67209,8 +66970,8 @@ "nvP" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -67232,13 +66993,13 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "nwx" = ( @@ -67713,11 +67474,16 @@ "nEU" = ( /obj/machinery/door/airlock/external{ id_tag = "engine_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "engine_btn_int"; + name = "interior access button"; + pixel_x = -24; + req_access_txt = "10;13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, /area/station/engineering/control) "nFf" = ( @@ -67750,11 +67516,16 @@ "nFZ" = ( /obj/machinery/door/airlock/external{ id_tag = "engine_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "engine_btn_ext"; + name = "interior access button"; + pixel_y = 24; + req_access_txt = "10;13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, /area/station/engineering/control) "nGj" = ( @@ -67895,6 +67666,23 @@ }, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) +"nKU" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/turf/simulated/floor/plating, +/area/station/maintenance/medmaint) "nLV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -67968,12 +67756,13 @@ /area/station/engineering/control) "nNk" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plating, /area/station/maintenance/fore) "nNq" = ( @@ -68004,10 +67793,8 @@ /area/station/maintenance/starboard) "nOR" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -68019,6 +67806,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -68202,9 +67990,9 @@ "nUU" = ( /obj/machinery/door/airlock/medical/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -68277,6 +68065,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -68300,6 +68089,15 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) +"nWX" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/security/permabrig) "nXr" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -68697,9 +68495,8 @@ /area/station/medical/medbay) "oga" = ( /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "ogq" = ( @@ -68870,6 +68667,7 @@ /obj/structure/chair/stool{ dir = 8 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "omW" = ( @@ -69015,6 +68813,7 @@ /obj/structure/chair/stool{ dir = 8 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "oqO" = ( @@ -69037,23 +68836,22 @@ /area/station/public/locker) "orV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /obj/machinery/door/window/classic/reversed{ name = "Kitchen" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchen_counter"; name = "Kitchen Counter Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -69139,6 +68937,14 @@ }, /turf/simulated/floor/engine, /area/station/engineering/control) +"oxy" = ( +/obj/machinery/turretid/stun{ + name = "AI Upload Turret Control"; + pixel_y = -8; + req_access = list(75) + }, +/turf/simulated/wall/r_wall, +/area/station/turret_protected/ai_upload) "oxJ" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance/two, @@ -69149,7 +68955,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/iaa, +/obj/effect/mapping_helpers/airlock/access/any/security/iaa, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -69569,6 +69375,11 @@ icon_state = "caution" }, /area/station/engineering/atmos/control) +"oKu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "oLF" = ( /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel, @@ -69580,11 +69391,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "oMn" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -69798,9 +69614,8 @@ }, /area/station/public/dorms) "oQE" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Secure Equipment Storage" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -69810,7 +69625,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -69824,27 +69639,14 @@ /turf/simulated/floor/plating, /area/station/security/prison/cell_block/A) "oQV" = ( -/obj/structure/plasticflaps{ - opacity = 1 - }, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/navbeacon{ codes_txt = "delivery"; dir = 8; location = "Security" }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "Secure Gate"; - name = "brig shutters" - }, -/obj/machinery/door/window/classic/reversed{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 4 +/obj/structure/plasticflaps{ + opacity = 1 }, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) @@ -69875,6 +69677,7 @@ /area/station/security/brig) "oRx" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 1; @@ -69888,8 +69691,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel, /area/station/security/warden) "oRL" = ( @@ -70040,7 +69842,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 1 }, /turf/simulated/floor/engine, @@ -70074,6 +69876,15 @@ /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"oWv" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/spawner/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "oWE" = ( /turf/simulated/wall/r_wall, /area/station/public/fitness) @@ -70130,8 +69941,7 @@ /area/station/security/armory) "oXw" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/forensics, -/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 4; @@ -70139,7 +69949,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -70400,9 +70210,9 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "peo" = ( @@ -70431,11 +70241,10 @@ /area/station/maintenance/xenobio_south) "peF" = ( /obj/machinery/door/airlock/engineering/glass{ - heat_proof = 1; - name = "Supermatter Chamber" + heat_proof = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "pfh" = ( @@ -70452,9 +70261,6 @@ name = "Kitchen Delivery"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ dir = 4 }, @@ -70477,11 +70283,9 @@ }, /area/station/engineering/atmos/distribution) "pfH" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -70490,6 +70294,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/engineering/control) "pgs" = ( @@ -70595,13 +70400,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/access_button{ - autolink_id = "atmossouth_btn_int"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "13" - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -70775,9 +70573,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -70805,20 +70601,10 @@ codes_txt = "delivery"; location = "Research Division" }, +/obj/effect/turf_decal/delivery/hollow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/turf_decal/delivery/hollow, -/obj/machinery/door/window/classic/reversed{ - dir = 1; - name = "Research Division" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 1 - }, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard2) "pos" = ( @@ -71214,9 +71000,8 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock{ - name = "Dormitories" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 1; @@ -71243,7 +71028,6 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -71252,6 +71036,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "pAU" = ( @@ -71341,20 +71126,6 @@ icon_state = "cult" }, /area/station/service/library) -"pCo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, -/turf/simulated/floor/plating, -/area/station/medical/psych) "pDA" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -71475,6 +71246,17 @@ icon_state = "blackcorner" }, /area/station/security/permabrig) +"pGq" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "pGO" = ( /obj/machinery/light/directional/east, /obj/structure/closet/secure_closet/security, @@ -71657,11 +71439,6 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 5 }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "pKs" = ( @@ -71778,7 +71555,6 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; @@ -71791,6 +71567,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -71821,9 +71598,6 @@ id = "Cell 2"; name = "Cell 2" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -71835,6 +71609,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -71842,9 +71619,9 @@ /area/station/security/prison/cell_block/A) "pOG" = ( /obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "pOV" = ( @@ -71951,10 +71728,8 @@ }, /area/station/science/toxins/mixing) "pQq" = ( -/obj/machinery/door/airlock/hatch{ - name = "Telecoms Server Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -71963,6 +71738,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, /turf/simulated/floor/plasteel/dark, /area/station/telecomms/chamber) "pQv" = ( @@ -72161,7 +71937,10 @@ name = "Quarantine Lockdown"; opacity = 0 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/chemistry{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -72469,7 +72248,6 @@ /obj/machinery/door/window/classic/normal{ name = "Cyborg Upload Console Window" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/ai_upload, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -72754,7 +72532,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research, /turf/simulated/floor/engine, /area/station/science/xenobiology) "qfs" = ( @@ -72827,16 +72605,15 @@ /area/station/engineering/atmos/control) "qhd" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/wood, /area/station/maintenance/starboard) "qid" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod Three" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fore) "qiA" = ( @@ -72864,19 +72641,25 @@ "qkC" = ( /obj/machinery/door/airlock/external{ id_tag = "aiaccess_door_ext"; - locked = 1; - name = "MiniSat Space Access Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "transittube"; name = "Transit Tube Blast Door" }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "aiaccess_btn_ext"; + name = "exterior access button"; + pixel_y = 24; + req_one_access_txt = "75;13" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "qkD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -72888,8 +72671,8 @@ "qkK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/effect/turf_decal/woodsiding{ dir = 4 }, @@ -72949,7 +72732,7 @@ name = "Containment Pen #3"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/engine, @@ -72998,6 +72781,8 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "qma" = ( @@ -73016,19 +72801,26 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/library, /turf/simulated/floor/plating, /area/station/maintenance/port) "qmv" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "arrivalsmaint_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/machinery/access_button{ + autolink_id = "arrivalsmaint_btn_int"; + name = "interior access button"; + pixel_y = -24; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/port) "qmL" = ( @@ -73043,7 +72835,7 @@ }, /area/station/medical/exam_room) "qnp" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 }, @@ -73081,6 +72873,10 @@ icon_state = "showroomfloor" }, /area/station/medical/coldroom) +"qoi" = ( +/obj/effect/landmark/start/artist, +/turf/simulated/floor/carpet, +/area/station/service/theatre) "qoQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -73159,6 +72955,7 @@ c_tag = "Mr. Chang's"; dir = 4 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood, /area/station/public/mrchangs) "qrh" = ( @@ -73411,21 +73208,21 @@ "qvp" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 }, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/machinery/light/directional/north, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -73747,11 +73544,6 @@ icon_state = "red" }, /area/station/security/permabrig) -"qGw" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint) "qIg" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -73855,7 +73647,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, +/obj/effect/mapping_helpers/airlock/access/any/medical/paramedic, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -73880,7 +73672,7 @@ }, /obj/item/folder/yellow, /obj/item/pen, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/construction{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -73907,9 +73699,6 @@ /obj/machinery/conveyor/west{ id = "garbage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/maintenance{ - dir = 1 - }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "qMg" = ( @@ -74367,7 +74156,11 @@ }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "qWN" = ( @@ -74464,11 +74257,9 @@ "qZz" = ( /obj/machinery/door/airlock/external{ id_tag = "aiaccess_door_int"; - locked = 1; - name = "MiniSat Space Access Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, @@ -74476,10 +74267,18 @@ id_tag = "transittube"; name = "Transit Tube Blast Door" }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "aiaccess_btn_int"; + name = "interior access button"; + pixel_y = 24; + req_one_access_txt = "75;13" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "rab" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -74582,7 +74381,7 @@ /obj/machinery/door/airlock/security/glass{ id_tag = "outerbrig" }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/flasher{ id = "secentranceflasher"; @@ -74604,9 +74403,8 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/brig) "rbC" = ( @@ -74618,6 +74416,7 @@ /area/station/engineering/control) "rbN" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -74706,6 +74505,9 @@ dir = 8; name = "Abandoned Shutter" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -74748,7 +74550,7 @@ /obj/structure/rack, /obj/item/clothing/mask/gas, /obj/item/storage/box/lights/mixed, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/cultivator, /obj/item/clothing/head/chefhat, /obj/effect/spawner/lootdrop/maintenance, @@ -74756,11 +74558,10 @@ /area/station/maintenance/starboard) "rfn" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -74769,6 +74570,9 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "rfD" = ( @@ -74803,15 +74607,15 @@ "rgO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/paramedic, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -74973,9 +74777,8 @@ /area/station/aisat) "rkr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Prison Forestry" - }, +/obj/machinery/door/airlock/centcom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -75092,6 +74895,7 @@ id_tag = "admin_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "roi" = ( @@ -75291,11 +75095,10 @@ "rsv" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "aisat_door_int"; - locked = 1; - name = "MiniSat External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -75404,7 +75207,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "rvu" = ( @@ -75424,7 +75227,6 @@ "rvF" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -75441,7 +75243,7 @@ /area/station/engineering/engine/supermatter) "rwj" = ( /obj/structure/safe/floor, -/obj/item/reagent_containers/food/snacks/fortunecookie, +/obj/item/food/snacks/fortunecookie, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "rwk" = ( @@ -75919,6 +75721,7 @@ /area/station/medical/morgue) "rGd" = ( /obj/structure/weightmachine/weightlifter, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "rGj" = ( @@ -75931,11 +75734,11 @@ "rGF" = ( /obj/machinery/door/airlock/external{ id_tag = "mining_home"; - locked = 1; - name = "Mining Dock Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plating, /area/station/supply/miningdock) "rGJ" = ( @@ -76105,9 +75908,8 @@ }, /area/station/medical/exam_room) "rJJ" = ( -/obj/machinery/door/airlock/titanium{ - name = "Arrivals Shuttle Airlock" - }, +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium, /area/shuttle/arrival/station) "rJR" = ( @@ -76119,6 +75921,7 @@ "rKa" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -76126,8 +75929,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -76218,7 +76020,7 @@ }, /area/station/security/permabrig) "rLS" = ( -/obj/machinery/suit_storage_unit/cmo, +/obj/machinery/suit_storage_unit/cmo/secure, /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel{ dir = 10; @@ -76308,11 +76110,9 @@ }, /area/station/security/permabrig) "rOp" = ( -/obj/machinery/door/airlock/tranquillite{ - name = "Old Mime's Storage" - }, +/obj/machinery/door/airlock/tranquillite, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/mineral/tranquillite, /area/station/maintenance/fore) "rOu" = ( @@ -76400,7 +76200,7 @@ "rRu" = ( /obj/machinery/door/airlock/medical, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -76559,12 +76359,12 @@ "rWn" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "rWr" = ( @@ -76776,6 +76576,7 @@ "sbM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -76789,8 +76590,7 @@ /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -76821,7 +76621,7 @@ /area/station/public/mrchangs) "sdj" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /obj/effect/turf_decal/tile/purple{ dir = 1 }, @@ -77045,9 +76845,9 @@ /area/station/maintenance/fore) "skI" = ( /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/pod{ id = "pod2"; name = "escape pod 2" @@ -77094,7 +76894,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "slT" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -77135,9 +76935,8 @@ /area/station/maintenance/fsmaint) "smH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Prison Cafeteria" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -77172,11 +76971,16 @@ }, /obj/machinery/door/airlock/external{ id_tag = "atmossouth_door_int"; - locked = 1; - name = "Atmospherics External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "atmossouth_btn_int"; + name = "interior access button"; + pixel_y = -24; + req_access_txt = "13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, /area/station/engineering/atmos) "snq" = ( @@ -77200,13 +77004,6 @@ }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/classic/reversed{ - name = "Ore Redemtion Window"; - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mineral_storage{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/supply/lobby) "sol" = ( @@ -77242,6 +77039,7 @@ "soO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, @@ -77250,8 +77048,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -77334,10 +77131,9 @@ /area/station/security/permabrig) "srJ" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Abandoned Warehouse" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "srS" = ( @@ -77374,9 +77170,6 @@ name = "Primary AI Core Access"; dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ - dir = 8 - }, /obj/machinery/turretid/lethal{ check_synth = 1; name = "AI Chamber Turret Control"; @@ -77389,6 +77182,9 @@ pixel_x = -8; pixel_y = -24 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -77515,15 +77311,14 @@ /obj/machinery/door/airlock/security/glass{ id_tag = "outerbrig" }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "brig shutters" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/brig) "swP" = ( @@ -77678,7 +77473,6 @@ dir = 8; name = "Reinforced Glass Door" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, @@ -77686,10 +77480,8 @@ /area/station/science/explab/chamber) "sCr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Research Division Server Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -78106,7 +77898,6 @@ "sLc" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ d1 = 1; @@ -78116,6 +77907,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "sLs" = ( @@ -78170,13 +77962,13 @@ /area/station/engineering/equipmentstorage) "sMK" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/aft2) "sMM" = ( @@ -78257,10 +78049,10 @@ /area/station/hallway/secondary/exit) "sNJ" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "sNR" = ( @@ -78532,6 +78324,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -78554,6 +78347,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "cmo" }, @@ -78644,7 +78438,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -78679,7 +78473,7 @@ "sXU" = ( /obj/machinery/light/directional/north, /mob/living/carbon/human/monkey, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/grass/no_creep, /area/station/science/genetics) "sXZ" = ( @@ -78885,12 +78679,13 @@ }, /area/station/security/execution) "tbE" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plating, /area/station/maintenance/fore) "tbY" = ( @@ -78912,14 +78707,13 @@ /obj/machinery/door/window/classic/reversed{ name = "Kitchen" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchen_counter"; name = "Kitchen Counter Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -79152,6 +78946,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "tgV" = ( @@ -79250,6 +79046,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "tiN" = ( @@ -79310,16 +79107,15 @@ /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) "tkm" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/access_button{ - autolink_id = "arrivalsmaint_btn_ext"; - name = "exterior access button"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "13" +/obj/machinery/door/airlock/external{ + id_tag = "emergency_home"; + locked = 1 }, -/turf/space, -/area/space/nearstation) +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/exit) "tkV" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mech_bay_recharge_floor, @@ -79463,7 +79259,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/wood, /area/station/legal/courtroom) "toO" = ( @@ -79572,9 +79368,6 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/supply/office) "tsm" = ( @@ -79603,16 +79396,20 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) +"ttb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "ttA" = ( /obj/structure/rack, /obj/item/hand_labeler, /obj/item/folder/red, -/obj/item/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "detective's camera"; - pixel_x = -2; - pixel_y = 3 - }, +/obj/item/camera/detective, /obj/item/taperecorder{ pixel_x = -1 }, @@ -79632,7 +79429,7 @@ /turf/simulated/floor/carpet, /area/station/command/office/captain/bedroom) "tug" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/door_control/shutter/east{ id = "toxinaccess"; name = "Toxins Access"; @@ -79670,7 +79467,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -79796,9 +79593,7 @@ }, /area/station/hallway/primary/central) "tyW" = ( -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -79855,6 +79650,9 @@ dir = 1; name = "gas ports" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -80162,9 +79960,6 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/supply/office) "tKb" = ( @@ -80187,9 +79982,7 @@ }, /area/station/security/armory) "tKL" = ( -/obj/item/kirbyplants{ - icon_state = "plant-24" - }, +/obj/item/kirbyplants/plant24, /obj/machinery/light_switch/west{ pixel_y = 6 }, @@ -80252,6 +80045,16 @@ /obj/effect/turf_decal/delivery, /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/classic/reversed{ + name = "Bar Delivery"; + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar{ + dir = 8 + }, /turf/simulated/floor/wood, /area/station/service/bar) "tNe" = ( @@ -80285,7 +80088,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "tOF" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -80342,12 +80145,12 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/magistrate, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/command/magistrate, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -80382,6 +80185,7 @@ /area/station/legal/lawoffice) "tRD" = ( /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80396,11 +80200,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox_storage, /obj/machinery/door/firedoor/heavy{ opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -80479,12 +80282,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/command/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -80611,12 +80414,12 @@ /area/station/security/permabrig) "tYV" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/cans/beer, /obj/machinery/economy/vending/wallmed/directional/north, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) @@ -80660,7 +80463,7 @@ /area/station/maintenance/fore) "uaH" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "uaJ" = ( @@ -80682,7 +80485,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -80908,6 +80711,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "ugu" = ( @@ -80996,12 +80800,11 @@ dir = 4; name = "Bar Glass Door" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/woodsiding{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/bar{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -81116,11 +80919,6 @@ /obj/structure/plasticflaps{ opacity = 1 }, -/obj/machinery/door/window/classic/reversed{ - name = "Bar Delivery" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar, /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "ule" = ( @@ -81370,9 +81168,8 @@ }, /area/station/security/main) "uta" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod Two" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "utu" = ( @@ -81414,7 +81211,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/command, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -81502,9 +81300,9 @@ /area/station/engineering/atmos) "uxR" = ( /obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -81633,12 +81431,6 @@ icon_state = "darkblue" }, /area/station/medical/break_room) -"uAz" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "uAA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -81652,7 +81444,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/hydroponics{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -81741,11 +81533,11 @@ opacity = 0 }, /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -81806,6 +81598,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood, /area/station/service/bar) "uFM" = ( @@ -81921,14 +81714,14 @@ "uJy" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; - locked = 1; - name = "Labor Camp Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "uJF" = ( @@ -82020,9 +81813,9 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -82040,7 +81833,7 @@ dir = 1; name = "Glass Door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/rd{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/rd{ dir = 1 }, /turf/simulated/floor/engine, @@ -82245,7 +82038,7 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/research{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -82300,9 +82093,8 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "uQo" = ( -/obj/machinery/door/airlock/wood{ - name = "The Gobetting Barmaid" - }, +/obj/machinery/door/airlock/wood, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "uQU" = ( @@ -82316,10 +82108,8 @@ }, /area/station/security/main) "uRN" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -82327,10 +82117,16 @@ id_tag = "transittube"; name = "Transit Tube Blast Door" }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "uRO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -82453,7 +82249,7 @@ /obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig" }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -82466,9 +82262,8 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/brig) "uUG" = ( @@ -82487,8 +82282,8 @@ /area/station/hallway/primary/central) "uUI" = ( /obj/machinery/door/airlock/public/glass, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/effect/turf_decal/woodsiding, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -82547,6 +82342,7 @@ "uVF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ @@ -82554,8 +82350,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -82575,7 +82370,6 @@ name = "Court Cell" }, /obj/machinery/light/small/directional/west, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -82731,9 +82525,8 @@ /turf/simulated/floor/grass/no_creep, /area/station/hallway/secondary/garden) "uYF" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Prison Sanitarium" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -82747,7 +82540,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -82779,7 +82572,7 @@ name = "Containment Pen #8"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 4 }, /turf/simulated/floor/engine, @@ -82806,6 +82599,7 @@ /area/station/security/permabrig) "uZG" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -82817,7 +82611,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "uZP" = ( @@ -83045,13 +82838,6 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/machinery/access_button{ - autolink_id = "arrivalsmaint_btn_int"; - name = "interior access button"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "13" - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -83203,6 +82989,7 @@ /obj/structure/chair/stool{ dir = 8 }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "vjL" = ( @@ -83247,20 +83034,19 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard) "vkT" = ( -/obj/machinery/door/airlock/research{ - name = "Xenobiology Space Bridge" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/machinery/door/poddoor/preopen{ id_tag = "xeno_blastdoor"; name = "biohazard containment door" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -83280,9 +83066,9 @@ /area/station/maintenance/fsmaint) "vmA" = ( /obj/machinery/door/airlock/security{ - id_tag = "prisonereducation"; - name = "Execution Room" + id_tag = "prisonereducation" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -83295,7 +83081,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/execution) "vmK" = ( @@ -83415,15 +83201,15 @@ /area/station/security/detective) "voT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 6 }, @@ -83436,18 +83222,17 @@ /area/station/maintenance/starboard2) "voV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/door/window/classic/normal{ name = "Kitchen" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchen_counter"; name = "Kitchen Counter Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -83549,6 +83334,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "vrH" = ( @@ -83566,15 +83352,14 @@ }, /area/station/legal/courtroom) "vrO" = ( -/obj/machinery/access_button{ - autolink_id = "atmossouth_btn_ext"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = 7; - req_access_txt = "24;13" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/court, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/turf/simulated/floor/plating/airless, -/area/station/engineering/atmos) +/area/station/legal/courtroom) "vrZ" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 @@ -83721,7 +83506,7 @@ /obj/machinery/door/window/classic/reversed{ name = "Containment Pen #2" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/xenobiology) "vvF" = ( @@ -83754,10 +83539,10 @@ /area/station/engineering/atmos) "vwA" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/chips{ +/obj/item/food/snacks/chips{ pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/cans/thirteenloko{ +/obj/item/reagent_containers/drinks/cans/thirteenloko{ pixel_x = -6; pixel_y = 6 }, @@ -83847,7 +83632,7 @@ /area/station/medical/reception) "vzd" = ( /obj/machinery/light/directional/south, -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /obj/effect/turf_decal/delivery/blue, /turf/simulated/floor/plasteel{ dir = 1; @@ -83976,12 +83761,12 @@ }, /obj/machinery/door/airlock/research/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/door/poddoor/preopen{ id_tag = "Xenolab"; name = "test chamber blast door" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/engine, /area/station/science/test_chamber) "vCR" = ( @@ -84336,9 +84121,6 @@ name = "Inner Pipe Access"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84420,15 +84202,15 @@ "vSE" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = 7; pixel_y = 1 }, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = -5; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5 }, /turf/simulated/floor/plasteel/dark, @@ -84558,12 +84340,11 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/maintenance/port) +/area/station/hallway/primary/central) "vWd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Prison Showers" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -84576,6 +84357,7 @@ /area/station/security/permabrig) "vWk" = ( /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -84590,7 +84372,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) @@ -85022,9 +84803,8 @@ }, /area/station/security/execution) "wjs" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell 1" - }, +/obj/machinery/door/airlock/centcom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -85086,14 +84866,13 @@ /turf/simulated/floor/plating, /area/station/science/robotics) "wky" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/engine, /area/station/engineering/control) "wkL" = ( @@ -85187,7 +84966,7 @@ /area/station/security/prisonlockers) "wnD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -85306,7 +85085,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "wsu" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -85327,8 +85106,8 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "wsN" = ( @@ -85424,6 +85203,7 @@ /area/station/supply/storage) "wtQ" = ( /obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -85432,11 +85212,10 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, /obj/machinery/door/firedoor/heavy{ opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -85942,17 +85721,16 @@ /turf/simulated/floor/plating, /area/station/command/office/hos) "wHz" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Bridge Access" - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/door/poddoor/preopen{ id_tag = "bridge blast"; name = "Bridge Blast Doors" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -85970,7 +85748,7 @@ name = "Mass Driver Control Door"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/tox{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -86005,7 +85783,7 @@ name = "Containment Pen #8"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -86033,6 +85811,10 @@ /mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"wLY" = ( +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "wMb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -86156,7 +85938,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/purple, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/research{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -86312,6 +86094,7 @@ "wTc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -86326,8 +86109,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/chemistry, /turf/simulated/floor/plasteel{ icon_state = "whiteyellowfull" }, @@ -86364,13 +86147,11 @@ /turf/simulated/wall/r_wall, /area/station/maintenance/engimaint) "wUE" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Bridge Access" - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/door/poddoor/preopen{ id_tag = "bridge blast"; name = "Bridge Blast Doors" @@ -86380,6 +86161,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -86391,7 +86173,7 @@ /obj/effect/mapping_helpers/airlock/windoor/autoname{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/command/captain{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ dir = 1 }, /turf/simulated/floor/wood, @@ -86493,13 +86275,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/door/airlock/virology{ autoclose = 0; id_tag = "viro_door_int"; - locked = 1; - name = "Virology Lab Internal Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -86624,16 +86406,15 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 6 }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Distribution Loop" - }, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "caution" @@ -86673,14 +86454,13 @@ /turf/simulated/wall, /area/station/science/toxins/mixing) "xbt" = ( -/obj/machinery/door/airlock{ - name = "Theatre Backstage" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/wood, /area/station/service/theatre) "xbu" = ( @@ -86720,14 +86500,10 @@ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "xbT" = ( -/obj/machinery/access_button/east{ - autolink_id = "enginesm_btn_int"; - name = "Supermatter Access Button"; - req_access_txt = "10" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -86773,14 +86549,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/virology/glass{ - name = "Isolation B" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -86825,9 +86600,8 @@ /area/station/science/research) "xef" = ( /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/fsmaint) "xen" = ( @@ -86916,7 +86690,7 @@ }, /obj/machinery/door/airlock/security, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -86956,7 +86730,6 @@ /obj/machinery/door/window/reinforced/normal{ name = "Justice Chamber" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/window/reinforced{ dir = 8 @@ -86968,15 +86741,16 @@ dir = 1; name = "Justice Chamber" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 1 - }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/poddoor/preopen{ id_tag = "executionfireblast" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -87058,10 +86832,8 @@ }, /area/station/medical/cryo) "xkR" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Auxiliary Chamber" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating/airless, /area/station/engineering/atmos) "xkX" = ( @@ -87164,9 +86936,6 @@ pixel_y = 8; anchored = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -87326,9 +87095,6 @@ /obj/machinery/conveyor/northeast/ccw{ id = "garbage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/maintenance{ - dir = 4 - }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "xrm" = ( @@ -87372,7 +87138,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "xrS" = ( /obj/structure/chair/office/light{ dir = 8 @@ -87437,9 +87203,7 @@ }, /area/station/hallway/secondary/exit) "xtP" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/item/kirbyplants/plant21, /obj/structure/sign/botany{ pixel_x = 32 }, @@ -87552,15 +87316,22 @@ /obj/machinery/door/airlock/engineering/glass{ autoclose = 0; id_tag = "enginesm_door_ext"; - locked = 1; - name = "Supermatter Exterior Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/access_button/west{ + autolink_id = "enginesm_btn_ext"; + name = "Supermatter Access Button"; + pixel_x = 0; + pixel_y = 24; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -87611,11 +87382,13 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/power/apc/directional/west, +/obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/break_room) +/area/station/engineering/ai_transit_tube) "xyc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -87642,6 +87415,16 @@ /area/station/medical/surgery/observation) "xyP" = ( /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/classic/reversed{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "Secure Gate"; + name = "brig shutters" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/security/main) "xyQ" = ( @@ -87806,8 +87589,8 @@ locked = 1 }, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, /obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "xCF" = ( @@ -87925,23 +87708,22 @@ /area/station/hallway/primary/central) "xFW" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, /obj/machinery/door/window/classic/reversed{ name = "Kitchen" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchen_counter"; name = "Kitchen Counter Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -88057,11 +87839,11 @@ /area/station/engineering/atmos) "xIx" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -88152,10 +87934,10 @@ /area/station/service/bar) "xLw" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /obj/structure/window/reinforced{ @@ -88172,15 +87954,15 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/aft) "xLH" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -88188,6 +87970,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "xLY" = ( @@ -88332,13 +88115,13 @@ "xOI" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "xPh" = ( @@ -88497,10 +88280,27 @@ icon_state = "dark" }, /area/station/security/storage) +"xSl" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, +/turf/simulated/floor/plating, +/area/station/maintenance/fore) "xSv" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/station/maintenance/engimaint) +"xTz" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark/start/artist, +/turf/simulated/floor/wood, +/area/station/service/library) "xTH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -88610,11 +88410,6 @@ /turf/simulated/floor/plating, /area/station/security/prison/cell_block/A) "xWl" = ( -/obj/machinery/access_button/west{ - autolink_id = "enginesm_btn_ext"; - name = "Supermatter Access Button"; - req_access_txt = "10" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -88771,10 +88566,7 @@ name = "MuleBot Access"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/maintenance{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ dir = 1 }, /turf/simulated/floor/plating, @@ -88796,7 +88588,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -88807,9 +88598,10 @@ /obj/machinery/door/airlock/virology{ autoclose = 0; id_tag = "viro_door_ext"; - locked = 1; - name = "Virology Lab External Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -88930,9 +88722,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio{ - dir = 8 - }, /turf/simulated/floor/plasteel, /area/station/science/xenobiology) "ybI" = ( @@ -88961,9 +88750,9 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/medical/glass, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -89154,7 +88943,7 @@ }, /obj/machinery/door/airlock/security, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -89197,6 +88986,12 @@ }, /turf/simulated/floor/wood, /area/station/science/robotics/showroom) +"yhp" = ( +/obj/effect/landmark/start/bath, +/turf/simulated/floor/plasteel{ + icon_state = "darkneutralfull" + }, +/area/station/public/fitness) "yhM" = ( /obj/structure/cable{ d2 = 4; @@ -89267,6 +89062,7 @@ /obj/machinery/door/window{ name = "Permabrig Kitchen" }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -89326,12 +89122,6 @@ name = "Anti-Theft Shield"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 1 - }, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "hydro_service"; @@ -89341,8 +89131,27 @@ name = "Hydroponics Window" }, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) +"ylN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/chair/stool, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/wood, +/area/station/service/bar) "ylO" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; @@ -100016,9 +99825,9 @@ aUY aZk myY cmu -bdR +aZj vkL -bdR +aZj bip bkb blS @@ -100026,9 +99835,9 @@ blS blS bkb bip -bdR +aZj bzw -bdR +aZj eGG bFe aJv @@ -101815,9 +101624,9 @@ aXX vaO tjR cmu -bdR +aZj vkL -bdR +aZj bip bkb mXy @@ -101825,9 +101634,9 @@ mXy mXy bkb bip -bdR +aZj bzw -bdR +aZj bOz bFG aJv @@ -101845,7 +101654,7 @@ cdT cdT aef aef -tkm +aef aef aef aaa @@ -103651,7 +103460,7 @@ ceV cMR ctO ckK -cjE +euM oqk cMR cCn @@ -105160,7 +104969,7 @@ pqM cXt pqM pqM -bkr +pGq pqM pqM cZK @@ -106976,7 +106785,7 @@ fDi wMb ddM bOl -dnY +ejD bTY bVR bTY @@ -107458,7 +107267,7 @@ aVl aVl jyW ueF -aCH +ueF eak aKi aRo @@ -107968,7 +107777,7 @@ aMq aOB aOB aOB -aOB +aVl aPw aMW azN @@ -108225,12 +108034,12 @@ bgA bmi fuy rwj -aOB +aVl aLS aMZ odb aNm -aZt +aVl aSz aYl aRo @@ -108451,7 +108260,7 @@ aaa gjF bQZ adi -adi +wLY adi aJM abW @@ -108739,12 +108548,12 @@ aEM aDz pGU aAP -aOB -aOB -aOB -aOB -aOB -aZt +aVl +aVl +aVl +aVl +aVl +aVl aZt uKy aUt @@ -108770,7 +108579,7 @@ bai bBP bPZ bme -bHr +xTz bIZ bHr bFw @@ -109734,7 +109543,7 @@ toU xIx pUU ile -xPZ +gvt jzA ezq qdT @@ -109771,7 +109580,7 @@ abq aOB bmw aNX -bcu +nfB gqF aWO aSK @@ -110073,11 +109882,11 @@ yaB cLN bZP bZP -pCo +cpz bZP bZP bZP -cpz +bQa bZP csP cue @@ -110257,7 +110066,7 @@ udK odW kRm udK -mOC +kRm odW abW abW @@ -110800,7 +110609,7 @@ rrq wpu aRG aZt -jap +aCH jap aZt aZt @@ -111095,7 +110904,7 @@ bzK qAr bXS bzK -cdT +bZu vWb fmG cRU @@ -111268,22 +111077,22 @@ laH aaa uMy lNt -atF +dYk ixy pcD gcI -wXi +hsT udK vCe gMp -vCe +nWX aOB lCA adY adY -qGw -adi +uaH adi +wLY pqL kiH nEJ @@ -112055,7 +111864,7 @@ kbN kbN teN kkP -owq +ttb gKl taf hpp @@ -112311,7 +112120,7 @@ wYk axz kbN teN -kkP +oKu owq apK jRX @@ -114196,7 +114005,7 @@ eFH cvo cvo cvo -cRu +cAi cvo cvo cvo @@ -114360,7 +114169,7 @@ aaa ajo ipz fKW -atF +oWv atF pot tAy @@ -114404,7 +114213,7 @@ qaB aUl uLQ aZx -aOG +oxy bcl aZL bgF @@ -115138,7 +114947,7 @@ adi abW abW abW -iYm +cXZ abW cXZ abW @@ -115487,7 +115296,7 @@ hgW cQt cLd cLd -cAi +nKU cLd cLd cLd @@ -117062,7 +116871,7 @@ bVX jSC sNH cLn -cXz +tkm aaa aaa aaa @@ -117318,7 +117127,7 @@ cUC jYM bec jYM -cXz +tkm jYM aaa aaa @@ -118329,7 +118138,7 @@ cLl cLl cLl gBM -dTT +dnY csc drN wgh @@ -119535,7 +119344,7 @@ abZ abZ aZU aNC -aMm +vrO aNC aOS aOQ @@ -122186,7 +121995,7 @@ gJg gJg dbE rpG -hHA +dTT vZo vZo vZo @@ -122647,7 +122456,7 @@ byI mZL bCv bEv -bHO +jAY udl bJH bLx @@ -122698,7 +122507,7 @@ cOp cOp cOp cOp -bIm +dnY cOp cOp cOp @@ -122872,7 +122681,7 @@ ajg awM dHU fpy -aFy +xSl aAJ aAJ oEt @@ -122924,7 +122733,7 @@ cda cda cda ciC -cjV +lFv fLJ cmB cnF @@ -123671,7 +123480,7 @@ wwo uUI dbp bwC -bAv +lsc apa kMy bEv @@ -124138,7 +123947,7 @@ aaa aaa ajg ajg -cZz +aFy aoh cZo hdo @@ -124725,7 +124534,7 @@ bYA ckS cte csg -jyT +csh coI cte ima @@ -124958,7 +124767,7 @@ bsm bsm bsm bAx -bCC +ylN bau bvz bGi @@ -124985,7 +124794,7 @@ cPQ cte cte cte -jyT +csh cte clC cwG @@ -125245,7 +125054,7 @@ dcj cLF cte cte -jyT +csh cmB cmB cmB @@ -125426,9 +125235,9 @@ ajg oUI akj ald +kJS aio -aio -aio +yhp apW arm aDd @@ -125476,7 +125285,7 @@ bCF ljZ nwx bEv -bHO +jAY eNT soT pWX @@ -125940,9 +125749,9 @@ ajg ajn akl ald +yhp aio -aio -aio +kJS apW aro mKy @@ -127016,7 +126825,7 @@ aLC wQe bLv bHW -bHW +qoi bHX kZl xbt @@ -127252,7 +127061,7 @@ wAw swh dAH aGU -dvY +apV nET nET aUI @@ -127545,7 +127354,7 @@ aoG bYE aoG aoG -uAz +dpT aoG dcx cFq @@ -129343,7 +129152,7 @@ aDa kry asJ asJ -aAL +bln cfy asJ aoG @@ -132146,7 +131955,7 @@ bjN bjN bnt xrx -auq +bpn lQJ gYM hHE @@ -132405,12 +132214,12 @@ nmh aLw pKi aiE -bnt -bnt -bnt -bnt -bnt -bnt +auq +auq +auq +auq +auq +auq iRu mpP skc @@ -132919,7 +132728,7 @@ bnt xYR nCm tyW -bnt +auq hkm tNQ mAZ @@ -133165,7 +132974,7 @@ aOe tVw gpj tAn -nfB +bbC nEU mdN mLC @@ -133180,7 +132989,7 @@ wUa bsI bxx bly -bnt +auq qZz iRu fmo @@ -133437,7 +133246,7 @@ wUa dIn sls hEA -bnt +auq ncA iRu yif @@ -133694,7 +133503,7 @@ sTM jKS aXO aXO -bnt +auq qkC iRu ciD @@ -133938,7 +133747,7 @@ kGw dea oXB aCg -lFv +aef aef aef aef @@ -133951,7 +133760,7 @@ sTM fiT abq abq -bQa +abq aef iRu iRu @@ -135260,7 +135069,7 @@ bCM abq pln qbf -vrO +qbf qbf qbf qbf @@ -143457,7 +143266,7 @@ bqX bri bri bri -gXj +cQP bri bBl bxb diff --git a/_maps/map_files220/RandomRuins/LavaRuins/ash_old.dmm b/_maps/map_files220/RandomRuins/LavaRuins/ash_old.dmm new file mode 100644 index 000000000000..ef76da2d8f33 --- /dev/null +++ b/_maps/map_files220/RandomRuins/LavaRuins/ash_old.dmm @@ -0,0 +1,942 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aH" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bj" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center/cracked, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cp" = ( +/obj/structure/stone_tile/block, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"eN" = ( +/obj/structure/stone_tile/block/cracked, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"hn" = ( +/obj/effect/mapping_helpers/no_lava, +/obj/item/stack/sheet/wood{ + amount = 2 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"jc" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"jg" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"jP" = ( +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"kr" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"lx" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_lava, +/obj/structure/closet/crate/wooden/wooden_crate, +/obj/item/circuitboard/prisoner, +/obj/item/circuitboard/chem_master{ + pixel_y = -5; + pixel_x = 2 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"nE" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"nF" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"nH" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"nQ" = ( +/turf/simulated/wall/indestructible/boss, +/area/lavaland/surface/outdoors) +"nV" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"oo" = ( +/obj/effect/decal/remains/xeno, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"oA" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"py" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"pz" = ( +/obj/effect/baseturf_helper/asteroid/basalt, +/turf/simulated/wall/indestructible/boss, +/area/lavaland/surface/outdoors) +"pQ" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"qp" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/obj/structure/closet/crate/wooden/wooden_crate, +/obj/item/seeds/aloe, +/obj/item/seeds/potato{ + pixel_x = 5 + }, +/obj/item/seeds/cotton{ + pixel_x = -7 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"qF" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"sc" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/effect/mapping_helpers/no_lava, +/obj/item/stack/sheet/wood{ + amount = 2 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"tc" = ( +/obj/item/clothing/head/witchhunter_hat, +/obj/effect/decal/remains/human, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"tp" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"tq" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"tE" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"uj" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"uI" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"vW" = ( +/turf/simulated/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"wl" = ( +/obj/structure/table/wood, +/obj/item/spear/bonespear, +/obj/item/spear/bonespear{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/structure/stone_tile/block/cracked, +/obj/effect/mapping_helpers/no_lava, +/obj/item/stack/sheet/bone{ + amount = 2 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"wv" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"wB" = ( +/turf/template_noop, +/area/template_noop) +"wH" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"wO" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"xc" = ( +/obj/item/flashlight/lantern{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/flashlight/lantern{ + pixel_x = -10 + }, +/obj/structure/stone_tile/block/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"yP" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"Bi" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Bv" = ( +/obj/structure/table/wood, +/obj/item/scythe/bone, +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"CM" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Df" = ( +/obj/structure/stone_tile/block/cracked, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"EV" = ( +/obj/structure/stone_tile/block/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Fu" = ( +/turf/simulated/floor/lava/mapping_lava, +/area/lavaland/surface/outdoors) +"Hc" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Hl" = ( +/obj/structure/stone_tile/block/cracked, +/obj/effect/mapping_helpers/no_lava, +/obj/item/stack/sheet/wood{ + amount = 2 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Hu" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/item/mod/module/visor/night, +/obj/effect/mapping_helpers/no_lava, +/obj/structure/closet/crate/wooden/wooden_crate, +/obj/item/stack/sheet/mineral/diamond{ + amount = 4; + pixel_x = 4 + }, +/obj/item/stack/sheet/bone{ + amount = 2 + }, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"HL" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Io" = ( +/turf/simulated/wall/mineral/wood, +/area/lavaland/surface/outdoors) +"Jw" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"JR" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Kg" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"Lo" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Mp" = ( +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Py" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 9 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Rm" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"RE" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Ta" = ( +/obj/structure/necropolis_gate, +/obj/structure/stone_tile/slab/burnt, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Tl" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Uc" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/burnt, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Ue" = ( +/obj/structure/stone_tile/slab/burnt, +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"VT" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/simulated/floor/lava/lava_land_surface, +/area/lavaland/surface/outdoors) +"Xz" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ZA" = ( +/obj/structure/stone_tile/slab, +/obj/effect/mapping_helpers/no_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +wB +vW +vW +vW +vW +vW +vW +vW +vW +vW +Mp +Mp +Mp +Mp +wB +wB +wB +wB +wB +wB +"} +(2,1,1) = {" +vW +vW +vW +vW +vW +vW +vW +vW +vW +Mp +Mp +Mp +Mp +Mp +Mp +wB +wB +wB +wB +wB +"} +(3,1,1) = {" +vW +vW +nQ +Io +Io +nQ +Io +nQ +nQ +Io +nQ +jg +nQ +Mp +Mp +Mp +wB +wB +wB +Fu +"} +(4,1,1) = {" +vW +vW +Fu +bj +Tl +nF +Tl +tp +Mp +uj +jg +Mp +Mp +Mp +Mp +Mp +wB +wB +Fu +wB +"} +(5,1,1) = {" +vW +vW +Fu +eN +VT +pQ +nV +Rm +nQ +kr +Hc +Mp +Io +Mp +Mp +Mp +wB +Fu +Fu +wB +"} +(6,1,1) = {" +vW +vW +Fu +py +Df +jP +Kg +wH +Ta +Mp +sc +jc +Mp +Mp +Mp +Mp +Fu +Fu +wB +wB +"} +(7,1,1) = {" +vW +Fu +Fu +cp +tE +nE +yP +wH +nQ +Mp +Mp +Uc +Mp +Io +Fu +Fu +Fu +Fu +wB +wB +"} +(8,1,1) = {" +vW +Fu +Fu +wO +Bi +Ue +Jw +Py +nQ +RE +oo +JR +Mp +Fu +Fu +Fu +Fu +wB +wB +wB +"} +(9,1,1) = {" +vW +Fu +Fu +nQ +nQ +Mp +Mp +nQ +pz +Mp +Mp +Mp +Fu +Fu +Io +Mp +Mp +wB +wB +wB +"} +(10,1,1) = {" +Fu +Fu +vW +vW +vW +nQ +wl +Bv +nQ +Mp +Fu +Fu +Fu +Fu +nQ +kr +Mp +wB +wB +wB +"} +(11,1,1) = {" +Fu +Fu +vW +vW +vW +nQ +Hl +wv +HL +Fu +Fu +Fu +Fu +Lo +JR +kr +Mp +wB +wB +wB +"} +(12,1,1) = {" +wB +Fu +Fu +Mp +vW +Mp +EV +wv +Fu +Fu +Fu +Fu +Fu +Fu +nQ +Mp +Mp +wB +wB +wB +"} +(13,1,1) = {" +wB +Fu +Fu +Mp +vW +Io +xc +Fu +Fu +Fu +oA +tq +Fu +Fu +Fu +Mp +Mp +wB +wB +wB +"} +(14,1,1) = {" +wB +Fu +Fu +Fu +Mp +Io +Fu +Fu +Fu +Mp +oo +ZA +CM +Fu +Fu +Mp +Mp +wB +wB +wB +"} +(15,1,1) = {" +wB +wB +Fu +Fu +Mp +Fu +Fu +Fu +nQ +nQ +Mp +Xz +nQ +Fu +Mp +Mp +Mp +wB +wB +wB +"} +(16,1,1) = {" +wB +wB +Fu +Fu +Fu +Fu +Fu +vW +nQ +qp +nH +uI +nQ +Mp +Mp +Mp +Mp +wB +wB +wB +"} +(17,1,1) = {" +wB +wB +Fu +Fu +Fu +Fu +vW +vW +Io +EV +tc +Hu +nQ +hn +vW +vW +Mp +wB +wB +wB +"} +(18,1,1) = {" +wB +wB +wB +Fu +Fu +Fu +vW +vW +nQ +aH +qF +lx +nQ +vW +vW +vW +vW +wB +wB +wB +"} +(19,1,1) = {" +wB +wB +wB +wB +Fu +Fu +vW +vW +nQ +nQ +nQ +nQ +nQ +vW +vW +wB +wB +wB +wB +wB +"} +(20,1,1) = {" +wB +wB +wB +wB +wB +Fu +Fu +vW +vW +vW +vW +vW +vW +vW +wB +wB +wB +wB +wB +wB +"} diff --git a/_maps/map_files220/RandomRuins/LavaRuins/cheesus_temple.dmm b/_maps/map_files220/RandomRuins/LavaRuins/cheesus_temple.dmm new file mode 100644 index 000000000000..88b930e59ec7 --- /dev/null +++ b/_maps/map_files220/RandomRuins/LavaRuins/cheesus_temple.dmm @@ -0,0 +1,1211 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aV" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"bd" = ( +/turf/simulated/floor/wood/lavaland_air{ + icon_state = "fancy-wood-oak-broken2" + }, +/area/lavaland/surface/outdoors) +"be" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/mob/living/simple_animal/mouse, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"bI" = ( +/obj/machinery/light/directional/south, +/obj/structure/flora/ausbushes/brflowers, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"cn" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"cr" = ( +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"cV" = ( +/obj/effect/baseturf_helper/asteroid/basalt, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"dk" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"dm" = ( +/turf/simulated/wall/mineral/titanium/nodiagonal, +/area/ruin/unpowered/misc_lavaruin) +"dp" = ( +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"dq" = ( +/obj/effect/baseturf_helper/asteroid/basalt, +/turf/simulated/floor/wood/lavaland_air{ + icon = 'icons/turf/floors/grass.dmi'; + icon_state = "grass" + }, +/area/lavaland/surface/outdoors) +"dC" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"dF" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"ei" = ( +/obj/machinery/light/directional/south, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"en" = ( +/obj/structure/chair/sofa/pew/left, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"eW" = ( +/obj/effect/spawner/random_spawners/dirt_maybe, +/obj/effect/turf_decal/siding/yellow/corner, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"fk" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"fK" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"gh" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/turf_decal/siding/yellow{ + dir = 9 + }, +/obj/item/food/snacks/sliceable/cheesecake, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"gV" = ( +/obj/structure/chair/sofa/pew, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"gX" = ( +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_x = 6 + }, +/obj/item/storage/box/mousetraps{ + pixel_x = -9 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"hZ" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"js" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency/old{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/storage/toolbox/mechanical/old{ + pixel_x = 4 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -11; + pixel_y = 9 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -11; + pixel_y = 3 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"ks" = ( +/turf/simulated/floor/plasteel/stairs/right, +/area/ruin/unpowered/misc_lavaruin) +"kG" = ( +/obj/item/kirbyplants, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"ln" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 1 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"lv" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"lA" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 9; + pixel_x = 7 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 5; + pixel_x = 9 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"mn" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/wrench, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"mo" = ( +/obj/machinery/light/directional/west, +/turf/simulated/floor/plasteel/stairs/left, +/area/ruin/unpowered/misc_lavaruin) +"mO" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"mU" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken2" + }, +/area/ruin/unpowered/misc_lavaruin) +"nA" = ( +/mob/living/simple_animal/mouse, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"pm" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 1 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"pQ" = ( +/obj/structure/girder, +/turf/simulated/floor/plating/lavaland_air, +/area/lavaland/surface/outdoors) +"qq" = ( +/obj/effect/turf_decal/siding/yellow, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken2" + }, +/area/ruin/unpowered/misc_lavaruin) +"qw" = ( +/turf/simulated/wall/mineral/titanium/nodiagonal, +/area/lavaland/surface/outdoors) +"qK" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/mob/living/simple_animal/mouse, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"qQ" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/turf_decal/siding/yellow{ + dir = 6 + }, +/obj/item/food/snacks/macncheese{ + pixel_y = 7 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"rC" = ( +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken" + }, +/area/ruin/unpowered/misc_lavaruin) +"rW" = ( +/obj/effect/turf_decal/siding/yellow, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"st" = ( +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken" + }, +/area/ruin/unpowered/misc_lavaruin) +"tw" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 9 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"tQ" = ( +/obj/effect/turf_decal/siding/yellow/corner, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"uY" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken2" + }, +/area/ruin/unpowered/misc_lavaruin) +"vk" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 9 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"vK" = ( +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken2" + }, +/area/ruin/unpowered/misc_lavaruin) +"wp" = ( +/obj/structure/chair/comfy/yellow{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"wr" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"xk" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"xv" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"xT" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"yi" = ( +/obj/machinery/light/directional/north, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"yM" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/book/granter/spell/summon_cheese{ + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"zt" = ( +/turf/simulated/floor/wood/lavaland_air{ + icon_state = "fancy-wood-oak-broken3" + }, +/area/lavaland/surface/outdoors) +"Am" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/obj/item/reagent_containers/condiment/cheese_sauce{ + pixel_x = 1; + pixel_y = 7 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"AH" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/kirbyplants{ + pixel_y = 13 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Cn" = ( +/obj/effect/spawner/window/shuttle, +/obj/effect/mapping_helpers/damaged_window, +/turf/simulated/floor/plating, +/area/ruin/unpowered/misc_lavaruin) +"CW" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"Dm" = ( +/obj/structure/flora/ausbushes/fernybush, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"Eo" = ( +/turf/simulated/floor/plasteel/stairs/left, +/area/ruin/unpowered/misc_lavaruin) +"Ex" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"EE" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/soda{ + pixel_y = 3; + dir = 8 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Gz" = ( +/mob/living/simple_animal/mouse, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Hh" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random_spawners/dirt_maybe, +/obj/item/food/snacks/vulpix/cheese{ + pixel_y = 6; + pixel_x = -9 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Hp" = ( +/obj/machinery/light/directional/north, +/obj/structure/flora/ausbushes/pointybush, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"Hv" = ( +/turf/simulated/wall/mineral/titanium, +/area/ruin/unpowered/misc_lavaruin) +"HV" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"JG" = ( +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken3" + }, +/area/ruin/unpowered/misc_lavaruin) +"Ka" = ( +/turf/template_noop, +/area/template_noop) +"Km" = ( +/turf/simulated/floor/wood/lavaland_air{ + icon_state = "fancy-wood-oak" + }, +/area/lavaland/surface/outdoors) +"Md" = ( +/turf/simulated/floor/wood/lavaland_air{ + icon_state = "fancy-wood-oak-broken" + }, +/area/lavaland/surface/outdoors) +"Nc" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"NG" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 6 + }, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Ou" = ( +/obj/machinery/light/directional/east, +/turf/simulated/floor/plasteel/stairs/right, +/area/ruin/unpowered/misc_lavaruin) +"OJ" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"OS" = ( +/obj/structure/chair/sofa/pew/right, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Ps" = ( +/obj/machinery/light/directional/north, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Sv" = ( +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Ud" = ( +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Uu" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"UX" = ( +/obj/structure/statue/cheese/cheesus, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Vn" = ( +/obj/structure/mineral_door/wood, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"VI" = ( +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak{ + icon_state = "fancy-wood-oak-broken2" + }, +/area/ruin/unpowered/misc_lavaruin) +"VZ" = ( +/obj/effect/spawner/window/shuttle, +/turf/simulated/floor/plating, +/area/ruin/unpowered/misc_lavaruin) +"Xw" = ( +/obj/structure/chair/comfy/yellow{ + dir = 8 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"XT" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/stack/sheet/cheese/fifteen{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/stack/sheet/cheese/fifteen{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/stack/sheet/cheese/fifteen{ + pixel_y = 11; + pixel_x = -2 + }, +/obj/effect/turf_decal/siding/yellow, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"Yy" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/obj/effect/spawner/random_spawners/dirt_maybe, +/obj/item/food/snacks/sliceable/cheesewheel, +/turf/simulated/floor/wood/fancy/oak, +/area/ruin/unpowered/misc_lavaruin) +"ZK" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass/no_creep, +/area/ruin/unpowered/misc_lavaruin) +"ZV" = ( +/turf/simulated/floor/wood/lavaland_air{ + icon = 'icons/turf/floors/grass.dmi'; + icon_state = "grass" + }, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +"} +(2,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Km +Km +Ka +Ka +Ka +Ka +Ka +Ka +"} +(3,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Km +Md +pQ +ZV +Ka +Ka +Ka +Ka +Ka +"} +(4,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +pQ +zt +Km +qw +ZV +ZV +Ka +Ka +Ka +Ka +"} +(5,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +ZV +dm +Vn +Vn +dm +dm +dm +ZV +Ka +Ka +Ka +"} +(6,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +ZV +ZV +dm +Sv +Sv +Gz +fK +VZ +ZV +Ka +Ka +Ka +"} +(7,1,1) = {" +Ka +Ka +Ka +Ka +Ka +ZV +ZV +ZV +Ka +Ka +ZV +ZV +dq +ZV +dm +dm +Sv +vK +Ud +AH +Cn +ZV +ZV +Ka +Ka +"} +(8,1,1) = {" +Ka +Ka +Ka +ZV +ZV +ZV +ZV +ZV +ZV +ZV +ZV +dm +VZ +Cn +dm +mn +JG +Sv +Ud +Ex +VZ +dq +ZV +Ka +Ka +"} +(9,1,1) = {" +Ka +Ka +Ka +ZV +ZV +ZV +dm +VZ +Cn +VZ +VZ +dm +tw +cn +mo +Sv +Ud +cr +dm +dm +dm +dm +dm +Ka +Ka +"} +(10,1,1) = {" +Ka +Ka +ZV +ZV +dm +VZ +VZ +Dm +dF +dp +bI +dm +Uu +eW +ks +Sv +Ud +Sv +mO +dm +HV +js +dm +Ka +Ka +"} +(11,1,1) = {" +Ka +Ka +ZV +dm +dm +Hp +lv +gh +OJ +dk +dp +dm +qK +rW +Hv +dm +kG +Sv +mO +dm +Ud +gX +dm +Ka +Ka +"} +(12,1,1) = {" +Ka +Ka +Ka +VZ +dF +CW +vk +ln +rC +mU +cn +cn +pm +xT +Am +Hv +en +Ud +dm +dm +Vn +dm +dm +Ka +Ka +"} +(13,1,1) = {" +Ka +Ka +ZV +VZ +ZK +dp +yM +Ud +UX +Ud +Ex +Ud +Ud +cV +XT +VZ +gV +Ud +dm +kG +Sv +dm +dq +Ka +Ka +"} +(14,1,1) = {" +Ka +ZV +ZV +Cn +dp +lv +be +wr +Sv +tQ +Nc +Nc +wr +tQ +qQ +Hv +OS +Ud +dm +Ps +nA +dm +dm +Ka +Ka +"} +(15,1,1) = {" +Ka +ZV +ZV +dm +dm +Hp +dp +Yy +dC +NG +CW +dm +uY +qq +Hv +dm +kG +Ud +dm +Sv +Ud +wp +VZ +Ka +Ka +"} +(16,1,1) = {" +Ka +Ka +ZV +ZV +dm +Cn +Cn +xv +ZK +dF +ei +dm +aV +xk +Eo +Sv +Sv +Sv +Vn +st +VI +fk +VZ +Ka +Ka +"} +(17,1,1) = {" +Ka +Ka +ZV +ZV +ZV +ZV +dm +VZ +VZ +VZ +Cn +dm +hZ +dC +Ou +nA +Sv +Sv +Vn +Sv +Ud +Hh +Cn +Ka +Ka +"} +(18,1,1) = {" +Ka +Ka +Ka +ZV +Ka +ZV +ZV +ZV +ZV +ZV +ZV +dm +VZ +VZ +dm +mO +Sv +st +dm +Sv +cr +Xw +Cn +Ka +Ka +"} +(19,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +ZV +ZV +ZV +dq +ZV +dm +dm +Sv +Sv +dm +yi +Ud +dm +dm +Ka +Ka +"} +(20,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +ZV +ZV +dm +Sv +Sv +dm +EE +lA +dm +dq +Ka +Ka +"} +(21,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +ZV +ZV +dm +Vn +Vn +dm +dm +dm +dm +ZV +Ka +Ka +"} +(22,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +ZV +ZV +qw +Km +zt +qw +ZV +ZV +ZV +Ka +Ka +Ka +"} +(23,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +pQ +Md +bd +qw +ZV +ZV +Ka +Ka +Ka +Ka +"} +(24,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Km +Km +pQ +Ka +Ka +Ka +Ka +Ka +Ka +"} +(25,1,1) = {" +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +Ka +"} diff --git a/_maps/map_files220/RandomRuins/LavaRuins/old_outpost.dmm b/_maps/map_files220/RandomRuins/LavaRuins/old_outpost.dmm new file mode 100644 index 000000000000..8b38dee73496 --- /dev/null +++ b/_maps/map_files220/RandomRuins/LavaRuins/old_outpost.dmm @@ -0,0 +1,1982 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aD" = ( +/obj/item/stack/tile, +/obj/structure/table_frame, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"aR" = ( +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"bu" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"bw" = ( +/obj/structure/cable/orange{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "browncorner"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"bE" = ( +/obj/structure/cable/orange{ + icon_state = "0-4" + }, +/obj/item/mounted/frame/apc_frame{ + pixel_x = 3; + pixel_y = -8 + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"cd" = ( +/obj/machinery/suit_storage_unit/lavaland, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"cJ" = ( +/turf/template_noop, +/area/template_noop) +"cU" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"dA" = ( +/obj/machinery/suit_storage_unit/lavaland, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 8 + }, +/area/ruin/unpowered/misc_lavaruin) +"en" = ( +/turf/simulated/wall, +/area/ruin/unpowered/misc_lavaruin) +"fC" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/grille/broken, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"fG" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"fW" = ( +/obj/structure/cable/orange{ + icon_state = "1-8" + }, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"ga" = ( +/obj/structure/grille, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"gb" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"gu" = ( +/obj/item/stack/sheet/metal, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"gB" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"hi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown" + }, +/area/ruin/unpowered/misc_lavaruin) +"hp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "blue"; + dir = 9 + }, +/area/ruin/unpowered/misc_lavaruin) +"hx" = ( +/obj/structure/girder, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"hR" = ( +/obj/structure/ore_box, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"im" = ( +/obj/structure/cable/orange{ + icon_state = "2-8" + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"iO" = ( +/obj/structure/rack, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"jp" = ( +/obj/structure/cable/orange{ + icon_state = "0-4" + }, +/obj/item/mounted/frame/apc_frame{ + pixel_x = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 9 + }, +/area/ruin/unpowered/misc_lavaruin) +"jw" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"jS" = ( +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"ko" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/storage/box/donkpockets/empty, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"kX" = ( +/obj/machinery/suit_storage_unit, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 8 + }, +/area/ruin/unpowered/misc_lavaruin) +"ll" = ( +/obj/item/stack/sheet/metal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"lz" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"lT" = ( +/obj/machinery/power/port_gen/pacman/mrs, +/obj/structure/cable/orange, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"lW" = ( +/obj/structure/cable/orange{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"ms" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"nt" = ( +/obj/effect/spawner/window/shuttle, +/obj/effect/mapping_helpers/damaged_window, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"nz" = ( +/obj/effect/turf_decal/stripes/red/line, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"nE" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"ov" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/grille/broken, +/obj/item/shard{ + icon_state = "small" + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"oC" = ( +/obj/structure/cable/orange{ + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + icon_state = "0-8" + }, +/obj/item/mounted/frame/apc_frame{ + pixel_x = 3; + pixel_y = -8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"oU" = ( +/obj/machinery/door/airlock/external/glass, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium_yellow" + }, +/area/ruin/unpowered/misc_lavaruin) +"po" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/mapping_helpers/damaged_window, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"pu" = ( +/obj/structure/table_frame, +/obj/machinery/chem_dispenser/beer{ + pixel_y = 5 + }, +/obj/effect/mapping_helpers/machinery/destroyed, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"pv" = ( +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"qC" = ( +/obj/structure/safe/floor, +/obj/item/gun/energy/kinetic_accelerator/experimental, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, +/obj/item/clothing/mask/cigarette/cigar, +/obj/item/clothing/mask/cigarette/cigar, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"qP" = ( +/obj/item/shard{ + pixel_x = 11 + }, +/obj/structure/table, +/obj/machinery/kitchen_machine/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"ra" = ( +/obj/structure/cable/orange{ + icon_state = "0-8" + }, +/obj/item/mounted/frame/apc_frame{ + pixel_x = -16 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"rp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"sh" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown" + }, +/area/ruin/unpowered/misc_lavaruin) +"su" = ( +/obj/item/shard{ + icon_state = "small" + }, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"sD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium_yellow" + }, +/area/ruin/unpowered/misc_lavaruin) +"sE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"tl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"tB" = ( +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"um" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/mining, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"uC" = ( +/obj/item/shard{ + icon_state = "small" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"uF" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"uN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"vp" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"vs" = ( +/obj/item/stack/sheet/metal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 8 + }, +/area/ruin/unpowered/misc_lavaruin) +"vw" = ( +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium_yellow" + }, +/area/ruin/unpowered/misc_lavaruin) +"wt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"wA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"xf" = ( +/obj/item/stack/sheet/metal, +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"xr" = ( +/obj/structure/mecha_wreckage/ripley/firefighter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"yA" = ( +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown" + }, +/area/ruin/unpowered/misc_lavaruin) +"yH" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 4 + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"yR" = ( +/obj/item/stack/sheet/metal, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"zc" = ( +/obj/structure/cable/orange{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 5 + }, +/area/ruin/unpowered/misc_lavaruin) +"zl" = ( +/obj/structure/cable/orange{ + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"zW" = ( +/obj/item/stack/tile, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Ab" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Au" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/orange{ + icon_state = "0-2" + }, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"Bn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"CL" = ( +/obj/item/stack/sheet/metal, +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"CO" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"Dt" = ( +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Du" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"DA" = ( +/turf/simulated/wall/mineral/titanium, +/area/ruin/unpowered/misc_lavaruin) +"DS" = ( +/obj/machinery/door/airlock/external/glass, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"DX" = ( +/obj/effect/spawner/window/shuttle, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Ea" = ( +/turf/simulated/floor/lava/mapping_lava, +/area/lavaland/surface/outdoors) +"Er" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/effect/mapping_helpers/damaged_window, +/turf/simulated/floor/plating, +/area/ruin/unpowered/misc_lavaruin) +"Fc" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 10 + }, +/area/ruin/unpowered/misc_lavaruin) +"FF" = ( +/obj/machinery/computer/nonfunctional{ + dir = 4; + icon_state = "broken"; + icon_screen = "broken"; + icon_keyboard = "generic_key_broken" + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium_yellow" + }, +/area/ruin/unpowered/misc_lavaruin) +"FY" = ( +/obj/structure/mecha_wreckage/ripley/titan, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Gu" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"He" = ( +/obj/structure/table, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"HE" = ( +/obj/item/stack/tile, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "blue"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"Ic" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/ruin/unpowered/misc_lavaruin) +"Io" = ( +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"IC" = ( +/obj/machinery/suit_storage_unit/lavaland, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"IQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 8 + }, +/area/ruin/unpowered/misc_lavaruin) +"Ke" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "cautionfull" + }, +/area/ruin/unpowered/misc_lavaruin) +"Kr" = ( +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 8 + }, +/area/ruin/unpowered/misc_lavaruin) +"Lh" = ( +/obj/effect/baseturf_helper/asteroid/basalt, +/turf/simulated/wall, +/area/ruin/unpowered/misc_lavaruin) +"LE" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"LJ" = ( +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/structure/grille/broken, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"LV" = ( +/obj/structure/cable/orange{ + icon_state = "0-4" + }, +/obj/item/mounted/frame/apc_frame{ + pixel_x = -6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"LX" = ( +/obj/structure/cable/orange{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"LZ" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/obj/item/scalpel, +/obj/item/hemostat, +/obj/item/retractor, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "blue"; + dir = 6 + }, +/area/ruin/unpowered/misc_lavaruin) +"Mc" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Mm" = ( +/obj/machinery/door/airlock/external/glass, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Na" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"Nc" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Ne" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"Nr" = ( +/obj/structure/table_frame, +/obj/item/stack/sheet/metal, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Ny" = ( +/obj/machinery/suit_storage_unit, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 8 + }, +/area/ruin/unpowered/misc_lavaruin) +"NT" = ( +/obj/item/stack/sheet/metal, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown" + }, +/area/ruin/unpowered/misc_lavaruin) +"NW" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 1 + }, +/area/ruin/unpowered/misc_lavaruin) +"Oo" = ( +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"OH" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"OL" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium_yellow" + }, +/area/ruin/unpowered/misc_lavaruin) +"Py" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 6 + }, +/area/ruin/unpowered/misc_lavaruin) +"PS" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"QR" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/ruin/unpowered/misc_lavaruin) +"Rs" = ( +/obj/machinery/suit_storage_unit, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "brown"; + dir = 4 + }, +/area/ruin/unpowered/misc_lavaruin) +"RE" = ( +/obj/machinery/door/airlock/mining, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"St" = ( +/obj/machinery/power/smes, +/obj/structure/cable/orange{ + icon_state = "0-4" + }, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"Sy" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Td" = ( +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"TL" = ( +/obj/item/stack/tile, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"TW" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"TX" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"Ur" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"UL" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium_yellow" + }, +/area/ruin/unpowered/misc_lavaruin) +"Vc" = ( +/obj/item/shard{ + icon_state = "small" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "blue"; + dir = 5 + }, +/area/ruin/unpowered/misc_lavaruin) +"Vn" = ( +/obj/structure/cable/orange{ + icon_state = "1-4" + }, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"WW" = ( +/obj/structure/cable/orange{ + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) +"Xu" = ( +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/machinery/damaged, +/turf/simulated/floor/catwalk, +/area/ruin/unpowered/misc_lavaruin) +"Zh" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/lavaland_air{ + icon_state = "titanium" + }, +/area/ruin/unpowered/misc_lavaruin) +"Zo" = ( +/obj/machinery/optable, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/lavaland_air, +/area/ruin/unpowered/misc_lavaruin) + +(1,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(2,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(3,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +hx +en +en +en +hx +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(4,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +hx +St +Au +Na +lT +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(5,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +hx +OH +Dt +wt +Nc +en +DS +DS +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(6,1,1) = {" +cJ +cJ +cJ +nt +DX +DX +cJ +cJ +cJ +cJ +en +oC +TX +Na +Vn +en +Du +Dt +po +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(7,1,1) = {" +cJ +cJ +DX +nt +FF +nt +nt +cJ +cJ +hx +en +en +en +wt +OH +en +Dt +Dt +po +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(8,1,1) = {" +cJ +cJ +DA +UL +OL +OL +DA +cJ +cJ +en +uN +LX +Na +Na +fW +en +DS +Mm +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Ea +cJ +cJ +"} +(9,1,1) = {" +cJ +cJ +DX +sD +vw +sD +nt +en +en +en +en +Xu +hx +hx +en +en +sE +hi +en +en +po +TW +en +en +Ea +Ea +Ea +Ea +cJ +cJ +"} +(10,1,1) = {" +cJ +cJ +oU +Ur +lz +gb +oU +Mm +Kr +IQ +IQ +Ab +Kr +vs +IQ +bE +Dt +yA +en +LV +pv +Du +TL +hx +Ea +Ea +cJ +cJ +cJ +cJ +"} +(11,1,1) = {" +cJ +cJ +oU +Ne +tl +nz +oU +Mm +Io +Dt +Bn +im +Gu +Gu +uF +PS +WW +hi +en +cU +Du +Dt +Ea +Ea +Ea +cJ +cJ +cJ +cJ +cJ +"} +(12,1,1) = {" +cJ +cJ +nt +LE +Zh +gB +DX +en +en +en +hx +en +QR +Er +en +Lh +bu +nE +Mc +lW +Ea +Ea +Ea +Ea +cJ +cJ +cJ +cJ +cJ +cJ +"} +(13,1,1) = {" +cJ +cJ +DA +LE +ms +wA +DA +cJ +cJ +cJ +en +wt +aR +rp +gu +en +NW +zW +hx +Ea +Ea +Ea +su +LJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(14,1,1) = {" +cJ +cJ +DA +fG +jw +vp +DA +cJ +cJ +cJ +en +rp +ko +aD +rp +Ic +CL +Dt +Ea +Ea +Ea +yR +jS +ga +cJ +cJ +cJ +cJ +cJ +cJ +"} +(15,1,1) = {" +cJ +cJ +DA +yH +yH +yH +DA +cJ +cJ +cJ +Er +rp +He +Ke +Dt +Ic +cU +Ea +Ea +Ea +ll +Dt +Du +en +cJ +cJ +cJ +cJ +cJ +cJ +"} +(16,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Er +wt +gu +rp +wt +Td +Ea +Ea +Ea +hx +hx +hx +en +en +cJ +cJ +cJ +cJ +cJ +cJ +"} +(17,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +hx +qP +wt +wt +uC +Ea +Ea +Ea +hx +dA +Ny +kX +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(18,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +fC +pu +wt +aR +Ea +Ea +Ea +yA +hx +Du +pv +Du +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(19,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +ov +Nr +qC +Ea +Ea +Ea +CO +Dt +Td +Du +iO +Oo +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(20,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +hx +Ea +Ea +Ea +Ea +Ea +NW +Dt +en +pv +Du +Du +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(21,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +Ea +Ea +hx +NW +NT +en +cd +IC +Rs +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(22,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +Ea +Ea +Ea +Ea +hx +xf +yA +en +en +en +en +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(23,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +Ea +Ea +yR +hx +hx +Ab +Dt +en +hp +tB +LJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(24,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +Ea +Ea +hx +xr +zl +um +Sy +Du +RE +HE +Zo +po +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(25,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +Ea +cJ +hx +Dt +ra +Lh +CO +Dt +en +Vc +LZ +po +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(26,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +Ea +cJ +cJ +en +Du +Du +en +NW +yA +en +en +en +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(27,1,1) = {" +cJ +cJ +cJ +cJ +cJ +Ea +Ea +Ea +cJ +cJ +cJ +cJ +en +FY +hR +en +NW +Dt +en +jp +Fc +TW +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(28,1,1) = {" +cJ +cJ +cJ +Ea +Ea +Ea +cJ +cJ +cJ +cJ +cJ +cJ +en +po +po +en +NW +Dt +en +NW +sh +po +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(29,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Mm +Du +zW +Mm +bw +nE +um +zc +Py +TW +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(30,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +Mm +Dt +Du +DS +Bn +Bn +en +ov +TW +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(31,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +en +TW +po +en +po +po +en +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(32,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} +(33,1,1) = {" +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +cJ +"} diff --git a/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm b/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm index e1b05fa340bd..18ee3af06a63 100644 --- a/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm +++ b/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm @@ -23,7 +23,7 @@ "bp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plating/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "bx" = ( @@ -787,7 +787,7 @@ /area/ruin/unpowered/misc_lavaruin) "Hl" = ( /obj/structure/table/glass/plasma, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6 }, /obj/effect/decal/cleanable/dust, diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm index 4c13408974c2..9b77f2adec06 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm @@ -435,8 +435,8 @@ /area/ruin/space/unpowered/unpowered_structures) "uW" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 5; pixel_y = -2 }, @@ -485,7 +485,7 @@ }, /area/ruin/space/unpowered/unpowered_structures) "vV" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_keyboard = "syndie_key"; icon_screen = "syndinavigation" @@ -728,9 +728,9 @@ /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/rice, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c10, /turf/simulated/floor/plasteel/airless{ @@ -791,8 +791,8 @@ "HA" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/chinese/rice, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/chowmein, /obj/item/reagent_containers/pill/methamphetamine, /obj/item/reagent_containers/pill/methamphetamine, /obj/item/reagent_containers/pill/methamphetamine, @@ -1155,10 +1155,10 @@ "UE" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/chinese/rice, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/rice, /obj/item/stack/spacecash/c100, /turf/simulated/floor/plasteel/airless{ icon_state = "dark" diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm index 3ca5f9dda489..37ae9e4d34f5 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm @@ -375,7 +375,7 @@ name = "microwave"; pixel_y = 9 }, -/obj/item/reagent_containers/food/snacks/syndidonkpocket{ +/obj/item/food/snacks/syndidonkpocket{ pixel_x = -7 }, /turf/simulated/floor/plasteel{ @@ -801,8 +801,8 @@ /area/ruin/space/powered/requires_power_space) "rG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -5; pixel_y = 9 }, @@ -832,8 +832,8 @@ /area/ruin/space/powered/requires_power_space) "sj" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel/freezer, /area/ruin/space/powered/requires_power_space) @@ -1226,7 +1226,7 @@ "Ge" = ( /obj/structure/table/wood, /obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/syndidonkpocket{ +/obj/item/food/snacks/syndidonkpocket{ pixel_y = 14; pixel_x = 6 }, @@ -1467,7 +1467,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered/requires_power_space) "NP" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/item/wrench, /turf/simulated/floor/plating, /area/ruin/space/powered/requires_power_space) diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm index 422477455600..0e730c03fc1f 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm @@ -304,7 +304,7 @@ /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) "hM" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4; icon_keyboard = "syndie_key"; icon_screen = "syndinavigation" @@ -375,7 +375,7 @@ /area/ruin/space/powered) "jq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 6 }, @@ -612,7 +612,7 @@ /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) "ob" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -771,7 +771,7 @@ /area/ruin/space/powered) "rZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4; volume = 0 @@ -906,7 +906,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered) "vo" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, @@ -1120,7 +1120,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/space/powered) "zy" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "entertainment_console"; pixel_y = 32; icon_screen = "entertainment_console_broken"; @@ -1348,7 +1348,7 @@ /area/ruin/space/powered) "DE" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "entertainment_console"; pixel_y = 32; icon_screen = "entertainment_console_broken"; @@ -1516,7 +1516,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ list_reagents = list("coffee"=0); pixel_x = 10; pixel_y = 7 @@ -1603,7 +1603,7 @@ /turf/simulated/floor/bluegrid, /area/ruin/space/powered) "Hn" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "shuttle control console"; desc = "The screen dims greens with an ERROR message. It looks completely unusable." }, @@ -1675,7 +1675,7 @@ /turf/simulated/floor/mineral/titanium/yellow, /area/ruin/space/powered) "II" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "exosuit control console"; desc = "The screen dims green with a bright ERROR message. It looks completely unusable." }, @@ -2091,7 +2091,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered) "QS" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4; volume = 0 @@ -2121,8 +2121,8 @@ /area/ruin/space/powered) "RM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9; pixel_y = -3 @@ -2346,17 +2346,17 @@ "VB" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/taffy, +/obj/item/food/snacks/baguette, +/obj/item/food/snacks/baguette, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/effect/decal/cleanable/dirt, +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/taffy, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) "VF" = ( @@ -2522,7 +2522,7 @@ /area/template_noop) "ZS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /turf/simulated/floor/carpet/blue, /area/ruin/space/powered) "ZT" = ( diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm index 8251e2b8936f..c969364e6a2e 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm @@ -38,11 +38,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -165,11 +165,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -9; pixel_y = 6 }, @@ -430,27 +430,27 @@ /obj/effect/turf_decal/delivery, /obj/structure/closet/crate/freezer, /obj/item/storage/box/monkeycubes, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /turf/simulated/floor/plating, /area/ruin/space/spacehotelv1/cargostorage) "do" = ( @@ -1179,7 +1179,7 @@ /area/ruin/space/spacehotelv1/forehallway) "jb" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -5; pixel_y = 5 }, @@ -1589,7 +1589,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/royalblack, /area/ruin/space/spacehotelv1/guestroom6) "lS" = ( @@ -1603,36 +1603,36 @@ dir = 8 }, /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/grown/meatwheat, -/obj/item/reagent_containers/food/snacks/grown/meatwheat, -/obj/item/reagent_containers/food/snacks/grown/meatwheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/redbeet, -/obj/item/reagent_containers/food/snacks/grown/redbeet, -/obj/item/reagent_containers/food/snacks/grown/redbeet, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, +/obj/item/food/snacks/grown/meatwheat, +/obj/item/food/snacks/grown/meatwheat, +/obj/item/food/snacks/grown/meatwheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, /turf/simulated/floor/plasteel/freezer, /area/ruin/space/spacehotelv1/kitchen) "lU" = ( @@ -1806,7 +1806,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/blue, /area/ruin/space/spacehotelv1/guestroom3) "nj" = ( @@ -1940,11 +1940,11 @@ /area/ruin/space/spacehotelv1/restoraunt3) "oa" = ( /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 16 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 }, @@ -2272,11 +2272,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 2 }, @@ -2308,11 +2308,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -2717,10 +2717,10 @@ /obj/machinery/door/window/reinforced/normal{ dir = 8 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 3 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plasteel, /area/ruin/space/spacehotelv1/kitchen) "tI" = ( @@ -2819,7 +2819,7 @@ /area/ruin/space/spacehotelv1/reception) "uu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/meatballspaghetti, +/obj/item/food/snacks/meatballspaghetti, /obj/item/kitchen/utensil/fork, /turf/simulated/floor/plating, /area/ruin/space/spacehotelv1/forestarboardmaints) @@ -2845,7 +2845,7 @@ pixel_y = 6 }, /obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/plasteel, /area/ruin/space/spacehotelv1/kitchen) "uB" = ( @@ -2960,11 +2960,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -9; pixel_y = 6 }, @@ -3070,11 +3070,11 @@ icon_state = "4-8" }, /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 16 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 }, @@ -3121,7 +3121,7 @@ /area/ruin/space/spacehotelv1/bar) "wC" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/item/book/manual/barman_recipes, /obj/item/lighter/zippo/engraved, @@ -3574,11 +3574,11 @@ pixel_y = -1; pixel_x = -9 }, -/obj/item/reagent_containers/food/condiment/mushroom_sauce{ +/obj/item/reagent_containers/condiment/mushroom_sauce{ pixel_x = 10; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/garlic_sauce{ +/obj/item/reagent_containers/condiment/garlic_sauce{ pixel_x = 6; pixel_y = 3 }, @@ -4140,7 +4140,6 @@ /area/ruin/space/spacehotelv1/kitchen) "Dx" = ( /obj/structure/rack, -/obj/item/clothing/gloves/color/yellow/power, /obj/random/toolbox, /obj/random/tool, /turf/simulated/floor/plating, @@ -4350,7 +4349,7 @@ /turf/simulated/wall, /area/ruin/space/spacehotelv1/guestroom5) "Fa" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/sign/poster/random{ pixel_y = 32 }, @@ -4510,7 +4509,7 @@ dir = 8 }, /obj/structure/table/reinforced/brass, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/black, /area/ruin/space/spacehotelv1/guestroom1) "FS" = ( @@ -4598,7 +4597,7 @@ /turf/simulated/floor/wood/oak, /area/ruin/space/spacehotelv1/forehallway) "Gm" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plating, /area/ruin/space/spacehotelv1/engi1) "Gs" = ( @@ -4922,11 +4921,11 @@ /area/ruin/space/spacehotelv1/barber) "IW" = ( /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 16 }, @@ -5043,11 +5042,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -9; pixel_y = 6 }, @@ -5901,11 +5900,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -5929,7 +5928,6 @@ /area/ruin/space/spacehotelv1/restoraunt2) "PO" = ( /obj/structure/rack, -/obj/item/clothing/gloves/color/yellow/power, /obj/random/toolbox, /obj/random/tool, /obj/effect/spawner/random_spawners/dirt_often, @@ -6475,7 +6473,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/red, /area/ruin/space/spacehotelv1/guestroom4) "UL" = ( @@ -6558,11 +6556,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -6660,31 +6658,31 @@ /area/ruin/space/spacehotelv1/engi2) "VM" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/smokedsausage, -/obj/item/reagent_containers/food/snacks/smokedsausage, -/obj/item/reagent_containers/food/snacks/smokedsausage, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/smokedsausage, +/obj/item/food/snacks/smokedsausage, +/obj/item/food/snacks/smokedsausage, /obj/item/fish/salmon, /obj/item/fish/salmon, /obj/item/fish/salmon, @@ -6925,7 +6923,7 @@ dir = 4 }, /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/arcade, /area/ruin/space/spacehotelv1/guestroom2) "XV" = ( diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm index b5282e591432..aeff84dbaac9 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm @@ -18,7 +18,7 @@ pixel_y = -2; pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 5; pixel_x = -2 }, @@ -80,8 +80,8 @@ /area/ruin/space/powered) "r" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9; pixel_y = -3 @@ -175,7 +175,7 @@ /area/ruin/space/powered) "G" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 8; pixel_x = -7 }, @@ -202,7 +202,7 @@ /obj/item/reagent_containers/glass/rag{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 7; pixel_y = 5 }, @@ -236,7 +236,7 @@ /obj/structure/table/wood, /obj/machinery/light/small/directional/east, /obj/item/ashtray/bronze, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 12; pixel_x = 7; list_reagents = list("innocent_erp = 50") diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm index 06dffdcb7476..21e525bca515 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm @@ -538,7 +538,7 @@ pixel_x = 8 }, /obj/item/toy/plushie/voxplushie, -/obj/item/reagent_containers/food/snacks/cheesepizzaslice{ +/obj/item/food/snacks/cheesepizzaslice{ pixel_y = -2; pixel_x = -7 }, diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm index 0a4f029ba84e..529bf9300733 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm @@ -159,7 +159,7 @@ /obj/machinery/light_construct/directional/west, /obj/structure/table, /obj/item/trash/plate, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "It's cold as dead body."; pixel_x = 8; pixel_y = 8; @@ -639,7 +639,7 @@ /area/shuttle/abandoned) "oB" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "It's cold as dead body."; pixel_x = 8; pixel_y = 8; @@ -1445,7 +1445,7 @@ "Jn" = ( /obj/structure/table/glass, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/mug/cmo, +/obj/item/reagent_containers/drinks/mug/cmo, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluefull" @@ -1505,7 +1505,7 @@ }, /obj/item/clothing/accessory/stethoscope, /obj/item/flashlight/pen, -/obj/item/reagent_containers/food/snacks/grown/apple{ +/obj/item/food/snacks/grown/apple{ desc = "An apple a day - keeps doctor away..."; pixel_x = 2; pixel_y = 6 @@ -2078,7 +2078,7 @@ }, /area/shuttle/abandoned) "Xa" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; diff --git a/_maps/map_files220/RandomZLevels/beach.dmm b/_maps/map_files220/RandomZLevels/beach.dmm index 1b137e8c3416..56f26f41ebc2 100644 --- a/_maps/map_files220/RandomZLevels/beach.dmm +++ b/_maps/map_files220/RandomZLevels/beach.dmm @@ -52,7 +52,7 @@ /obj/structure/chair/plastic{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/cans/thirteenloko{ +/obj/item/reagent_containers/drinks/cans/thirteenloko{ pixel_x = -18; pixel_y = 8 }, @@ -357,19 +357,19 @@ /area/awaymission/beach) "ew" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 16; pixel_x = -4 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 14; pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 9; pixel_x = -2 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 5; pixel_x = 11 }, @@ -407,7 +407,7 @@ /area/awaymission/beach) "eT" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -6; pixel_y = -6 }, @@ -444,11 +444,11 @@ /obj/structure/table/wood{ color = "#ffcc33" }, -/obj/item/reagent_containers/food/condiment/capsaicin{ +/obj/item/reagent_containers/condiment/capsaicin{ pixel_y = 8; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/bbqsauce{ +/obj/item/reagent_containers/condiment/bbqsauce{ pixel_x = 8; pixel_y = 4 }, @@ -518,10 +518,10 @@ /obj/structure/table/wood{ color = "#ffcc33" }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 4; pixel_x = -8 }, @@ -732,15 +732,15 @@ /area/awaymission/beach) "iy" = ( /obj/structure/table/wood/fancy/orange, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/bottle/wine{ pixel_y = 20; pixel_x = -4 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 6; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 14; pixel_x = 8 }, @@ -936,7 +936,7 @@ /obj/structure/chair/plastic{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/cans/space_up{ +/obj/item/reagent_containers/drinks/cans/space_up{ pixel_y = 12; pixel_x = -8 }, @@ -960,15 +960,15 @@ /area/awaymission/beach) "lM" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 7; pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 15; pixel_x = 2 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 5; pixel_x = 7 }, @@ -1051,7 +1051,7 @@ pixel_y = 7; pixel_x = 11 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 12; pixel_x = -8 }, @@ -1062,11 +1062,11 @@ /area/awaymission/beach) "nb" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 8; pixel_x = 7 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 13; pixel_x = -11 }, @@ -1217,7 +1217,7 @@ "pm" = ( /obj/item/storage/bag/tray, /obj/effect/turf_decal/stripes/red/box, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 2; pixel_x = 1 }, @@ -1235,7 +1235,7 @@ /area/awaymission/beach) "pp" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = 20; pixel_y = -4 }, @@ -1257,7 +1257,7 @@ /obj/structure/chair/plastic{ dir = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 16; pixel_y = -16 }, @@ -1317,7 +1317,7 @@ /obj/structure/table/wood{ color = "#ffcc33" }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 8 }, @@ -1340,7 +1340,7 @@ /area/awaymission/beach) "qB" = ( /obj/structure/fluff/beach_umbrella/science, -/obj/item/reagent_containers/food/drinks/cans/starkist{ +/obj/item/reagent_containers/drinks/cans/starkist{ pixel_x = 11; pixel_y = -2 }, @@ -1407,7 +1407,7 @@ /area/awaymission/beach) "rI" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind{ +/obj/item/reagent_containers/drinks/cans/space_mountain_wind{ pixel_x = 18; pixel_y = 4 }, @@ -1429,7 +1429,7 @@ pixel_y = 18; pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -6; pixel_y = 2 }, @@ -1552,21 +1552,21 @@ /area/awaymission/beach) "va" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/beach) "vq" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/starkist{ +/obj/item/reagent_containers/drinks/cans/starkist{ pixel_x = 20; pixel_y = -8 }, @@ -1594,7 +1594,7 @@ pixel_x = -6; pixel_y = -5 }, -/obj/item/reagent_containers/food/snacks/donut{ +/obj/item/food/snacks/donut{ pixel_x = 13 }, /obj/item/folder/blue{ @@ -1623,7 +1623,7 @@ }, /area/awaymission/beach) "vR" = ( -/obj/item/reagent_containers/food/drinks/cans/tonic{ +/obj/item/reagent_containers/drinks/cans/tonic{ pixel_x = -12; pixel_y = 2 }, @@ -1827,7 +1827,7 @@ pixel_x = -2 }, /obj/machinery/cell_charger, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 12; pixel_x = 6 }, @@ -2109,11 +2109,11 @@ /area/awaymission/beach) "Cf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 8; pixel_x = 5 }, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 3; pixel_x = -3 }, @@ -2176,7 +2176,7 @@ /area/awaymission/beach) "Dg" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = -16; pixel_y = -6 }, @@ -2205,11 +2205,11 @@ /area/awaymission/beach) "DH" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -10; pixel_y = -6 }, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = 12 }, /turf/simulated/floor/beach/away/sand_alternative, @@ -2238,7 +2238,7 @@ "Eg" = ( /obj/structure/table/wood, /obj/machinery/recharger, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -9; pixel_y = 13 }, @@ -2252,7 +2252,7 @@ /area/awaymission/beach) "Ek" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 4; pixel_y = 4 }, @@ -2271,15 +2271,15 @@ /area/awaymission/beach) "Ez" = ( /obj/structure/table/holotable, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 8; pixel_x = -8 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 6; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 4; pixel_x = -1 }, @@ -2460,7 +2460,7 @@ pixel_y = 10; pixel_x = 11 }, -/obj/item/reagent_containers/food/snacks/donut/sprinkles{ +/obj/item/food/snacks/donut/sprinkles{ pixel_x = -8; pixel_y = 4 }, @@ -2503,7 +2503,7 @@ /area/awaymission/beach) "Hg" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime{ +/obj/item/reagent_containers/drinks/cans/lemon_lime{ pixel_y = -6; pixel_x = 16 }, @@ -2706,7 +2706,7 @@ /obj/structure/chair/plastic{ dir = 4 }, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime{ +/obj/item/reagent_containers/drinks/cans/lemon_lime{ pixel_x = 14; pixel_y = -12 }, @@ -2805,7 +2805,7 @@ /area/awaymission/beach) "KB" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = -6; pixel_y = -6 }, @@ -2814,7 +2814,7 @@ "KE" = ( /obj/structure/table, /obj/item/storage/belt/utility, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 16; pixel_x = -7 }, @@ -2829,15 +2829,15 @@ /area/awaymission/beach) "KK" = ( /obj/structure/table/wood/fancy/orange, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 8; pixel_x = -4 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 6; pixel_x = -1 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 4; pixel_x = 3 }, @@ -2893,13 +2893,13 @@ /area/awaymission/beach) "LI" = ( /obj/structure/closet/crate/hydroponics, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/beach/away/sand_alternative, /area/awaymission/beach) "LM" = ( @@ -3032,7 +3032,7 @@ /area/awaymission/beach) "Ne" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/space_up{ +/obj/item/reagent_containers/drinks/cans/space_up{ pixel_x = 11; pixel_y = -2 }, @@ -3130,11 +3130,11 @@ color = "#ffcc33" }, /obj/machinery/light/directional/east, -/obj/item/reagent_containers/food/condiment/ketchup{ +/obj/item/reagent_containers/condiment/ketchup{ pixel_y = 8; pixel_x = -2 }, -/obj/item/reagent_containers/food/condiment/mayonnaise{ +/obj/item/reagent_containers/condiment/mayonnaise{ pixel_x = 6; pixel_y = 6 }, @@ -3222,18 +3222,18 @@ /area/awaymission/beach) "QH" = ( /obj/structure/fluff/beach_umbrella/science, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -10; pixel_y = -6 }, -/obj/item/reagent_containers/food/drinks/cans/space_up{ +/obj/item/reagent_containers/drinks/cans/space_up{ pixel_x = 12 }, /turf/simulated/floor/beach/away/sand_alternative, /area/awaymission/beach) "QJ" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = 18; pixel_y = -3 }, @@ -3381,7 +3381,7 @@ /turf/simulated/floor/wood/fancy, /area/awaymission/beach) "Ss" = ( -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 16; pixel_x = -8 }, @@ -3415,7 +3415,7 @@ pixel_y = 4; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_y = 8; pixel_x = 8 }, @@ -3471,7 +3471,7 @@ /turf/simulated/floor/wood/fancy, /area/awaymission/beach) "Us" = ( -/obj/item/reagent_containers/food/drinks/cans/starkist{ +/obj/item/reagent_containers/drinks/cans/starkist{ pixel_x = -6 }, /turf/simulated/floor/beach/away/sand_alternative, @@ -3552,7 +3552,7 @@ pixel_y = 6; pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/cans/grape_juice{ +/obj/item/reagent_containers/drinks/cans/grape_juice{ pixel_x = -8; pixel_y = 9 }, @@ -3816,12 +3816,12 @@ /area/awaymission/beach) "XW" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, /turf/simulated/floor/beach/away/sand_alternative, /area/awaymission/beach) "Ya" = ( @@ -3894,11 +3894,11 @@ /area/awaymission/beach) "Ze" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 6; pixel_x = 6 }, -/obj/item/reagent_containers/food/snacks/watermelonslice{ +/obj/item/food/snacks/watermelonslice{ pixel_x = -6 }, /turf/simulated/floor/beach/away/sand_alternative, diff --git a/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm index 70888ba807fc..83bac76a715c 100644 --- a/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm @@ -61,10 +61,7 @@ pixel_y = -10 }, /obj/item/shard, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/TurretsSouth) @@ -147,10 +144,7 @@ /obj/item/shard{ icon_state = "small" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/TurretsNorth) @@ -275,8 +269,8 @@ /area/awaymission/BMPship/Gate) "bi" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -296,7 +290,7 @@ /area/awaymission/BMPship/Fore) "bl" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/item/flashlight/lamp/green{ pixel_x = -5; pixel_y = 12; @@ -586,7 +580,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/obj/item/reagent_containers/food/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup, /obj/item/reagent_containers/pill/methamphetamine, /turf/simulated/floor/wood/fancy/oak, /area/awaymission/BMPship/CommonArea) @@ -728,10 +722,10 @@ dir = 2 }, /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, /obj/item/clothing/gloves/furgloves, /obj/item/clothing/head/furcap, /obj/item/clothing/shoes/furboots, @@ -782,7 +776,7 @@ "cB" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/Fore) "cC" = ( @@ -837,7 +831,7 @@ "cH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/structure/spider/stickyweb, /obj/structure/spider/cocoon, /turf/simulated/floor/plating, @@ -905,7 +899,7 @@ "cR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "cS" = ( @@ -964,8 +958,8 @@ /area/awaymission/BMPship/Fore) "cZ" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat, +/obj/item/food/snacks/monstermeat/lizardmeat, +/obj/item/food/snacks/monstermeat/lizardmeat, /obj/item/stack/sheet/animalhide/lizard, /obj/effect/spawner/lootdrop/lizardboots, /obj/effect/decal/cleanable/dirt, @@ -1145,8 +1139,8 @@ /area/awaymission/BMPship/Engines) "dA" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -1248,7 +1242,7 @@ /obj/item/kitchen/utensil/fork{ pixel_x = 7 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 15 }, /turf/simulated/floor/plasteel{ @@ -1264,11 +1258,11 @@ /obj/item/clothing/glasses/sunglasses/noir{ pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 10; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 10; layer = 2.9 }, @@ -1325,7 +1319,7 @@ /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) "dU" = ( -/obj/item/reagent_containers/food/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/fancy/oak, /area/awaymission/BMPship/CommonArea) @@ -1519,7 +1513,7 @@ "ey" = ( /obj/structure/table, /obj/item/kitchen/knife/butcher, -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat, +/obj/item/food/snacks/monstermeat/lizardmeat, /obj/item/trash/plate{ pixel_x = -5; pixel_y = -1; @@ -1625,7 +1619,7 @@ layer = 2.9 }, /obj/item/kitchen/utensil/fork, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ pixel_x = 8 }, /turf/simulated/floor/plasteel{ @@ -1649,7 +1643,7 @@ color = "yellow"; layer = 2.9 }, -/obj/item/reagent_containers/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, /turf/simulated/floor/grass, /area/awaymission/BMPship/Kitchen) "eR" = ( @@ -1899,8 +1893,7 @@ /area/awaymission/BMPship/Buffer) "fx" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /obj/machinery/light/small/directional/south, @@ -1909,7 +1902,7 @@ "fy" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, -/obj/item/reagent_containers/food/snacks/fried_vox{ +/obj/item/food/snacks/fried_vox{ pixel_x = 4; pixel_y = 12; layer = 2.9 @@ -2026,8 +2019,7 @@ /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/north, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /turf/simulated/floor/mineral/plastitanium/red, @@ -2258,7 +2250,7 @@ /area/space) "gv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread, +/obj/item/food/snacks/sliceable/xenomeatbread, /obj/item/kitchen/knife, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -2327,8 +2319,7 @@ /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /turf/simulated/floor/mineral/plastitanium/red, @@ -2361,7 +2352,7 @@ }, /area/awaymission/BMPship/Kitchen) "gM" = ( -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/hugemushroomslice, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/awaymission/BMPship/Kitchen) @@ -2570,7 +2561,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) @@ -2678,10 +2669,7 @@ }, /obj/item/shard, /obj/effect/landmark/damageturf, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/Fore) "hV" = ( @@ -2749,10 +2737,7 @@ /area/awaymission/BMPship/Armory) "ii" = ( /obj/structure/window/reinforced, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard{ icon_state = "medium"; pixel_x = -7; @@ -2802,12 +2787,12 @@ /area/awaymission/BMPship/Kitchen) "it" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/hugemushroomslice, /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat, +/obj/item/food/snacks/monstermeat/spidermeat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/awaymission/BMPship/Gate) @@ -2880,10 +2865,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/engine/vacuum, /area/awaymission/BMPship/TurretsSouth) "iH" = ( @@ -2920,7 +2902,7 @@ /area/awaymission/BMPship/ChemLab) "iL" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/item/grenade/chem_grenade/drugs, /turf/simulated/floor/plating, /area/awaymission/BMPship/ChemLab) @@ -2996,7 +2978,7 @@ /turf/simulated/floor/plating, /area/awaymission/BMPship/ChemLab) "iZ" = ( -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating, /area/awaymission/BMPship/ChemLab) "ja" = ( @@ -3058,7 +3040,7 @@ /obj/item/kitchen/utensil/fork{ pixel_x = -2 }, -/obj/item/reagent_containers/food/snacks/pastatomato, +/obj/item/food/snacks/pastatomato, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -3117,9 +3099,9 @@ "jB" = ( /obj/structure/window/reinforced, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/candy/candycane, -/obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat, -/obj/item/reagent_containers/food/snacks/candy/confectionery/toffee, +/obj/item/food/snacks/candy/candycane, +/obj/item/food/snacks/candy/confectionery/caramel_nougat, +/obj/item/food/snacks/candy/confectionery/toffee, /turf/simulated/floor/plasteel{ icon_state = "barber"; tag = "icon-barber" @@ -3132,7 +3114,7 @@ /area/space) "jF" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ pixel_x = -8 }, /obj/item/trash/plate{ @@ -3152,7 +3134,7 @@ "jG" = ( /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/machinery/light_construct/small/north, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) @@ -3245,7 +3227,7 @@ "kx" = ( /obj/structure/table/survival_pod, /obj/item/reagent_containers/glass/beaker/drugs/meth, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -3; pixel_y = 4; layer = 2.9 @@ -3305,10 +3287,7 @@ dir = 1 }, /obj/effect/landmark/damageturf, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/Fore) "ld" = ( @@ -3381,7 +3360,7 @@ /obj/structure/closet/critter{ opened = 1 }, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "lL" = ( @@ -3475,8 +3454,7 @@ /area/awaymission/BMPship/Kitchen) "mA" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /obj/machinery/light_construct/small/north, @@ -3591,8 +3569,7 @@ "nO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /obj/machinery/light/small/directional/south, @@ -3719,7 +3696,7 @@ icon_state = "small" }, /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 11; pixel_y = 13 }, @@ -3749,19 +3726,16 @@ pixel_x = 9; pixel_y = -9 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/space, /area/space) "pc" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana{ pixel_x = -6; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 7; pixel_y = 3 }, @@ -3858,14 +3832,14 @@ /area/awaymission/BMPship/Dormitories) "pG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 3; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -3; pixel_y = 5; layer = 2.9 @@ -4630,7 +4604,7 @@ /area/awaymission/BMPship/CommonArea) "wG" = ( /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) @@ -4826,7 +4800,7 @@ /turf/simulated/wall/indestructible/whiteshuttle/nodiagonal, /area/awaymission/BMPship/Fore) "yu" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/north, /mob/living/simple_animal/hostile/poison/giant_spider/hunter{ @@ -4942,7 +4916,7 @@ opened = 1 }, /obj/structure/spider/stickyweb, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) @@ -4991,10 +4965,7 @@ /turf/space, /area/space) "Ac" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard{ icon_state = "medium"; pixel_x = 9; @@ -5028,7 +4999,7 @@ /obj/item/shard{ icon_state = "small" }, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Aw" = ( @@ -5105,7 +5076,7 @@ /obj/structure/table, /obj/item/kitchen/utensil/fork, /obj/item/trash/snack_bowl, -/obj/item/reagent_containers/food/drinks/mug/cap{ +/obj/item/reagent_containers/drinks/mug/cap{ pixel_x = 5; pixel_y = 6 }, @@ -5264,7 +5235,7 @@ /area/awaymission/BMPship/Buffer) "CI" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 2 }, @@ -5333,7 +5304,7 @@ /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Dr" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) @@ -5482,10 +5453,7 @@ pixel_x = -7; pixel_y = -10 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/door/poddoor/shutters{ dir = 8 }, @@ -5521,7 +5489,7 @@ /turf/simulated/wall/indestructible/whiteshuttle/nodiagonal, /area/awaymission/BMPship/Kitchen) "EO" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /obj/structure/spider/stickyweb, /turf/simulated/floor/engine, @@ -5683,7 +5651,7 @@ /area/awaymission/BMPship/Containment) "Gu" = ( /obj/item/assembly/mousetrap/armed, -/obj/item/reagent_containers/food/snacks/breadslice{ +/obj/item/food/snacks/breadslice{ pixel_y = 3 }, /obj/effect/decal/cleanable/dirt, @@ -6165,7 +6133,7 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) "Lx" = ( @@ -6203,7 +6171,7 @@ /area/awaymission/BMPship/Gate) "Md" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/drinks/mug/novelty{ +/obj/item/reagent_containers/drinks/mug/novelty{ pixel_y = 10; pixel_x = 10 }, @@ -6528,19 +6496,18 @@ /area/awaymission/BMPship/CommonArea) "Qi" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Qj" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/effect/decal/cleanable/greenglow, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/Fore) "Qk" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /obj/structure/spider/stickyweb, @@ -6589,7 +6556,7 @@ /area/awaymission/BMPship/Containment) "QT" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /obj/item/storage/box/flashbangs, /obj/item/fluff/dogwhistle, /obj/structure/alien/weeds, @@ -6781,16 +6748,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /turf/simulated/floor/plating, /area/awaymission/BMPship/Gate) "Tv" = ( /mob/living/simple_animal/hostile/retaliate/poison/snake, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/item/shard, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, @@ -6909,7 +6876,7 @@ /area/awaymission/BMPship/Engines) "UI" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -8 }, /turf/simulated/floor/plating/airless, @@ -7002,7 +6969,7 @@ /area/awaymission/BMPship/CommonArea) "VG" = ( /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mineral/plastitanium/red, @@ -7201,8 +7168,7 @@ /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /obj/structure/spider/stickyweb, @@ -7253,7 +7219,7 @@ "Yh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/structure/spider/stickyweb, /obj/structure/spider/cocoon, /turf/simulated/floor/engine, @@ -7326,8 +7292,7 @@ /area/awaymission/BMPship/Fore) "YU" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - icon_state = "plant-dead"; +/obj/item/kirbyplants/dead{ tag = "plant-dead" }, /obj/machinery/light/small/directional/north, @@ -7353,7 +7318,7 @@ "Zg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Zj" = ( @@ -7399,10 +7364,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/stack/rods/ten, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/MedBay) diff --git a/_maps/map_files220/RandomZLevels/blackmesa.dmm b/_maps/map_files220/RandomZLevels/blackmesa.dmm index 4355cb0db799..0daab42322a5 100644 --- a/_maps/map_files220/RandomZLevels/blackmesa.dmm +++ b/_maps/map_files220/RandomZLevels/blackmesa.dmm @@ -44,7 +44,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/lambda_hallway) "aez" = ( -/obj/item/reagent_containers/food/snacks/choccherrycakeslice, +/obj/item/food/snacks/choccherrycakeslice, /obj/structure/table/wood, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) @@ -95,7 +95,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/cryo_storage) "ajC" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_science_room) "akl" = ( @@ -448,7 +448,7 @@ /turf/simulated/floor/engine, /area/awaymission/black_mesa/resonant_chamber) "aDI" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/machinery/light_construct/directional/east, @@ -757,7 +757,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/high_security_hallway) "baj" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel, @@ -959,13 +959,13 @@ }, /area/awaymission/black_mesa/xen/entering_zone) "bpU" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_turret) "bqP" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -1194,7 +1194,7 @@ }, /area/awaymission/black_mesa/cryo_room) "bEg" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1; icon_state = "broken"; icon_screen = "broken"; @@ -1226,8 +1226,8 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/coffee, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/coffee, +/obj/item/reagent_containers/drinks/tea{ pixel_x = 5; pixel_y = 10 }, @@ -1236,7 +1236,7 @@ }, /area/awaymission/black_mesa/security_outpost) "bFx" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/structure/railing{ @@ -1328,7 +1328,7 @@ /turf/simulated/floor/plasteel/stairs/medium, /area/awaymission/black_mesa/entrance_internal_hall) "bKK" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4; icon_state = "broken"; icon_screen = "broken"; @@ -1359,7 +1359,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "bLn" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel/smooth, @@ -1523,7 +1523,7 @@ /turf/simulated/wall/indestructible/rock/mineral, /area/awaymission/black_mesa/security_outpost) "bRg" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/structure/alien/xenoweeds, @@ -1629,7 +1629,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/high_security_sec_point) "bYb" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/structure/alien/xenoweeds, @@ -1769,7 +1769,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/cryo_storage) "ciM" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/machinery/light_construct/directional/north, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) @@ -1927,7 +1927,7 @@ /turf/simulated/floor/bluegrid, /area/awaymission/black_mesa/lambda_teleporter) "cqA" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel/dark, @@ -1992,8 +1992,8 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/grown/coffee/robusta, -/obj/item/reagent_containers/food/snacks/grown/coffee{ +/obj/item/food/snacks/grown/coffee/robusta, +/obj/item/food/snacks/grown/coffee{ pixel_x = -3; pixel_y = -3 }, @@ -2024,7 +2024,7 @@ /area/awaymission/black_mesa/xen/vortigaunt_village) "cvC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread, +/obj/item/food/snacks/sliceable/xenomeatbread, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "cwd" = ( @@ -2080,7 +2080,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/dorm_computers) "cBF" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "computer"; dir = 8 @@ -2236,7 +2236,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/lambda_hallway) "cLK" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; name = "broken computer"; dir = 8 @@ -2343,7 +2343,7 @@ "cTV" = ( /obj/structure/alien/xenoweeds, /obj/effect/bump_teleporter{ - id = "lambda_xen"; + id = "lambda_lab_gate"; density = 0 }, /turf/simulated/floor/engine, @@ -2467,7 +2467,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_entrance) "cZn" = ( -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/freeman_puzzle) "cZp" = ( @@ -2626,7 +2626,7 @@ /area/awaymission/black_mesa/equipment_room) "dko" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/tea, +/obj/item/reagent_containers/drinks/tea, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "dkq" = ( @@ -2716,7 +2716,7 @@ /turf/simulated/floor/beach/away/coastline/xen, /area/awaymission/black_mesa/xen/entering_zone) "dpl" = ( -/obj/item/reagent_containers/food/snacks/popcorn, +/obj/item/food/snacks/popcorn, /turf/simulated/floor/wood, /area/awaymission/black_mesa/employee_dorm_room) "dpo" = ( @@ -2790,7 +2790,7 @@ /area/awaymission/black_mesa/hecu_zone_infirmary) "duq" = ( /obj/structure/table, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "laptop"; @@ -2977,12 +2977,12 @@ /area/awaymission/black_mesa/black_ops_armory) "dGp" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/confectionery{ +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/confectionery{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/candy/confectionery{ +/obj/item/food/snacks/candy/confectionery{ pixel_x = 6; pixel_y = 6 }, @@ -3002,7 +3002,7 @@ /area/awaymission/black_mesa/entrance_internal_hall) "dGU" = ( /obj/structure/alien/xenoweeds, -/obj/item/reagent_containers/food/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, /turf/simulated/floor/plating/ironsand, /area/awaymission/black_mesa) "dGY" = ( @@ -3121,7 +3121,7 @@ }, /area/awaymission/black_mesa/science_internal) "dPd" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel/dark{ @@ -3619,6 +3619,11 @@ /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/fast, /turf/simulated/floor/mineral/titanium, /area/awaymission/black_mesa/entrance) +"etS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel/dark, +/area/awaymission/black_mesa/xen/acid_lake_building) "etZ" = ( /obj/effect/bump_teleporter{ id = "lambda2"; @@ -3672,7 +3677,7 @@ /area/awaymission/black_mesa/high_security_hallway) "ewJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice, +/obj/item/food/snacks/xenomeatbreadslice, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "ewP" = ( @@ -3697,6 +3702,10 @@ /obj/machinery/door/airlock/public, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_science_room) +"exS" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel/smooth, +/area/awaymission/black_mesa/deep_sci_storage) "eyf" = ( /obj/structure/flora/biolumini/mine, /turf/simulated/floor/beach/away/coastline/xen{ @@ -3811,15 +3820,15 @@ /area/awaymission/black_mesa/entrance_internal_hall) "eHp" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_y = 4; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel/dark{ icon_state = "dark" @@ -3937,7 +3946,7 @@ /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) "eOR" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/effect/decal/cleanable/dirt, @@ -4247,7 +4256,7 @@ /area/awaymission/black_mesa/entrance_lobby) "fiC" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "fje" = ( @@ -4320,7 +4329,7 @@ /area/awaymission/black_mesa/genetics_elevator) "foa" = ( /obj/structure/table, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "laptop"; @@ -4364,7 +4373,7 @@ /area/awaymission/black_mesa/xen/freeman_hallway) "frM" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/doshik_spicy, +/obj/item/food/snacks/doshik_spicy, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) @@ -4539,7 +4548,7 @@ }, /area/awaymission/black_mesa/gas_emitter_chamber) "fBN" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_large_office) @@ -4683,7 +4692,7 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa) "fOx" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -4709,7 +4718,7 @@ /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "fPh" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -5491,7 +5500,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_downstairs_atrium) "gLa" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1; icon_state = "broken"; icon_screen = "broken"; @@ -5683,7 +5692,7 @@ }, /area/awaymission/black_mesa/science_decon_room) "gXj" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -5740,7 +5749,7 @@ /area/awaymission/black_mesa/xen/lost_camp) "han" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, +/obj/item/food/snacks/monstermeat/xenomeat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "haK" = ( @@ -5817,7 +5826,7 @@ /area/awaymission/black_mesa/hecu_zone_bathroom) "heL" = ( /obj/structure/table, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "laptop"; @@ -5853,7 +5862,7 @@ /turf/simulated/wall/indestructible/riveted, /area/awaymission/black_mesa/black_ops_turret_blockade) "hhW" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/scientist_hall) @@ -6181,7 +6190,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/science_decon_room) "hGS" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/hecu_zone_atrium) "hHF" = ( @@ -6202,7 +6211,7 @@ /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) "hIf" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/structure/alien/xenoweeds, @@ -6260,7 +6269,7 @@ /obj/item/storage/fancy/cigarettes/cigpack_uplift{ pixel_x = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 10; pixel_x = -9 }, @@ -6335,7 +6344,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "hPO" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/employee_dorm_room) "hQh" = ( @@ -6511,12 +6520,12 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) "iew" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plating/dirt/xen_dirt, /area/awaymission/black_mesa/xen/nihilanth_computer) "ieG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/tea, +/obj/item/reagent_containers/drinks/tea, /turf/simulated/floor/plasteel{ icon_state = "green"; dir = 4 @@ -6579,7 +6588,7 @@ /area/awaymission/black_mesa/black_ops_armory) "ikb" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 3 }, /turf/simulated/floor/plasteel, @@ -6723,7 +6732,7 @@ }, /area/awaymission/black_mesa/hecu_zone_external_hall) "isF" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/machinery/light/directional/west, @@ -6779,7 +6788,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "ixB" = ( -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/nihilanth_computer) "iyO" = ( @@ -6857,13 +6866,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/muffin, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin, +/obj/item/food/snacks/muffin{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/poppypretzel, -/obj/item/reagent_containers/food/snacks/plum_pie, +/obj/item/food/snacks/poppypretzel, +/obj/item/food/snacks/plum_pie, /turf/simulated/floor/plasteel/dark{ icon_state = "dark" }, @@ -6989,7 +6998,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/security_outpost) "iKx" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "computer"; dir = 8 @@ -7209,7 +7218,7 @@ /turf/simulated/floor/mineral/titanium, /area/awaymission/black_mesa/genetics_elevator) "iXc" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -7429,7 +7438,7 @@ /area/awaymission/black_mesa/xen/acid_lake_building) "jka" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/doshik_spicy, +/obj/item/food/snacks/doshik_spicy, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "jkk" = ( @@ -7633,7 +7642,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/hecu_zone_atrium) "jwD" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/structure/railing{ @@ -7739,11 +7748,11 @@ /area/awaymission/black_mesa/dorm_computers) "jFG" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel{ icon_state = "brownfull" }, @@ -7864,6 +7873,14 @@ icon_state = "alienvault" }, /area/awaymission/black_mesa/xen/nihilanth_arena) +"jLi" = ( +/obj/structure/inflatable{ + opacity = 1; + color = "#556B2F" + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/awaymission/black_mesa/xen/acid_lake_building) "jLu" = ( /obj/structure/sign/chemistry{ pixel_y = -32 @@ -7990,7 +8007,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/high_security_servers) "jUS" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -8333,6 +8350,10 @@ /obj/machinery/light/directional/west, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/black_ops_armory) +"koI" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel/smooth, +/area/awaymission/black_mesa/cryo_room) "kpg" = ( /obj/structure/cable{ d1 = 2; @@ -8361,7 +8382,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/hecu_zone_external_hall) "kqh" = ( -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plating, /area/awaymission/black_mesa/security_outpost) "kqI" = ( @@ -8433,7 +8454,7 @@ /turf/simulated/floor/mineral/titanium, /area/awaymission/black_mesa/tram_room) "ktX" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -8508,7 +8529,7 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) "kzB" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -8784,19 +8805,19 @@ /area/awaymission/black_mesa/resonant_chamber) "kRb" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/bbqsauce, -/obj/item/reagent_containers/food/condiment/diablo_sauce, -/obj/item/reagent_containers/food/condiment/tomato_sauce, -/obj/item/reagent_containers/food/condiment/garlic_sauce, -/obj/item/reagent_containers/food/drinks/chicken_soup, -/obj/item/reagent_containers/food/drinks/chicken_soup, -/obj/item/reagent_containers/food/drinks/chicken_soup, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/bbqsauce, +/obj/item/reagent_containers/condiment/diablo_sauce, +/obj/item/reagent_containers/condiment/tomato_sauce, +/obj/item/reagent_containers/condiment/garlic_sauce, +/obj/item/reagent_containers/drinks/chicken_soup, +/obj/item/reagent_containers/drinks/chicken_soup, +/obj/item/reagent_containers/drinks/chicken_soup, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -8853,7 +8874,7 @@ /turf/simulated/floor/engine, /area/awaymission/black_mesa/hecu_zone_test_chambers) "kUw" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; name = "broken computer"; dir = 8 @@ -9667,7 +9688,7 @@ }, /area/awaymission/black_mesa/lambda_teleporter) "lRP" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/scientist_hall) @@ -9678,7 +9699,7 @@ /area/awaymission/black_mesa/science_labs) "lTy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/doshik, +/obj/item/food/snacks/doshik, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) @@ -9709,7 +9730,7 @@ /area/awaymission/black_mesa/xen/vortigaunt_village) "lWK" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 10; pixel_x = 9 }, @@ -9751,7 +9772,7 @@ /area/awaymission/black_mesa/xen/nihilanth_computer) "lZi" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /turf/simulated/floor/plasteel/dark{ icon_state = "dark" }, @@ -9842,10 +9863,10 @@ /area/awaymission/black_mesa/entrance_large_office) "mdX" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/pack/ketchup, -/obj/item/reagent_containers/food/condiment/pack/hotsauce, -/obj/item/reagent_containers/food/condiment/pack/hotsauce, -/obj/item/reagent_containers/food/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/hotsauce, +/obj/item/reagent_containers/condiment/pack/hotsauce, +/obj/item/reagent_containers/condiment/pack/ketchup, /obj/item/trash/plate, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) @@ -10236,7 +10257,7 @@ /area/awaymission/black_mesa/security_outpost) "mHz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_large_office) @@ -10322,8 +10343,8 @@ /area/awaymission/black_mesa/science_labs) "mMa" = ( /obj/effect/bump_teleporter/lambda{ - id = "lambda_xen2"; - id_target = "lambda2"; + id = "lambda_xen3"; + id_target = "lambda_lab_gate"; color = "lime" }, /turf/simulated/floor/vault{ @@ -10575,7 +10596,7 @@ /turf/simulated/wall/indestructible/riveted, /area/awaymission/black_mesa/high_security_sec_point) "mYx" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1; icon_state = "broken"; icon_screen = "broken"; @@ -10671,12 +10692,12 @@ /area/awaymission/black_mesa/xen/vortigaunt_village) "ncG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) "ncU" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "ndr" = ( @@ -10864,7 +10885,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/high_security_servers) "npr" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -11000,7 +11021,7 @@ /turf/simulated/floor/catwalk, /area/awaymission/black_mesa/xen/entering_zone) "nwm" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /obj/structure/alien/xenoweeds, @@ -11126,7 +11147,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_chem) "nFK" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /obj/machinery/light/directional/south, @@ -11217,7 +11238,7 @@ }, /area/awaymission/black_mesa/xen/lost_camp_hallway) "nLK" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel/smooth, @@ -11493,7 +11514,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_large_office) "ocA" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/dorm_computers) "oee" = ( @@ -11559,7 +11580,7 @@ /turf/simulated/floor/plating, /area/awaymission/black_mesa/xen/acid_lake_building) "ofW" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel/smooth, @@ -11684,7 +11705,7 @@ /turf/simulated/floor/mineral/titanium, /area/awaymission/black_mesa/entrance) "oon" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) "ooy" = ( @@ -11725,7 +11746,7 @@ /area/awaymission/black_mesa/entrance_large_office) "oqn" = ( /obj/structure/table, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "laptop"; @@ -12098,7 +12119,7 @@ /turf/simulated/floor/plating, /area/awaymission/black_mesa/security_outpost) "oMO" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel/smooth, @@ -12111,12 +12132,12 @@ /area/awaymission/black_mesa/hecu_zone_camp) "oNw" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6; pixel_y = 6 }, @@ -12192,7 +12213,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/security_outpost) "oTy" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -12235,7 +12256,7 @@ /turf/simulated/wall/indestructible/rock/mineral, /area/awaymission/black_mesa/entrance_internal_hall) "oWT" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -12354,7 +12375,7 @@ /turf/simulated/wall/indestructible/riveted, /area/awaymission/black_mesa/security_outpost) "pbF" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/structure/alien/xenoweeds, @@ -12521,7 +12542,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_entrance) "plF" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/structure/alien/xenoweeds, @@ -12546,7 +12567,7 @@ /area/awaymission/black_mesa/entrance_large_office) "pnW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) "ppc" = ( @@ -12597,7 +12618,7 @@ }, /area/awaymission/black_mesa/hecu_zone_bathroom) "psj" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plating/dirt/xen_dirt, @@ -12772,7 +12793,7 @@ /area/awaymission/black_mesa/deep_sci_turret) "pDq" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/donut/sprinkles, +/obj/item/food/snacks/donut/sprinkles, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "pDE" = ( @@ -13169,7 +13190,7 @@ /area/awaymission/black_mesa/hecu_zone_camp) "qeH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/doshik_spicy, +/obj/item/food/snacks/doshik_spicy, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/acid_lake_building) "qfg" = ( @@ -13479,7 +13500,7 @@ /turf/simulated/wall/indestructible/rock/mineral, /area/awaymission/black_mesa/xen/nihilanth_hallway) "qzz" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1; icon_state = "broken"; icon_screen = "broken"; @@ -13662,7 +13683,7 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/acid_lake) "qIu" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plasteel/dark{ @@ -13736,7 +13757,7 @@ /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) "qMR" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -13813,7 +13834,7 @@ /area/awaymission/black_mesa/entrance_large_office) "qPE" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/doshik, +/obj/item/food/snacks/doshik, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "qPF" = ( @@ -13882,7 +13903,7 @@ /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) "qUm" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/high_security_emitter) "qUv" = ( @@ -14644,7 +14665,7 @@ /area/awaymission/black_mesa/hecu_zone_external_hall) "rSI" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/vortigaunt_village) "rSN" = ( @@ -15125,11 +15146,11 @@ /area/awaymission/black_mesa/black_ops_turret_blockade) "swo" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 10 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "Its cold like the space outside noo!"; pixel_x = -6; pixel_y = 8; @@ -15166,22 +15187,22 @@ /area/awaymission/black_mesa/hecu_zone_infirmary) "szl" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/lemon_lime, +/obj/item/reagent_containers/drinks/cans/lemon_lime, +/obj/item/reagent_containers/drinks/cans/lemon_lime, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/grape_juice, +/obj/item/reagent_containers/drinks/cans/grape_juice, +/obj/item/reagent_containers/drinks/cans/grape_juice, +/obj/item/reagent_containers/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -15256,6 +15277,10 @@ /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/science_decon_room) +"sCM" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/wood/fancy/cherry, +/area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) "sCN" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -15413,7 +15438,7 @@ /area/awaymission/black_mesa/entrance_lobby) "sNn" = ( /obj/structure/closet/crate/can, -/obj/item/reagent_containers/food/snacks/donut/sprinkles, +/obj/item/food/snacks/donut/sprinkles, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/gas_emitter_chamber) "sNG" = ( @@ -15632,7 +15657,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/security_outpost) "tdi" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel, @@ -15789,7 +15814,7 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/freeman_puzzle) "tqR" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel/smooth, @@ -15949,7 +15974,7 @@ }, /area/awaymission/black_mesa/xen/lost_camp_hallway) "tDf" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/plating/dirt/xen_dirt, @@ -16030,7 +16055,7 @@ "tGv" = ( /obj/structure/table, /obj/item/clothing/glasses/regular, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 10; pixel_y = 10 }, @@ -16399,7 +16424,7 @@ /area/awaymission/black_mesa/entrance_lobby) "uhs" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/candy/taffy, +/obj/item/food/snacks/candy/taffy, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/hecu_zone_infirmary) "uhN" = ( @@ -16428,7 +16453,7 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/freeman_puzzle) "uiG" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /obj/machinery/light_construct/directional/east, @@ -16514,7 +16539,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/tram_room) "urb" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -16674,7 +16699,7 @@ /turf/simulated/floor/engine, /area/awaymission/black_mesa/lambda_teleporter) "uAV" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/black_ops_button) "uBD" = ( @@ -16791,7 +16816,7 @@ /turf/simulated/floor/plating/ironsand, /area/awaymission/black_mesa/hecu_zone_camp) "uGL" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8 }, /turf/simulated/floor/wood, @@ -17253,7 +17278,7 @@ /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) "vgS" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/science_decon_room) @@ -17406,7 +17431,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/entrance_internal_hall) "vrW" = ( -/obj/item/reagent_containers/food/snacks/donut/sprinkles, +/obj/item/food/snacks/donut/sprinkles, /obj/structure/table/wood, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) @@ -17420,7 +17445,7 @@ /turf/simulated/wall/indestructible/riveted, /area/awaymission/black_mesa/deep_sci_storage) "vtp" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -17450,6 +17475,10 @@ }, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/security_outpost) +"vug" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/awaymission/black_mesa/xen/acid_lake_building) "vuI" = ( /obj/structure/flora/biolumini/mine/weaklight, /turf/simulated/floor/plating/xen, @@ -17479,7 +17508,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_entrance) "vwk" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -17778,8 +17807,8 @@ /area/awaymission/black_mesa/xen/village_hallway) "vPn" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/machinery/light/directional/west, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -17919,7 +17948,7 @@ /obj/structure/table, /obj/item/paper, /obj/item/pen, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 10 }, /turf/simulated/floor/plasteel, @@ -18007,7 +18036,7 @@ /turf/simulated/floor/catwalk, /area/awaymission/black_mesa/scientist_hall) "wfQ" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/science_labs) "wgt" = ( @@ -18055,7 +18084,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/high_security_surgery) "wlu" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /obj/machinery/light/directional/west, @@ -18111,11 +18140,11 @@ /area/awaymission/black_mesa/xen/acid_lake_building) "wnV" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 2 }, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating/ironsand, /area/awaymission/black_mesa/hecu_zone_camp) "woi" = ( @@ -18263,7 +18292,7 @@ /area/awaymission/black_mesa/entrance) "wyF" = ( /obj/structure/table, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; @@ -18298,7 +18327,7 @@ /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) "wzP" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -18523,7 +18552,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/entrance_internal_hall) "wNR" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plating/dirt/xen_dirt, @@ -18533,7 +18562,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/black_ops_server) "wOK" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -18651,7 +18680,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_medbay) "wTA" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -18765,7 +18794,7 @@ }, /area/awaymission/black_mesa/security_outpost) "wZH" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -19106,7 +19135,7 @@ }, /area/awaymission/black_mesa/science_labs) "xwf" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "tcstation"; icon_screen = "tcstation_broken"; icon_keyboard = null @@ -19251,6 +19280,10 @@ /obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, /area/awaymission/black_mesa/tram_room) +"xGZ" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel/smooth, +/area/awaymission/black_mesa/cryo_storage) "xHI" = ( /obj/effect/landmark/awaymissions/black_mesa/random_mob_placer/xen, /turf/simulated/floor/plasteel, @@ -19318,7 +19351,7 @@ /area/awaymission/black_mesa/employee_dorm_room) "xKX" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "xMb" = ( @@ -19471,7 +19504,7 @@ /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/freeman_puzzle) "xVR" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; name = "broken computer"; dir = 8 @@ -19604,7 +19637,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/science_decon_room) "ycg" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "computer"; dir = 8 @@ -19696,7 +19729,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/security_outpost) "yjJ" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -32451,7 +32484,7 @@ qeH rvt pTC uzo -uzo +etS pzr uzo lUJ @@ -32563,7 +32596,7 @@ qQx lQm lQm nmA -aHI +sCM aHI aHI nmA @@ -32966,9 +32999,9 @@ pzr aNx pzr pzr -pzr +jLi uzo -xlP +vug pzr jSI uCx @@ -57660,7 +57693,7 @@ cBU cBU cBU dgN -sHE +exS mIc wBx mIc @@ -65679,9 +65712,9 @@ ptr ptr uDt pOl -pOl +koI xZT -bBe +xGZ xzz bBe bBe diff --git a/_maps/map_files220/RandomZLevels/caves.dmm b/_maps/map_files220/RandomZLevels/caves.dmm index bd2186504249..3b95b5e5952c 100644 --- a/_maps/map_files220/RandomZLevels/caves.dmm +++ b/_maps/map_files220/RandomZLevels/caves.dmm @@ -458,7 +458,7 @@ pixel_y = 10 }, /obj/effect/spawner/random_spawners/dirt_often, -/obj/item/reagent_containers/food/snacks/grown/apple/poisoned, +/obj/item/food/snacks/grown/apple/poisoned, /turf/simulated/floor/wood/lavaland_air, /area/awaymission/caves) "bY" = ( @@ -486,7 +486,8 @@ "cg" = ( /obj/effect/spawner/random_spawners/dirt_often, /mob/living/simple_animal/pet/cat/Runtime{ - name = "Witches Familiar" + name = "Witches Familiar"; + desc = "Witch!" }, /turf/simulated/floor/wood/lavaland_air{ icon_state = "wood-broken3" @@ -1400,7 +1401,7 @@ /turf/simulated/floor/plating, /area/awaymission/caves/build/reqpower_build) "gu" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -1789,7 +1790,7 @@ /turf/simulated/floor/plating/lavaland_air, /area/awaymission/caves) "iy" = ( -/obj/item/reagent_containers/food/snacks/grown/poppy{ +/obj/item/food/snacks/grown/poppy{ pixel_y = -15; pixel_x = -5 }, @@ -2184,7 +2185,7 @@ /area/awaymission/caves/build) "kC" = ( /obj/effect/decal/remains/human, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/item/clothing/suit/armor/riot/knight/red, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/awaymission/caves) @@ -2347,13 +2348,13 @@ /area/awaymission/caves/build/reqpower_build) "lw" = ( /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/snacks/candy/cotton/poison, -/obj/item/reagent_containers/food/snacks/candy/jellybean/poison{ +/obj/item/food/snacks/candy/cotton/poison, +/obj/item/food/snacks/candy/jellybean/poison{ pixel_x = -5; pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/candy/gummyworm/poison, -/obj/item/reagent_containers/food/snacks/candy/gummybear/poison{ +/obj/item/food/snacks/candy/gummyworm/poison, +/obj/item/food/snacks/candy/gummybear/poison{ pixel_x = 5; pixel_y = 5 }, @@ -5332,7 +5333,7 @@ }, /area/awaymission/caves) "Bq" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "guest"; density = 0; pixel_x = -32; @@ -6253,7 +6254,7 @@ }, /area/awaymission/caves) "Gk" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "guest"; pixel_y = -32; density = 0; @@ -6472,7 +6473,7 @@ /turf/simulated/floor/plating/lavaland_air, /area/awaymission/caves) "Hn" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "guest"; density = 0; pixel_x = -32; @@ -6996,7 +6997,7 @@ }, /area/awaymission/caves/build/reqpower_build) "JW" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "guest"; icon_screen = "guest_lightmask"; icon_keyboard = null; @@ -7388,7 +7389,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/caves/build/reqpower_build) "LM" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "tcstation"; icon_screen = "tcstation_broken"; icon_keyboard = null @@ -7710,7 +7711,7 @@ }, /area/awaymission/caves) "Oc" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "entertainment_console"; pixel_x = -32; icon_keyboard = null; @@ -7724,10 +7725,6 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/wood/oak, /area/awaymission/caves/build/reqpower_build) -"Og" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/awaymission/caves) "Oi" = ( /obj/effect/spawner/random_spawners/dirt_often, /obj/effect/decal/cleanable/generic, @@ -7985,7 +7982,7 @@ /turf/simulated/mineral/volcanic/lava_land_surface, /area/awaymission/caves) "PA" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4; icon_state = "broken"; icon_screen = "broken"; @@ -8092,7 +8089,7 @@ /turf/simulated/floor/plasteel/lavaland_air, /area/awaymission/caves/build) "Qc" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /obj/effect/spawner/random_spawners/blood_often, @@ -8360,7 +8357,7 @@ }, /area/awaymission/caves/build/reqpower_build) "RM" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "guest"; icon_screen = "guest_lightmask"; icon_keyboard = null; @@ -8478,7 +8475,9 @@ /mob/living/simple_animal/hostile/hellhound/tear, /obj/effect/gibspawner/human, /obj/effect/spawner/random_spawners/dirt_often, -/turf/simulated/floor/wood/lavaland_air, +/turf/simulated/floor/wood/lavaland_air{ + icon_state = "wood-broken4" + }, /area/awaymission/caves) "Su" = ( /obj/structure/cable{ @@ -8900,7 +8899,7 @@ }, /area/awaymission/caves/build) "Uv" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -9068,7 +9067,7 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/awaymission/caves) "UZ" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -9361,8 +9360,8 @@ /area/awaymission/caves) "Wr" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 5; pixel_y = 7 }, @@ -9715,7 +9714,9 @@ /area/awaymission/caves) "XS" = ( /obj/structure/bookcase/random, -/turf/simulated/floor/wood/oak, +/turf/simulated/floor/wood/lavaland_air{ + icon_state = "wood-broken4" + }, /area/awaymission/caves) "XT" = ( /obj/effect/spawner/random_spawners/dirt_often, @@ -9842,8 +9843,9 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/awaymission/caves) "Yx" = ( -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, +/obj/structure/grille/broken, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plating/lavaland_air, /area/awaymission/caves) "YC" = ( /obj/effect/decal/solgov_logo{ @@ -9994,8 +9996,8 @@ "Zz" = ( /obj/structure/closet/crate/wooden/wooden_crate, /obj/structure/stone_tile/slab, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/trophy/bronze_cup, +/obj/item/reagent_containers/drinks/bottle/wine{ name = "Thousand-year-old wine"; icon_state = "patronbottle" }, @@ -40843,7 +40845,7 @@ BH NN Do BH -Og +bt dU zm pZ @@ -41072,7 +41074,7 @@ BH BH BH BH -XZ +Yx XL BH BH @@ -41771,7 +41773,7 @@ BH bt au oB -Yx +pZ nu aV pZ diff --git a/_maps/map_files220/RandomZLevels/gate_lizard.dmm b/_maps/map_files220/RandomZLevels/gate_lizard.dmm index 541121815f81..4755a594d948 100644 --- a/_maps/map_files220/RandomZLevels/gate_lizard.dmm +++ b/_maps/map_files220/RandomZLevels/gate_lizard.dmm @@ -150,7 +150,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "ajt" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) @@ -309,7 +309,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/pirate) "ati" = ( -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /obj/effect/spawner/random_spawners/dirt_maybe, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) @@ -324,7 +324,7 @@ "atT" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box/empty, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 9; pixel_x = 13 }, @@ -1005,9 +1005,9 @@ /area/awaymission/jungle_planet/outside/river) "bru" = ( /obj/structure/closet/crate/wooden/barrel, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "brT" = ( @@ -1219,13 +1219,13 @@ }, /area/awaymission/jungle_planet/outside) "bBR" = ( -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /obj/structure/closet/crate/wooden/wooden_crate, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/small) @@ -1411,7 +1411,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "bNN" = ( -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/structure/stone_tile/slab/cracked{ dir = 4 }, @@ -1574,7 +1574,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "caT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -1607,7 +1607,7 @@ /area/awaymission/jungle_planet/outside) "ccc" = ( /obj/structure/closet/crate/wooden/barrel, -/obj/item/reagent_containers/food/snacks/monkeykabob, +/obj/item/food/snacks/monkeykabob, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "cco" = ( @@ -2613,7 +2613,7 @@ /area/awaymission/jungle_planet/outside) "dpL" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/candybar, /obj/item/stack/spacecash/c10, /obj/item/flashlight/seclite, /obj/item/clothing/shoes/combat, @@ -3130,7 +3130,7 @@ /obj/structure/table/reinforced, /obj/item/trash/chips, /obj/item/stack/tape_roll, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "Its cold like the space outside noo!"; list_reagents = list("coffee" = 0) }, @@ -3168,7 +3168,7 @@ /area/awaymission/jungle_planet/inside/complex) "efS" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/pirate) "egj" = ( @@ -3194,7 +3194,7 @@ /obj/structure/chair/sofa/left{ dir = 8 }, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; @@ -3588,9 +3588,9 @@ name = "kitchen Cabinet"; req_access = list(201) }, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -3623,7 +3623,7 @@ /area/awaymission/jungle_planet/outside/river) "eJx" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ list_reagents = list("rum" = 50) }, /obj/item/clothing/mask/cigarette/pipe, @@ -4124,7 +4124,7 @@ /turf/simulated/floor/beach/away/water/deep/dense_canpass, /area/awaymission/jungle_planet/outside/river) "frZ" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0) }, /turf/simulated/floor/plating/asteroid/ancient{ @@ -4298,19 +4298,19 @@ pixel_x = 6; pixel_y = 7 }, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; icon_state = "telescreen_console"; pixel_x = -32 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) "fFa" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/structure/reagent_dispensers/fueltank/chem{ pixel_y = 30 }, @@ -4486,7 +4486,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "fNF" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "computer"; @@ -4599,7 +4599,7 @@ /area/awaymission/jungle_planet/outside/river) "fYG" = ( /obj/effect/spawner/random_spawners/dirt_often, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /obj/effect/landmark/damageturf, @@ -4623,11 +4623,11 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/small) "gaG" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0) }, /turf/simulated/floor/wood/oak, @@ -4822,7 +4822,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "gpD" = ( -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5; pixel_y = 14 }, @@ -4964,7 +4964,7 @@ /area/awaymission/jungle_planet/inside/complex) "gAD" = ( /obj/structure/curtain/black, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /obj/effect/mob_spawn/human/corpse/skeleton, @@ -5296,8 +5296,8 @@ /area/awaymission/jungle_planet/inside/complex) "gYH" = ( /obj/structure/stone_tile/slab/cracked, -/obj/item/reagent_containers/food/snacks/grown/poppy/lily, -/obj/item/reagent_containers/food/snacks/grown/moonflower, +/obj/item/food/snacks/grown/poppy/lily, +/obj/item/food/snacks/grown/moonflower, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "gZm" = ( @@ -5755,10 +5755,10 @@ /area/awaymission/jungle_planet/outside/abandoned) "hws" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "hwW" = ( @@ -6008,11 +6008,11 @@ /area/awaymission/jungle_planet/outside/cave) "hOx" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -23; pixel_x = 9 }, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/mushroom/chanterelle, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "hPx" = ( @@ -6487,7 +6487,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "isZ" = ( /obj/machinery/photocopier, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; @@ -6778,7 +6778,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside) "iKW" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; @@ -7149,7 +7149,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "jie" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl, +/obj/item/reagent_containers/drinks/mushroom_bowl, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "jiu" = ( @@ -7173,7 +7173,7 @@ }, /area/awaymission/jungle_planet/outside/river) "jjL" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "computer"; dir = 8 @@ -7590,8 +7590,8 @@ /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "jIo" = ( @@ -8182,10 +8182,10 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "kvb" = ( -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, /obj/structure/table, @@ -8337,7 +8337,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "kDy" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -8392,7 +8392,7 @@ /area/awaymission/jungle_planet/inside/complex) "kHh" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/monkeysdelight, +/obj/item/food/snacks/monkeysdelight, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "kHP" = ( @@ -8545,7 +8545,7 @@ /obj/item/shard{ icon_state = "small" }, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; @@ -8616,7 +8616,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "kUl" = ( -/obj/item/reagent_containers/food/drinks/bottle/tequila, +/obj/item/reagent_containers/drinks/bottle/tequila, /obj/effect/spawner/random_spawners/dirt_often, /obj/structure/closet/crate/wooden/wooden_crate, /turf/simulated/floor/wood/oak, @@ -8805,12 +8805,12 @@ "lfb" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/candy/donor, -/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/candy/donor, +/obj/item/food/snacks/candy/donor, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "lfj" = ( @@ -8876,19 +8876,19 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "liO" = ( -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -11; pixel_x = -11 }, -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -23; pixel_x = 9 }, -/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, -/obj/item/reagent_containers/food/snacks/grown/mushroom/reishi{ +/obj/item/food/snacks/grown/mushroom/libertycap, +/obj/item/food/snacks/grown/mushroom/reishi{ pixel_x = -7 }, -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, +/obj/item/food/snacks/grown/mushroom/amanita, /obj/structure/stone_tile/block/cracked, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) @@ -8955,7 +8955,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "lms" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 2; icon_state = "broken"; icon_screen = "broken"; @@ -9991,7 +9991,7 @@ /area/awaymission/jungle_planet/inside/complex) "mBN" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plating/asteroid/ancient{ name = "ground" }, @@ -10197,8 +10197,8 @@ /area/awaymission/jungle_planet/outside/cave) "mMo" = ( /obj/structure/closet/crate/wooden/barrel, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) @@ -10306,7 +10306,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "mSW" = ( -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/effect/spawner/random_spawners/dirt_often, /obj/structure/closet/crate/wooden/wooden_crate, /obj/effect/landmark/damageturf, @@ -10566,7 +10566,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) "nhA" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "computer"; @@ -10613,7 +10613,7 @@ /area/awaymission/jungle_planet/outside/abandoned) "njL" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/monkeysdelight, +/obj/item/food/snacks/monkeysdelight, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "njP" = ( @@ -10630,8 +10630,8 @@ /area/awaymission/jungle_planet/outside/river) "nok" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, +/obj/item/reagent_containers/drinks/mushroom_bowl, +/obj/item/food/snacks/grown/mushroom/chanterelle, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "nou" = ( @@ -11118,7 +11118,7 @@ /turf/simulated/floor/mineral/plastitanium, /area/awaymission/jungle_planet/outside/abandoned) "nZe" = ( -/obj/item/reagent_containers/food/drinks/trophy/silver_cup, +/obj/item/reagent_containers/drinks/trophy/silver_cup, /obj/item/clothing/gloves/ring/gold, /obj/effect/spawner/random_spawners/dirt_often, /obj/structure/closet/crate/wooden/wooden_crate, @@ -11269,7 +11269,7 @@ /turf/simulated/floor/beach/away/sand, /area/awaymission/jungle_planet/outside/waterfall) "oke" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/beach/away/sand, /area/awaymission/jungle_planet/outside/river) "okx" = ( @@ -11299,11 +11299,11 @@ "omT" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/grown/cannabis, -/obj/item/reagent_containers/food/snacks/grown/cannabis, -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate, -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate, -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate, +/obj/item/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis/ultimate, +/obj/item/food/snacks/grown/cannabis/ultimate, +/obj/item/food/snacks/grown/cannabis/ultimate, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) @@ -11736,7 +11736,7 @@ "oMg" = ( /obj/structure/table/wood, /obj/item/storage/fancy/cigarettes/cigpack_robust, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer" = 0); pixel_x = -11; pixel_y = 2 @@ -11877,7 +11877,7 @@ /area/awaymission/jungle_planet/inside/complex) "oTJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -11; pixel_x = -11 }, @@ -12205,7 +12205,7 @@ /obj/structure/table, /obj/item/wrench, /obj/item/screwdriver, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "Its cold like the space outside noo!"; pixel_x = -6; pixel_y = 8; @@ -12632,7 +12632,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) "pZY" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "qaT" = ( @@ -12715,11 +12715,11 @@ /area/awaymission/jungle_planet/outside/cave) "qgA" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/drinks/bottle/cream, +/obj/item/reagent_containers/drinks/bottle/cream, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -12818,7 +12818,7 @@ /area/awaymission/jungle_planet/inside/complex) "qmr" = ( /obj/structure/table, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "laptop"; @@ -13291,11 +13291,11 @@ /area/awaymission/jungle_planet/inside/complex) "qOH" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat{ +/obj/item/food/snacks/meat{ pixel_y = -22; pixel_x = -7 }, -/obj/item/reagent_containers/food/snacks/monkeysdelight, +/obj/item/food/snacks/monkeysdelight, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "qOM" = ( @@ -13415,7 +13415,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "qVg" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_state = "broken"; icon_screen = "broken"; @@ -13438,7 +13438,7 @@ /area/awaymission/jungle_planet/inside/complex) "qVY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "qVZ" = ( @@ -13580,7 +13580,7 @@ }, /obj/item/coin/gold, /obj/item/clothing/mask/cigarette/pipe/cobpipe, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /turf/simulated/floor/wood/oak, @@ -13944,7 +13944,7 @@ /area/awaymission/jungle_planet/inside/complex) "rBr" = ( /obj/structure/chair/office/dark, -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_keyboard = ""; icon_screen = "telescreen"; @@ -14011,7 +14011,7 @@ /area/awaymission/jungle_planet/outside/abandoned) "rHT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/item/storage/fancy/matches, /obj/effect/decal/cleanable/cobweb2, /obj/item/clothing/mask/cigarette/pipe, @@ -14846,8 +14846,8 @@ /area/awaymission/jungle_planet/inside/complex) "sDQ" = ( /obj/structure/stone_tile/slab/cracked, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy/geranium, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "sFa" = ( @@ -14884,8 +14884,8 @@ /area/awaymission/jungle_planet/outside/cave/pirate) "sIz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/shaker, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -4 }, /obj/effect/spawner/random_spawners/dirt_maybe, @@ -15039,7 +15039,7 @@ }, /area/awaymission/jungle_planet/outside/river) "sRJ" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; name = "broken computer" }, @@ -15220,13 +15220,13 @@ }, /area/awaymission/jungle_planet/outside/river) "tey" = ( -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /obj/effect/decal/cleanable/cobweb2, /obj/structure/closet/crate/wooden/wooden_crate, /turf/simulated/floor/wood/oak, @@ -17310,7 +17310,7 @@ /area/awaymission/jungle_planet/outside/cave) "vCb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/fried_vox{ +/obj/item/food/snacks/fried_vox{ pixel_y = 5 }, /turf/simulated/floor/wood/oak, @@ -17409,7 +17409,7 @@ pixel_x = -3; pixel_y = 18 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "vHh" = ( @@ -18249,7 +18249,7 @@ /area/awaymission/jungle_planet/inside) "wMk" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ list_reagents = list("rum" = 50) }, /turf/simulated/floor/wood/oak, @@ -18702,8 +18702,8 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "xmJ" = ( -/obj/item/reagent_containers/food/drinks/mushroom_bowl, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/reagent_containers/drinks/mushroom_bowl, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "xmQ" = ( @@ -19008,7 +19008,7 @@ }, /area/awaymission/jungle_planet/inside) "xJT" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ icon_state = "computer"; dir = 8; name = "arrival console" @@ -19184,7 +19184,7 @@ /obj/structure/table/wood, /obj/item/flashlight/lamp, /obj/item/pen/fancy, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ list_reagents = list("whiskey" = 0); pixel_x = -9 }, @@ -19192,8 +19192,8 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) "xSz" = ( -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /obj/structure/closet/crate/wooden/wooden_crate, diff --git a/_maps/map_files220/RandomZLevels/wildwest.dmm b/_maps/map_files220/RandomZLevels/wildwest.dmm index 4721a0588752..8b1697467a94 100644 --- a/_maps/map_files220/RandomZLevels/wildwest.dmm +++ b/_maps/map_files220/RandomZLevels/wildwest.dmm @@ -130,7 +130,7 @@ /area/awaymission/wildwest/wildwest_refine) "bd" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/utensil/fork, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) @@ -783,7 +783,7 @@ /obj/structure/table, /obj/item/megaphone, /obj/structure/extinguisher_cabinet/directional/east, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/item/folder/yellow{ pixel_x = 2; pixel_y = 2 @@ -1006,7 +1006,7 @@ /area/awaymission/wildwest/wildwest_refine) "jM" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "jP" = ( @@ -1156,16 +1156,16 @@ /area/awaymission/wildwest/wildwest_vault) "ll" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5; pixel_x = 8; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, @@ -1608,8 +1608,8 @@ /area/awaymission/wildwest/wildwest_vault) "oR" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/drinkingglass/soda, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, /turf/simulated/floor/wood/oak, @@ -1641,11 +1641,11 @@ "ps" = ( /obj/structure/table/holotable/wood, /obj/item/reagent_containers/glass/rag, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/shaker, +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 11; pixel_y = 3 }, @@ -1686,7 +1686,7 @@ /turf/simulated/floor, /area/awaymission/wildwest/wildwest_refine) "pQ" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 8; icon_keyboard = "syndie_key"; icon_screen = "syndinavigation" @@ -2288,7 +2288,7 @@ /area/awaymission/wildwest/wildwest_mines) "vL" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/wildwest/wildwest_refine) "wh" = ( @@ -2305,7 +2305,7 @@ /turf/simulated/wall/mineral/sandstone, /area/awaymission/wildwest/wildwest_mines) "wk" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -2515,7 +2515,7 @@ /area/awaymission/wildwest/wildwest_mines) "yH" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "yK" = ( @@ -2525,7 +2525,7 @@ /area/awaymission/wildwest/wildwest_mines) "yP" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, /obj/effect/decal/cleanable/dirt, @@ -2890,7 +2890,7 @@ /area/awaymission/wildwest/wildwest_vault) "Cw" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 11 }, /obj/structure/sign/poster/official/random/south, @@ -3401,7 +3401,7 @@ /area/awaymission/wildwest/wildwest_mines) "Hj" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "Hm" = ( @@ -3799,7 +3799,7 @@ /turf/simulated/floor/carpet/orange, /area/awaymission/wildwest/wildwest_mines) "Md" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4 }, /turf/simulated/floor/wood/oak, @@ -4150,7 +4150,7 @@ /area/awaymission/wildwest/wildwest_mines) "Pz" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/utensil/spoon, /obj/item/kitchen/utensil/fork{ pixel_x = 6 @@ -4400,7 +4400,7 @@ }, /area/awaymission/wildwest/wildwest_mines) "Sf" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 4; icon_keyboard = "syndie_key"; icon_screen = "syndinavigation" @@ -4419,10 +4419,10 @@ /area/awaymission/wildwest/wildwest_mines) "Sq" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "Sr" = ( @@ -4732,7 +4732,7 @@ /area/awaymission/wildwest/wildwest_mines) "VG" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/utensil/fork, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/oak, @@ -4769,7 +4769,7 @@ "VW" = ( /obj/structure/table/holotable/wood, /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, /turf/simulated/floor/wood/oak, @@ -5094,7 +5094,7 @@ /area/awaymission/wildwest/wildwest_mines) "ZG" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) diff --git a/_maps/map_files220/cyberiad/cyberiad.dmm b/_maps/map_files220/cyberiad/cyberiad.dmm index 14f84816fd05..f9305dbb456a 100644 --- a/_maps/map_files220/cyberiad/cyberiad.dmm +++ b/_maps/map_files220/cyberiad/cyberiad.dmm @@ -137,7 +137,7 @@ }, /area/station/security/armory/secure) "abP" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 1 }, @@ -427,7 +427,7 @@ }, /area/station/security/armory/secure) "adh" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/window/reinforced{ dir = 1 }, @@ -481,9 +481,8 @@ /turf/simulated/floor/plasteel, /area/station/security/permabrig) "adp" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Unisex Restrooms" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -525,7 +524,7 @@ }, /area/station/security/main) "adH" = ( -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -688,9 +687,9 @@ "aem" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; - locked = 1; - name = "Labor Camp Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, @@ -756,7 +755,7 @@ /area/station/security/main) "aeC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -1022,7 +1021,6 @@ /area/station/engineering/control) "afV" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, @@ -1147,7 +1145,6 @@ /area/station/security/brig) "agZ" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, @@ -1158,9 +1155,9 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/multi_tile/security/glass{ - name = "Labor Camp Transfer" - }, +/obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -1672,6 +1669,7 @@ }, /obj/structure/chair/stool, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "ajg" = ( @@ -1991,10 +1989,9 @@ /area/station/security/range) "akC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Evidence Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2099,9 +2096,8 @@ /area/station/legal/lawoffice) "ald" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/lawyer/glass{ - name = "Internal Affairs Office" - }, +/obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" @@ -2194,7 +2190,6 @@ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -2228,11 +2223,11 @@ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/airlock/multi_tile/security/glass{ - id_tag = "BrigLeft"; - name = "Brig Foyer Left Entrance" + id_tag = "BrigLeft" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -2347,9 +2342,9 @@ "alR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ - id_tag = "Brig"; - name = "Prisoner Processing" + id_tag = "Brig" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -2382,9 +2377,8 @@ /area/station/security/evidence) "alT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Warden's Office" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2409,9 +2403,8 @@ /area/station/security/warden) "alV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Warden's Office" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2441,10 +2434,10 @@ dir = 1; name = "Secure Armory" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general, /obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2489,15 +2482,15 @@ /area/station/security/main) "ame" = ( /obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/maintenance/fore) "amf" = ( @@ -2603,11 +2596,11 @@ name = "Security Blast Door" }, /obj/machinery/door/window/classic/reversed, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot, /obj/structure/plasticflaps{ opacity = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "amy" = ( @@ -2831,15 +2824,16 @@ id = "HoS" }, /obj/machinery/door/airlock/command/hos/glass{ - id_tag = "hosofficedoor"; - name = "Head of Security" + id_tag = "hosofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/any/security/hos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/hos, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2918,6 +2912,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -3100,10 +3095,7 @@ /area/station/security/lobby) "anZ" = ( /obj/structure/table, -/obj/item/camera{ - pixel_x = 3; - pixel_y = -4 - }, +/obj/item/camera, /obj/item/taperecorder{ pixel_x = -4; pixel_y = 2 @@ -3257,12 +3249,12 @@ /turf/simulated/floor/plasteel, /area/station/security/storage) "aoC" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/security/glass{ - dir = 2; - name = "Equipment Storage" + dir = 2 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -3273,11 +3265,16 @@ "aoL" = ( /obj/structure/table, /obj/item/taperecorder, -/obj/machinery/light_switch/west, /obj/item/radio/intercom/department/security{ pixel_y = 22 }, /obj/machinery/light/directional/north, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel, /area/station/security/main) "aoM" = ( @@ -3395,10 +3392,7 @@ /area/station/security/prison/cell_block/A) "apa" = ( /obj/structure/table, -/obj/item/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "Camera" - }, +/obj/item/camera, /turf/simulated/floor/plasteel, /area/station/security/processing) "apc" = ( @@ -3557,7 +3551,7 @@ req_one_access_txt = "63" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/doors{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -3690,7 +3684,6 @@ /area/station/security/storage) "apT" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3806,10 +3799,9 @@ /area/station/security/warden) "aqy" = ( /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/machinery/door/airlock/multi_tile/security/glass{ - name = "Equipment Storage" - }, /turf/simulated/floor/plasteel, /area/station/security/storage) "aqE" = ( @@ -3842,10 +3834,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/command/hos{ - name = "Head of Security" - }, +/obj/machinery/door/airlock/command/hos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/security/hos, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -4251,6 +4243,7 @@ /area/station/security/permabrig) "ass" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plating, @@ -4537,7 +4530,7 @@ dir = 8; req_one_access_txt = "63" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/doors{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -4546,16 +4539,16 @@ /area/station/security/evidence) "atr" = ( /obj/machinery/door/airlock{ - id_tag = "secmaintdorm1"; - name = "Room 1" + id_tag = "secmaintdorm1" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fore) "ats" = ( /obj/machinery/door/airlock{ - id_tag = "secmaintdorm2"; - name = "Room 2" + id_tag = "secmaintdorm2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fore) "att" = ( @@ -4593,9 +4586,8 @@ }, /area/station/security/brig) "atA" = ( -/obj/machinery/door/airlock/silver{ - name = "Prison Showers" - }, +/obj/machinery/door/airlock/silver, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ @@ -4651,9 +4643,8 @@ }, /area/station/security/brig) "atO" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Prison Forestry" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4884,7 +4875,8 @@ "auJ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ - name = "Security Reception" + name = "Security Reception"; + dir = 1 }, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; @@ -4895,7 +4887,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general, /obj/item/paper_bin{ pixel_y = 3; pixel_x = -4 @@ -4904,6 +4895,9 @@ pixel_x = -2; pixel_y = 5 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -5016,9 +5010,11 @@ dir = 4 }, /obj/machinery/light/directional/west, -/obj/machinery/button/windowtint/west{ - id = "Processing"; - req_one_access_txt = "63" +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_x = -30 }, /turf/simulated/floor/plasteel, /area/station/security/processing) @@ -5043,6 +5039,10 @@ "auW" = ( /obj/machinery/power/apc/directional/east, /obj/structure/cable, +/obj/machinery/button/windowtint/south{ + id = "Processing"; + req_one_access_txt = "63" + }, /turf/simulated/floor/plasteel, /area/station/security/processing) "auX" = ( @@ -5206,9 +5206,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "avs" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fore) "avt" = ( @@ -5218,9 +5217,9 @@ name = "escape pod 3" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_3) "avu" = ( @@ -5353,7 +5352,6 @@ /area/station/security/prison/cell_block/A) "awa" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkredcorners" @@ -5368,7 +5366,6 @@ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkredcorners" @@ -5385,11 +5382,11 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "Processing" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/airlock/security/glass{ - id_tag = "Brig"; - name = "Prisoner Processing" + id_tag = "Brig" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -5531,12 +5528,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/airlock/multi_tile/security/glass{ dir = 2; - id_tag = "BrigEast"; - name = "Brig East Entrance" + id_tag = "BrigEast" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkredcorners" @@ -5771,11 +5768,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/airlock/multi_tile/security/glass{ - dir = 2; - name = "Brig" + dir = 2 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ icon_state = "darkredcorners" }, @@ -5857,11 +5854,11 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "Processing" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/airlock/security/glass{ - id_tag = "Brig"; - name = "Prisoner Processing" + id_tag = "Brig" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -5910,7 +5907,7 @@ /obj/item/radio{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /turf/simulated/floor/plating, /area/station/maintenance/fore) "axX" = ( @@ -6081,11 +6078,7 @@ /obj/item/camera_film{ pixel_y = 7 }, -/obj/item/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "detectives camera"; - pixel_y = 2 - }, +/obj/item/camera/detective, /turf/simulated/floor/wood/oak, /area/station/security/detective) "ayB" = ( @@ -6150,7 +6143,7 @@ "ayM" = ( /obj/machinery/light/directional/south, /obj/machinery/ai_status_display/south, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -6288,9 +6281,8 @@ /area/station/security/interrogation/observation) "azd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Interrogation" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -6306,7 +6298,7 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "Interrogation" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -6441,10 +6433,10 @@ }, /obj/effect/turf_decal/delivery/red, /obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 4 + dir = 8 }, /obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -6467,9 +6459,8 @@ }, /area/station/security/execution) "azy" = ( -/obj/machinery/door/airlock/security{ - name = "Prisoner Re-education Centre" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -6601,13 +6592,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/security{ - name = "Interrogation" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -7223,11 +7213,10 @@ }, /area/station/security/execution) "aBR" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/fore) "aBS" = ( @@ -7293,9 +7282,8 @@ /area/station/legal/lawoffice) "aCc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/lawyer/glass{ - name = "Internal Affairs Office" - }, +/obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "IAA" }, @@ -7602,7 +7590,7 @@ /area/station/maintenance/abandonedbar) "aCW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, /obj/machinery/light_construct/small/east, /turf/simulated/floor/plating, @@ -7616,10 +7604,7 @@ /area/station/hallway/primary/fore) "aDb" = ( /obj/structure/table, -/obj/item/camera{ - pixel_x = 3; - pixel_y = -4 - }, +/obj/item/camera, /obj/machinery/door_control/shutter/north{ id = "brig_courtroom"; name = "Brig Courtroom Shutter Control"; @@ -7731,7 +7716,7 @@ "aDq" = ( /obj/effect/decal/cleanable/dust, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/cheesewedge, +/obj/item/food/snacks/cheesewedge, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aDr" = ( @@ -7839,7 +7824,7 @@ /obj/item/clothing/suit/wcoat, /obj/item/clothing/suit/blacktrenchcoat, /obj/item/clothing/under/suit/tan, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aDD" = ( @@ -7876,19 +7861,19 @@ "aDI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ - name = "Prison Wing"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/poddoor/shutters{ id_tag = "brig_courtroom"; name = "Brig Courtroom Shutters" }, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -8150,11 +8135,10 @@ /area/station/maintenance/fpmaint2) "aEL" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/door/airlock/atmos{ - name = "Fore-Port Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aEN" = ( @@ -8234,7 +8218,7 @@ /obj/structure/sign/poster/contraband/random/east, /obj/structure/sink/kitchen/east, /obj/structure/closet/walllocker/medlocker/south, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 2 }, @@ -8243,8 +8227,8 @@ /area/station/maintenance/abandonedbar) "aFb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "aFc" = ( @@ -8385,7 +8369,7 @@ /obj/item/clothing/glasses/sunglasses{ pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/flask/detflask{ +/obj/item/reagent_containers/drinks/flask/detflask{ pixel_x = 16; pixel_y = 4 }, @@ -8427,9 +8411,8 @@ /area/station/hallway/primary/fore) "aFG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Detective's Office" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" @@ -8784,6 +8767,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/landmark/start/barber, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -8822,6 +8806,7 @@ c_tag = "Arcade" }, /obj/machinery/firealarm/directional/north, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "aGQ" = ( @@ -8833,6 +8818,7 @@ dir = 8 }, /obj/machinery/newscaster/directional/north, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "aGT" = ( @@ -8913,9 +8899,8 @@ /turf/simulated/wall/r_wall, /area/station/maintenance/fpmaint2) "aHh" = ( -/obj/machinery/door/airlock/engineering{ - name = "Fore Port Solar Access" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -8955,11 +8940,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/wall, /area/station/maintenance/fpmaint2) -"aHp" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/fore) "aHq" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "HoS" @@ -9007,7 +8987,7 @@ /area/station/legal/courtroom) "aHx" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/item/radio/intercom/directional/west, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ @@ -9148,9 +9128,6 @@ name = "Forensic laboratory"; dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/forensics{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -9358,9 +9335,8 @@ /area/station/maintenance/fpmaint2) "aIM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/lawyer/glass{ - name = "Magistrate's Office" - }, +/obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Magistrate" }, @@ -9424,7 +9400,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/window/basic, @@ -9436,8 +9412,8 @@ "aIY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "aJa" = ( @@ -9544,6 +9520,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/start/barber, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -9734,7 +9711,7 @@ /area/station/maintenance/fpmaint) "aKl" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -9773,9 +9750,9 @@ "aKx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/lawyer/glass{ - id_tag = "magistrateofficedoor"; - name = "Magistrate's Office" + id_tag = "magistrateofficedoor" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Magistrate" }, @@ -9808,9 +9785,9 @@ /area/station/hallway/primary/fore) "aKE" = ( /obj/machinery/door/airlock/maintenance{ - name = "Detective Maintenance"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -9849,6 +9826,7 @@ /obj/machinery/computer/mob_healer_terminal{ pixel_x = -30 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "aKK" = ( @@ -9973,18 +9951,17 @@ /area/shuttle/pod_2) "aLh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Detective" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Detective" }, -/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -9996,12 +9973,13 @@ /area/station/maintenance/fpmaint2) "aLn" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/landmark/damageturf, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/wood/oak, /area/station/maintenance/fpmaint2) "aLr" = ( @@ -10069,7 +10047,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aLG" = ( -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -10189,9 +10167,8 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aMg" = ( -/obj/machinery/door/airlock/engineering{ - name = "Electrical Maintenance" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -10203,7 +10180,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/maintenance/electrical) "aMi" = ( @@ -10243,6 +10220,7 @@ /area/station/maintenance/aft) "aMn" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -10446,6 +10424,7 @@ /area/station/maintenance/fsmaint) "aNi" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -10491,9 +10470,9 @@ name = "escape pod 1" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_1) "aNu" = ( @@ -10524,9 +10503,9 @@ name = "escape pod 2" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_2) "aNA" = ( @@ -10651,10 +10630,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "darkyellow" }, @@ -10666,6 +10645,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/carpet, /area/station/public/mrchangs) "aOn" = ( @@ -10676,7 +10656,7 @@ /area/station/maintenance/fpmaint2) "aOo" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -10705,15 +10685,15 @@ /area/station/maintenance/fpmaint) "aOv" = ( /obj/machinery/door/airlock/maintenance{ - name = "Courtroom Maintenance"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aOw" = ( @@ -10721,7 +10701,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/cable{ @@ -10778,7 +10758,7 @@ }, /area/station/security/interrogation) "aOF" = ( -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aOI" = ( @@ -10869,7 +10849,7 @@ "aPa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/item/clothing/mask/face/fox, /turf/simulated/floor/plasteel, /area/station/maintenance/fpmaint2) @@ -10885,21 +10865,20 @@ }, /obj/machinery/door/airlock/external{ id_tag = "apsolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/north{ autolink_id = "apsolar_btn_ext"; req_one_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "aPe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Barber Shop" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -10918,9 +10897,8 @@ /area/station/public/arcade) "aPg" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Arcade" - }, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -11160,9 +11138,8 @@ }, /area/station/hallway/secondary/entry) "aPZ" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/caution, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) @@ -11546,7 +11523,7 @@ /obj/machinery/computer/mob_healer_terminal{ pixel_y = 30 }, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ list_reagents = list("tea"=15); pixel_x = 4; pixel_y = 2 @@ -11685,7 +11662,8 @@ "aRC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aRF" = ( @@ -11761,9 +11739,8 @@ /turf/simulated/floor/wood/fancy, /area/station/legal/courtroom) "aRU" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Airlock" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "aRV" = ( @@ -11865,7 +11842,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aSp" = ( @@ -11940,9 +11917,8 @@ /area/station/service/hydroponics) "aSR" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Kitchen Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -12109,6 +12085,7 @@ /obj/structure/chair{ dir = 4 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -12121,6 +12098,7 @@ /obj/structure/window/reinforced{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/oak, /area/station/public/dorms) "aTF" = ( @@ -12134,6 +12112,7 @@ /obj/structure/window/reinforced{ dir = 1 }, +/obj/effect/landmark/start/bath, /turf/simulated/floor/wood/oak, /area/station/public/dorms) "aTI" = ( @@ -12169,9 +12148,9 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance" + id_tag = "MedbayFoyerPort" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -12569,15 +12548,14 @@ /turf/space, /area/station/hallway/secondary/entry) "aVa" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aVc" = ( @@ -12601,9 +12579,8 @@ /area/station/public/storage/tools) "aVh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/storage/tools) "aVi" = ( @@ -12743,16 +12720,6 @@ icon_state = "whiteblue" }, /area/station/medical/reception) -"aVL" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint2) "aVN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -12786,6 +12753,7 @@ /area/shuttle/arrival/station) "aVX" = ( /obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) @@ -12852,7 +12820,7 @@ dir = 9; icon_state = "darkblue" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "aWh" = ( /obj/machinery/requests_console{ department = "Security"; @@ -13014,6 +12982,7 @@ /obj/structure/chair/sofa/right{ dir = 4 }, +/obj/effect/landmark/start/bath, /turf/simulated/floor/wood/oak, /area/station/public/dorms) "aWD" = ( @@ -13190,9 +13159,8 @@ }, /area/station/service/chapel/office) "aXd" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Crematorium Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -13427,9 +13395,8 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "aXL" = ( -/obj/machinery/door/airlock{ - name = "Garden" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "aXM" = ( @@ -13635,6 +13602,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/eva, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -13663,6 +13631,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/eva, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -13929,7 +13898,7 @@ /obj/machinery/light_switch/south, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -13976,9 +13945,8 @@ }, /area/station/public/dorms) "aZx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/hallway/primary/fore) @@ -13994,6 +13962,7 @@ /obj/structure/chair{ dir = 4 }, +/obj/effect/landmark/start/bath, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "arrival" @@ -14096,7 +14065,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "baa" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bab" = ( @@ -14123,14 +14092,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bah" = ( -/obj/machinery/suit_storage_unit/clown, +/obj/machinery/suit_storage_unit/clown/secure, /obj/effect/turf_decal/delivery/blue/hollow, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/ai_monitored/storage/eva) "bai" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /obj/effect/turf_decal/delivery/blue/hollow, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -14268,9 +14237,8 @@ }, /area/station/service/chapel) "baE" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -14289,9 +14257,8 @@ /area/station/security/prison/cell_block/A) "baI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Crematorium" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/crematorium, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -14306,9 +14273,9 @@ "baM" = ( /obj/machinery/door/airlock/public/glass{ id_tag = "vipbar_bolt"; - locked = 1; - name = "ViP Room" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -14338,6 +14305,7 @@ /obj/machinery/door/airlock/vault{ locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -14354,9 +14322,9 @@ "bbg" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ - id_tag = "Cryogenics"; - name = "Cryodorms" + id_tag = "Cryogenics" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -14477,7 +14445,7 @@ /area/station/maintenance/fpmaint) "bbH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bbI" = ( @@ -14498,7 +14466,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bbJ" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/item/storage/backpack/duffel/clown, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) @@ -14651,6 +14619,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/oak, /area/station/service/library) "bck" = ( @@ -14733,7 +14702,7 @@ "bcu" = ( /obj/structure/table/wood, /obj/item/pen, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /obj/machinery/light/directional/north, /turf/simulated/floor/carpet/black, /area/station/service/chapel/office) @@ -14879,9 +14848,8 @@ /area/station/hallway/secondary/entry) "bcX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/security/general, @@ -15111,9 +15079,9 @@ /area/station/hallway/secondary/garden) "bdI" = ( /obj/machinery/door/airlock/multi_tile/glass{ - dir = 1; - name = "Dormitories" + dir = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -15123,11 +15091,6 @@ /turf/simulated/floor/plasteel, /area/station/public/dorms) "bdK" = ( -/obj/machinery/access_button{ - autolink_id = "evamaint_btn_int"; - pixel_y = 25; - req_one_access_txt = "13" - }, /obj/structure/cable{ d1 = 2; d2 = 8; @@ -15387,9 +15350,8 @@ /area/station/hallway/secondary/garden) "beQ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Garden" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/garden) "beR" = ( @@ -15398,9 +15360,8 @@ /area/station/public/storage/tools) "beX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "E.V.A." - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -15473,6 +15434,13 @@ icon_state = "neutralcorner" }, /area/station/public/dorms) +"bfl" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "bfo" = ( /obj/effect/turf_decal/delivery/white, /obj/machinery/kitchen_machine/oven{ @@ -15713,8 +15681,8 @@ /area/station/service/chapel) "bgj" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/food/snacks/chips, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/carpet, /area/station/hallway/secondary/entry) "bgk" = ( @@ -15991,9 +15959,8 @@ }, /area/station/hallway/primary/central/north) "bgZ" = ( -/obj/machinery/door/airlock/tranquillite{ - name = "Mime's Office" - }, +/obj/machinery/door/airlock/tranquillite, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/mime, /turf/simulated/floor/mineral/tranquillite, /area/station/service/mime) @@ -16044,6 +16011,12 @@ name = "Hydroponics Delivery"; req_one_access_txt = "35" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -16064,6 +16037,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/oak, /area/station/service/library) "bhz" = ( @@ -16184,6 +16158,7 @@ /area/station/hallway/primary/central/north) "bhX" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dust, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -16241,9 +16216,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bir" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Chapel Office Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -16368,6 +16342,7 @@ /obj/structure/chair/wood{ dir = 4 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet, /area/station/public/mrchangs) "biQ" = ( @@ -16381,6 +16356,7 @@ /obj/structure/chair/wood{ dir = 8 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet, /area/station/public/mrchangs) "biT" = ( @@ -16399,13 +16375,11 @@ /turf/simulated/floor/carpet/black, /area/station/command/meeting_room) "bjg" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Chapel Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bji" = ( @@ -16522,7 +16496,7 @@ }, /obj/machinery/alarm/directional/north, /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 8; pixel_y = 8 }, @@ -16663,9 +16637,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "bks" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/nw) @@ -16714,9 +16687,8 @@ dir = 4; pixel_y = -25 }, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/west) @@ -17055,9 +17027,8 @@ }, /area/station/service/expedition) "bml" = ( -/obj/machinery/door/airlock/maintenance{ - name = "E.V.A. Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -17383,10 +17354,7 @@ }, /area/station/command/bridge) "bnr" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, +/obj/structure/closet/wardrobe/mixed, /turf/simulated/floor/plasteel, /area/station/public/locker) "bns" = ( @@ -17421,8 +17389,10 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bnv" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/portable/pump, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/north, /turf/simulated/floor/plasteel, /area/station/public/locker) "bnw" = ( @@ -17431,10 +17401,12 @@ /area/station/maintenance/port) "bny" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -17446,15 +17418,18 @@ /turf/simulated/floor/plating, /area/station/public/storage/emergency/port) "bnA" = ( -/obj/machinery/light_switch/north, +/obj/structure/closet/wardrobe/xenos, +/obj/machinery/firealarm/directional/north, /turf/simulated/floor/plasteel, /area/station/public/locker) "bnB" = ( /obj/machinery/economy/vending/cola, +/obj/machinery/light/directional/north, /turf/simulated/floor/plasteel, /area/station/public/locker) "bnC" = ( /obj/machinery/economy/vending/artvend, +/obj/machinery/light_switch/north, /turf/simulated/floor/plasteel, /area/station/public/locker) "bnD" = ( @@ -17702,9 +17677,9 @@ /obj/machinery/door/airlock/external{ hackProof = 1; id_tag = "emergency_home"; - locked = 1; - name = "Escape Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -17767,11 +17742,12 @@ /area/station/medical/morgue) "boZ" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/public/locker) "bpa" = ( -/obj/effect/turf_decal/delivery, +/obj/structure/closet/wardrobe/white, /turf/simulated/floor/plasteel, /area/station/public/locker) "bpb" = ( @@ -17795,6 +17771,10 @@ /area/station/public/locker) "bpe" = ( /obj/structure/sign/poster/official/random/east, +/obj/machinery/camera{ + c_tag = "Locker Room East"; + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/public/locker) "bpf" = ( @@ -17994,14 +17974,12 @@ }, /area/station/service/chapel) "bqj" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Library Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/library, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bql" = ( @@ -18010,9 +17988,8 @@ /area/station/hallway/primary/port) "bqm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Mr. Chang's" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -18053,15 +18030,24 @@ }, /area/station/hallway/primary/central/ne) "bqu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/structure/window/reinforced{ dir = 1 }, -/obj/structure/closet/wardrobe/xenos, -/turf/simulated/floor/plasteel, -/area/station/public/locker) +/obj/structure/window/reinforced, +/obj/machinery/door/window/classic/reversed{ + dir = 8; + name = "Research Division Delivery" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/science/rnd) "bqv" = ( /obj/structure/chair/stool{ dir = 4 @@ -18083,10 +18069,6 @@ "bqz" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/alarm/directional/east, -/obj/machinery/camera{ - c_tag = "Locker Room East"; - dir = 8 - }, /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel, /area/station/public/locker) @@ -18562,10 +18544,9 @@ "bsD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ - locked = 1; - name = "Assembly Line (KEEP OUT)" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -18578,6 +18559,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/maintenance/assembly_line) "bsE" = ( @@ -18809,10 +18791,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "btO" = ( -/obj/machinery/camera{ - c_tag = "Locker Room West"; - dir = 1 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -18965,7 +18943,6 @@ /area/station/maintenance/fpmaint) "buQ" = ( /obj/machinery/door/airlock/command/glass, -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18974,6 +18951,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel, /area/station/command/bridge) "buS" = ( @@ -19003,9 +18981,8 @@ /area/station/public/vacant_office) "bva" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/carpet, /area/station/service/chapel) "bvb" = ( @@ -19051,6 +19028,7 @@ id_tag = "ferry_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "bvm" = ( @@ -19130,9 +19108,8 @@ /area/station/hallway/primary/central/ne) "bvN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Chapel Office" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -19195,10 +19172,10 @@ /turf/simulated/floor/wood/fancy/oak, /area/station/command/meeting_room) "bvX" = ( -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -19254,9 +19231,8 @@ }, /area/station/hallway/primary/central/ne) "bwt" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Auxiliary Tool Storage" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -19284,7 +19260,7 @@ /area/station/maintenance/port) "bwA" = ( /obj/effect/decal/cleanable/dust, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /obj/effect/decal/cleanable/glass, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9 @@ -19369,20 +19345,25 @@ pixel_y = 8 }, /obj/machinery/light/small/directional/west, +/obj/machinery/door_control/bolt_control/south{ + id = "toilet_ass1" + }, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bwQ" = ( /obj/machinery/door/airlock{ - name = "Unit 1" + id_tag = "toilet_ass3" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bwS" = ( /obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -19400,11 +19381,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/command/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel, /area/station/command/bridge) "bwW" = ( @@ -19424,9 +19404,8 @@ /turf/simulated/wall, /area/station/supply/storage) "bxc" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Bay Warehouse Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/maintenance/port) @@ -19517,10 +19496,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield{ dir = 4 }, /turf/simulated/floor/carpet/royalblue, @@ -19631,12 +19613,6 @@ }, /area/station/service/hydroponics) "bxO" = ( -/obj/machinery/turretid/stun{ - control_area = "\improper AI Upload Chamber"; - name = "AI Upload Turret Control"; - pixel_y = -24; - req_access = list(75) - }, /turf/simulated/floor/plasteel{ icon_state = "blue" }, @@ -19768,7 +19744,7 @@ /area/station/public/toilet/lockerroom) "byn" = ( /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "byp" = ( @@ -19779,6 +19755,7 @@ /area/station/public/locker) "byq" = ( /obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -19790,11 +19767,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/command/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel, /area/station/command/bridge) "byr" = ( @@ -19933,24 +19909,18 @@ }, /obj/machinery/light/small/directional/west, /obj/effect/landmark/start/assistant, -/turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" - }, -/area/station/public/toilet/lockerroom) -"bzv" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" +/obj/machinery/door_control/bolt_control/south{ + id = "toilet_ass2" }, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bzx" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Escape Shuttle Cell" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -19972,9 +19942,8 @@ /area/station/supply/storage) "bzD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Escape Shuttle Cell" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/corner, /obj/structure/cable{ d1 = 1; @@ -19983,7 +19952,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -20071,9 +20040,8 @@ }, /area/station/maintenance/apmaint) "bzQ" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -20082,7 +20050,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bzT" = ( @@ -20105,6 +20073,7 @@ /area/station/command/office/ntrep) "bAc" = ( /obj/machinery/door/airlock/command/cap, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -20113,13 +20082,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/command/captain, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/fancy/cherry, /area/station/command/office/captain/bedroom) -"bAe" = ( -/obj/machinery/light/directional/south, -/turf/simulated/floor/plasteel, -/area/station/public/locker) "bAf" = ( /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/east) @@ -20132,9 +20096,8 @@ dir = 1; pixel_y = 39 }, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/sign/directions/bridge{ dir = 8; @@ -20148,6 +20111,7 @@ dir = 8; pixel_x = -5 }, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -20233,6 +20197,7 @@ "bAD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -20241,7 +20206,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -20308,9 +20272,8 @@ /area/station/hallway/primary/starboard/east) "bAX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Library" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/carpet, /area/station/service/library) "bAY" = ( @@ -20362,9 +20325,8 @@ }, /area/station/hallway/primary/central/west) "bBr" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Vacant Office" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -20423,7 +20385,7 @@ "bBN" = ( /obj/machinery/light_switch/north, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bBP" = ( @@ -20439,7 +20401,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bBQ" = ( @@ -20474,14 +20436,6 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plasteel, /area/station/maintenance/port) -"bCm" = ( -/obj/machinery/door/airlock{ - name = "Unit 3" - }, -/turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" - }, -/area/station/public/toilet/lockerroom) "bCo" = ( /obj/machinery/atmospherics/binary/valve, /obj/effect/decal/cleanable/dirt, @@ -20497,6 +20451,7 @@ /area/station/maintenance/port) "bCq" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) @@ -20794,8 +20749,11 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/mirror{ + pixel_x = 28 + }, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bDx" = ( @@ -20818,6 +20776,7 @@ id_tag = "specops_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "bDH" = ( @@ -20915,9 +20874,8 @@ /area/station/hallway/primary/central/west) "bEl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/service/chapel) @@ -21021,7 +20979,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bEA" = ( @@ -21052,15 +21010,16 @@ /area/station/medical/morgue) "bEJ" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral2) "bEK" = ( @@ -21299,9 +21258,8 @@ }, /area/station/hallway/primary/central/se) "bFV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Morgue Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -21311,13 +21269,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, -/area/station/medical/morgue) +/area/station/maintenance/asmaint2) "bFW" = ( /obj/machinery/firealarm/directional/east, /turf/simulated/floor/plasteel, @@ -21423,12 +21381,12 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/east) "bGk" = ( -/obj/machinery/light/directional/west, /obj/machinery/hologram/holopad{ pixel_y = 16 }, +/obj/machinery/light/small/directional/west, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bGl" = ( @@ -21690,11 +21648,11 @@ /area/station/supply/office) "bHn" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" @@ -21755,7 +21713,7 @@ /area/station/medical/reception) "bHJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/med{ +/obj/item/reagent_containers/drinks/mug/med{ pixel_x = 7; pixel_y = -10 }, @@ -21765,7 +21723,7 @@ /obj/item/storage/fancy/donut_box{ pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_y = -15; pixel_x = -5 }, @@ -21812,9 +21770,8 @@ /area/station/medical/reception) "bHS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "bHY" = ( @@ -21849,9 +21806,8 @@ /area/station/hallway/secondary/entry) "bIc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Mech Bay" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -22016,7 +21972,7 @@ /obj/structure/table/wood, /obj/item/radio/intercom/directional/south, /obj/item/storage/fancy/matches, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/clothing/mask/cigarette/cigar, /obj/item/razor{ pixel_x = -4; @@ -22138,36 +22094,36 @@ }, /area/station/medical/patients_rooms) "bJc" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -11; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -3; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 11; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 5; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -1; pixel_y = -4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9; pixel_y = -3 @@ -22237,7 +22193,7 @@ /obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "bJA" = ( @@ -22282,6 +22238,7 @@ /area/station/medical/chemistry) "bJJ" = ( /obj/machinery/door/airlock/wood, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -22401,7 +22358,7 @@ /area/station/science/robotics) "bKo" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -22416,8 +22373,9 @@ /area/station/hallway/secondary/entry) "bKs" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -22471,8 +22429,8 @@ /area/station/command/office/hop) "bKQ" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, @@ -22502,9 +22460,8 @@ }, /area/station/engineering/gravitygenerator) "bLj" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering Checkpoint" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -22519,7 +22476,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint2) @@ -22810,8 +22766,8 @@ name = "Body delivery system" }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue, /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -23002,9 +22958,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/maintenance{ - name = "Morgue Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23066,9 +23021,8 @@ }, /area/station/medical/chemistry) "bNH" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Bay Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -23319,9 +23273,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/aft) "bOM" = ( @@ -23589,9 +23542,10 @@ /obj/machinery/computer/security/mining, /obj/machinery/firealarm/directional/north, /obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo Requests Console"; + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + announcementConsole = 1; pixel_x = -30 }, /turf/simulated/floor/carpet, @@ -23654,6 +23608,9 @@ /obj/item/desk_bell{ anchored = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/supply/office) "bQf" = ( @@ -24071,7 +24028,6 @@ dir = 1; name = "Anti-Theft Shield" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ dir = 1 }, @@ -24091,9 +24047,7 @@ }, /area/station/command/office/cmo) "bSy" = ( -/obj/item/kirbyplants{ - icon_state = "plant-32" - }, +/obj/item/kirbyplants/plant32, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteblue" @@ -24228,9 +24182,8 @@ /area/station/medical/chemistry) "bSP" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Chemistry Lab" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -24337,12 +24290,6 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/manifold/visible, -/obj/machinery/access_button{ - autolink_id = "eng_s_tesla_btn_int"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "10;13" - }, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -24386,9 +24333,9 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ id_tag = "supply_home"; - locked = 1; - name = "Cargo Docking Hatch" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/supply/storage) @@ -24609,9 +24556,8 @@ }, /area/station/science/robotics) "bUk" = ( -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -24674,8 +24620,13 @@ "bUy" = ( /obj/machinery/door/airlock/external{ id_tag = "eng_atmos_door_ext"; - locked = 1; - name = "Atmospherics External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/access_button{ + autolink_id = "eng_atmos_btn_ext"; + pixel_y = 24; + req_access_txt = "13" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, @@ -24747,16 +24698,6 @@ dir = 8; location = "Research Division" }, -/obj/machinery/door/window/classic/reversed{ - dir = 4; - name = "Research Division Delivery" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 4 - }, /obj/structure/plasticflaps{ opacity = 1 }, @@ -24781,19 +24722,17 @@ /area/station/maintenance/turbine) "bVk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/office) "bVl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/storage) "bVp" = ( @@ -24887,9 +24826,8 @@ /turf/simulated/floor/plasteel, /area/station/supply/office) "bVL" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 4; @@ -24921,9 +24859,9 @@ /area/station/hallway/primary/central/se) "bVV" = ( /obj/machinery/door/airlock/medical/glass{ - id_tag = "CloningDoor"; - name = "Genetics Cloning" + id_tag = "CloningDoor" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 @@ -24948,7 +24886,7 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "cloning" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -25268,9 +25206,9 @@ /area/station/medical/sleeper) "bXM" = ( /obj/machinery/door/airlock/medical/glass{ - id_tag = "medcabin1"; - name = "Patients Room" + id_tag = "medcabin1" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -25404,9 +25342,8 @@ /area/station/medical/cloning) "bYl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Surgery Room" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/science/robotics, @@ -25416,7 +25353,7 @@ /area/station/science/robotics) "bYm" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint2) "bYr" = ( @@ -25577,16 +25514,21 @@ "bYQ" = ( /obj/machinery/door/airlock/external{ id_tag = "eng_s_tesla_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/access_button{ + autolink_id = "eng_s_tesla_btn_ext"; + pixel_y = 24; + req_access_txt = "10;13" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -25604,6 +25546,7 @@ /area/station/hallway/primary/central/sw) "bYZ" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25612,7 +25555,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/aft) "bZh" = ( @@ -25812,26 +25754,6 @@ icon_state = "whitegreen" }, /area/station/medical/virology) -"bZI" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint2) "bZJ" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -25859,9 +25781,8 @@ }, /area/station/medical/sleeper) "bZN" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Workstation" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25892,6 +25813,7 @@ /obj/structure/chair/wood{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/carpet, /area/station/maintenance/aft) "cam" = ( @@ -25928,9 +25850,8 @@ /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "cas" = ( -/obj/machinery/door/airlock/mining{ - name = "Mining Dock" - }, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -25941,6 +25862,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "cat" = ( @@ -26231,10 +26153,9 @@ /area/station/science/robotics) "cbn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/rd{ - name = "Server Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, +/obj/machinery/door/airlock/command/rd, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -26308,9 +26229,8 @@ /area/station/medical/sleeper) "cbz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Office" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -26320,7 +26240,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/office) "cbB" = ( @@ -26352,10 +26272,7 @@ dir = 1; name = "Cryo Tank Storage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -26566,9 +26483,8 @@ }, /area/station/medical/virology) "ccm" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/se) @@ -26790,15 +26706,9 @@ /obj/machinery/door/window/classic/reversed{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 8 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ dir = 8 }, -/obj/structure/plasticflaps{ - opacity = 1 - }, /turf/simulated/floor/plasteel, /area/station/supply/office) "ccZ" = ( @@ -26807,6 +26717,9 @@ id = "packageExternal" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/plasticflaps{ + opacity = 1 + }, /turf/simulated/floor/plasteel, /area/station/supply/office) "cdb" = ( @@ -26830,9 +26743,9 @@ "cdf" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/rd/glass{ - id_tag = "rdofficedoor"; - name = "Research Director's Office" + id_tag = "rdofficedoor" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "rd" }, @@ -26845,6 +26758,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/science/rd, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -26895,12 +26809,12 @@ dir = 4; name = "Body Utilizer" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ - dir = 4 - }, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -26927,9 +26841,8 @@ }, /area/station/hallway/primary/central/sw) "cdJ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/sw) @@ -27462,9 +27375,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/medical{ - name = "Durka" - }, +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" @@ -27882,7 +27794,7 @@ c_tag = "Research Director's Office"; network = list("Research","SS13") }, -/obj/item/reagent_containers/food/drinks/mug/rd, +/obj/item/reagent_containers/drinks/mug/rd, /obj/item/taperecorder{ pixel_x = -3 }, @@ -27915,10 +27827,10 @@ "chU" = ( /obj/structure/sign/poster/contraband/random/north, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = -9 }, /turf/simulated/floor/wood/oak, @@ -27998,7 +27910,7 @@ /obj/machinery/alarm/directional/south, /obj/effect/landmark/spawner/xeno, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "ciD" = ( @@ -28066,9 +27978,8 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/south) "ciN" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" @@ -28184,9 +28095,8 @@ /area/station/hallway/primary/central/se) "cjq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28244,6 +28154,7 @@ /area/station/medical/medbay2) "cjA" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "cjB" = ( @@ -28380,6 +28291,7 @@ /area/station/supply/miningdock) "ckp" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -28402,6 +28314,7 @@ /obj/machinery/door/airlock/medical/glass{ id = "surgery1" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28410,10 +28323,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /obj/effect/mapping_helpers/airlock/polarized{ id = "surgery1" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -28520,12 +28433,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/access_button{ - autolink_id = "eng_s_tesla_btn_ext"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "10;13" - }, /turf/simulated/floor/plating/airless, /area/station/engineering/control) "ckI" = ( @@ -28548,10 +28455,9 @@ "ckN" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "ntrepofficedoor"; - name = "NT Representative's Office" + id_tag = "ntrepofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/ntrep, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, @@ -28565,6 +28471,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/access/any/command/ntrep, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "ckP" = ( @@ -28777,9 +28684,8 @@ /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "clB" = ( -/obj/machinery/door/airlock/external{ - name = "Toxins Test Chamber" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "clE" = ( @@ -28820,9 +28726,8 @@ /turf/simulated/floor/engine/co2, /area/station/engineering/atmos) "clN" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -28830,9 +28735,8 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/aft) "clO" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 8; @@ -28852,12 +28756,11 @@ /turf/simulated/floor/wood/oak, /area/station/command/office/blueshield) "clU" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Staff Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -28890,6 +28793,22 @@ name = "Distribution and Waste Monitor" }, /obj/machinery/firealarm/directional/east, +/obj/machinery/door_control/shutter/north{ + desc = "A remote control-switch for the engineering lobby emergency supply room."; + id = "engemergencyeva"; + name = "Lobby Emergency Supply"; + pixel_x = 24; + req_access_txt = "32"; + pixel_y = 8 + }, +/obj/machinery/door_control/normal/north{ + desc = "A remote control-switch for the engineering lobby doors."; + id = "englobby"; + name = "Lobby Entrance"; + pixel_x = 24; + req_access_txt = "32"; + pixel_y = -8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellowcorner" @@ -28930,14 +28849,14 @@ }, /obj/machinery/door/airlock/external{ id_tag = "apsolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/south{ autolink_id = "apsolar_btn_int"; req_one_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "cmd" = ( @@ -29094,7 +29013,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/research{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/genetics{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -29140,10 +29062,10 @@ /turf/simulated/wall, /area/station/service/janitor) "cmT" = ( -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/structure/closet/cabinet, /obj/machinery/light/directional/east, /turf/simulated/floor/wood/oak, @@ -29422,11 +29344,7 @@ /area/station/security/range) "cnW" = ( /obj/structure/table, -/obj/item/camera{ - name = "Autopsy Camera"; - pixel_x = 4; - pixel_y = 8 - }, +/obj/item/camera/autopsy, /obj/item/scalpel{ pixel_y = 2 }, @@ -29760,10 +29678,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "cpz" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -29775,6 +29691,8 @@ id_tag = "engsm2"; name = "SM Radiation Security Lock" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -29866,9 +29784,8 @@ /area/station/science/hallway) "cqc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Toxins Storage" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airlock/access/any/science/tox_storage, /turf/simulated/floor/plasteel, @@ -29970,7 +29887,7 @@ /area/station/maintenance/fsmaint) "cqF" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -29995,7 +29912,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "cqK" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse, @@ -30048,9 +29965,9 @@ icon_state = "0-4" }, /obj/structure/closet/secure_closet/psychiatrist, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/soda, +/obj/item/reagent_containers/drinks/drinkingglass/soda, /turf/simulated/floor/carpet, /area/station/medical/psych) "cre" = ( @@ -30390,10 +30307,9 @@ "csw" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "blueshieldofficedoor"; - name = "Blueshield's Office" + id_tag = "blueshieldofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/blueshield, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -30407,6 +30323,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/blueshield) "csB" = ( @@ -30535,10 +30452,8 @@ /turf/simulated/floor/plating, /area/station/engineering/supermatter_room) "csQ" = ( -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -30554,15 +30469,15 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, /area/station/service/janitor) "csS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Emergency Entrance" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, @@ -30746,11 +30661,11 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/airlock/multi_tile/security/glass{ - id_tag = "BrigRight"; - name = "Brig Foyer Right Entrance" + id_tag = "BrigRight" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -30975,7 +30890,7 @@ }, /area/station/medical/medbay2) "cuw" = ( -/obj/machinery/suit_storage_unit/cmo, +/obj/machinery/suit_storage_unit/cmo/secure, /obj/effect/turf_decal/delivery/blue/hollow, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -31065,9 +30980,9 @@ }, /obj/effect/mapping_helpers/airlock/unres, /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance" + id_tag = "MedbayFoyerPort" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ dir = 4; @@ -31094,9 +31009,9 @@ /area/station/medical/virology) "cuL" = ( /obj/machinery/door/airlock/medical/glass{ - id = "paramedic"; - name = "Paramedic" + id = "paramedic" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -31134,9 +31049,8 @@ /turf/simulated/wall, /area/station/maintenance/asmaint2) "cuW" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31167,9 +31081,8 @@ /area/station/science/toxins/mixing) "cvc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Storage" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/hallway) @@ -31298,7 +31211,7 @@ /area/station/engineering/controlroom) "cvC" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -31310,6 +31223,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/aft) "cvD" = ( @@ -31388,7 +31302,7 @@ /area/station/medical/morgue) "cvU" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -31505,11 +31419,11 @@ /turf/simulated/wall/r_wall, /area/station/maintenance/incinerator) "cwy" = ( -/obj/structure/closet/wardrobe/grey, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/structure/window/reinforced{ +/obj/machinery/camera{ + c_tag = "Locker Room West"; dir = 1 }, /turf/simulated/floor/plasteel, @@ -31522,10 +31436,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/machinery/door/airlock/atmos{ - name = "Aft-Port Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "cwG" = ( @@ -31581,15 +31495,14 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "cwS" = ( -/obj/machinery/door/airlock/engineering{ - name = "Toxin Testing EVA Maintenance" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "cwU" = ( @@ -31635,7 +31548,7 @@ pixel_y = -4 }, /obj/machinery/light/directional/north, -/obj/item/reagent_containers/food/drinks/mug/sci{ +/obj/item/reagent_containers/drinks/mug/sci{ desc = "A purple mug with a small piece of duct tape on it that has 'Janitor's' written on it in sharpie. Looks a bit too.. scientific to belong to the Janitor."; name = "Janitor's mug"; pixel_x = 6; @@ -31737,9 +31650,8 @@ }, /area/station/medical/virology) "cxJ" = ( -/obj/machinery/door/airlock/virology{ - name = "Virology Bedroom" - }, +/obj/machinery/door/airlock/virology, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -31795,7 +31707,8 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/geneticist, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/research, +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/genetics, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whitehall" @@ -31995,14 +31908,18 @@ "cyz" = ( /obj/machinery/door/airlock/external{ id_tag = "aisat_door_int"; - locked = 1; - name = "MiniSat External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/access_button{ + autolink_id = "aisat_btn_int"; + pixel_y = 24 + }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior) "cyA" = ( @@ -32081,6 +31998,7 @@ /area/station/engineering/atmos/control) "cyH" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -32179,7 +32097,7 @@ dir = 1 }, /obj/machinery/light/directional/south, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ list_reagents = list("tea"=15); pixel_x = 4; pixel_y = 2 @@ -32409,9 +32327,8 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/incinerator) "czN" = ( -/obj/machinery/door/airlock{ - name = "Port Emergency Storage" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -32512,7 +32429,6 @@ "cAg" = ( /obj/machinery/light/small/directional/south, /obj/machinery/turretid/stun{ - control_area = "\improper AI Satellite Antechamber"; name = "AI Antechamber Turret Control"; pixel_y = -24; req_one_access_txt = "75" @@ -32557,7 +32473,6 @@ /area/station/hallway/secondary/entry) "cAo" = ( /obj/machinery/light/small/directional/east, -/obj/item/radio/intercom/directional/east, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/cable{ d1 = 1; @@ -32702,10 +32617,9 @@ }, /area/station/science/hallway) "cAT" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Custodial Closet" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, /turf/simulated/floor/plasteel, /area/station/service/janitor) "cAU" = ( @@ -33004,12 +32918,11 @@ /area/space/nearstation) "cCi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Test Lab" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/science/tox, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/misc_lab) "cCo" = ( @@ -33027,7 +32940,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "cCq" = ( /turf/simulated/floor/engine, /area/station/maintenance/incinerator) @@ -33051,18 +32964,17 @@ /area/station/maintenance/incinerator) "cCC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos{ - name = "Incinerator Access" - }, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/incinerator) "cCD" = ( @@ -33107,13 +33019,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/turretid/stun{ - control_area = "\improper AI Satellite Hallway"; - name = "AI Chamber Hallway Turret Control"; - pixel_x = 24; - pixel_y = -24; - req_one_access_txt = "75" - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33484,11 +33389,15 @@ "cEa" = ( /obj/machinery/door/airlock/external{ id_tag = "aisat_door_ext"; - locked = 1; - name = "MiniSat External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/access_button{ + autolink_id = "aisat_btn_ext"; + pixel_y = 24 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior) "cEb" = ( @@ -33558,13 +33467,14 @@ /area/station/maintenance/aft) "cEr" = ( /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellowcorners" @@ -33606,24 +33516,14 @@ }, /area/station/engineering/control) "cEz" = ( -/obj/structure/plasticflaps{ - opacity = 1 - }, /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/door/window/classic/reversed{ - dir = 1; - name = "Custodial Closet" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/janitor{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 1 - }, /obj/machinery/navbeacon{ codes_txt = "delivery"; location = "Janitor" }, +/obj/structure/plasticflaps{ + opacity = 1 + }, /turf/simulated/floor/plating, /area/station/service/janitor) "cEB" = ( @@ -33780,11 +33680,10 @@ /area/station/command/office/cmo) "cFA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "cFB" = ( @@ -33803,9 +33702,8 @@ /area/station/engineering/break_room) "cFI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Test Lab" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -33820,7 +33718,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/science/tox, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -33917,9 +33815,8 @@ }, /area/station/science/misc_lab) "cFX" = ( -/obj/machinery/door/airlock/welded{ - name = "Maintenance Airlock" - }, +/obj/machinery/door/airlock/welded, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -34017,6 +33914,7 @@ /mob/living/simple_animal/bot/floorbot{ on = 0 }, +/obj/item/radio/intercom/directional/south, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -34038,9 +33936,9 @@ /area/station/engineering/tech_storage) "cGw" = ( /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medical Supplies" + id_tag = "MedbayFoyer" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ @@ -34508,14 +34406,16 @@ /area/station/engineering/break_room) "cHR" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel, /area/station/maintenance/disposal) "cHS" = ( @@ -34544,9 +34444,9 @@ /area/station/hallway/primary/aft) "cHW" = ( /obj/machinery/door/airlock/bathroom{ - name = "Private Restroom"; id_tag = "toilet_sec_2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -34794,9 +34694,6 @@ dir = 1; name = "Testing Chamber Delivery Chute" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox{ - dir = 1 - }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -34842,7 +34739,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -34866,9 +34763,8 @@ }, /area/station/science/robotics) "cIN" = ( -/obj/machinery/door/airlock/maintenance{ - name = "E.X.P.E.R.I-MENTOR Lab Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -34903,20 +34799,6 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/machinery/door_control/shutter/north{ - desc = "A remote control-switch for the engineering lobby emergency supply room."; - id = "engemergencyeva"; - name = "Lobby Emergency Supply"; - pixel_x = -6; - req_access_txt = "32" - }, -/obj/machinery/door_control/normal/north{ - desc = "A remote control-switch for the engineering lobby doors."; - id = "englobby"; - name = "Lobby Entrance"; - pixel_x = 6; - req_access_txt = "32" - }, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ @@ -35048,10 +34930,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/engineering/glass{ - id_tag = "englobby"; - name = "Engineering" + id_tag = "englobby" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -35059,6 +34940,7 @@ name = "Engineering Security Doors"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellow" @@ -35266,17 +35148,16 @@ id_tag = "RnDChem"; name = "Biohazard Shutter" }, -/obj/machinery/door/airlock/research/glass{ - name = "Test Chamber" - }, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/science/tox, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -35412,9 +35293,10 @@ "cKD" = ( /obj/machinery/door/airlock/medical{ locked = 1; - name = "Abandoned Chemistry"; req_one_access_txt = "33" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/chemistry, /turf/simulated/floor/plating, /area/station/maintenance/aft) "cKE" = ( @@ -35596,10 +35478,9 @@ "cLz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ - locked = 1; - name = "Assembly Line (KEEP OUT)" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor{ density = 0; @@ -35613,13 +35494,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/maintenance/assembly_line) "cLA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Atmospherics" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36134,9 +36015,8 @@ /area/station/engineering/atmos) "cOd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Library" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36154,7 +36034,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "cOf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36330,10 +36210,8 @@ /area/station/science/rnd) "cOE" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Drone Fabricator Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -36341,6 +36219,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -36418,13 +36297,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/general{ - dir = 4 - }, /obj/machinery/door/window/reinforced/normal{ dir = 4; name = "Suit Storage" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/general{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellowcorners" @@ -36560,9 +36439,6 @@ name = "Area control access" }, /obj/machinery/atmospherics/pipe/simple/hidden/purple, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox{ - dir = 1 - }, /turf/simulated/floor/engine, /area/station/science/test_chamber) "cPA" = ( @@ -36587,7 +36463,7 @@ }, /area/station/engineering/controlroom) "cPD" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /obj/effect/turf_decal/delivery/hollow, /obj/structure/sign/atmosplaque{ pixel_y = 32 @@ -37003,6 +36879,7 @@ /obj/structure/chair/wheelchair{ dir = 4 }, +/obj/item/radio/intercom/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitegreen" @@ -37531,9 +37408,8 @@ }, /area/station/engineering/gravitygenerator) "cSt" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plating, @@ -38158,6 +38034,7 @@ /area/station/maintenance/aft) "cUi" = ( /obj/structure/chair/wood, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet, /area/station/public/mrchangs) "cUj" = ( @@ -38455,19 +38332,9 @@ /turf/simulated/floor/plating/airless, /area/station/engineering/control) "cVn" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button{ - autolink_id = "eng_n_tesla_btn_ext"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "10;13" - }, -/turf/simulated/floor/plating/airless, -/area/station/engineering/control) +/obj/structure/closet/wardrobe/black, +/turf/simulated/floor/plasteel, +/area/station/public/locker) "cVo" = ( /obj/machinery/door/poddoor/shutters{ dir = 2; @@ -38577,7 +38444,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "cVI" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -38602,9 +38469,8 @@ /area/station/engineering/break_room) "cVL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external{ - name = "Escape Pod" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/engineering/break_room) "cVM" = ( @@ -38769,7 +38635,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "cWz" = ( /obj/machinery/light/small/directional/south, /obj/item/radio/intercom/directional/south, @@ -38810,10 +38676,10 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction{ dir = 1 }, /obj/structure/plasticflaps{ @@ -38857,7 +38723,7 @@ }, /area/station/engineering/hallway) "cWL" = ( -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plating, /area/station/command/office/blueshield) "cWM" = ( @@ -38867,16 +38733,15 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Equipment Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -38924,13 +38789,18 @@ "cWW" = ( /obj/machinery/door/airlock/external{ id_tag = "eng_atmos_door_int"; - locked = 1; - name = "Atmospherics External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/machinery/access_button{ + autolink_id = "eng_atmos_btn_int"; + pixel_y = 24; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/storage) "cWX" = ( @@ -39173,7 +39043,7 @@ /area/station/engineering/supermatter_room) "cXV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -6; pixel_y = 3 }, @@ -39213,16 +39083,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) -"cXZ" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/access_button{ - autolink_id = "eng_atmos_btn_ext"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "10;13" - }, -/turf/space, -/area/space/nearstation) "cYa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -39249,10 +39109,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellow" @@ -39331,12 +39191,11 @@ "cYv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/catwalk, /area/station/maintenance/storage) "cYy" = ( @@ -39374,11 +39233,7 @@ /turf/simulated/floor/plasteel, /area/station/public/storage/office) "cYM" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Gravity Generator Area" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -39397,6 +39252,9 @@ icon_state = "2-8" }, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -39528,10 +39386,9 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/maintenance/storage) "cZh" = ( @@ -39666,10 +39523,8 @@ /area/space/nearstation) "cZG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -39684,6 +39539,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellowcorners" @@ -39775,12 +39631,10 @@ }, /area/station/maintenance/fsmaint) "cZW" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -39862,7 +39716,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/red, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "dah" = ( @@ -40198,9 +40051,8 @@ }, /area/station/ai_monitored/storage/eva) "dbx" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Science Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -40232,12 +40084,11 @@ /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "dbI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public{ - name = "Kitchen" - }, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -40331,11 +40182,9 @@ "dbZ" = ( /obj/machinery/door/airlock/external{ id_tag = "eng_s_tesla_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -40344,6 +40193,13 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/access_button{ + autolink_id = "eng_s_tesla_btn_int"; + pixel_y = 24; + req_access_txt = "10;13" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -40381,6 +40237,7 @@ /area/station/engineering/engine/supermatter) "dci" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "dcj" = ( @@ -40397,9 +40254,8 @@ /turf/simulated/floor/plating, /area/station/engineering/secure_storage) "dcm" = ( -/obj/machinery/door/airlock/engineering{ - name = "Aft Starboard Solar Access" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -40425,10 +40281,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkyellowcorners" @@ -40452,7 +40307,8 @@ "dct" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellowcorners" @@ -40466,12 +40322,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -40743,16 +40597,16 @@ }, /area/station/engineering/supermatter_room) "ddD" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Laser Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plating, /area/station/engineering/supermatter_room) "ddE" = ( @@ -41299,8 +41153,8 @@ }, /area/station/engineering/break_room) "dfh" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/portable/scrubber, +/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/public/locker) "dfj" = ( @@ -41357,7 +41211,7 @@ /area/station/engineering/engine/supermatter) "dfr" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -41580,7 +41434,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/aft) "dgn" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -41656,14 +41510,13 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id_tag = "engsm2"; name = "SM Radiation Security Lock" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -41674,14 +41527,14 @@ /area/station/maintenance/asmaint2) "dgz" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 10 }, /turf/simulated/floor/beach/sand, @@ -41694,7 +41547,7 @@ /area/shuttle/pod_4) "dgH" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/wood/oak, @@ -41728,14 +41581,13 @@ /area/station/engineering/control) "dgP" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id_tag = "engsm2"; name = "SM Radiation Security Lock" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -41766,14 +41618,12 @@ dir = 5; icon_state = "darkblue" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "dgU" = ( -/obj/structure/closet/wardrobe/white, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/table, +/obj/item/storage/toolbox{ + pixel_y = 3; + color = "pink" }, /turf/simulated/floor/plasteel, /area/station/public/locker) @@ -41830,10 +41680,10 @@ /obj/effect/spawner/window/reinforced/grilled, /obj/structure/transit_tube/crossing/horizontal, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "dhp" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -41847,6 +41697,7 @@ dir = 8 }, /obj/machinery/light_switch/east, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/oak, /area/station/public/mrchangs) "dhv" = ( @@ -41955,11 +41806,8 @@ /turf/space, /area/space/nearstation) "dig" = ( -/obj/machinery/requests_console{ - department = "Locker Room"; - name = "Locker Room Requests Console"; - pixel_x = -32 - }, +/obj/machinery/atmospherics/portable/pump, +/obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/public/locker) "dij" = ( @@ -41980,6 +41828,7 @@ "dil" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ d1 = 1; @@ -42063,17 +41912,16 @@ /area/station/engineering/supermatter_room) "div" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Gateway Access" - }, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -42266,7 +42114,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug/eng{ +/obj/item/reagent_containers/drinks/mug/eng{ pixel_x = 5; pixel_y = 5 }, @@ -42309,9 +42157,8 @@ /area/station/maintenance/storage) "djg" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Dormitories" - }, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" @@ -42384,10 +42231,9 @@ name = "Singularity Blast Doors"; opacity = 0 }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -42498,9 +42344,8 @@ /turf/space, /area/space/nearstation) "djO" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 4; @@ -42751,9 +42596,8 @@ /area/space/nearstation) "dkR" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -42948,9 +42792,6 @@ /obj/machinery/porta_turret{ dir = 1 }, -/obj/structure/sign/securearea{ - pixel_x = 32 - }, /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, @@ -43162,26 +43003,18 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/machinery/access_button{ - autolink_id = "eng_sm_btn_int"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "10;13" - }, /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "dmz" = ( /turf/simulated/wall/r_wall, /area/station/engineering/supermatter_room) "dmA" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/door/airlock/atmos/glass{ - name = "Supermatter Atmospheric Supplies" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/poddoor{ @@ -43191,6 +43024,7 @@ name = "Atmos Blast Door"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -43587,7 +43421,9 @@ }, /area/station/turret_protected/ai) "dnG" = ( -/obj/machinery/light/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/station/public/locker) "dnI" = ( @@ -43609,10 +43445,7 @@ "dnM" = ( /obj/structure/table/wood, /obj/item/taperecorder, -/obj/item/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "Camera" - }, +/obj/item/camera, /obj/item/book/codex_gigas, /turf/simulated/floor/plasteel{ icon_state = "cult" @@ -43827,9 +43660,9 @@ name = "escape pod 4" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_4) "doM" = ( @@ -43910,10 +43743,8 @@ /area/station/engineering/control) "dpp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Tech Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -43932,6 +43763,7 @@ name = "Engineering Security Doors"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) "dpq" = ( @@ -44234,7 +44066,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "dqD" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4 @@ -44304,16 +44136,15 @@ /area/station/aisat/hall) "dqT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "dqX" = ( @@ -44591,9 +44422,8 @@ /area/station/science/hallway) "dsz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Server Room" - }, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -44712,16 +44542,15 @@ /area/station/maintenance/port) "dsY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Equipment Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/engineering/equipmentstorage) "dta" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/structure/window/reinforced{ dir = 4 }, @@ -44916,11 +44745,16 @@ "dur" = ( /obj/machinery/door/airlock/external{ id_tag = "arrivalsmaint_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "arrivalsmaint_btn_int"; + pixel_x = -24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "duF" = ( @@ -45139,9 +44973,8 @@ /area/station/hallway/primary/starboard/west) "dzp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Robotics Lab" - }, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -45156,9 +44989,8 @@ }, /area/station/science/robotics) "dzA" = ( -/obj/machinery/door/airlock/hydroponics{ - name = "Hydroponics" - }, +/obj/machinery/door/airlock/hydroponics, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -45262,15 +45094,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/storage) "dBt" = ( @@ -45380,6 +45211,7 @@ /area/station/science/robotics) "dDk" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -45454,7 +45286,7 @@ /area/station/engineering/utility) "dEb" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "dEc" = ( @@ -45483,12 +45315,12 @@ /area/station/security/lobby) "dEq" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -45667,11 +45499,16 @@ }, /obj/machinery/door/airlock/external{ id_tag = "eng_n_tesla_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/access_button{ + autolink_id = "eng_n_tesla_btn_int"; + pixel_y = -24; + req_access_txt = "10;13" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -45967,6 +45804,7 @@ /area/station/engineering/controlroom) "dMy" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45982,7 +45820,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "dMJ" = ( @@ -46039,7 +45876,7 @@ /area/station/engineering/hallway) "dOb" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /obj/item/reagent_containers/glass/rag{ pixel_x = -7 }, @@ -46109,10 +45946,11 @@ /area/station/medical/cryo) "dPA" = ( /obj/machinery/door/airlock/engineering/glass{ - heat_proof = 1; - name = "Supermatter Chamber" + heat_proof = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "dQa" = ( @@ -46164,9 +46002,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "dRf" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/bar, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -46258,7 +46095,7 @@ /turf/simulated/floor/plasteel/stairs/right{ dir = 8 }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "dTI" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 @@ -46541,9 +46378,9 @@ "dYX" = ( /obj/machinery/door/airlock/external{ id_tag = "evamaint_door_ext"; - locked = 1; - name = "EVA External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) @@ -46557,6 +46394,7 @@ /area/station/hallway/primary/central/west) "dZA" = ( /obj/machinery/door/airlock/wood, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "dZB" = ( @@ -46688,7 +46526,7 @@ /area/station/hallway/primary/aft) "ecH" = ( /turf/simulated/wall, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ecI" = ( /obj/machinery/light/small/directional/south, /obj/structure/chair/office/dark{ @@ -46876,11 +46714,11 @@ /area/station/maintenance/portsolar) "eeF" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/flask/barflask{ +/obj/item/reagent_containers/drinks/flask/barflask{ pixel_x = 6; pixel_y = 6 }, @@ -46916,12 +46754,12 @@ /area/station/medical/reception) "efk" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -47072,9 +46910,8 @@ /turf/simulated/wall/r_wall, /area/station/maintenance/aft) "ehb" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Vacant Office" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/wood/oak, /area/station/public/vacant_office) @@ -47157,7 +46994,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "eic" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/west, /obj/effect/decal/cleanable/dirt, @@ -47300,16 +47137,16 @@ }, /area/station/security/interrogation) "elC" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Laser Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plating, /area/station/engineering/supermatter_room) "elE" = ( @@ -47415,9 +47252,9 @@ /area/station/engineering/atmos) "enJ" = ( /obj/machinery/door/airlock/bathroom{ - id_tag = "toilet_unit1"; - name = "Unit 1" + id_tag = "toilet_unit1" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -47468,9 +47305,8 @@ /area/station/maintenance/fsmaint) "epp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/public/storage/tools) @@ -47618,13 +47454,12 @@ /area/station/supply/miningdock) "esG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellowcorners" @@ -47710,11 +47545,11 @@ /area/station/engineering/atmos) "esV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -47739,9 +47574,9 @@ "etR" = ( /obj/machinery/door/airlock/external{ id_tag = "fpsolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -47749,6 +47584,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "fpsolar_btn_int"; + pixel_x = 24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "eui" = ( @@ -47808,6 +47648,7 @@ /area/station/maintenance/asmaint) "euT" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dust, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -47829,7 +47670,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -47851,9 +47692,8 @@ /area/station/science/rnd) "evS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -47961,14 +47801,14 @@ "exu" = ( /obj/structure/chair/sofa/left, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "exC" = ( /obj/machinery/door/airlock{ - name = "Custodial Closet"; req_one_access_txt = "26" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "exD" = ( @@ -48149,15 +47989,15 @@ /area/station/security/permabrig) "eBE" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{ +/obj/item/reagent_containers/drinks/bottle/vodka/badminka{ pixel_y = 12; pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 8; pixel_x = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 2; pixel_x = -1 }, @@ -48188,9 +48028,8 @@ /area/station/maintenance/port) "eCl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Foyer" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/science/minisat, @@ -48323,7 +48162,7 @@ /obj/effect/decal/cleanable/dust, /obj/item/lighter/random, /obj/item/rollingpaper, -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /obj/item/ashtray/plastic, /turf/simulated/floor/carpet/orange, /area/station/maintenance/fsmaint) @@ -48372,6 +48211,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/landmark/start/librarian, /turf/simulated/floor/wood/oak, /area/station/service/library) "eGU" = ( @@ -48404,6 +48244,7 @@ icon_state = "2-8" }, /obj/effect/landmark/damageturf, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) "eGZ" = ( @@ -48599,9 +48440,9 @@ /area/station/maintenance/asmaint) "eKH" = ( /obj/machinery/door/airlock/bathroom{ - id_tag = "toilet_unitc"; - name = "Unit C" + id_tag = "toilet_unitc" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -48715,9 +48556,9 @@ /area/station/security/evidence) "eMu" = ( /obj/machinery/door/airlock/vault{ - locked = 1; - name = "abandoned vault" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, @@ -48749,6 +48590,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft) +"eNd" = ( +/obj/machinery/turretid/stun{ + name = "AI Satellite Service Bay Turret Control"; + pixel_x = -6; + req_one_access_txt = "75" + }, +/turf/simulated/wall/r_wall, +/area/station/aisat/service) "eNi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -48928,6 +48777,7 @@ /area/station/maintenance/apmaint) "eSa" = ( /obj/structure/chair/sofa/corp/right, +/obj/effect/landmark/start/bar, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "eSg" = ( @@ -49148,6 +48998,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood/fancy/cherry, /area/station/service/bar/atrium) "eWx" = ( @@ -49459,14 +49310,14 @@ /area/station/legal/courtroom) "fdb" = ( /obj/machinery/door/airlock/command/cap, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/command/captain, -/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -49577,7 +49428,7 @@ "feq" = ( /obj/effect/decal/cleanable/dust, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "fes" = ( @@ -49963,9 +49814,6 @@ listening = 0; pixel_y = -22 }, -/obj/structure/sign/securearea{ - pixel_x = -32 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -49977,6 +49825,7 @@ /area/station/maintenance/apmaint) "fnX" = ( /obj/machinery/door/airlock/command/qm/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "qm" }, @@ -49984,9 +49833,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/supply/qm) "foi" = ( @@ -50340,9 +50188,8 @@ }, /area/station/medical/storage) "fuz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -50511,7 +50358,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel, /area/station/security/storage) "fxu" = ( @@ -50539,7 +50385,7 @@ /area/station/science/hallway) "fxN" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint) "fxP" = ( @@ -51031,9 +50877,8 @@ /turf/simulated/floor/plating, /area/station/supply/qm) "fFO" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 1; @@ -51142,18 +50987,18 @@ /turf/simulated/floor/plating, /area/station/service/mime) "fIC" = ( -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "blue" @@ -51342,13 +51187,12 @@ /turf/simulated/floor/grass, /area/station/security/permabrig) "fMR" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Labor Camp Transfer" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -51386,9 +51230,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Hydroponics" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -51478,6 +51321,7 @@ /obj/structure/chair/sofa/right{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint) "fQr" = ( @@ -51569,8 +51413,10 @@ /area/station/maintenance/fpmaint2) "fSH" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "fSJ" = ( @@ -51591,10 +51437,9 @@ }, /area/station/maintenance/aft) "fSV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Custodial Closet Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, /turf/simulated/floor/plating, /area/station/service/janitor) "fTc" = ( @@ -51842,6 +51687,7 @@ /mob/living/simple_animal/bot/cleanbot{ on = 0 }, +/obj/item/radio/intercom/directional/south, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -51911,6 +51757,7 @@ /obj/structure/sign/poster/contraband/lusty_xenomorph{ pixel_y = -32 }, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -51988,10 +51835,10 @@ }, /area/station/engineering/break_room) "fZM" = ( -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "blue" @@ -52115,7 +51962,7 @@ dir = 1; name = "Engineering Checkpoint" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -52146,7 +51993,7 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "gdX" = ( @@ -52180,6 +52027,7 @@ /obj/structure/chair/sofa{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint) "geX" = ( @@ -52284,9 +52132,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -52295,12 +52142,11 @@ opacity = 0 }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, -/area/station/engineering/utility) +/area/station/maintenance/aft) "ggO" = ( /obj/machinery/camera{ c_tag = "Teleporter Room" @@ -52393,9 +52239,8 @@ }, /area/station/medical/surgery/secondary) "gim" = ( -/obj/machinery/door/airlock/engineering{ - name = "Aft Port Solar Access" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -52616,12 +52461,13 @@ /obj/machinery/door/airlock/virology{ autoclose = 0; id_tag = "viro_door_int"; - locked = 1; - name = "Virology Lab Internal Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/west{ autolink_id = "viro_btn_int"; - name = "Virology Lab Access Button" + name = "Virology Lab Access Button"; + req_one_access_txt = "39" }, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -52729,9 +52575,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/service{ - name = "Bar Office" - }, +/obj/machinery/door/airlock/service, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -52784,6 +52629,7 @@ d2 = 4; icon_state = "0-4" }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood/fancy/cherry, /area/station/service/bar/atrium) "goX" = ( @@ -53005,7 +52851,7 @@ "gsd" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/south, -/obj/item/reagent_containers/food/drinks/mug/novelty, +/obj/item/reagent_containers/drinks/mug/novelty, /obj/effect/spawner/lootdrop/officetoys, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) @@ -53183,8 +53029,8 @@ /area/station/maintenance/fsmaint) "guQ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -7 }, /obj/effect/spawner/lootdrop/maintenance, @@ -53355,7 +53201,6 @@ /area/station/maintenance/aft) "gyR" = ( /obj/machinery/door/airlock/command/glass, -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -53369,6 +53214,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel, /area/station/command/bridge) "gyS" = ( @@ -53417,6 +53263,17 @@ icon_state = "darkyellow" }, /area/station/engineering/equipmentstorage) +"gAb" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/turf/simulated/floor/plating, +/area/station/maintenance/fpmaint2) "gAk" = ( /obj/effect/landmark/start/shaft_miner, /obj/effect/decal/cleanable/dirt, @@ -53584,9 +53441,6 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "gDJ" = ( @@ -53596,11 +53450,10 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible/purple, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellowcorners" @@ -53709,9 +53562,8 @@ /area/station/hallway/primary/central/sw) "gFG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "holodeck" }, @@ -53784,9 +53636,8 @@ }, /area/station/engineering/supermatter_room) "gGq" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Unisex Restrooms" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -53883,9 +53734,9 @@ /area/station/maintenance/aft) "gIU" = ( /obj/machinery/door/airlock/wood{ - desc = "No solicitors please."; - name = "Private Residence" + desc = "No solicitors please." }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/wood/oak, /area/station/maintenance/apmaint) @@ -54022,7 +53873,7 @@ "gMa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/dough{ +/obj/item/food/snacks/dough{ desc = "A piece of dough. It looks moldy and is hard as a rock. Hope you're not planning on turning this into a pizza.."; name = "old dough" }, @@ -54032,6 +53883,7 @@ "gMc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -54041,7 +53893,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "gMl" = ( @@ -54358,11 +54210,11 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/spawner/wire_splicing/thirty, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "gQi" = ( /obj/machinery/light/small/directional/west, -/obj/item/radio/intercom/directional/west, /obj/machinery/computer/cryopod/robot{ pixel_x = -30; pixel_y = 30 @@ -54377,11 +54229,10 @@ /area/station/aisat/service) "gQs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Equipment Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -54412,7 +54263,7 @@ /area/station/maintenance/fsmaint) "gRe" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint2) "gRp" = ( @@ -54766,9 +54617,9 @@ "gWZ" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_ext"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54908,7 +54759,7 @@ dir = 10; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "gYO" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -55204,6 +55055,7 @@ /area/station/maintenance/abandonedbar) "heL" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dust, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -55220,9 +55072,6 @@ dir = 1; name = "Space Loop Out" }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "hft" = ( @@ -55388,9 +55237,8 @@ /turf/simulated/floor/plasteel, /area/station/science/rnd) "hhX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Prison Cafeteria" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -55623,12 +55471,6 @@ }, /turf/simulated/floor/plating, /area/station/command/office/blueshield) -"hlM" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/turf/simulated/floor/plating, -/area/station/maintenance/fpmaint) "hmj" = ( /obj/effect/turf_decal/siding/white{ dir = 6 @@ -55651,15 +55493,12 @@ /area/station/maintenance/asmaint) "hmR" = ( /obj/machinery/light/small/directional/east, -/obj/machinery/turretid/stun{ - control_area = "\improper AI Satellite Service"; - name = "AI Satellite Service Bay Turret Control"; - pixel_x = 24; - req_one_access_txt = "75" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/structure/sign/securearea{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkbluecorners" @@ -55792,12 +55631,6 @@ /turf/space, /area/space) "hoD" = ( -/obj/machinery/access_button{ - autolink_id = "fpsolar_btn_int"; - pixel_x = 25; - pixel_y = 25; - req_one_access_txt = "13" - }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -55978,10 +55811,9 @@ /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/engineering/glass{ - id_tag = "englobby"; - name = "Engineering" + id_tag = "englobby" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -55989,6 +55821,7 @@ name = "Engineering Security Doors"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "yellow" @@ -56307,6 +56140,7 @@ /obj/machinery/door/airlock/freezer{ req_one_access_txt = "28" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) @@ -56497,6 +56331,12 @@ icon_state = "neutral" }, /area/station/engineering/atmos/storage) +"hBo" = ( +/obj/effect/landmark/start/artist, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/dorms) "hBu" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -56585,9 +56425,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "hDf" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Science Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -56604,7 +56443,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, /turf/simulated/floor/plating, /area/station/science/genetics) "hDl" = ( @@ -56621,30 +56461,23 @@ /area/station/service/library) "hDI" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "hDJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/access_button{ - autolink_id = "assolar_btn_ext"; - pixel_x = 25; - pixel_y = 25; - req_one_access_txt = "13" +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Locker Room Requests Console"; + pixel_y = -32 }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/station/engineering/solar/starboard) +/turf/simulated/floor/plasteel, +/area/station/public/locker) "hDN" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 @@ -56661,7 +56494,7 @@ /area/station/command/bridge) "hDS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /obj/machinery/light/directional/west, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -56713,7 +56546,7 @@ }, /area/station/science/server/coldroom) "hEW" = ( -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellow" @@ -56782,14 +56615,14 @@ /area/station/command/office/cmo) "hGg" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/polarized{ id = "conference" }, /obj/machinery/door/airlock/command/glass{ id_tag = "conference" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/carpet/black, /area/station/command/meeting_room) "hGj" = ( @@ -56817,7 +56650,7 @@ pixel_y = 10; pixel_x = 4 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = -4; pixel_y = -6 }, @@ -56839,7 +56672,7 @@ /obj/machinery/door/airlock/command/cap{ id_tag = "captainofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -56850,12 +56683,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/fancy/cherry, /area/station/command/office/captain) "hHp" = ( @@ -57129,11 +56963,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, /area/station/hallway/primary/starboard/west) -"hMr" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "hMt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -57168,11 +56997,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/obj/machinery/access_button{ - autolink_id = "aisat_btn_int"; - pixel_x = -25; - pixel_y = 25 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -57196,6 +57020,7 @@ /area/station/security/permabrig) "hNr" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/aft) "hNy" = ( @@ -57240,9 +57065,8 @@ }, /area/station/service/hydroponics) "hOh" = ( -/obj/machinery/door/airlock/maintenance{ - name = "E.V.A. Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -57774,7 +57598,7 @@ /area/station/security/processing) "hYo" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 6 }, @@ -58075,7 +57899,7 @@ /area/station/maintenance/port) "ieC" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -58133,7 +57957,7 @@ /area/station/maintenance/asmaint2) "ifV" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/bottle/wine, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -58150,6 +57974,7 @@ /obj/structure/chair/sofa/left{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint) "igV" = ( @@ -58215,10 +58040,15 @@ }, /obj/machinery/door/airlock/external{ id_tag = "fssolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "fssolar_btn_ext"; + pixel_x = -24; + req_one_access_txt = "10;13" + }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "iip" = ( @@ -58256,6 +58086,7 @@ /area/station/hallway/primary/central/ne) "ijf" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -58263,7 +58094,6 @@ icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "ijg" = ( @@ -58568,6 +58398,7 @@ "ipA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -58657,11 +58488,9 @@ /area/station/hallway/primary/starboard/west) "irE" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Morgue" - }, +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/medical/morgue, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -58670,6 +58499,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/access/any/medical/morgue, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -58828,12 +58658,13 @@ /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ivY" = ( /obj/structure/sink/directional/west, /obj/machinery/camera{ c_tag = "Virology Airlock" }, +/obj/item/radio/intercom/directional/north, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitegreen" @@ -58924,6 +58755,7 @@ /area/station/maintenance/fsmaint) "ixh" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -58937,12 +58769,6 @@ /obj/structure/lattice, /turf/space, /area/space) -"ixv" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/turf/simulated/floor/plating, -/area/station/maintenance/fore) "ixy" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "qm" @@ -58960,7 +58786,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ixM" = ( /obj/structure/cable{ d1 = 2; @@ -58987,10 +58813,8 @@ }, /area/station/engineering/atmos) "iyc" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Atmoshperics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -59009,13 +58833,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/catwalk, /area/station/maintenance/storage) "iyh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Bartender" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/bar, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -59028,6 +58852,11 @@ icon_state = "dark" }, /area/station/command/office/hos) +"iyI" = ( +/obj/structure/weightmachine/stacklifter, +/obj/effect/landmark/start/assistant, +/turf/simulated/floor/plasteel, +/area/station/public/dorms) "iyJ" = ( /obj/machinery/door/poddoor/shutters{ dir = 2; @@ -59084,9 +58913,8 @@ /area/station/public/dorms) "iBI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -59161,8 +58989,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/light/small/directional/west, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "iDh" = ( @@ -59357,9 +59186,9 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/command/glass{ - name = "AI Core"; req_one_access_txt = "16" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, @@ -59699,13 +59528,6 @@ /obj/structure/closet/firecloset, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) -"iMM" = ( -/obj/effect/spawner/wire_splicing/thirty, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/apmaint) "iMW" = ( /obj/structure/table/wood, /obj/item/stack/cable_coil, @@ -59808,12 +59630,12 @@ "iOY" = ( /obj/structure/table/wood, /obj/structure/sign/poster/official/random/north, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 5; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 7 }, @@ -59855,9 +59677,8 @@ }, /area/station/security/evidence) "iPS" = ( -/obj/machinery/door/airlock/hydroponics{ - name = "Hydroponics" - }, +/obj/machinery/door/airlock/hydroponics, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/siding/white, /obj/effect/turf_decal/siding/white{ dir = 1 @@ -59947,9 +59768,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "iQO" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Private Restroom" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -60114,6 +59934,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/carpet/purple, /area/station/service/bar) "iUf" = ( @@ -60304,11 +60125,6 @@ /obj/machinery/light_switch/south, /turf/simulated/floor/plating, /area/station/public/storage/emergency/port) -"iYQ" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "iZj" = ( /obj/structure/chair/stool{ dir = 4 @@ -60325,9 +60141,8 @@ }, /area/station/science/hallway) "iZn" = ( -/obj/machinery/door/airlock/medical{ - name = "Abandoned Equipment Storage" - }, +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/effect/mapping_helpers/airlock/locked, /turf/simulated/floor/plating, @@ -60336,11 +60151,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/machinery/door/airlock/atmos{ - name = "Port-Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/port) "iZz" = ( @@ -60377,6 +60191,17 @@ /obj/item/seeds/corn, /turf/simulated/floor/grass, /area/station/security/permabrig) +"iZR" = ( +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkredcorners" + }, +/area/station/security/brig) "iZV" = ( /obj/effect/spawner/random_spawners/grille_often, /obj/effect/decal/cleanable/dirt, @@ -60894,13 +60719,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/general{ - dir = 4 - }, /obj/machinery/door/window/reinforced/reversed{ dir = 4; name = "Suit Storage" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/general{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkyellowcorners" @@ -60984,6 +60809,18 @@ icon_state = "whiteblue" }, /area/station/medical/surgery/secondary) +"jog" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/door_control/bolt_control/south{ + id = "toilet_ass3" + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/public/toilet/lockerroom) "joq" = ( /obj/structure/cable{ d1 = 4; @@ -61090,6 +60927,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood/fancy/cherry, /area/station/service/bar/atrium) "jpn" = ( @@ -61177,6 +61015,7 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/mime, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -61280,8 +61119,8 @@ /area/station/public/toilet) "jsv" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk, +/obj/item/food/snacks/disk{ pixel_y = -6; pixel_x = 5 }, @@ -61476,14 +61315,14 @@ "jxo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ - name = "MiniSat Transit Tube"; req_access_txt = "75" }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "jxs" = ( /turf/simulated/floor/plating, /area/station/engineering/utility) @@ -61775,7 +61614,7 @@ /area/station/maintenance/aft) "jBJ" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -62006,9 +61845,9 @@ autoclose = 0; heat_proof = 1; id_tag = "incinerator_door_int"; - locked = 1; - name = "Mixing Room Interior Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button{ autolink_id = "incinerator_btn_int"; name = "Incinerator Airlock Control"; @@ -62135,6 +61974,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -62216,6 +62056,7 @@ /area/station/command/bridge) "jMw" = ( /obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium, /area/shuttle/arrival/station) "jMx" = ( @@ -62271,6 +62112,7 @@ /area/station/maintenance/asmaint) "jOs" = ( /obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -62286,7 +62128,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/command/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/command/bridge) "jOx" = ( @@ -62342,6 +62183,7 @@ /area/station/command/meeting_room) "jPw" = ( /obj/machinery/door/airlock/freezer, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -62360,6 +62202,7 @@ /area/station/public/dorms) "jPW" = ( /obj/machinery/door/airlock/silver, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -62689,6 +62532,13 @@ }, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) +"jVb" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/black, +/area/station/service/bar/atrium) "jVf" = ( /obj/vehicle/secway, /obj/item/key/security, @@ -62703,11 +62553,6 @@ icon_state = "darkred" }, /area/station/security/warden) -"jVj" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/aft) "jVr" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -62748,6 +62593,7 @@ "jWE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "jWV" = ( @@ -62758,10 +62604,15 @@ "jXg" = ( /obj/machinery/door/airlock/external{ id_tag = "arrivalsmaint_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "arrivalsmaint_btn_ext"; + pixel_x = -24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "jXI" = ( @@ -62891,12 +62742,10 @@ }, /area/station/hallway/secondary/exit) "kak" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/engineering/atmos) +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/space, +/area/space/nearstation) "kaB" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 6 @@ -63009,7 +62858,7 @@ "kdh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "kdx" = ( @@ -63151,7 +63000,7 @@ }, /area/station/engineering/hallway) "kgc" = ( -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "kgg" = ( @@ -63242,14 +63091,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door_control/shutter/east{ id = "Singularity"; name = "Containment Blast Doors" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -63259,9 +63107,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Control Room" - }, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -63275,6 +63122,7 @@ /area/station/engineering/atmos) "kil" = ( /obj/machinery/door/airlock/silver, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "kiq" = ( @@ -63343,9 +63191,8 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -63476,6 +63323,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/hallway/primary/port) +"klz" = ( +/obj/structure/weightmachine/weightlifter, +/obj/effect/landmark/start/assistant, +/turf/simulated/floor/plasteel, +/area/station/public/dorms) "klA" = ( /obj/structure/cable{ d1 = 2; @@ -63526,16 +63378,15 @@ /area/station/engineering/atmos) "kmA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -63706,18 +63557,6 @@ icon_state = "dark" }, /area/station/engineering/supermatter_room) -"kqT" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "krb" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/machinery/door/poddoor/preopen{ @@ -63795,8 +63634,8 @@ /obj/structure/sign/poster/contraband/random/north, /obj/item/clothing/mask/cigarette/random, /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -63921,7 +63760,7 @@ "kua" = ( /obj/structure/table/wood, /obj/machinery/power/apc/directional/west, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -63974,6 +63813,13 @@ /obj/effect/turf_decal/siding/wood, /turf/simulated/floor/wood/oak, /area/station/maintenance/abandonedbar) +"kuL" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint2) "kuW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/wardrobe/black, @@ -64222,9 +64068,8 @@ }, /area/station/command/office/hos) "kBe" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Prison Toilets" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" @@ -64285,7 +64130,10 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/research{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/genetics{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -64492,9 +64340,8 @@ }, /area/station/security/permabrig) "kEM" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -64548,10 +64395,8 @@ /area/station/public/dorms) "kGs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Emergency Supplies" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -64560,6 +64405,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -64636,10 +64482,7 @@ dir = 1; name = "Cryo Tank Storage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -64733,9 +64576,9 @@ /obj/structure/fans/tiny, /obj/machinery/door/airlock/external{ id_tag = "mining_home"; - locked = 1; - name = "Mining Dock Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plating, /area/station/supply/miningdock) @@ -64787,9 +64630,8 @@ /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "kKW" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Isolator" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/shutters/window/preopen{ dir = 1; id_tag = "durka2" @@ -64827,9 +64669,8 @@ /area/station/maintenance/apmaint) "kLn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -64844,7 +64685,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, /turf/simulated/floor/plasteel, /area/station/supply/storage) "kLp" = ( @@ -64863,7 +64704,7 @@ vent_link_id = "eng_sm_vent" }, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "kLR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -65000,6 +64841,7 @@ /area/station/maintenance/assembly_line) "kNX" = ( /obj/structure/chair/sofa/corp/left, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet/green, /area/station/command/bridge) "kNY" = ( @@ -65090,6 +64932,7 @@ cover_color = "#85130b"; dir = 1 }, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "red" @@ -65153,13 +64996,14 @@ /obj/machinery/door/airlock/virology{ autoclose = 0; id_tag = "viro_door_ext"; - locked = 1; - name = "Virology Lab External Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/north{ autolink_id = "viro_btn_ext"; layer = 3.6; - name = "Virology Lab Access Button" + name = "Virology Lab Access Button"; + req_one_access_txt = "39" }, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -65279,13 +65123,13 @@ "kSK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "kSP" = ( /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/welded{ - name = "Maintenance Airlock" - }, +/obj/machinery/door/airlock/welded, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -65309,6 +65153,7 @@ /obj/structure/toilet{ dir = 1 }, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -65371,6 +65216,7 @@ /obj/structure/chair/sofa/corp/left{ dir = 1 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet/purple, /area/station/service/bar) "kVw" = ( @@ -65561,11 +65407,16 @@ }, /obj/machinery/door/airlock/external{ id_tag = "assolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "assolar_btn_int"; + pixel_x = -24; + req_one_access_txt = "10;13" + }, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "kYC" = ( @@ -65645,12 +65496,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "laU" = ( -/obj/machinery/access_button{ - autolink_id = "fpsolar_btn_ext"; - pixel_x = 25; - pixel_y = -25; - req_one_access_txt = "13" - }, /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -65932,20 +65777,18 @@ }, /area/station/engineering/equipmentstorage) "lgb" = ( -/obj/machinery/access_button{ - autolink_id = "fssolar_btn_ext"; - pixel_x = -25; - pixel_y = -25; - req_one_access_txt = "10;13" +/obj/machinery/door/airlock/external{ + hackProof = 1; + id_tag = "emergency_home"; + locked = 1 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/station/engineering/solar/auxstarboard) +/area/station/hallway/secondary/exit) "lgO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -65987,9 +65830,8 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/port) "lhf" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Unisex Restrooms" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -66042,6 +65884,7 @@ dir = 5 }, /obj/structure/chair/sofa/corp/left, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/carpet/purple, /area/station/service/bar) "lie" = ( @@ -66096,9 +65939,9 @@ autoclose = 0; heat_proof = 1; id_tag = "incinerator_door_ext"; - locked = 1; - name = "Mixing Room Exterior Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button{ autolink_id = "incinerator_btn_ext"; layer = 3.1; @@ -66396,7 +66239,7 @@ }, /area/station/medical/morgue) "lqF" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -66440,6 +66283,7 @@ /area/station/maintenance/asmaint) "lrO" = ( /obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/welded, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -66532,6 +66376,15 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"lsX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "lte" = ( /obj/machinery/light/directional/west, /obj/machinery/papershredder, @@ -66609,11 +66462,9 @@ /turf/simulated/floor/plating, /area/station/science/misc_lab) "lvd" = ( -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -66621,6 +66472,8 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -66834,9 +66687,8 @@ /area/station/ai_monitored/storage/eva) "lzA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Emergency Entrance" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, @@ -66964,6 +66816,14 @@ /obj/effect/landmark/burnturf, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"lCt" = ( +/obj/machinery/turretid/stun{ + name = "AI Chamber Hallway Turret Control"; + pixel_y = 6; + req_one_access_txt = "75" + }, +/turf/simulated/wall/r_wall, +/area/station/aisat/hall) "lCu" = ( /obj/item/toy/crayon/spraycan, /obj/effect/decal/cleanable/dust, @@ -66977,10 +66837,15 @@ }, /obj/machinery/door/airlock/external{ id_tag = "assolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "assolar_btn_ext"; + pixel_x = -24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "lCQ" = ( @@ -67063,6 +66928,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/science/hallway) +"lEA" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/station/security/permabrig) "lED" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/sunglasses/blindfold, @@ -67104,6 +66978,7 @@ /area/station/maintenance/turbine) "lEW" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, @@ -67213,6 +67088,13 @@ icon_state = "darkyellowcorners" }, /area/station/engineering/atmos/control) +"lGD" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/turf/space, +/area/space/nearstation) "lGP" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/machinery/door/poddoor/shutters/preopen{ @@ -67345,7 +67227,7 @@ pixel_y = 6; pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_y = 4; pixel_x = -8 }, @@ -67628,7 +67510,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 + dir = 4 }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) @@ -67649,6 +67531,7 @@ /area/station/security/interrogation) "lPL" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) @@ -67742,9 +67625,6 @@ dir = 1 }, /obj/structure/window/reinforced, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ - dir = 1 - }, /obj/machinery/door/window/classic/normal{ layer = 3; req_one_access_txt = "50"; @@ -67763,6 +67643,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ + dir = 1 + }, /turf/simulated/floor/plating, /area/station/maintenance/disposal) "lQx" = ( @@ -67795,6 +67678,7 @@ /area/shuttle/pod_3) "lQV" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -67807,7 +67691,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "lQZ" = ( @@ -67829,7 +67712,7 @@ /turf/simulated/floor/grass, /area/station/service/hydroponics) "lRi" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 8 }, /obj/machinery/atmospherics/binary/pump{ @@ -67928,9 +67811,8 @@ }, /area/station/science/rnd) "lTB" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Solitary Confinement 1" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -68011,9 +67893,8 @@ /area/station/medical/reception) "lUK" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Chamber Observation" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -68264,6 +68145,17 @@ /obj/effect/decal/cleanable/blood/drip, /turf/simulated/floor/plating, /area/station/maintenance/aft) +"lYd" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/ntrep, +/turf/simulated/floor/plating, +/area/station/maintenance/apmaint) "lYm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -68550,7 +68442,7 @@ /area/station/command/office/cmo) "mcF" = ( /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -68629,7 +68521,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "mdX" = ( -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/cigarette/medical_marijuana, /obj/effect/landmark/damageturf, @@ -68692,6 +68584,15 @@ icon_state = "dark" }, /area/station/engineering/supermatter_room) +"mfu" = ( +/obj/machinery/door/airlock{ + id_tag = "toilet_ass1" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/public/toilet/lockerroom) "mfv" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "Singularity"; @@ -68921,9 +68822,8 @@ /area/station/supply/miningdock) "miq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -68940,9 +68840,8 @@ /area/station/science/hallway) "miF" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/lawyer/glass{ - name = "Internal Affairs Office" - }, +/obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "IAA" }, @@ -69055,9 +68954,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/command/hos/glass{ - name = "Head of Security Bedroom" - }, +/obj/machinery/door/airlock/command/hos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/security/hos, @@ -69114,7 +69012,7 @@ /area/station/telecomms/chamber) "mll" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -69214,9 +69112,8 @@ /area/station/engineering/hallway) "mnh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Chamber Hallway" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -69237,10 +69134,8 @@ }, /area/station/maintenance/abandonedbar) "moH" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Psychiatrist Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -69248,6 +69143,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/plating, /area/station/medical/psych) "moN" = ( @@ -69369,16 +69265,15 @@ /area/station/maintenance/aft) "mrd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity{ - name = "Secure Tech Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -69495,6 +69390,7 @@ /area/station/public/locker) "msY" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -69503,6 +69399,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "mtc" = ( @@ -69608,6 +69505,7 @@ /area/station/service/janitor) "mvm" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -69650,7 +69548,7 @@ /area/station/supply/storage) "mwO" = ( /obj/effect/decal/cleanable/dust, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -69755,8 +69653,8 @@ /area/station/security/brig) "mze" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/food/snacks/breadslice, +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -69858,15 +69756,21 @@ "mAZ" = ( /obj/machinery/door/airlock/external{ id_tag = "scibomb_door_ext"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button/west{ + autolink_id = "scibomb_btn_ext"; + pixel_y = 24; + req_one_access_txt = "10;13"; + pixel_x = 0 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "mBl" = ( @@ -69880,21 +69784,12 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "mBZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/access_button{ - autolink_id = "eng_atmos_btn_int"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "10;13" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/storage) +/obj/structure/closet/wardrobe/grey, +/turf/simulated/floor/plasteel, +/area/station/public/locker) "mCc" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering Checkpoint" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -69909,7 +69804,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) @@ -70080,9 +69974,8 @@ }, /area/station/security/main) "mEk" = ( -/obj/machinery/door/airlock/welded{ - name = "Maintenance Airlock" - }, +/obj/machinery/door/airlock/welded, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -70439,6 +70332,7 @@ pixel_y = -32 }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -70502,6 +70396,7 @@ /area/station/maintenance/fsmaint) "mNK" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -70593,6 +70488,7 @@ /area/station/service/hydroponics) "mPO" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "purplefull" @@ -70942,6 +70838,16 @@ icon_state = "dark" }, /area/station/security/interrogation) +"mYc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/landmark/start/artist, +/turf/simulated/floor/plasteel, +/area/station/public/dorms) "mYn" = ( /obj/structure/cable{ d1 = 4; @@ -70981,9 +70887,8 @@ }, /area/station/engineering/supermatter_room) "mZd" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -71017,6 +70922,7 @@ "mZp" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -71133,9 +71039,8 @@ /turf/simulated/floor/plasteel, /area/station/command/bridge) "nbA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -71186,9 +71091,8 @@ /turf/simulated/floor/wood/fancy/oak, /area/station/command/meeting_room) "nci" = ( -/obj/machinery/door/airlock/bananium{ - name = "Clown's Office" - }, +/obj/machinery/door/airlock/bananium, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/clown, /turf/simulated/floor/wood/oak, /area/station/service/clown) @@ -71332,7 +71236,7 @@ /area/station/maintenance/assembly_line) "neV" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -71344,6 +71248,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "nfo" = ( @@ -71384,7 +71289,6 @@ "ngQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/red, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "ngS" = ( @@ -71407,6 +71311,7 @@ /area/station/medical/psych) "ngT" = ( /obj/structure/chair/sofa/corp/left, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "nhc" = ( @@ -71490,15 +71395,6 @@ name = "Engineering Security Doors"; opacity = 0 }, -/obj/structure/plasticflaps{ - opacity = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/general{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 4 - }, /obj/machinery/door/window/reinforced/reversed{ dir = 4; name = "Drone Fabricator Room" @@ -71508,6 +71404,15 @@ dir = 8; location = "Engineering" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction{ + dir = 4 + }, +/obj/structure/plasticflaps{ + opacity = 1 + }, /turf/simulated/floor/plating, /area/station/engineering/dronefabricator) "nis" = ( @@ -71774,10 +71679,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/science{ - name = "Genetics Monkey Pen" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, +/obj/machinery/door/airlock/science, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -72108,9 +72013,9 @@ "nsq" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; - locked = 1; - name = "Labor Camp Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -72242,11 +72147,10 @@ name = "Engineering Security Doors"; opacity = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "nuM" = ( @@ -72306,7 +72210,7 @@ /area/station/security/brig) "nvN" = ( /turf/simulated/wall/r_wall, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "nvO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, @@ -72461,6 +72365,7 @@ /obj/structure/chair/sofa/corp/left{ dir = 1 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "nzd" = ( @@ -72476,9 +72381,8 @@ /area/station/command/bridge) "nzm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "Telecommunications Access" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -72491,7 +72395,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -72616,6 +72519,7 @@ /area/station/maintenance/apmaint) "nBw" = ( /obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -72637,7 +72541,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/command/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/command/bridge) "nBz" = ( @@ -72712,11 +72615,10 @@ /area/station/command/office/ce) "nCM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Chapel Office" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -73007,6 +72909,13 @@ }, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) +"nJA" = ( +/obj/structure/chair/stool{ + dir = 8 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "nJV" = ( /obj/machinery/access_button{ autolink_id = "evamaint_btn_ext"; @@ -73015,9 +72924,9 @@ }, /obj/machinery/door/airlock/external{ id_tag = "evamaint_door_ext"; - locked = 1; - name = "EVA External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) @@ -73510,6 +73419,7 @@ c_tag = "Bar West"; dir = 4 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "nUn" = ( @@ -73530,6 +73440,13 @@ /obj/machinery/firealarm, /turf/simulated/wall, /area/station/engineering/atmos) +"nVn" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/landmark/start/artist, +/turf/simulated/floor/wood/oak, +/area/station/service/library) "nVq" = ( /obj/machinery/light/directional/east, /obj/structure/table, @@ -73771,14 +73688,15 @@ /area/station/maintenance/apmaint) "nZN" = ( /obj/machinery/door/airlock/command/hop, -/obj/effect/mapping_helpers/airlock/access/any/command/hop, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/fancy/oak, /area/station/command/office/hop) "nZW" = ( @@ -73859,7 +73777,7 @@ /area/station/security/brig) "oaY" = ( /obj/effect/turf_decal/delivery/blue/hollow, -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -73876,12 +73794,12 @@ name = "Kitchen Desk" }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -74086,9 +74004,8 @@ /turf/simulated/floor/wood/oak, /area/station/security/permabrig) "ogg" = ( -/obj/machinery/door/airlock/research{ - name = "E.X.P.E.R.I-MENTOR Lab" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -74125,7 +74042,7 @@ "ogH" = ( /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ogI" = ( /turf/simulated/wall/r_wall, /area/station/medical/chemistry) @@ -74134,8 +74051,9 @@ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "ogL" = ( @@ -74274,9 +74192,9 @@ opacity = 0 }, /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance" + id_tag = "MedbayFoyerPort" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres, /obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ @@ -74310,7 +74228,7 @@ name = "Biohazard Shutter" }, /obj/effect/spawner/window/reinforced/plasma/grilled, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/engine, /area/station/science/misc_lab) "ojj" = ( @@ -74333,12 +74251,17 @@ "ojt" = ( /obj/machinery/door/airlock/external{ id_tag = "eng_sm_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "eng_sm_btn_ext"; + pixel_y = 24; + req_access_txt = "13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ojz" = ( /obj/structure/sign/poster/contraband/random/west, /obj/effect/decal/cleanable/dirt, @@ -74387,35 +74310,36 @@ /area/station/security/warden) "okb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/turf_decal/siding/wood{ dir = 6 }, /turf/simulated/floor/wood/oak, /area/station/maintenance/abandonedbar) "okf" = ( -/obj/machinery/access_button{ - autolink_id = "secmaint_btn_ext"; - pixel_x = -25; - pixel_y = -25; - req_one_access_txt = "13" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/fore) "okj" = ( /obj/machinery/door/airlock/external{ id_tag = "eng_sm_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "eng_sm_btn_int"; + pixel_y = 24; + req_access_txt = "13" + }, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "okB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -74606,7 +74530,6 @@ /turf/simulated/floor/engine, /area/station/science/toxins/mixing) "opa" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" @@ -74632,6 +74555,7 @@ /area/station/maintenance/apmaint) "oph" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -74655,6 +74579,7 @@ /area/station/science/hallway) "opY" = ( /obj/machinery/door/airlock/command/qm/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "qm" }, @@ -74673,9 +74598,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/supply/qm) "oqc" = ( @@ -74692,11 +74616,17 @@ "oqL" = ( /obj/machinery/door/airlock/external{ id_tag = "secmaint_door_int"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/manifold/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "secmaint_btn_int"; + name = "interior access button"; + pixel_y = -24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/fore) "oqZ" = ( @@ -74881,6 +74811,7 @@ /area/station/command/office/ntrep) "otJ" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -74889,7 +74820,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "otL" = ( @@ -75282,6 +75212,7 @@ /obj/machinery/door/airlock/medical/glass{ id = "surgery2" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -75290,10 +75221,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /obj/effect/mapping_helpers/airlock/polarized{ id = "surgery2" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -75303,7 +75234,7 @@ armed = 1 }, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "oBR" = ( @@ -75360,16 +75291,14 @@ }, /area/station/medical/reception) "oDq" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "oDE" = ( /obj/structure/window/reinforced{ dir = 4 @@ -75623,7 +75552,7 @@ }, /area/station/turret_protected/ai_upload) "oGU" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 8 }, /obj/machinery/atmospherics/binary/valve{ @@ -75658,7 +75587,6 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -76064,8 +75992,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/polarized{ id = "conference" }, @@ -76075,6 +76001,8 @@ /obj/machinery/door/airlock/command/glass{ id_tag = "conference" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/carpet/black, /area/station/command/meeting_room) "oPX" = ( @@ -76098,10 +76026,15 @@ "oQd" = ( /obj/machinery/door/airlock/external{ id_tag = "secmaint_door_ext"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "secmaint_btn_ext"; + req_one_access_txt = "13"; + pixel_y = 24 + }, /turf/simulated/floor/plating, /area/station/maintenance/fore) "oQe" = ( @@ -76212,6 +76145,12 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) +"oSl" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "oSm" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/rat/irish/Remi, @@ -76363,7 +76302,7 @@ /area/station/security/permabrig) "oUP" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ list_reagents = list("coffee"=0); pixel_x = 6; pixel_y = 4 @@ -76432,6 +76371,7 @@ "oVy" = ( /obj/effect/decal/cleanable/dust, /obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -76656,12 +76596,25 @@ /obj/machinery/alarm/directional/south, /turf/simulated/floor/plasteel, /area/station/maintenance/disposal) +"oYI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/clown, +/turf/simulated/floor/plating, +/area/station/maintenance/fsmaint) "oYM" = ( /obj/structure/safe/floor{ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -76710,6 +76663,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"paa" = ( +/obj/machinery/turretid/stun{ + name = "AI Upload Turret Control"; + pixel_y = 6; + req_access = list(75) + }, +/turf/simulated/wall/r_wall, +/area/station/turret_protected/ai_upload) "pak" = ( /obj/structure/rack, /obj/item/circuitboard/chem_heater{ @@ -76819,9 +76780,9 @@ heat_proof = 1; id_tag = "turbine_door_int"; locked = 1; - name = "Incinerator Exterior Airlock"; req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -76831,6 +76792,7 @@ autolink_id = "turbine_btn_int"; name = "Gas Turbine Airlock Control" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/maintenance/turbine) "pcF" = ( @@ -77052,15 +77014,6 @@ }, /turf/simulated/floor/plasteel, /area/station/command/office/hop) -"phU" = ( -/obj/machinery/access_button{ - autolink_id = "aisat_btn_ext"; - pixel_x = 25; - pixel_y = 25 - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "pic" = ( /obj/structure/chair/comfy/beige, /obj/effect/landmark/start/assistant, @@ -77124,9 +77077,9 @@ "piQ" = ( /obj/machinery/door/airlock/external{ id_tag = "admin_home"; - locked = 1; - name = "Arrival Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "pjc" = ( @@ -77213,9 +77166,9 @@ /area/station/public/vacant_office) "pkf" = ( /obj/machinery/door/airlock/external{ - name = "Arrival Airlock"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "pko" = ( @@ -77492,12 +77445,11 @@ /area/station/security/permabrig) "pom" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/cmo{ - name = "CMO's Bedroom" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/cmo, +/obj/machinery/door/airlock/command/cmo, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/medical/cmo, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -77743,9 +77695,9 @@ /area/station/security/prisonlockers) "psP" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "psT" = ( @@ -77775,6 +77727,13 @@ icon_state = "grimy" }, /area/station/maintenance/fsmaint) +"pty" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel{ + icon_state = "cmo" + }, +/area/station/security/permabrig) "ptz" = ( /obj/structure/cable{ d1 = 2; @@ -77836,9 +77795,9 @@ /area/station/engineering/solar/port) "puD" = ( /obj/machinery/door/airlock/bathroom{ - name = "Private Restroom"; id_tag = "toilet_sec_1" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -77888,7 +77847,7 @@ /turf/simulated/floor/wood/fancy/oak, /area/station/service/bar) "pvM" = ( -/obj/item/reagent_containers/food/drinks/mug/med{ +/obj/item/reagent_containers/drinks/mug/med{ pixel_y = 10 }, /obj/structure/table/glass, @@ -77984,10 +77943,8 @@ }, /area/station/science/misc_lab) "pwS" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -77999,6 +77956,8 @@ id_tag = "engsm2"; name = "SM Radiation Security Lock" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -78072,9 +78031,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "pyl" = ( -/obj/item/kirbyplants{ - icon_state = "plant-32" - }, +/obj/item/kirbyplants/plant32, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whiteblue" @@ -78155,9 +78112,9 @@ "pzZ" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_int"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -78747,16 +78704,15 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "pNw" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Isolator" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /obj/machinery/door/poddoor/shutters/window/preopen{ dir = 1; id_tag = "durka1" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -79067,13 +79023,13 @@ dir = 1; name = "Secure Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/psychology{ - dir = 1 - }, /obj/machinery/door/poddoor/shutters/window/preopen{ dir = 1; id_tag = "durka1" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/psychology{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -79099,25 +79055,7 @@ /obj/machinery/light/small/directional/south, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) -"pTJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/clown, -/turf/simulated/floor/plating, -/area/station/maintenance/fsmaint) "pTK" = ( -/obj/machinery/access_button{ - autolink_id = "arrivalsmaint_btn_int"; - pixel_x = -25; - pixel_y = 25; - req_one_access_txt = "13" - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 @@ -79214,6 +79152,18 @@ icon_state = "dark" }, /area/station/engineering/atmos/control) +"pVq" = ( +/obj/machinery/airlock_controller/air_cycler{ + ext_button_link_id = "arrivalsmaint_btn_ext"; + ext_door_link_id = "arrivalsmaint_door_ext"; + int_button_link_id = "arrivalsmaint_btn_int"; + int_door_link_id = "arrivalsmaint_door_int"; + pixel_x = 25; + req_one_access_txt = "13"; + vent_link_id = "arrivalsmaint_vent" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/fpmaint2) "pVu" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -79439,9 +79389,8 @@ /area/station/command/office/hop) "qaD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Toxins Storage" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ d1 = 1; @@ -79642,6 +79591,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/effect/landmark/start/barber, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -79792,15 +79742,16 @@ /area/station/maintenance/apmaint) "qhO" = ( /obj/machinery/door/airlock/bathroom{ - id_tag = "toilet_unitb"; - name = "Unit B" + id_tag = "toilet_unitb" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, /area/station/public/toilet) "qhY" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/purple, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) @@ -79822,12 +79773,11 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/engineering/glass{ - name = "SMES Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/smes) "qiN" = ( @@ -80224,8 +80174,8 @@ /area/station/engineering/break_room) "qpi" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, /turf/simulated/floor/plasteel, @@ -80479,13 +80429,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "qtm" = ( -/obj/machinery/access_button{ - autolink_id = "secmaint_btn_int"; - name = "interior access button"; - pixel_x = 9; - pixel_y = -25; - req_one_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, @@ -80678,6 +80621,7 @@ /obj/machinery/camera{ c_tag = "Bridge Lounge Zone Center" }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet/green, /area/station/command/bridge) "qwV" = ( @@ -80851,6 +80795,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "qAH" = ( @@ -81230,6 +81175,7 @@ /area/station/maintenance/apmaint) "qFV" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -81243,9 +81189,8 @@ /area/station/maintenance/fsmaint) "qFW" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -81444,6 +81389,7 @@ "qJx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/hop, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -81452,7 +81398,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/command/hop, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/hop) "qJB" = ( @@ -81519,9 +81465,8 @@ /area/station/science/xenobiology) "qKv" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Antechamber" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -81539,7 +81484,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "qKG" = ( @@ -81647,9 +81592,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "qLK" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -81664,11 +81608,16 @@ "qMa" = ( /obj/machinery/door/airlock/external{ id_tag = "fpmaint_door_int"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "fpmaint_btn_int"; + pixel_x = -24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "qMy" = ( @@ -81725,9 +81674,9 @@ "qNk" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_int"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -81843,10 +81792,8 @@ /turf/simulated/floor/wood/oak, /area/station/public/vacant_office) "qOP" = ( -/obj/machinery/door/airlock/atmos{ - name = "Fore-Starboard Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, @@ -81948,6 +81895,7 @@ }, /obj/effect/landmark/start/security_officer, /obj/machinery/light/directional/south, +/obj/machinery/light_switch/south, /turf/simulated/floor/plasteel, /area/station/security/main) "qQO" = ( @@ -81956,9 +81904,8 @@ id_tag = "Biohazard"; name = "Biohazard Shutter" }, -/obj/machinery/door/airlock/research{ - name = "Toxins Mixing Room" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82012,6 +81959,12 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/port) +"qSh" = ( +/obj/effect/landmark/start/artist, +/turf/simulated/floor/plasteel{ + icon_state = "vault" + }, +/area/station/public/dorms) "qSr" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -82053,6 +82006,7 @@ "qTA" = ( /obj/structure/chair/sofa/right, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "qTK" = ( @@ -82080,11 +82034,11 @@ /area/space/nearstation) "qTQ" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -4; pixel_y = 6 }, @@ -82126,17 +82080,11 @@ /obj/structure/table, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) -"qVc" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/apmaint) "qVf" = ( /obj/structure/disposalpipe/segment/corner, /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 + dir = 9 }, /turf/space, /area/space/nearstation) @@ -82157,6 +82105,7 @@ /area/station/maintenance/fsmaint) "qVG" = ( /obj/machinery/door/airlock/command/hop, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -82164,7 +82113,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/command/hop, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/carpet, /area/station/command/office/hop) "qVK" = ( @@ -82291,6 +82239,14 @@ icon_state = "bar" }, /area/station/security/permabrig) +"qYn" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "qYr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -82392,9 +82348,9 @@ /area/station/maintenance/aft) "raG" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "raH" = ( @@ -82465,15 +82421,12 @@ c_tag = "AI Satellite Antechamber South"; dir = 4 }, -/obj/machinery/turretid/stun{ - control_area = "\improper AI Satellite Atmospherics"; - name = "AI Satellite Atmospherics Turret Control"; - pixel_x = -28; - req_one_access_txt = "75" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/sign/securearea{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkbluecorners" @@ -82817,12 +82770,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/atmos{ - name = "Turbine Access" - }, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/catwalk, /area/station/maintenance/turbine) "riJ" = ( @@ -82888,7 +82840,7 @@ "rkL" = ( /obj/effect/decal/cleanable/dirt, /obj/item/seeds/cannabis, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "rkR" = ( @@ -83197,10 +83149,11 @@ "rtA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/science{ - id_tag = "GeneticsDoor"; - name = "Genetics" + id_tag = "GeneticsDoor" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/effect/mapping_helpers/airlock/access/all/medical/genetics, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -83246,10 +83199,8 @@ "ruR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Control Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -83257,6 +83208,7 @@ name = "Atmos Blast Door"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkyellow" @@ -83381,7 +83333,7 @@ "rxp" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "rxK" = ( /obj/structure/cable{ d1 = 1; @@ -83392,7 +83344,6 @@ dir = 1; name = "AI Core Door" }, -/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ dir = 1 }, @@ -83534,9 +83485,8 @@ /area/station/maintenance/abandonedbar) "rAN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Toxins Launch Room" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -83629,6 +83579,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/wood/fancy/cherry, /area/station/service/bar/atrium) "rDM" = ( @@ -83650,7 +83601,7 @@ /area/space/nearstation) "rDV" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -83790,23 +83741,29 @@ }, /area/station/medical/virology) "rFZ" = ( -/obj/machinery/access_button/west{ - autolink_id = "scibomb_btn_ext"; - pixel_y = 25; - req_one_access_txt = "10;13" - }, -/obj/structure/lattice/catwalk, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/space, -/area/space/nearstation) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint2) "rGa" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "rGR" = ( @@ -83967,6 +83924,15 @@ icon_state = "vault" }, /area/station/service/hydroponics) +"rKP" = ( +/obj/machinery/door/airlock{ + id_tag = "toilet_ass2" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/station/public/toilet/lockerroom) "rKV" = ( /turf/simulated/wall, /area/station/science/hallway) @@ -84088,14 +84054,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/door_control/shutter/east{ id = "Singularity"; name = "Containment Blast Doors" }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engine Room" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -84216,9 +84181,8 @@ /area/station/engineering/smes) "rQn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Evidence Storage" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -84230,7 +84194,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84303,6 +84267,7 @@ name = "Prison Intercom (General)"; pixel_y = 24 }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -84366,6 +84331,7 @@ /area/station/science/xenobiology) "rSe" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/blood/tracks, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -84507,6 +84473,7 @@ /obj/structure/sign/poster/contraband/ambrosia_vulgaris{ pixel_x = 32 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "rWn" = ( @@ -84732,7 +84699,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "rZF" = ( /obj/structure/cable{ d1 = 2; @@ -84891,24 +84858,13 @@ icon_state = "brown" }, /area/station/supply/storage) -"sds" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/access_button{ - autolink_id = "eng_sm_btn_ext"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "10;13" - }, -/turf/space, -/area/space/nearstation) "sdu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Maintenance" - }, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "sdw" = ( @@ -84938,6 +84894,7 @@ /obj/structure/chair/sofa/corp/right{ dir = 8 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "sec" = ( @@ -85033,9 +84990,9 @@ "sft" = ( /obj/machinery/door/airlock/external{ id_tag = "supply_home"; - locked = 1; - name = "Cargo Docking Hatch" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/supply/storage) @@ -85088,6 +85045,7 @@ /area/station/service/chapel) "shi" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -85104,6 +85062,13 @@ icon_state = "yellow" }, /area/station/hallway/primary/aft) +"shB" = ( +/obj/effect/landmark/start/dealer, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "browncorner" + }, +/area/station/hallway/primary/central/sw) "sim" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -85141,6 +85106,7 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -85162,9 +85128,8 @@ /area/station/command/meeting_room) "siM" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/bathroom{ - name = "Prison Toilets" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" @@ -85191,6 +85156,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "sjM" = ( @@ -85274,10 +85240,15 @@ "skl" = ( /obj/machinery/door/airlock/external{ id_tag = "fpmaint_door_ext"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "fpmaint_btn_ext"; + pixel_x = 24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "skD" = ( @@ -85310,6 +85281,7 @@ /obj/machinery/door/airlock/maintenance{ locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "slC" = ( @@ -85384,7 +85356,7 @@ /area/station/maintenance/apmaint) "smz" = ( /obj/effect/spawner/window/reinforced/plasma/grilled, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/station/science/toxins/mixing) "smJ" = ( @@ -85499,9 +85471,8 @@ }, /area/station/engineering/atmos) "sol" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -85602,6 +85573,7 @@ dir = 1 }, /obj/item/bedsheet/orange, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -85724,16 +85696,14 @@ /area/station/security/permabrig) "sst" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Teleporter Room" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, /obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -85808,7 +85778,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "stp" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -85855,10 +85825,8 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Control Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/door/poddoor{ density = 0; @@ -85867,6 +85835,7 @@ name = "Atmos Blast Door"; opacity = 0 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkyellow" @@ -86073,8 +86042,8 @@ /area/station/supply/office) "syc" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -86253,9 +86222,8 @@ /turf/simulated/floor/carpet/black, /area/station/command/meeting_room) "sBh" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Prisoner Lockers" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -86274,7 +86242,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) "sBi" = ( @@ -86282,14 +86250,9 @@ /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "sBx" = ( -/obj/structure/closet/wardrobe/black, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/radio/intercom/directional/west, -/obj/structure/window/reinforced{ - dir = 1 - }, +/obj/machinery/atmospherics/portable/scrubber, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/west, /turf/simulated/floor/plasteel, /area/station/public/locker) "sBN" = ( @@ -86344,9 +86307,8 @@ /turf/simulated/floor/wood/fancy/cherry, /area/station/command/office/captain) "sBW" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Robotics Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard"; name = "Biohazard Shutter" @@ -86431,11 +86393,10 @@ "sDr" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/item/food/snacks/donkpocket, /turf/simulated/floor/plating, /area/station/maintenance/aft) "sDy" = ( -/obj/effect/spawner/wire_splicing/thirty, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -86455,12 +86416,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/access_button{ - autolink_id = "fssolar_btn_int"; - pixel_x = 25; - pixel_y = 25; - req_one_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, @@ -86574,9 +86529,8 @@ /turf/simulated/floor/plasteel, /area/station/supply/office) "sFh" = ( -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -86726,6 +86680,7 @@ /area/station/medical/ward) "sHW" = ( /obj/machinery/door/airlock/welded, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/cable{ d1 = 1; @@ -86805,8 +86760,7 @@ }, /obj/machinery/door_control/shutter/south{ id = "engsm"; - name = "Radiation Shutters Control"; - req_access_txt = "10" + name = "Radiation Shutters Control" }, /turf/simulated/floor/plasteel{ icon_state = "darkyellow" @@ -86876,6 +86830,7 @@ /obj/structure/chair/wood{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "sMc" = ( @@ -86976,15 +86931,20 @@ "sOr" = ( /obj/machinery/door/airlock/external{ id_tag = "fpsolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "fpsolar_btn_ext"; + pixel_x = 24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "sOE" = ( @@ -87073,7 +87033,6 @@ /area/station/medical/virology) "sPz" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -87091,9 +87050,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/multi_tile/security/glass{ - name = "Security Office" - }, +/obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/station/security/main) "sPF" = ( @@ -87188,6 +87147,7 @@ dir = 8 }, /obj/effect/landmark/damageturf, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) "sSa" = ( @@ -87210,6 +87170,7 @@ /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "sSj" = ( @@ -87733,16 +87694,15 @@ /turf/simulated/floor/wood/fancy/oak, /area/station/maintenance/abandonedbar) "tcw" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/engineering/supermatter_room) "tcI" = ( @@ -87785,6 +87745,7 @@ /area/station/maintenance/apmaint) "tde" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -87844,6 +87805,17 @@ /area/station/command/office/rd) "tep" = ( /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/classic/reversed{ + dir = 8; + name = "Custodial Closet" + }, +/obj/structure/window/reinforced, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/janitor{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/service/janitor) "teD" = ( @@ -87913,6 +87885,7 @@ /area/station/maintenance/fsmaint) "tfT" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88182,7 +88155,7 @@ dir = 1; name = "Security Delivery" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/doors{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -88348,8 +88321,11 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/mirror{ + pixel_x = 28 + }, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "showroomfloor" }, /area/station/public/toilet/lockerroom) "tlI" = ( @@ -88376,10 +88352,9 @@ name = "Engineering Security Doors"; opacity = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/aft) "tmd" = ( @@ -88399,7 +88374,7 @@ /turf/simulated/floor/plasteel/stairs/left{ dir = 8 }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "tmS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -88797,15 +88772,6 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume{ autolink_id = "arrivalsmaint_vent" }, -/obj/machinery/airlock_controller/air_cycler{ - ext_button_link_id = "arrivalsmaint_btn_ext"; - ext_door_link_id = "arrivalsmaint_door_ext"; - int_button_link_id = "arrivalsmaint_btn_int"; - int_door_link_id = "arrivalsmaint_door_int"; - pixel_x = 25; - req_one_access_txt = "13"; - vent_link_id = "arrivalsmaint_vent" - }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "twp" = ( @@ -88840,6 +88806,7 @@ /area/station/science/xenobiology) "twH" = ( /obj/structure/chair/sofa/corp/right, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet/green, /area/station/command/bridge) "twL" = ( @@ -89490,9 +89457,9 @@ "tKA" = ( /obj/machinery/door/airlock/external{ id_tag = "evamaint_door_int"; - locked = 1; - name = "EVA Internal Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) @@ -89551,7 +89518,7 @@ "tLs" = ( /obj/structure/safe/floor, /obj/item/coin/mythril, -/obj/item/stack/spacecash/c1000, +/obj/item/stack/spacecash/c200, /obj/item/instrument/violin/golden, /turf/simulated/floor/carpet/royalblack, /area/station/maintenance/apmaint) @@ -89615,12 +89582,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/access_button{ - autolink_id = "assolar_btn_int"; - pixel_x = -25; - pixel_y = -25; - req_one_access_txt = "10;13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -89641,7 +89602,7 @@ /area/station/service/library) "tNc" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) "tNg" = ( @@ -89684,7 +89645,7 @@ /turf/simulated/floor/plasteel, /area/station/security/main) "tOn" = ( -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /obj/machinery/requests_console{ announcementConsole = 1; department = "Captain's Desk"; @@ -89897,15 +89858,14 @@ /area/station/security/permabrig) "tRD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Reception" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "tRE" = ( @@ -89952,7 +89912,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "tSx" = ( /obj/structure/cable{ d1 = 4; @@ -90008,11 +89968,16 @@ }, /obj/machinery/door/airlock/external{ id_tag = "fssolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "fssolar_btn_int"; + pixel_x = 24; + req_one_access_txt = "13" + }, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "tTf" = ( @@ -90121,6 +90086,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "tVF" = ( @@ -90165,9 +90131,8 @@ }, /area/station/command/office/hos) "tWt" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -90189,17 +90154,17 @@ /area/station/science/test_chamber) "tWD" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -90289,7 +90254,7 @@ /area/station/security/permabrig) "tXI" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -90471,6 +90436,14 @@ }, /turf/simulated/floor/plasteel/airless, /area/station/science/toxins/test) +"uag" = ( +/obj/machinery/turretid/stun{ + name = "AI Satellite Atmospherics Turret Control"; + pixel_x = 4; + req_one_access_txt = "75" + }, +/turf/simulated/wall/r_wall, +/area/station/aisat/atmos) "uax" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -90537,12 +90510,6 @@ }, /area/station/command/office/hop) "ubK" = ( -/obj/machinery/access_button{ - autolink_id = "fpmaint_btn_int"; - pixel_x = -25; - pixel_y = -25; - req_one_access_txt = "13" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, @@ -90631,8 +90598,8 @@ /area/station/science/toxins/test) "uds" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "udz" = ( @@ -90842,11 +90809,6 @@ }, /area/station/medical/paramedic) "uhA" = ( -/obj/machinery/access_button/east{ - autolink_id = "scibomb_btn_int"; - pixel_y = 25; - req_one_access_txt = "10;13" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -90927,7 +90889,7 @@ dir = 10; icon_state = "darkblue" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ujX" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -91029,8 +90991,8 @@ /area/station/medical/medbay2) "uls" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, /obj/effect/landmark/damageturf, @@ -91099,16 +91061,15 @@ /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "umw" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -91171,10 +91132,9 @@ name = "Engineering Security Doors"; opacity = 0 }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Drone Fabricator Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -91245,9 +91205,9 @@ /area/station/engineering/gravitygenerator) "upW" = ( /obj/machinery/door/airlock/medical/glass{ - id_tag = "medcabin2"; - name = "Patients Room" + id_tag = "medcabin2" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -91264,9 +91224,8 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Storage" - }, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/storage) @@ -91369,9 +91328,9 @@ /area/station/hallway/primary/central/west) "usw" = ( /obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance"; security_level = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" @@ -91382,7 +91341,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "usH" = ( @@ -91450,7 +91409,7 @@ /area/station/security/permabrig) "utP" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pie{ +/obj/item/food/snacks/pie{ pixel_y = 2 }, /obj/machinery/power/apc/directional/east, @@ -91525,6 +91484,7 @@ /area/station/engineering/atmos/storage) "uuX" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -91647,9 +91607,8 @@ }, /area/station/science/robotics) "uwB" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Gravity Generator Foyer" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/turf_decal/delivery, @@ -91659,7 +91618,6 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" @@ -91978,15 +91936,15 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "uBQ" = ( -/obj/machinery/access_button{ - autolink_id = "fpmaint_btn_ext"; - pixel_x = 25; - pixel_y = 8; - req_one_access_txt = "13" +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/obj/effect/spawner/wire_splicing/thirty, +/turf/simulated/floor/plating, +/area/station/maintenance/apmaint) "uCf" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/unary/passive_vent, @@ -92039,19 +91997,18 @@ /area/station/public/dorms) "uCT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/lawyer/glass{ - name = "Courtroom" - }, +/obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Courtroom" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/wood/fancy, /area/station/legal/courtroom) "uCU" = ( @@ -92076,6 +92033,7 @@ /area/station/science/toxins/mixing) "uDS" = ( /obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "uEc" = ( @@ -92100,9 +92058,9 @@ "uFa" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_ext"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/access_button/south{ autolink_id = "perma_btn_ext"; @@ -92154,7 +92112,7 @@ /area/station/security/permabrig) "uGf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/grilledcheese{ +/obj/item/food/snacks/grilledcheese{ pixel_y = 9 }, /turf/simulated/floor/wood/oak, @@ -92192,9 +92150,8 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "uGG" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Prison Library" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, @@ -92305,11 +92262,16 @@ "uJB" = ( /obj/machinery/door/airlock/external{ id_tag = "evamaint_door_int"; - locked = 1; - name = "EVA Internal Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button{ + autolink_id = "evamaint_btn_int"; + req_one_access_txt = "13"; + pixel_x = 24 + }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "uKa" = ( @@ -92412,6 +92374,15 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) +"uLw" = ( +/obj/machinery/door/airlock/external{ + id_tag = "secmaint_door_ext"; + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/simulated/floor/plating, +/area/station/maintenance/fore) "uLN" = ( /obj/structure/window/reinforced{ dir = 1 @@ -92505,6 +92476,7 @@ /obj/structure/chair/sofa/corp/right{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "uNj" = ( @@ -92529,13 +92501,13 @@ /area/station/security/warden) "uOF" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plating, /area/station/maintenance/fore) "uOG" = ( @@ -92560,14 +92532,13 @@ /obj/machinery/door/airlock/research{ autoclose = 0; id_tag = "xeno_door_int"; - locked = 1; - name = "Xenobiology Internal Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button{ autolink_id = "xeno_btn_int"; name = "Xenobiology Access Button"; - pixel_x = 8; - pixel_y = 28; + pixel_y = 24; req_one_access_txt = "55" }, /obj/effect/turf_decal/stripes, @@ -92707,7 +92678,7 @@ /area/station/engineering/supermatter_room) "uRK" = ( /obj/item/organ/internal/heart/vox, -/obj/item/reagent_containers/food/snacks/fried_vox, +/obj/item/food/snacks/fried_vox, /obj/structure/table, /obj/item/scalpel, /turf/simulated/floor/plating, @@ -92774,9 +92745,9 @@ "uTo" = ( /obj/machinery/door/airlock/external{ id_tag = "secmaint_door_int"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -92832,6 +92803,24 @@ /obj/machinery/atmospherics/unary/tank/air, /turf/simulated/floor/plating, /area/station/aisat/atmos) +"uVd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "uVj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -93123,9 +93112,9 @@ /obj/machinery/door/airlock/research{ autoclose = 0; id_tag = "xeno_door_ext"; - locked = 1; - name = "Xenobiology External Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/west{ autolink_id = "xeno_btn_ext"; name = "Xenobiology Access Button"; @@ -93201,16 +93190,15 @@ /obj/structure/sign/securearea{ pixel_x = -32 }, -/obj/machinery/door/airlock/command{ - name = "Teleport Access" - }, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -93247,7 +93235,7 @@ /area/station/engineering/atmos) "vbQ" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -93330,9 +93318,8 @@ /area/station/maintenance/assembly_line) "vdh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/bathroom{ - name = "Unisex Restrooms" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -93380,6 +93367,7 @@ /area/station/security/processing) "vep" = ( /obj/machinery/door/airlock/freezer, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -93432,11 +93420,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/machinery/door/airlock/multi_tile/security/glass{ - dir = 2; - name = "Security Office" + dir = 2 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -93623,6 +93611,7 @@ /area/station/engineering/engine/supermatter) "vhf" = ( /obj/structure/chair, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint) "vhs" = ( @@ -93786,13 +93775,14 @@ icon_state = "2-8" }, /obj/machinery/door/airlock/command/cmo/glass{ - id_tag = "cmoofficedoor"; - name = "CMO's Office" + id_tag = "cmoofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/cmo, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "CMO" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/cmo, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull" }, @@ -93888,6 +93878,7 @@ /obj/structure/chair{ dir = 8 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) "vnZ" = ( @@ -93930,14 +93921,14 @@ /area/station/medical/chemistry) "vpE" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "vpR" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Solitary Confinement 2" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -94064,6 +94055,7 @@ cover_color = "#85130b"; dir = 1 }, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -94202,7 +94194,7 @@ /area/station/science/rnd) "vvd" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) @@ -94472,9 +94464,8 @@ /area/station/medical/sleeper) "vzI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Research and Development" - }, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -94538,7 +94529,6 @@ /area/station/maintenance/fsmaint) "vBs" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -94561,15 +94551,17 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/command/ce/glass{ - id_tag = "ceofficedoor"; - name = "Chief Engineer's Office" + id_tag = "ceofficedoor" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/ce, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/station/command/office/ce) "vBv" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter{ layer = 3.3 }, @@ -94682,6 +94674,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/start/bar, /turf/simulated/floor/carpet/black, /area/station/service/bar/atrium) "vDt" = ( @@ -94692,11 +94685,16 @@ }, /obj/machinery/door/airlock/external{ id_tag = "eng_n_tesla_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/access_button{ + autolink_id = "eng_n_tesla_btn_ext"; + pixel_y = -24; + req_access_txt = "10;13" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -95099,9 +95097,9 @@ "vKE" = ( /obj/machinery/door/airlock/external{ id_tag = "trade_dock"; - locked = 1; - name = "Arrival Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "vKP" = ( @@ -95293,13 +95291,6 @@ icon_state = "whitepurple" }, /area/station/science/hallway) -"vOs" = ( -/obj/machinery/door/airlock/maintenance{ - locked = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "vOy" = ( /obj/effect/spawner/random_spawners/blood_maybe, /obj/effect/spawner/lootdrop/maintenance, @@ -95314,9 +95305,9 @@ /area/station/security/permabrig) "vOE" = ( /obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medical Supplies" + id_tag = "MedbayFoyer" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -95345,8 +95336,8 @@ /area/station/security/permabrig) "vPr" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; @@ -95355,6 +95346,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"vPw" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/fpmaint2) "vPz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -95434,7 +95436,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "vQT" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ @@ -95473,15 +95475,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "vRp" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Blueshield Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/blueshield, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plating, /area/station/maintenance/aft) "vRG" = ( @@ -95525,7 +95526,6 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" @@ -95563,7 +95563,7 @@ dir = 8; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "vSH" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, @@ -95827,6 +95827,7 @@ /area/station/science/xenobiology) "vYb" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -95981,6 +95982,7 @@ }, /obj/structure/chair/sofa/corp/right, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet/purple, /area/station/service/bar) "wbr" = ( @@ -96355,7 +96357,8 @@ electrified_until = -1; locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/chemistry, /turf/simulated/floor/plating, /area/station/maintenance/aft) "wkM" = ( @@ -96491,9 +96494,8 @@ }, /area/station/command/teleporter) "wny" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Restaurant" - }, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -96723,9 +96725,8 @@ /area/station/maintenance/abandonedbar) "wri" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -97293,12 +97294,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -97319,6 +97320,7 @@ pixel_y = 4 }, /obj/structure/table/glass, +/obj/item/radio/intercom/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitegreen" @@ -97571,9 +97573,8 @@ /area/station/maintenance/turbine) "wIc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Teleport Access" - }, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -97874,9 +97875,8 @@ }, /area/station/science/hallway) "wNp" = ( -/obj/machinery/door/airlock/external{ - name = "Toxins Test Chamber" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -97886,6 +97886,7 @@ /area/station/science/toxins/test) "wNr" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fore) "wNE" = ( @@ -98080,15 +98081,16 @@ /area/station/maintenance/fpmaint) "wQQ" = ( /obj/machinery/door/airlock/engineering/glass{ - heat_proof = 1; - name = "Supermatter Chamber" + heat_proof = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "wRz" = ( @@ -98108,9 +98110,8 @@ /area/station/medical/medbay2) "wRN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Firing Range" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -98152,9 +98153,8 @@ name = "Quarantine Lockdown"; opacity = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -98204,9 +98204,9 @@ /area/station/maintenance/asmaint) "wVH" = ( /obj/machinery/door/airlock/security/glass{ - name = "Prisoner Oversight"; req_one_access_txt = "1" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -98223,7 +98223,7 @@ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -98301,9 +98301,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/engineering{ - name = "Fore Starboard Solar Access" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/maintenance/auxsolarstarboard) @@ -98314,6 +98313,16 @@ icon_state = "green" }, /area/station/service/hydroponics) +"wXK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "yellow" + }, +/area/station/engineering/atmos) "wYg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -98635,15 +98644,17 @@ }, /area/station/medical/reception) "xdO" = ( -/obj/machinery/access_button{ - autolink_id = "arrivalsmaint_btn_ext"; - pixel_x = -25; - pixel_y = -25; - req_one_access_txt = "13" +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "xdS" = ( /obj/structure/table/wood, /obj/item/storage/bag/dice{ @@ -98714,6 +98725,27 @@ icon_state = "freezerfloor" }, /area/station/science/robotics) +"xeC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/effect/spawner/wire_splicing/thirty, +/turf/simulated/floor/plating, +/area/station/maintenance/port) "xeG" = ( /obj/structure/chair/sofa/corp/left, /turf/simulated/floor/plasteel{ @@ -98807,7 +98839,7 @@ dir = 4; icon_state = "darkbluecorners" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "xgn" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -98833,9 +98865,8 @@ "xgz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Reception" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/medical/general, @@ -98973,9 +99004,9 @@ /obj/machinery/door/airlock/external{ hackProof = 1; id_tag = "emergency_home"; - locked = 1; - name = "Escape Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -99071,9 +99102,8 @@ /area/station/maintenance/aft) "xkG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Service Bay" - }, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -99107,6 +99137,13 @@ /obj/item/poster/random_contraband, /turf/simulated/floor/plating, /area/station/maintenance/aft) +"xlx" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/uncertain, +/turf/simulated/floor/plasteel, +/area/station/maintenance/aft) "xlV" = ( /turf/simulated/floor/plating, /area/station/engineering/supermatter_room) @@ -99292,9 +99329,9 @@ heat_proof = 1; id_tag = "turbine_door_ext"; locked = 1; - name = "Incinerator Interior Airlock"; req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/airlock_controller/access_controller{ ext_button_link_id = "turbine_btn_ext"; ext_door_link_id = "turbine_door_ext"; @@ -99308,6 +99345,7 @@ autolink_id = "turbine_btn_ext"; name = "Gas Turbine Airlock Control" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/maintenance/turbine) "xqa" = ( @@ -99348,15 +99386,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "xqL" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Nanotrasen Representative Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/ntrep, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "xqV" = ( @@ -99709,11 +99746,6 @@ icon_state = "whitegreen" }, /area/station/medical/virology) -"xwi" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint2) "xwS" = ( /obj/machinery/particle_accelerator/control_box, /obj/structure/cable/yellow, @@ -99836,9 +99868,8 @@ }, /area/station/engineering/tech_storage) "xzY" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mining Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99914,6 +99945,7 @@ /area/station/engineering/gravitygenerator) "xBC" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint2) @@ -100010,7 +100042,7 @@ "xEb" = ( /obj/effect/decal/cleanable/dust, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin{ pixel_x = -5; pixel_y = 9 }, @@ -100158,10 +100190,10 @@ /area/station/maintenance/abandonedbar) "xHy" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_x = -6 }, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_y = 10; pixel_x = 8 }, @@ -100251,7 +100283,7 @@ /area/station/medical/surgery/secondary) "xII" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pistachios, +/obj/item/food/snacks/pistachios, /obj/item/poster/random_contraband, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -100622,6 +100654,7 @@ /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) "xOQ" = ( @@ -100648,6 +100681,7 @@ /area/station/security/permabrig) "xPb" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -100797,9 +100831,8 @@ /area/station/maintenance/fsmaint) "xRk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/service/chapel) @@ -100928,7 +100961,7 @@ /area/station/maintenance/fpmaint2) "xSF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 8; pixel_x = -6 }, @@ -101149,13 +101182,8 @@ }, /area/station/security/armory/secure) "xWM" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, +/obj/structure/table, +/obj/item/storage/backpack/duffel, /turf/simulated/floor/plasteel, /area/station/public/locker) "xWN" = ( @@ -101316,7 +101344,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup, +/obj/item/reagent_containers/drinks/trophy/bronze_cup, /obj/machinery/light/small/directional/north, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -101340,9 +101368,8 @@ /turf/simulated/floor/carpet, /area/station/service/chapel) "xZh" = ( -/obj/machinery/door/airlock/virology{ - name = "Virology Bedroom" - }, +/obj/machinery/door/airlock/virology, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -101396,9 +101423,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/psych/glass{ - id_tag = "psych_bolt"; - name = "Psychiatrist Office" + id_tag = "psych_bolt" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "psych" }, @@ -101413,9 +101440,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -101424,6 +101448,9 @@ /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -101458,12 +101485,6 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/obj/machinery/access_button{ - autolink_id = "eng_n_tesla_btn_int"; - pixel_x = -25; - pixel_y = -25; - req_access_txt = "10;13" - }, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -101520,9 +101541,8 @@ /area/station/maintenance/fsmaint) "ydv" = ( /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/welded{ - name = "Maintenance Airlock" - }, +/obj/machinery/door/airlock/welded, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -101712,16 +101732,6 @@ icon_state = "dark" }, /area/station/security/interrogation) -"yhm" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/station/maintenance/apmaint) "yhr" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -101904,9 +101914,9 @@ "yjR" = ( /obj/machinery/door/airlock/external{ id_tag = "scibomb_door_int"; - locked = 1; - name = "External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -101916,6 +101926,12 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/access_button/east{ + autolink_id = "scibomb_btn_int"; + pixel_y = 24; + req_one_access_txt = "10;13"; + pixel_x = 0 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "yjV" = ( @@ -101935,7 +101951,7 @@ dir = 6; icon_state = "darkblue" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ykt" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -102005,9 +102021,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/atmos/glass{ - name = "Supermatter Atmospheric Supplies" - }, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -113721,7 +113736,7 @@ aII aII aHl vEo -aVL +vPw aQw aRe aSd @@ -113971,9 +113986,9 @@ aaa aaa aaa aaa -xdO +doE jXg -aHS +pVq tvQ dur pTK @@ -116029,7 +116044,7 @@ aFS aHh gnV fMK -aVL +aVa jgi krJ aGn @@ -116080,13 +116095,13 @@ tZM qRV tZM lrs -qVc +cqF iXf ubK qMa vQt skl -uBQ +doE aaa aaa aaa @@ -116553,7 +116568,7 @@ aHl aSp aGn tqH -aVa +gAb doj aXE aZb @@ -117849,7 +117864,7 @@ bgz vJv bgz blM -bnv +dig dfh sBx dig @@ -118107,10 +118122,10 @@ bly bgz blM bnv -dfh -cwy -bnD -bnD +idz +idz +idz +fmg boZ bnK cEb @@ -118363,10 +118378,10 @@ bgz vJv bgz blM -bnv -dfh -dgU +cVn bnD +bqv +bqv bnD bvs bvs @@ -118620,17 +118635,17 @@ bgq vxC bjY blM -bnv -dfh -xWM -bnD +mBZ bnD +xWM +dgU +hDJ bvs bwP bvs bzu bvs -bwP +jog bvs cRE bnw @@ -118878,16 +118893,16 @@ ueB bgz blM bpa -bpa -bqu bnD +bfc +bfc btO bvs -bwQ +mfu bvs -bzv +rKP bvs -bCm +bwQ bvs bym bvF @@ -118914,7 +118929,7 @@ gYs kQo coL lNb -iMM +gfC bGQ uUe rzr @@ -119135,10 +119150,10 @@ vJv bgz blM bnr -idz -fmg bnD -bwG +bnD +bnD +cwy bvs bBN iDg @@ -119170,7 +119185,7 @@ cgQ cgQ vYQ xLv -xzs +uBQ mWq cHR pey @@ -120176,7 +120191,7 @@ bCp cNA blQ bnw -qiX +xeC bxb bKB bKB @@ -120382,11 +120397,11 @@ avm xhW exh hjX -orU +pty uVr rAe luh -luh +lEA vON xPE aaa @@ -120634,7 +120649,7 @@ hDl vWw ado lZS -xDw +qYn qAH hCs kTP @@ -121418,7 +121433,7 @@ xBl twu aEO jkw -avf +lsX aEO wkg abN @@ -121452,7 +121467,7 @@ bnD bnD bnD knY -bAe +bnD blM fmd blQ @@ -121663,7 +121678,7 @@ qWR fct anf ado -sDL +uVd anf ado anf @@ -121923,7 +121938,7 @@ anf sDL anf eBy -eBy +bfl ado asl lKq @@ -122693,7 +122708,7 @@ abN abN kXd axs -pZj +nJA pZj anf hNf @@ -124099,7 +124114,7 @@ cSU aab aaa doE -cXZ +doE doE doE aaa @@ -124846,7 +124861,7 @@ cyk aaa cSU cSU -cVn +ckG hZR aaa rmT @@ -125068,14 +125083,14 @@ bDX bDX cbz bzJ -cgQ -cgQ -cgQ -cgQ -cgQ -cgQ -cgQ -cgQ +bzJ +bzJ +cam +cam +cam +cam +cam +cam cog nNh coP @@ -125127,7 +125142,7 @@ udO eZi cSU bQq -mBZ +ujG uOG dgc dcq @@ -125325,16 +125340,16 @@ bUU bUU itH bBn -cgQ +bzJ cao iis sXJ nrD ckx cnX -cgQ -cgQ -cgQ +cam +cam +cam xzY cam ckM @@ -125582,7 +125597,7 @@ nIU jox huD ybT -cgQ +bzJ cap kzf kzf @@ -125839,7 +125854,7 @@ dvC bBo bBn bBn -cgQ +bzJ lzN uNj lav @@ -126096,7 +126111,7 @@ dyA bBn bVt bWU -cgQ +bzJ cat qaq lpP @@ -126353,7 +126368,7 @@ uxt bPW bDX bDX -cgQ +bzJ cgQ scY pqG @@ -126612,8 +126627,8 @@ bOw bOw bYO eVK -bOw -bOw +shB +shB bOw bTk cgQ @@ -127700,9 +127715,9 @@ dar dev sLy dcq -aab -aab -aab +lGD +kak +kak qVf ucU xxh @@ -127914,7 +127929,7 @@ cvI cvI cvI cvI -yhm +xqL cvI lQi cqs @@ -127957,10 +127972,10 @@ dar wzQ jPX dcq -aab +rMi cZS cZS -kmr +dij fEE dij dij @@ -128162,7 +128177,7 @@ cgW cgW cgW cgW -xqL +lYd cgW cgW cvI @@ -128214,7 +128229,7 @@ dar iyc dcq dcq -dij +kmr cZS sRi hfb @@ -128471,10 +128486,10 @@ dar yme tIg snV -cde +wXK cde dbt -kak +daM daM xsl dop @@ -129397,7 +129412,7 @@ aLY aOB aOB aOB -hlM +bCq aPi xJn aYa @@ -130402,7 +130417,7 @@ ojV alT rHa tgF -akY +iZR auc ujD kSz @@ -131218,7 +131233,7 @@ bpw bqV hBF bxO -beE +paa bxt vNg byP @@ -131714,7 +131729,7 @@ avq avq avq avq -ixv +okf aRx kGo aDN @@ -136869,7 +136884,7 @@ nQW sea lxc tqo -sea +jVb lxc mFq vAC @@ -137866,7 +137881,7 @@ aIq avq aAc mbb -aHp +wNr aCh aEw aFI @@ -138137,7 +138152,7 @@ aPf aQv jKA aUT -aZG +hBo aWT bbu bdj @@ -138395,7 +138410,7 @@ aZs aZD aVp iBD -aWT +qSh bbu bdj bfv @@ -138651,7 +138666,7 @@ aFI aQE bxP aUT -aZG +hBo aWT bbu bdj @@ -139406,7 +139421,7 @@ ava awF awF avq -ixv +okf aPm aPm lkw @@ -140446,7 +140461,7 @@ sHt sHt sHt aFK -kiu +klz rpd aHW eln @@ -140455,7 +140470,7 @@ pmG lEH udh pni -pTJ +oYI mrk qsA aUS @@ -140706,7 +140721,7 @@ aFK aPm aPm aSM -wsC +mYc vca aIc sbR @@ -141220,7 +141235,7 @@ aOI aPm aPm aSM -wsC +mYc jJh aLA aXi @@ -141474,7 +141489,7 @@ aOI aOI aOI aOI -tuZ +iyI pbz ilS iTC @@ -141714,7 +141729,7 @@ awl aaa awl oQd -oQd +uLw awl auq avu @@ -141837,7 +141852,7 @@ aab aaa aab doE -phU +doE doE aab iUc @@ -141971,7 +141986,7 @@ aaa aaa awl doE -okf +doE awl auq avw @@ -142076,7 +142091,7 @@ cep cxO doE doE -sds +doE doE dgX doE @@ -142620,7 +142635,7 @@ cBY cBY cBY cLA -cBY +uag cVd vdo wCk @@ -143392,7 +143407,7 @@ dkd hmR dlb dlu -cVd +lCt gdq gdq dor @@ -143648,7 +143663,7 @@ aig aig aig xkG -aig +eNd cVd vdo dpK @@ -143878,7 +143893,7 @@ csa mEx chf chf -jVj +hNr chf chf usZ @@ -144280,7 +144295,7 @@ aqZ azU awQ axq -lgb +axq iih utp tSW @@ -144651,7 +144666,7 @@ cxO cxO cPI nDq -jVj +hNr cep cep cep @@ -144918,7 +144933,7 @@ cQo hPE dmP nUn -lyS +xlx lyS chf aaa @@ -145132,7 +145147,7 @@ pPw hwC dHU sQt -xwi +kuL dlD dlD bGG @@ -146372,7 +146387,7 @@ bav bci jqB bfZ -bkn +nVn bcp blj blj @@ -146709,7 +146724,7 @@ gmu aoA cDm chf -iYQ +hNr chf cDm dmb @@ -149257,7 +149272,7 @@ rKV rKV rKV rKV -bZI +rFZ rKV qZN qZN @@ -152048,7 +152063,7 @@ bNu bxX eLE ezy -bIp +bqu yiu tYP bED @@ -152323,7 +152338,7 @@ psP rXw rSz vmk -kqT +xdO wvz wvz gKL @@ -152570,7 +152585,7 @@ csL ceU ciY ciY -hMr +dci ciY ciY cKF @@ -152626,7 +152641,7 @@ tMT kYu sTF lCG -hDJ +ddE ddE ddE ddN @@ -152817,7 +152832,7 @@ bmm bmm bmm iIB -hMr +oSl csL cga gww @@ -153337,7 +153352,7 @@ csL eGo csL mZs -hMr +dci csL dbX tVF @@ -154129,7 +154144,7 @@ jwr fPr mMk ciY -hMr +dci ciY ciY smL @@ -154383,7 +154398,7 @@ doK nBc cgs vDX -uwe +bVd ctq ciY csL @@ -154874,7 +154889,7 @@ yha bmm hnb ciY -hMr +oSl ciY ciY ciY @@ -154906,7 +154921,7 @@ awx jPZ fmn csL -vOs +slp cga ePu cQw @@ -156440,7 +156455,7 @@ aab aab doE doE -rFZ +rPK doE ciY ciY @@ -158202,7 +158217,7 @@ bEG bEG bEG bEG -xir +lgb bjR xir bjR diff --git a/_maps/map_files220/delta/delta.dmm b/_maps/map_files220/delta/delta.dmm index b7dd489da1aa..5d2875b3b5ff 100644 --- a/_maps/map_files220/delta/delta.dmm +++ b/_maps/map_files220/delta/delta.dmm @@ -23,7 +23,7 @@ dir = 9 }, /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6; pixel_y = 4 }, @@ -399,9 +399,9 @@ name = "escape pod 1" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_1) @@ -416,6 +416,7 @@ id_tag = "admin_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -516,6 +517,7 @@ /area/shuttle/pod_4) "aeM" = ( /obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "aeN" = ( @@ -533,6 +535,7 @@ "aeP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) @@ -543,9 +546,9 @@ name = "escape pod 4" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_4) @@ -733,15 +736,14 @@ /obj/structure/sign/electricshock{ pixel_y = -32 }, -/obj/machinery/door/airlock/engineering{ - name = "Fore Starboard Solar Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/maintenance/auxsolarstarboard) "afN" = ( @@ -1004,10 +1006,8 @@ /turf/simulated/floor/plasteel, /area/station/security/permabrig) "ahy" = ( -/obj/machinery/door/airlock/glass{ - name = "Vacant Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -1020,12 +1020,12 @@ id_tag = "ferry_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "ahA" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Airlock" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -1035,6 +1035,7 @@ /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -1048,6 +1049,7 @@ /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -1055,9 +1057,8 @@ /turf/simulated/floor/plasteel, /area/shuttle/arrival/station) "ahF" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Airlock" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -1361,6 +1362,7 @@ /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) "ala" = ( @@ -1485,17 +1487,17 @@ "alR" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, /turf/simulated/floor/plasteel{ @@ -1663,12 +1665,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = null - }, +/obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -2008,6 +2008,7 @@ dir = 4 }, /obj/effect/turf_decal/siding/wood, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood/fancy/cherry, /area/station/public/vacant_store) "aoo" = ( @@ -2315,9 +2316,6 @@ dir = 8; name = "Atmospherics Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ - dir = 8 - }, /obj/structure/cable{ d1 = 2; d2 = 8; @@ -2331,6 +2329,9 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) "apv" = ( @@ -2371,10 +2372,9 @@ autoclose = 0; heat_proof = 1; id_tag = "turbine_door_int"; - locked = 1; - name = "Turbine Interior Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2385,6 +2385,7 @@ name = "Gas Turbine Access Button"; pixel_y = 24 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/maintenance/turbine) "apF" = ( @@ -2533,10 +2534,9 @@ /area/station/security/checkpoint/secondary) "aqi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Customs Desk" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel, /area/station/command/customs) "aqj" = ( @@ -2603,10 +2603,9 @@ /area/station/service/kitchen) "aqu" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Checkpoint" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel, /area/station/security/checkpoint/secondary) "aqv" = ( @@ -3126,9 +3125,6 @@ dir = 8; name = "Customs Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ - dir = 8 - }, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -3145,11 +3141,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/command/customs) "arR" = ( -/obj/structure/table/reinforced, -/obj/item/folder/red, /obj/item/pen, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -3157,6 +3154,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/folder/red, +/obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -3193,7 +3192,7 @@ /area/station/maintenance/fore2) "arV" = ( /obj/machinery/conveyor{ - dir = 4; + dir = 5; id = "cargodisposals_output"; name = "Output Belt" }, @@ -3646,7 +3645,7 @@ dir = 4; name = "Security Checkpoint" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/doors{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 4 }, /turf/simulated/floor/plasteel, @@ -3776,7 +3775,7 @@ /area/station/maintenance/fore) "att" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4088,15 +4087,14 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/disposal/east) "aut" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) "auu" = ( @@ -4139,6 +4137,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood/fancy/cherry, /area/station/public/vacant_store) "auz" = ( @@ -4211,10 +4210,12 @@ /area/station/maintenance/electrical_shop) "auM" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/oak, /area/station/maintenance/electrical_shop) "auN" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4284,15 +4285,14 @@ /turf/simulated/floor/plating, /area/station/engineering/mechanic) "avf" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Checkpoint Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "avg" = ( @@ -4404,12 +4404,10 @@ "avr" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/qm/glass, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "qmroom" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4417,6 +4415,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, /turf/simulated/floor/plasteel, /area/station/supply/qm) "avs" = ( @@ -4546,7 +4545,7 @@ /area/station/hallway/secondary/entry) "awq" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4561,16 +4560,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) "aws" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/item/radio/intercom/directional/west, /turf/simulated/floor/plasteel{ dir = 8; @@ -4687,9 +4687,6 @@ dir = 4; name = "Danger: Conveyor Access" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/maintenance{ - dir = 4 - }, /obj/machinery/conveyor/northwest/ccw{ id = "garbage" }, @@ -4762,6 +4759,7 @@ /area/station/maintenance/fore) "awY" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -4773,10 +4771,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) "axb" = ( @@ -4806,6 +4804,7 @@ /area/station/service/janitor) "axg" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/fore) "axh" = ( @@ -5094,7 +5093,7 @@ "axV" = ( /obj/machinery/atmospherics/trinary/filter{ dir = 4; - filter_type = "o2"; + filter_type = 1; on = 1 }, /turf/simulated/floor/plasteel{ @@ -5154,12 +5153,12 @@ /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "aym" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/security/glass{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkredcorners" @@ -5392,7 +5391,7 @@ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /obj/item/flashlight/lamp/green{ pixel_x = 6; pixel_y = 16 @@ -5665,9 +5664,6 @@ dir = 4; name = "Danger: Conveyor Access" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/maintenance{ - dir = 4 - }, /obj/machinery/conveyor/northeast/ccw{ id = "garbage" }, @@ -5774,7 +5770,7 @@ /area/station/maintenance/fore) "aAk" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -6110,6 +6106,7 @@ dir = 4 }, /obj/machinery/atmospherics/unary/outlet_injector/on, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "chapel" }, @@ -6117,12 +6114,10 @@ "aBK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/qm/glass, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "qm" }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6137,6 +6132,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/supply/qm) "aBL" = ( @@ -6188,17 +6185,17 @@ /obj/machinery/door/airlock/security/glass{ id_tag = "BrigLeft" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -6232,9 +6229,8 @@ /area/station/supply/storage) "aBU" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ dir = 4; @@ -6526,17 +6522,17 @@ /area/station/engineering/controlroom) "aCZ" = ( /obj/machinery/door/airlock/atmos/glass{ - heat_proof = 1; - name = "Supermatter Chamber" + heat_proof = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door_control/bolt_control/west{ id = "smint" }, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id_tag = "engsm" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "aDc" = ( @@ -6758,7 +6754,7 @@ "aEd" = ( /obj/machinery/atmospherics/trinary/filter{ dir = 1; - filter_type = "n2"; + filter_type = 2; name = "nitrogen filter"; on = 1 }, @@ -6886,16 +6882,16 @@ pixel_x = 6; pixel_y = 16 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = -6 }, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -7013,9 +7009,6 @@ /obj/effect/mapping_helpers/airlock/windoor/access/any/service/janitor{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/service/janitor) "aEP" = ( @@ -7044,10 +7037,9 @@ /area/station/service/janitor) "aEW" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Mining Dock" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -7104,7 +7096,7 @@ /area/station/supply/storage) "aFa" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/engineering/mechanic) @@ -7142,7 +7134,7 @@ "aFf" = ( /obj/machinery/atmospherics/trinary/filter{ dir = 8; - filter_type = "n2" + filter_type = 2 }, /obj/structure/cable/yellow{ d1 = 4; @@ -7305,11 +7297,11 @@ "aFN" = ( /obj/machinery/door/airlock/external{ id_tag = "supply_home"; - locked = 1; - name = "Cargo Docking Hatch" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/supply/storage) "aFO" = ( @@ -7434,10 +7426,7 @@ /turf/simulated/floor/wood/fancy, /area/station/public/sleep_female) "aGs" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -7534,14 +7523,6 @@ icon_state = "dark" }, /area/station/engineering/mechanic) -"aGW" = ( -/obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/turf/space, -/area/space/nearstation) "aGX" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -7697,6 +7678,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/fancy, /area/station/service/theatre) "aHJ" = ( @@ -7833,13 +7815,14 @@ /area/station/maintenance/disposal/west) "aIe" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/podpilot) "aIf" = ( @@ -7863,9 +7846,8 @@ "aIg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/service{ - name = "Bar Office" - }, +/obj/machinery/door/airlock/service, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/service/bar, /turf/simulated/floor/plasteel{ @@ -8242,8 +8224,7 @@ "aJs" = ( /obj/machinery/door_control/shutter/north{ id = "engsm"; - name = "Radiation Shutters Control"; - req_access_txt = "24" + name = "Radiation Shutters Control" }, /obj/machinery/atmospherics/pipe/manifold/visible, /obj/structure/cable/yellow{ @@ -8422,10 +8403,8 @@ /area/station/engineering/controlroom) "aJZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -8434,6 +8413,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "aKa" = ( @@ -8602,11 +8583,10 @@ "aKD" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/supply/office) "aKE" = ( @@ -8668,7 +8648,7 @@ dir = 4 }, /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -8751,15 +8731,14 @@ pixel_y = -32 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Fore Port Solar Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/maintenance/auxsolarport) "aLs" = ( @@ -8812,9 +8791,8 @@ }, /area/station/maintenance/fore) "aLD" = ( -/obj/machinery/door/airlock/bananium{ - name = "Clown's Office" - }, +/obj/machinery/door/airlock/bananium, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -8823,7 +8801,7 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/clown, +/obj/effect/mapping_helpers/airlock/access/any/service/clown, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -8837,7 +8815,7 @@ /area/station/public/arcade) "aLM" = ( /obj/effect/turf_decal/delivery/hollow, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) "aLS" = ( @@ -8923,11 +8901,10 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/supply/office) "aMd" = ( @@ -8968,9 +8945,6 @@ }, /obj/structure/window/reinforced, /obj/structure/sign/poster/official/random/north, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ dir = 4 }, @@ -9002,6 +8976,21 @@ icon_state = "dark" }, /area/station/service/bar) +"aMt" = ( +/obj/machinery/door/morgue{ + name = "Chapel Morgue"; + req_access_txt = "22" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/service/crematorium, +/turf/simulated/floor/plasteel/grimy, +/area/station/service/chapel/office) "aMA" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/atmospherics/portable/canister, @@ -9077,9 +9066,9 @@ "aMY" = ( /obj/machinery/door/airlock/bathroom{ id = "toilet2"; - id_tag = "toilet2"; - name = "Toilet" + id_tag = "toilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/service/theatre) "aNb" = ( @@ -9314,11 +9303,11 @@ /area/station/engineering/atmos) "aOj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "aOk" = ( @@ -9331,10 +9320,8 @@ /area/station/engineering/atmos) "aOm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -9343,6 +9330,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "aOo" = ( @@ -9858,10 +9847,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/maintenance{ - name = "Forensics Morgue" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/supply/storage) "aQs" = ( @@ -9991,10 +9979,10 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/simulated/floor/plating, /area/station/maintenance/fore) "aRw" = ( @@ -10044,12 +10032,10 @@ /area/station/maintenance/disposal/east) "aRM" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/machinery/door/airlock/mining/glass, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/sorting) "aRO" = ( @@ -10808,16 +10794,15 @@ "aVc" = ( /obj/machinery/door/airlock/external{ id_tag = "atmostanks_door_ext"; - locked = 1; - name = "Atmos External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/west{ autolink_id = "atmostanks_btn_ext"; name = "exterior access button"; req_access_txt = "32" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "aVg" = ( @@ -10838,6 +10823,7 @@ /obj/structure/chair/sofa/pew/left{ dir = 4 }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "chapel" }, @@ -10999,9 +10985,9 @@ "aWe" = ( /obj/machinery/door/airlock/glass{ id = "privateroom"; - id_tag = "privateroom"; - name = "Private Room" + id_tag = "privateroom" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "privateroom" }, @@ -11072,10 +11058,6 @@ /obj/machinery/door/window/reinforced/normal{ name = "Forensics Morgue" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - access = 4; - name = "forensics" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -11120,6 +11102,7 @@ /area/space) "aWD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "aWG" = ( @@ -11137,12 +11120,12 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ id_tag = "mining_home"; - locked = 1; - name = "Mining Dock Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "aWI" = ( @@ -11258,11 +11241,9 @@ /area/station/engineering/atmos) "aXp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Storage" - }, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -11651,9 +11632,8 @@ /turf/simulated/wall, /area/station/service/kitchen) "aZa" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Restaurant" - }, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/wood/oak, /area/station/service/bar/atrium) @@ -11770,8 +11750,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/supply/office) "aZt" = ( @@ -11935,7 +11913,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bau" = ( @@ -12295,7 +12273,7 @@ }, /area/station/engineering/atmos) "bbT" = ( -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12346,6 +12324,7 @@ /area/station/service/kitchen) "bcg" = ( /obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -12419,12 +12398,8 @@ }, /area/station/service/kitchen) "bco" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Transit Tube" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -12433,8 +12408,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/simulated/floor/plasteel, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "bcq" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -12471,10 +12447,9 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/kitchen, -/obj/machinery/door/airlock/public{ - name = "Kitchen" - }, /turf/simulated/floor/plasteel/white, /area/station/service/kitchen) "bcs" = ( @@ -12579,8 +12554,6 @@ /area/station/supply/miningdock) "bcI" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -12637,16 +12610,14 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bdq" = ( -/obj/machinery/door/airlock/security{ - name = "Detective" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -12663,7 +12634,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bdt" = ( @@ -12727,6 +12698,7 @@ /area/station/maintenance/starboard2) "bdK" = ( /obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/cable{ d1 = 1; @@ -12770,11 +12742,11 @@ /area/station/service/kitchen) "bdQ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, @@ -12929,17 +12901,6 @@ icon_state = "redfull" }, /area/station/security/permabrig) -"bel" = ( -/obj/machinery/door/window/classic/reversed, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mining, -/obj/structure/plasticflaps{ - opacity = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/supply/miningdock) "ben" = ( /obj/item/storage/box/donkpockets{ pixel_x = -4; @@ -13094,9 +13055,8 @@ /turf/simulated/floor/plasteel/dark, /area/station/engineering/atmos) "beS" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13342,12 +13302,10 @@ /area/station/engineering/gravitygenerator) "bgf" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -13594,7 +13552,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plating, /area/station/supply/miningdock) "bgU" = ( @@ -13696,9 +13655,8 @@ /turf/simulated/floor/engine/n2, /area/station/engineering/atmos) "bhv" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, +/obj/machinery/door/airlock/hydroponics/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13799,7 +13757,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/security/interrogation) "bhC" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /obj/item/radio/intercom/directional/south, /turf/simulated/floor/plasteel{ dir = 10; @@ -13811,12 +13769,12 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/dough, -/obj/item/reagent_containers/food/snacks/dough{ +/obj/item/food/snacks/dough, +/obj/item/food/snacks/dough{ pixel_x = 2; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel/white, /area/station/service/kitchen) "bhK" = ( @@ -14260,12 +14218,6 @@ dir = 8; name = "Hydroponics Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "Hydroponics Shutters"; @@ -14276,6 +14228,12 @@ id_tag = "Kitchen Windows"; name = "Kitchen Privacy Shutters" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/service/hydroponics) "bjp" = ( @@ -14414,7 +14372,7 @@ /area/station/security/permabrig) "bjO" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -14426,6 +14384,7 @@ icon_state = "1-4" }, /obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/podpilot) "bjP" = ( @@ -14515,11 +14474,8 @@ /obj/machinery/door/firedoor, /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ - name = "IAA reception" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ - access = 38; - name = "iaa" + name = "IAA reception"; + dir = 1 }, /obj/structure/cable{ d1 = 1; @@ -14536,6 +14492,9 @@ id_tag = "iaashutters"; name = "IAA Shutters" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/iaa{ + dir = 1 + }, /turf/simulated/floor/plating, /area/station/legal/lawoffice) "bkg" = ( @@ -14686,7 +14645,7 @@ }, /area/station/security/permabrig) "blj" = ( -/obj/machinery/smartfridge, +/obj/machinery/smartfridge/food, /obj/machinery/door/window/classic/normal{ dir = 8; name = "Kitchen Desk" @@ -15159,15 +15118,15 @@ dir = 1; name = "Kitchen Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 1 - }, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchenhall"; name = "Kitchen Shutters" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 1 + }, /turf/simulated/floor/plating, /area/station/service/kitchen) "bmY" = ( @@ -15220,7 +15179,6 @@ }, /area/station/supply/miningdock) "bnh" = ( -/obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "purple" @@ -15331,15 +15289,14 @@ /area/station/engineering/atmos) "bnV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Distribution Loop" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bnW" = ( @@ -15485,6 +15442,7 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hydroponics, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, /turf/simulated/floor/plasteel/dark, /area/station/service/hydroponics) @@ -15916,20 +15874,20 @@ /obj/structure/table/reinforced, /obj/item/folder, /obj/item/pen, -/obj/item/reagent_containers/food/snacks/grown/apple, +/obj/item/food/snacks/grown/apple, /obj/machinery/door/window/classic/normal{ dir = 8; name = "Hydroponics Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 8 - }, /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "Hydroponics Shutters"; name = "Hydroponics Shutters" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/service/hydroponics) "bqn" = ( @@ -16353,22 +16311,22 @@ /obj/item/seeds/lime, /obj/item/seeds/watermelon, /obj/item/seeds/grape, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/banana, /obj/machinery/door/window/classic/reversed{ dir = 8; name = "Hydroponics Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 8 - }, /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "Hydroponics Shutters"; name = "Hydroponics Shutters" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/service/hydroponics) "bsh" = ( @@ -16723,10 +16681,7 @@ /turf/simulated/floor/carpet/cyan, /area/station/security/prison/cell_block/A) "btV" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard, /obj/effect/decal/cleanable/glass, /obj/effect/decal/cleanable/dirt, @@ -17072,10 +17027,8 @@ /area/station/service/library) "bvM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -17084,6 +17037,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "bvO" = ( @@ -17506,6 +17461,7 @@ /area/station/service/hydroponics) "bxy" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -17559,13 +17515,13 @@ /turf/simulated/floor/plasteel/dark, /area/station/command/vault) "bxJ" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "cellprivacy" }, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, +/obj/machinery/door/airlock/security/glass, /turf/simulated/floor/plasteel/dark, /area/station/security/processing) "bxK" = ( @@ -17708,10 +17664,8 @@ /area/station/service/hydroponics) "byx" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -17720,6 +17674,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "byC" = ( @@ -17773,11 +17729,8 @@ }, /area/station/hallway/primary/port) "byI" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Secure Tech Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 1; @@ -17794,6 +17747,8 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plasteel, /area/station/engineering/tech_storage) "byJ" = ( @@ -17818,9 +17773,8 @@ /area/station/maintenance/fore) "byN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ dir = 1; @@ -17903,6 +17857,7 @@ /area/station/command/vault) "bze" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Surgery1" }, @@ -17922,7 +17877,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/surgery, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -18235,7 +18189,7 @@ "bAF" = ( /obj/machinery/light/small/directional/east, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "bAI" = ( /obj/machinery/alarm/directional/south, /obj/machinery/light/small/directional/south, @@ -18636,7 +18590,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -18728,6 +18682,7 @@ dir = 4; network = list("Prison","SS13") }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -18850,11 +18805,10 @@ /area/station/engineering/gravitygenerator) "bDd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity{ - name = "Gravity Generator Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plasteel/dark, /area/station/engineering/gravitygenerator) "bDe" = ( @@ -18907,9 +18861,8 @@ /area/station/engineering/gravitygenerator) "bDi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity{ - name = "Gravity Generator Foyer" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -18921,7 +18874,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "bDj" = ( @@ -19030,9 +18983,8 @@ /area/station/engineering/break_room) "bDr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Storage" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -19201,11 +19153,9 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/machinery/door/airlock/mining{ - name = null - }, +/obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/disposal/east) "bDN" = ( @@ -19248,10 +19198,8 @@ /area/station/public/storage/tools) "bDT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -19264,6 +19212,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -19326,15 +19275,14 @@ /area/station/command/bridge) "bEk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -19348,10 +19296,8 @@ /area/station/command/bridge) "bEn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -19364,6 +19310,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -19412,9 +19359,8 @@ /area/station/engineering/gravitygenerator) "bEJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Storage" - }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -19426,7 +19372,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "bEK" = ( @@ -19941,7 +19887,7 @@ /area/station/engineering/gravitygenerator) "bGD" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/starkist, +/obj/item/reagent_containers/drinks/cans/starkist, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -20087,9 +20033,8 @@ /area/station/engineering/break_room) "bGN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -20114,7 +20059,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -20276,10 +20221,8 @@ /area/station/command/meeting_room) "bHl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Conference Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -20287,6 +20230,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/wood/oak, /area/station/command/meeting_room) "bHn" = ( @@ -20334,12 +20278,6 @@ c_tag = "Bridge Center"; dir = 1 }, -/obj/machinery/turretid/stun{ - control_area = "\improper AI Upload Chamber"; - name = "AI Upload Turret Control"; - pixel_y = -24; - req_one_access_txt = "75" - }, /turf/simulated/floor/carpet, /area/station/command/bridge) "bHt" = ( @@ -20387,10 +20325,9 @@ "bHz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "captainofficedoor"; - name = "Captain's Office" + id_tag = "captainofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -20399,6 +20336,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/captain) "bHA" = ( @@ -20448,12 +20387,12 @@ /area/station/security/detective) "bHN" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "bHO" = ( /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/forensics, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" @@ -20461,6 +20400,7 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "detective" }, +/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plasteel/dark, /area/station/security/prison/cell_block/A) "bHP" = ( @@ -20533,6 +20473,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/abandoned_garden) "bIh" = ( @@ -20549,12 +20490,12 @@ dir = 8; name = "AI Core Door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ - dir = 8 - }, /obj/machinery/light_switch/north{ pixel_x = -4 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -20573,15 +20514,15 @@ dir = 4; name = "AI Core Door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ - dir = 4 - }, /obj/machinery/turretid/lethal{ - control_area = "\improper AI Chamber"; + check_synth = 1; name = "AI Chamber Turret Control"; - pixel_x = -5; + pixel_x = -6; pixel_y = 24; - req_access_txt = "75" + req_one_access_txt = "75" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload{ + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -20800,9 +20741,8 @@ /area/station/public/storage/tools) "bIV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Primary tool storage" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -20880,10 +20820,8 @@ /turf/simulated/floor/wood/oak, /area/station/command/meeting_room) "bJi" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -20891,6 +20829,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/simulated/floor/plasteel/dark, /area/station/turret_protected/ai_upload) "bJj" = ( @@ -21150,7 +21089,7 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -21231,10 +21170,9 @@ "bKk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "ceofficedoor"; - name = "Chief Engineer's Office" + id_tag = "ceofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -21259,6 +21197,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/ce, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel, /area/station/command/office/ce) "bKl" = ( @@ -21682,17 +21622,16 @@ }, /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_ext"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/east{ autolink_id = "perma_btn_ext"; name = "Prison Wing Access Button"; req_one_access_txt = "2" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "bLM" = ( @@ -21717,12 +21656,11 @@ }, /area/station/turret_protected/ai) "bLP" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "bLQ" = ( @@ -21751,8 +21689,12 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bLU" = ( @@ -21765,19 +21707,29 @@ d2 = 4; icon_state = "0-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bLV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external{ - name = "MiniSat External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bLZ" = ( @@ -21793,9 +21745,8 @@ /area/station/public/storage/tools) "bMa" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 1; @@ -21810,9 +21761,8 @@ /area/station/hallway/primary/fore) "bMb" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ dir = 4; @@ -22345,12 +22295,11 @@ name = "AI Chamber Blast Doors"; opacity = 0 }, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Chamber Observation" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -22364,9 +22313,8 @@ /area/station/turret_protected/aisat) "bNU" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -22375,7 +22323,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "bNZ" = ( @@ -22610,13 +22558,13 @@ /turf/simulated/floor/carpet, /area/station/command/meeting_room) "bOH" = ( -/obj/machinery/door/airlock/command{ - name = "Head of Personnel" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/hop) "bOI" = ( @@ -22811,7 +22759,6 @@ }, /area/station/supply/miningdock) "bPk" = ( -/obj/effect/mapping_helpers/airlock/access/all/security/forensics, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -22825,13 +22772,14 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "detective" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plasteel/dark, /area/station/security/detective) "bPl" = ( @@ -23026,19 +22974,22 @@ /turf/simulated/wall, /area/space/nearstation) "bPU" = ( -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved/flipped{ dir = 4 }, /turf/space, /area/space/nearstation) "bPV" = ( -/obj/structure/lattice, -/obj/structure/transit_tube/horizontal, -/turf/space, -/area/space/nearstation) +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/aisat) "bPW" = ( -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved{ dir = 8 }, @@ -23098,9 +23049,6 @@ dir = 1; name = "Cargo Bay Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ - dir = 1 - }, /obj/effect/turf_decal/delivery, /obj/item/desk_bell{ anchored = 1; @@ -23117,6 +23065,9 @@ id_tag = "cargodesk"; name = "Cargo Desk Shutters" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -23389,9 +23340,6 @@ icon_state = "right"; name = "Captain's Desk Door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ - dir = 1 - }, /obj/item/folder/blue, /obj/item/stamp/captain, /obj/structure/cable{ @@ -23401,6 +23349,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield{ + dir = 1 + }, /turf/simulated/floor/carpet/black, /area/station/command/office/captain) "bQR" = ( @@ -23413,6 +23367,9 @@ /obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield{ + dir = 1 + }, /turf/simulated/floor/carpet/black, /area/station/command/office/captain) "bQS" = ( @@ -23614,7 +23571,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bRQ" = ( -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /obj/structure/transit_tube/diagonal/topleft, /turf/space, /area/space/nearstation) @@ -23701,10 +23658,8 @@ /area/station/command/office/ce) "bSa" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Chief Engineer's Bedroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -23726,6 +23681,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/ce, /turf/simulated/floor/plasteel/dark, /area/station/command/office/ce) "bSb" = ( @@ -24059,16 +24015,15 @@ /area/station/aisat) "bTt" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -24136,10 +24091,8 @@ /area/station/turret_protected/aisat) "bTz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24151,6 +24104,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -24237,10 +24191,8 @@ /area/station/turret_protected/aisat) "bTH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Foyer" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24252,6 +24204,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -24309,29 +24262,6 @@ icon_state = "dark" }, /area/station/turret_protected/aisat) -"bTM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Teleporter Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/turret_protected/aisat) "bTN" = ( /obj/structure/cable{ d1 = 4; @@ -24366,10 +24296,12 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bTR" = ( @@ -24379,12 +24311,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -24410,12 +24336,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bTU" = ( @@ -24426,12 +24346,6 @@ dir = 8 }, /obj/structure/transit_tube_pod, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bTV" = ( @@ -24514,10 +24428,8 @@ }, /area/station/command/office/ce) "bUr" = ( -/obj/machinery/door/airlock/engineering{ - name = "Tech Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24525,6 +24437,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tech_storage, /turf/simulated/floor/plasteel, /area/station/engineering/tech_storage) "bUA" = ( @@ -24582,6 +24495,12 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/space, /area/space/nearstation) "bUL" = ( @@ -24760,6 +24679,12 @@ d2 = 8; icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/space, /area/space/nearstation) "bVj" = ( @@ -24770,7 +24695,6 @@ pixel_y = -22 }, /obj/machinery/turretid/stun{ - control_area = "\improper AI Satellite"; name = "AI Antechamber Turret Control"; pixel_x = -28; req_access_txt = "75" @@ -24810,6 +24734,12 @@ d2 = 4; icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /turf/space, /area/space/nearstation) "bVy" = ( @@ -24985,19 +24915,13 @@ /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bWb" = ( -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /obj/structure/transit_tube/diagonal, /turf/space, /area/space/nearstation) "bWd" = ( /obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/space, /area/space/nearstation) "bWl" = ( @@ -25150,7 +25074,7 @@ /area/station/hallway/primary/port) "bWI" = ( /obj/machinery/alarm/directional/east, -/obj/machinery/suit_storage_unit/ce, +/obj/machinery/suit_storage_unit/ce/secure, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -25183,9 +25107,6 @@ dir = 4; name = "Access Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/hop{ - dir = 4 - }, /obj/machinery/door/window/classic/reversed{ dir = 8; name = "Access Queue" @@ -25195,6 +25116,9 @@ id_tag = "hop"; name = "Privacy Shutters" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/hop{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/command/office/hop) "bWQ" = ( @@ -25221,10 +25145,9 @@ /area/station/command/office/hop) "bWW" = ( /obj/machinery/door/airlock/command{ - id_tag = "captainofficedoor"; - name = "Captain's Office" + id_tag = "captainofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25232,6 +25155,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, /turf/simulated/floor/wood/oak, /area/station/command/office/captain) "bWX" = ( @@ -25284,9 +25208,8 @@ /area/station/medical/paramedic) "bXy" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -25316,6 +25239,8 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/space, /area/space/nearstation) "bXH" = ( @@ -25399,14 +25324,14 @@ }, /area/station/turret_protected/aisat) "bXR" = ( -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved{ dir = 4 }, /turf/space, /area/space/nearstation) "bXS" = ( -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved/flipped{ dir = 8 }, @@ -25492,7 +25417,8 @@ /area/station/hallway/primary/port) "bYi" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "bYj" = ( @@ -25509,6 +25435,12 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, /turf/space, /area/space/nearstation) "bYn" = ( @@ -25582,9 +25514,8 @@ /area/station/command/office/captain/bedroom) "bYB" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -25604,9 +25535,8 @@ /turf/simulated/wall, /area/station/command/office/captain/bedroom) "bYE" = ( -/obj/machinery/door/airlock/silver{ - name = "Captain's Bathroom" - }, +/obj/machinery/door/airlock/silver, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/white, /area/station/command/office/captain/bedroom) "bYH" = ( @@ -25626,6 +25556,12 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /turf/space, /area/space/nearstation) "bYK" = ( @@ -25699,10 +25635,8 @@ /obj/machinery/flasher{ pixel_x = -24 }, -/obj/machinery/door/airlock/highsecurity{ - name = "Telecommunications" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25710,6 +25644,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -25809,19 +25744,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) -"bZw" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/space, -/area/space/nearstation) "bZx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26454,7 +26376,7 @@ }, /area/station/maintenance/port) "cbz" = ( -/obj/machinery/suit_storage_unit/captain, +/obj/machinery/suit_storage_unit/captain/secure, /obj/machinery/light/directional/north, /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -26610,8 +26532,8 @@ /area/station/command/office/ntrep) "cca" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "ccb" = ( @@ -26737,14 +26659,14 @@ /obj/machinery/door/window{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ - dir = 8 - }, /obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain{ + dir = 8 + }, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) "ccn" = ( @@ -27077,7 +26999,6 @@ /obj/machinery/door/window{ name = "Desk Door" }, -/obj/effect/mapping_helpers/airlock/access/all/command/ntrep, /obj/machinery/light/directional/west, /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -27085,6 +27006,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ntrep, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "cdJ" = ( @@ -27103,7 +27025,7 @@ /area/station/command/office/ntrep) "cdN" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/item/storage/fancy/donut_box, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) @@ -27163,7 +27085,6 @@ /obj/machinery/door/window{ name = "Desk Door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield, /obj/machinery/keycard_auth/east{ pixel_y = -3 }, @@ -27173,11 +27094,12 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/blueshield) "cdT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) @@ -27516,10 +27438,8 @@ /turf/simulated/floor/plating, /area/station/engineering/smes) "cfg" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -27532,6 +27452,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/smes) "cfh" = ( @@ -27695,10 +27616,10 @@ /area/station/command/office/blueshield) "cfQ" = ( /obj/machinery/door/airlock/command{ - id_tag = "captainofficedoor"; - name = "Captain's Office" + id_tag = "captainofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/captain, /turf/simulated/floor/plasteel, /area/station/command/office/captain/bedroom) "cfX" = ( @@ -27919,9 +27840,8 @@ /area/station/science/xenobiology) "chb" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -27998,9 +27918,9 @@ /area/station/command/office/blueshield) "chs" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/effect/turf_decal/siding/wood{ dir = 4 }, @@ -28029,12 +27949,17 @@ /area/station/command/teleporter) "chw" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, /turf/space, /area/space/nearstation) "chy" = ( @@ -28170,10 +28095,8 @@ /area/station/telecomms/chamber) "cia" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28182,6 +28105,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) "cib" = ( @@ -28446,10 +28370,9 @@ /turf/simulated/wall, /area/station/command/office/captain/bedroom) "ciU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Teleporter Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, /turf/simulated/floor/plasteel, /area/station/command/teleporter) "ciV" = ( @@ -28828,6 +28751,7 @@ /area/station/science/explab/chamber) "cjX" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -28875,8 +28799,9 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/bar, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plating, /area/station/maintenance/fore) "ckm" = ( @@ -28916,10 +28841,9 @@ "cku" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "ntrepofficedoor"; - name = "NT Representative's Office" + id_tag = "ntrepofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/ntrep, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -28928,6 +28852,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/ntrep, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "ckv" = ( @@ -28938,10 +28863,9 @@ "ckw" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "blueshieldofficedoor"; - name = "Blueshield's Office" + id_tag = "blueshieldofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/blueshield, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -28950,6 +28874,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/blueshield) "ckx" = ( @@ -29099,10 +29024,9 @@ /area/station/maintenance/apmaint) "clo" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Break Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/break_room) "clp" = ( @@ -29273,9 +29197,9 @@ dir = 4 }, /obj/machinery/door/airlock{ - name = "Bedroom"; id_tag = "PrivateRoom2" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, @@ -29558,12 +29482,6 @@ /area/station/command/teleporter) "cnH" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/transit_tube/junction{ dir = 4 }, @@ -29691,12 +29609,6 @@ /area/station/engineering/control) "coi" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/transit_tube/crossing{ dir = 8 }, @@ -29708,10 +29620,8 @@ /area/station/legal/magistrate) "coq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Teleport Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -29719,6 +29629,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, /turf/simulated/floor/plasteel, /area/station/command/teleporter) "cor" = ( @@ -30563,6 +30474,7 @@ /area/station/public/vacant_store) "csa" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -30572,7 +30484,6 @@ icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/station/security/evidence) "csb" = ( @@ -30663,12 +30574,6 @@ /area/station/engineering/control) "csr" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/transit_tube/horizontal, /turf/space, /area/space/nearstation) @@ -30722,19 +30627,6 @@ /obj/machinery/power/emitter, /turf/simulated/floor/plating, /area/station/engineering/equipmentstorage) -"csy" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/transit_tube/curved{ - dir = 8 - }, -/turf/space, -/area/space/nearstation) "csz" = ( /obj/structure/closet/crate{ name = "solar pack crate" @@ -30853,6 +30745,7 @@ /area/station/security/prison/cell_block/A) "ctn" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/dormitory_maintenance) @@ -30967,19 +30860,6 @@ /obj/machinery/alarm/directional/south, /turf/simulated/floor/carpet, /area/station/service/library) -"ctI" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/space, -/area/space/nearstation) "ctJ" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/curved{ @@ -31012,10 +30892,7 @@ /turf/simulated/floor/carpet, /area/station/service/library) "ctS" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, /area/station/maintenance/port) @@ -31031,9 +30908,8 @@ /area/station/legal/magistrate) "ctX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "E.V.A." - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/command/eva, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) @@ -31188,9 +31064,8 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/hydroponics) "cuA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 4; @@ -31341,7 +31216,7 @@ }, /area/station/service/expedition) "cuY" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/machinery/ai_status_display/north, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -31487,9 +31362,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/maintenance{ - name = "Forensics Morgue" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -31669,7 +31543,6 @@ dir = 4; name = "Magboot Storage" }, -/obj/effect/mapping_helpers/airlock/access/any/command/eva, /obj/item/clothing/shoes/magboots, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) @@ -31694,7 +31567,7 @@ }, /area/station/engineering/atmos) "cwY" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) @@ -31704,33 +31577,28 @@ "cxc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "pub_room"; - name = "Public Meeting Room" + id_tag = "pub_room" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/wood/oak, /area/station/science/robotics/showroom) "cxd" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, /area/station/public/locker) "cxe" = ( -/obj/structure/table, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/gun/energy/kinetic_accelerator, -/obj/item/gun/energy/kinetic_accelerator, +/obj/structure/closet/secure_closet/exile, +/obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -31738,8 +31606,8 @@ /area/station/service/expedition) "cxf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/mint, -/obj/item/reagent_containers/food/drinks/bottle/cream, +/obj/item/food/snacks/mint, +/obj/item/reagent_containers/drinks/bottle/cream, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -31808,9 +31676,6 @@ dir = 4; name = "Cargo Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ - dir = 4 - }, /obj/item/folder/yellow, /obj/item/pen, /obj/effect/turf_decal/delivery, @@ -31822,6 +31687,9 @@ /obj/structure/noticeboard{ pixel_y = 32 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/supply/sorting) "cxt" = ( @@ -31871,14 +31739,10 @@ /area/station/engineering/control) "cxJ" = ( /obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_x = -6 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 2 - }, /obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/recharger{ + pixel_y = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -31980,7 +31844,6 @@ dir = 4; name = "RCD Storage" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) "cyf" = ( @@ -32065,6 +31928,7 @@ /obj/machinery/light/directional/west, /obj/effect/turf_decal/delivery/hollow, /obj/structure/closet/secure_closet/expedition, +/obj/item/pickaxe, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -32185,6 +32049,8 @@ /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -32230,6 +32096,7 @@ /obj/structure/chair/stool{ dir = 8 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/transparent/glass/reinforced, /area/station/public/locker) "cyS" = ( @@ -32257,8 +32124,8 @@ /area/station/hallway/primary/fore) "cyU" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, @@ -32394,9 +32261,8 @@ /area/station/engineering/control) "czs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Storage" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -32419,7 +32285,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) "czw" = ( @@ -32525,6 +32391,7 @@ /obj/structure/chair/comfy/brown{ dir = 4 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "czN" = ( @@ -32534,13 +32401,14 @@ /area/station/science/robotics/showroom) "czO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "czP" = ( /obj/structure/chair/comfy/black{ dir = 8 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "czQ" = ( @@ -32576,6 +32444,7 @@ "czW" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/closet/secure_closet/expedition, +/obj/item/pickaxe, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -32868,9 +32737,8 @@ /area/station/ai_monitored/storage/eva) "cBh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -32914,6 +32782,7 @@ /obj/structure/chair/comfy/black{ dir = 4 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "cBq" = ( @@ -32938,6 +32807,7 @@ /obj/structure/chair/comfy/brown{ dir = 8 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "cBt" = ( @@ -32965,6 +32835,7 @@ /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/delivery/hollow, /obj/structure/closet/secure_closet/expedition, +/obj/item/pickaxe, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -32972,10 +32843,8 @@ /area/station/service/expedition) "cBA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Expedition Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/expedition, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -32983,6 +32852,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33252,6 +33122,7 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "cCP" = ( @@ -33262,6 +33133,7 @@ /obj/structure/chair/comfy/black{ dir = 1 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "cCR" = ( @@ -33287,7 +33159,10 @@ /area/station/science/robotics/showroom) "cCV" = ( /obj/structure/table, -/obj/machinery/recharger, +/obj/item/storage/firstaid/regular{ + pixel_y = 6 + }, +/obj/item/storage/firstaid/regular, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" @@ -33307,9 +33182,8 @@ /area/station/service/expedition) "cCY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -33382,6 +33256,7 @@ /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/transparent/glass/reinforced, /area/station/public/locker) "cDo" = ( @@ -33605,11 +33480,10 @@ /area/station/medical/chemistry) "cEk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Expedition Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/expedition, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33631,6 +33505,7 @@ /area/station/ai_monitored/storage/eva) "cEt" = ( /obj/structure/chair/sofa/left, +/obj/effect/landmark/start/artist, /turf/simulated/floor/plasteel/dark, /area/station/public/locker) "cEv" = ( @@ -33668,8 +33543,7 @@ }, /obj/effect/turf_decal/delivery, /obj/machinery/door/window/classic/reversed, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) "cEI" = ( @@ -34073,16 +33947,9 @@ }, /area/station/security/processing) "cGX" = ( -/obj/machinery/power/treadmill{ - dir = 4; - id = "treadmill2" - }, -/obj/machinery/treadmill_monitor{ - pixel_x = 32; - id = "treadmill2" - }, /obj/effect/turf_decal/delivery/hollow, /obj/item/radio/intercom/directional/south, +/obj/structure/closet/masks, /turf/simulated/floor/plasteel, /area/station/public/fitness) "cGY" = ( @@ -34143,10 +34010,8 @@ /turf/simulated/floor/plating, /area/station/engineering/atmos/control) "cHi" = ( -/obj/machinery/door/airlock/engineering{ - name = "Electrical Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 1; @@ -34155,6 +34020,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "cHk" = ( @@ -34264,11 +34130,10 @@ }, /area/station/hallway/primary/central) "cHR" = ( -/obj/machinery/door/airlock/glass{ - name = "Chapel Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel) "cHY" = ( @@ -34359,9 +34224,9 @@ name = "escape pod 2" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_2) @@ -34456,7 +34321,7 @@ }, /area/station/science/xenobiology) "cIP" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/equipmentstorage) @@ -34579,11 +34444,11 @@ /area/station/medical/virology/lab) "cJm" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 6 }, /obj/effect/decal/cleanable/dirt, @@ -34677,12 +34542,11 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "cJM" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) "cJO" = ( @@ -35362,10 +35226,7 @@ /turf/simulated/floor/wood/fancy/oak, /area/station/legal/courtroom) "cMG" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -35382,6 +35243,7 @@ /obj/structure/chair/stool{ dir = 4 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "cMP" = ( @@ -35496,16 +35358,15 @@ /area/space/nearstation) "cNo" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Xenobiology Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "cNq" = ( @@ -35517,9 +35378,6 @@ dir = 1; name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ - dir = 1 - }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -35530,6 +35388,9 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ + dir = 1 + }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cNs" = ( @@ -35541,9 +35402,6 @@ dir = 1; name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ - dir = 1 - }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -35554,6 +35412,9 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ + dir = 1 + }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cNt" = ( @@ -35565,9 +35426,6 @@ dir = 1; name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ - dir = 1 - }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -35578,6 +35436,9 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ + dir = 1 + }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cNy" = ( @@ -35719,13 +35580,12 @@ }, /area/station/public/fitness) "cOv" = ( -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/bathroom{ id = "toilet2"; - id_tag = "toilet2"; - name = "Toilet" + id_tag = "toilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/toilet) "cOw" = ( @@ -35806,13 +35666,12 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) "cOH" = ( -/obj/machinery/door/airlock/engineering{ - name = "Electrical Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) "cOI" = ( @@ -36251,13 +36110,13 @@ /obj/machinery/door/window/reinforced/normal{ name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "cQI" = ( @@ -36376,9 +36235,9 @@ "cRc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "KPPNorth"; - name = "Public Access" + id_tag = "KPPNorth" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "EscapeLockdown"; name = "Escape Shuttle Lockdown" @@ -36541,9 +36400,6 @@ dir = 8; name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 8 - }, /obj/machinery/door/poddoor/preopen{ id_tag = "xenosecure"; name = "Secure Creature Cell" @@ -36558,6 +36414,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cRQ" = ( @@ -36992,15 +36851,15 @@ dir = 4; name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ + dir = 4 + }, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "cTv" = ( @@ -37039,11 +36898,10 @@ /area/station/science/xenobiology) "cTC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/research) "cTD" = ( @@ -37059,7 +36917,6 @@ /obj/machinery/door/window/classic/normal{ name = "Research Lab Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research, /obj/machinery/door/window/classic/normal{ dir = 1 }, @@ -37074,9 +36931,7 @@ pixel_x = -6; pixel_y = 3 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 1 - }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research, /turf/simulated/floor/plasteel/white, /area/station/science/rnd) "cTG" = ( @@ -37284,11 +37139,10 @@ /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_2) "cUS" = ( -/obj/machinery/door/airlock/engineering{ - name = "Electrical Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/equipment, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/access/any/engineering/equipment, /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) "cUT" = ( @@ -37836,7 +37690,6 @@ /obj/machinery/door/window/reinforced/normal{ name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37847,6 +37700,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cWF" = ( @@ -37857,7 +37711,6 @@ /obj/machinery/door/window/reinforced/normal{ name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37868,6 +37721,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cWG" = ( @@ -37878,7 +37732,6 @@ /obj/machinery/door/window/reinforced/normal{ name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37889,6 +37742,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "cWH" = ( @@ -38314,9 +38168,8 @@ /turf/simulated/wall, /area/station/medical/psych) "cZl" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Gambling Den" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plasteel, /area/station/maintenance/abandonedbar) @@ -38343,13 +38196,12 @@ /area/station/maintenance/electrical) "cZr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/research) "cZs" = ( @@ -38387,12 +38239,9 @@ dir = 4; name = "Research Lab Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plasteel/white, /area/station/science/rnd) @@ -38604,10 +38453,8 @@ /area/station/maintenance/starboardsolar) "daH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Research and Development" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38622,6 +38469,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel/white, /area/station/science/rnd) "daJ" = ( @@ -38744,6 +38592,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/virology_maint) "dbp" = ( @@ -38824,9 +38673,6 @@ dir = 8; name = "Research Lab Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 8 - }, /obj/machinery/door/window/classic/normal{ dir = 4 }, @@ -38838,7 +38684,7 @@ }, /obj/effect/turf_decal/delivery, /obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" @@ -39030,7 +38876,7 @@ dir = 4; name = "Evidence" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -39135,9 +38981,8 @@ /area/station/science/rnd) "ddk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -39180,9 +39025,9 @@ /obj/machinery/door/airlock/virology{ autoclose = 0; id_tag = "virolab_door_int"; - locked = 1; - name = "Virology Lab Internal Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/south{ autolink_id = "virolab_btn_int"; name = "Virology Lab Access Button"; @@ -39204,7 +39049,6 @@ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/any/medical/virology, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -39818,6 +39662,7 @@ /area/station/medical/virology/lab) "dhb" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/locked, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -39938,10 +39783,8 @@ /area/station/command/office/rd) "dhS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Xenobiology Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -39954,6 +39797,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "dia" = ( @@ -40189,9 +40033,9 @@ /obj/machinery/door/airlock/external{ hackProof = 1; id_tag = "emergency_home"; - locked = 1; - name = "Escape Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit/maintenance) "diY" = ( @@ -40223,6 +40067,7 @@ /area/station/maintenance/port2) "djc" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -40269,6 +40114,7 @@ /area/station/maintenance/medmaint) "dji" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -40380,7 +40226,7 @@ /area/station/maintenance/apmaint) "dka" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, @@ -40434,9 +40280,8 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "dki" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Isolation A" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/item/grown/bananapeel, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -40587,10 +40432,9 @@ "dkU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "rdofficedoor"; - name = "Research Director's Office" + id_tag = "rdofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/any/science/rd, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40605,6 +40449,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/rd, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel/white, /area/station/command/office/rd) "dkV" = ( @@ -40695,13 +40541,6 @@ icon_state = "darkblue" }, /area/station/medical/surgery/primary) -"dlE" = ( -/obj/effect/turf_decal/delivery/partial, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "browncorner" - }, -/area/station/hallway/primary/central/north) "dlJ" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -40712,6 +40551,7 @@ /area/station/maintenance/abandonedbar) "dlL" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -40841,8 +40681,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "dmA" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 8; @@ -40952,6 +40790,7 @@ /area/station/science/misc_lab) "dnh" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Surgery1" }, @@ -40969,7 +40808,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/surgery, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -41079,9 +40917,8 @@ /area/station/hallway/primary/aft) "dnF" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Mech Bay" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) @@ -41341,13 +41178,12 @@ /area/station/hallway/primary/aft) "dpc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Mech Bay" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) "dpf" = ( @@ -41748,8 +41584,8 @@ /area/station/maintenance/port) "dro" = ( /obj/machinery/door/airlock/virology/glass, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -41769,19 +41605,14 @@ }, /area/station/security/processing) "drs" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port) "drv" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Research Director's Quarters" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41789,6 +41620,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/science/rd, /turf/simulated/floor/plasteel/white, /area/station/command/office/rd) "drz" = ( @@ -41955,9 +41787,7 @@ /area/station/medical/cryo) "drZ" = ( /obj/structure/table/reinforced, -/obj/item/camera{ - pixel_y = 2 - }, +/obj/item/camera, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -42087,7 +41917,7 @@ /area/station/supply/miningdock) "dsI" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -42185,6 +42015,7 @@ /area/station/medical/virology/lab) "dsR" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -42370,10 +42201,7 @@ }, /area/station/science/research) "dtU" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/port) "dtY" = ( @@ -42552,11 +42380,11 @@ /area/station/engineering/engine/supermatter) "duP" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/armory, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "WardenD" }, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel/dark, /area/station/security/warden) "duQ" = ( @@ -42603,10 +42431,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/port2) "duZ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Robotics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -42616,6 +42442,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "dvc" = ( @@ -42737,9 +42564,9 @@ /area/station/maintenance/starboard2) "dvM" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -42802,9 +42629,6 @@ dir = 8; name = "Robotics Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ - dir = 8 - }, /obj/machinery/door/window/classic/normal{ dir = 4 }, @@ -42813,6 +42637,9 @@ name = "Robotics Desk Shutters" }, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/station/science/robotics) "dwq" = ( @@ -42930,23 +42757,21 @@ /turf/simulated/floor/plasteel/dark, /area/station/science/server) "dxv" = ( -/obj/machinery/door/airlock/command{ - name = "Server Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/rd, /turf/simulated/floor/plasteel/dark, /area/station/science/server) "dxB" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Robotics Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "dxD" = ( @@ -42976,6 +42801,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/effect/landmark/start/bath, /turf/simulated/floor/plasteel{ icon_state = "neutral" }, @@ -43000,10 +42826,8 @@ /area/station/science/server) "dyJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Server Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, /obj/structure/cable{ d1 = 1; @@ -43015,6 +42839,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/rd, /turf/simulated/floor/plasteel/dark, /area/station/science/server) "dyL" = ( @@ -43068,9 +42893,8 @@ opacity = 1 }, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, /obj/machinery/door/window/classic/reversed, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics, /turf/simulated/floor/plasteel, /area/station/science/robotics) "dyR" = ( @@ -43081,14 +42905,6 @@ /obj/effect/landmark/start/roboticist, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"dyU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Auxiliary Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/station/maintenance/fore) "dzb" = ( /obj/machinery/light/small/directional/north, /turf/simulated/floor/plating, @@ -43181,7 +42997,6 @@ pixel_x = -4; pixel_y = 3 }, -/obj/effect/mapping_helpers/airlock/access/any/command/eva, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) "dzS" = ( @@ -43422,6 +43237,7 @@ /area/station/hallway/primary/aft) "dBm" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" @@ -43433,13 +43249,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/aft) "dBo" = ( @@ -43921,8 +43736,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel/dark, /area/station/security/prison/cell_block/A) @@ -43979,9 +43792,8 @@ /area/station/maintenance/apmaint) "dEl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -43991,9 +43803,8 @@ /area/station/hallway/primary/aft) "dEm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/hallway/primary/aft) @@ -44742,6 +44553,7 @@ /area/station/maintenance/apmaint) "dIG" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -44752,7 +44564,6 @@ /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "dIH" = ( @@ -44771,9 +44582,8 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/door/airlock/command/glass{ - name = "Customs Desk" - }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ icon_state = "bluefull" @@ -44912,9 +44722,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/public{ - name = "Shower" - }, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/freezer, /area/station/public/pool) "dJE" = ( @@ -45114,10 +44923,9 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "dKK" = ( -/obj/machinery/door/airlock/glass{ - name = "Chapel Morgue" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) "dKL" = ( @@ -45126,9 +44934,9 @@ "dKO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/glass{ - dir = 2; - name = "Chapel" + dir = 2 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45147,19 +44955,17 @@ /obj/machinery/door/airlock/external{ hackProof = 1; id_tag = "emergency_home"; - locked = 1; - name = "Escape Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "dKY" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Crematorium Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -45167,6 +44973,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dKZ" = ( @@ -45274,7 +45081,7 @@ "dMg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/friedegg, +/obj/item/food/snacks/friedegg, /turf/simulated/floor/wood/oak, /area/station/maintenance/starboard) "dMh" = ( @@ -45289,17 +45096,21 @@ /area/station/service/chapel/office) "dMi" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/reinforced/normal, +/obj/machinery/door/window/reinforced/normal{ + dir = 1 + }, /obj/machinery/door/poddoor/shutters{ dir = 2; id_tag = "Secure Armory"; name = "Secure Armory Shutters" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general, /obj/machinery/door/poddoor/preopen{ id_tag = "ArmoryLock"; name = "Armory Lockdown" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 1 + }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "dMj" = ( @@ -45392,9 +45203,8 @@ /area/station/maintenance/old_kitchen) "dMP" = ( /obj/machinery/door/airlock/security/glass, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -45403,6 +45213,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/storage) "dMQ" = ( @@ -45520,11 +45331,6 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -45657,7 +45463,7 @@ }, /area/station/hallway/secondary/exit) "dOz" = ( -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -45678,6 +45484,7 @@ /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyerPort" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, @@ -45701,7 +45508,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -45849,9 +45655,9 @@ "dPu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "KPPNorth"; - name = "Public Access" + id_tag = "KPPNorth" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -46107,10 +45913,8 @@ /area/station/maintenance/apmaint) "dQg" = ( /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/command/glass{ - name = "Auxiliary E.V.A." - }, -/obj/effect/mapping_helpers/airlock/access/any/command/eva, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -46155,10 +45959,8 @@ /area/station/service/chapel) "dQn" = ( /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/command/glass{ - name = "Auxiliary E.V.A." - }, -/obj/effect/mapping_helpers/airlock/access/any/command/eva, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) @@ -46244,7 +46046,7 @@ /obj/structure/table/reinforced, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -46321,10 +46123,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "dRc" = ( -/obj/machinery/door/airlock/engineering{ - name = "Aft Port Solar Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/sign/electricshock{ pixel_y = -32 }, @@ -46336,6 +46136,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/maintenance/portsolar) "dRj" = ( @@ -46408,7 +46209,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/mask/breath, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/machinery/newscaster/directional/east, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) @@ -46599,7 +46400,6 @@ dir = 1; name = "Anti-Theft Shield" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ dir = 1 }, @@ -46686,13 +46486,6 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) -"dSr" = ( -/obj/machinery/door/airlock/glass{ - name = "Chapel Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, -/turf/simulated/floor/plasteel/dark, -/area/station/service/chapel/office) "dSs" = ( /turf/simulated/floor/plasteel{ icon_state = "green" @@ -46875,7 +46668,7 @@ /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency, /obj/item/wrench, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dTg" = ( @@ -46897,8 +46690,9 @@ /area/station/maintenance/apmaint) "dTh" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) "dTj" = ( @@ -47128,7 +46922,7 @@ /area/station/service/chapel/office) "dUf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /turf/simulated/floor/carpet, /area/station/service/chapel/office) "dUg" = ( @@ -47202,15 +46996,14 @@ }, /area/station/hallway/secondary/exit) "dUu" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Checkpoint" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -47338,8 +47131,8 @@ /area/station/service/chapel/office) "dUK" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, -/obj/item/reagent_containers/food/snacks/grown/poppy/lily{ +/obj/item/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy/lily{ pixel_x = 4; pixel_y = 5 }, @@ -47465,6 +47258,7 @@ /area/station/service/library) "dVj" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -47477,7 +47271,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/hallway/primary/aft) "dVn" = ( @@ -47682,15 +47475,15 @@ dir = 1; name = "Creature Pen" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ - dir = 1 - }, /obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio{ + dir = 1 + }, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "dWr" = ( @@ -47779,10 +47572,8 @@ /area/station/hallway/secondary/exit) "dWC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = null - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47797,7 +47588,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "dWI" = ( @@ -47839,20 +47630,19 @@ }, /area/station/hallway/primary/central/se) "dXa" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Chapel Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dXj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "KPPNorth"; - name = "Public Access" + id_tag = "KPPNorth" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "EscapeLockdown"; name = "Escape Shuttle Lockdown" @@ -47886,10 +47676,7 @@ /turf/simulated/wall/r_wall, /area/station/hallway/secondary/exit) "dXo" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -47938,10 +47725,7 @@ /turf/simulated/floor/plasteel, /area/station/science/robotics) "dXs" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" @@ -48563,9 +48347,9 @@ "ebA" = ( /obj/machinery/door/airlock/external{ id_tag = "trade_dock"; - locked = 1; - name = "Arrivals External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "ebC" = ( @@ -48933,6 +48717,7 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -48964,6 +48749,7 @@ /area/station/maintenance/port) "ehj" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -48973,13 +48759,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/medical/paramedic, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/station/medical/paramedic) "ehm" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -49069,6 +48854,13 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/wood/oak, /area/station/maintenance/library) +"eiG" = ( +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/orange, +/area/station/service/theatre) "eiL" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/machinery/door/poddoor/preopen{ @@ -49173,9 +48965,8 @@ }, /area/station/maintenance/starboard2) "elb" = ( -/obj/machinery/door/airlock/external{ - name = "Escape Pod" - }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/port) "elg" = ( @@ -49341,7 +49132,6 @@ /area/station/maintenance/fore2) "enC" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -49352,6 +49142,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/range) "enE" = ( @@ -49421,7 +49212,7 @@ /area/station/legal/courtroom) "eoB" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -49439,9 +49230,8 @@ /turf/simulated/wall/r_wall, /area/station/security/permabrig) "epE" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Forensics Morgue" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fsmaint) @@ -49569,6 +49359,7 @@ /area/station/science/test_chamber) "erQ" = ( /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -49614,7 +49405,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "esw" = ( /obj/machinery/access_button{ autolink_id = "enginen_btn_ext"; @@ -49632,11 +49423,11 @@ /area/station/engineering/control) "esC" = ( /obj/machinery/door/airlock{ - name = "Bedroom"; id_tag = "PrivateRoom2" }, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/public/vacant_store) "esG" = ( @@ -49722,9 +49513,9 @@ }, /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_int"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/south{ autolink_id = "perma_btn_int"; name = "Prison Wing Access Button"; @@ -49732,10 +49523,9 @@ pixel_y = 0; pixel_x = 24 }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -49760,6 +49550,7 @@ /area/station/hallway/secondary/bridge) "euA" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -49974,17 +49765,17 @@ /area/station/maintenance/fore) "exJ" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/shutters{ dir = 2; id_tag = "Secure Armory"; name = "Secure Armory Shutters" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "ArmoryLock"; name = "Armory Lockdown" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "exS" = ( @@ -50220,10 +50011,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/bar, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plating, /area/station/maintenance/fore) "eBE" = ( @@ -50303,6 +50095,7 @@ /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -50614,7 +50407,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "eJJ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -50630,7 +50423,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "eJO" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -50646,7 +50439,7 @@ /area/station/hallway/primary/central/east) "eJW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, /obj/item/clothing/head/ushanka, /turf/simulated/floor/plating, /area/station/maintenance/old_kitchen) @@ -50718,6 +50511,7 @@ /obj/structure/chair/wood{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/old_kitchen) "eKD" = ( @@ -50911,7 +50705,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "eNt" = ( /turf/simulated/wall, /area/station/maintenance/fsmaint) @@ -51096,7 +50890,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "eQc" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -51139,9 +50933,9 @@ /area/station/security/permabrig) "eQv" = ( /obj/machinery/door/airlock{ - name = "Toilet"; id_tag = "DormToilet4" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -51186,8 +50980,8 @@ /area/station/hallway/secondary/entry) "eQP" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -51220,6 +51014,14 @@ icon_state = "neutralfull" }, /area/station/engineering/tech_storage) +"eRj" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel{ + icon_state = "cmo" + }, +/area/station/security/permabrig) "eRl" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -51428,8 +51230,8 @@ /area/station/medical/medbay2) "eUZ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/machinery/light/small/directional/north, @@ -51441,6 +51243,7 @@ /area/station/maintenance/dormitory_maintenance) "eVl" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, @@ -51451,6 +51254,7 @@ /area/station/engineering/hardsuitstorage) "eVA" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -51479,7 +51283,7 @@ /obj/machinery/door/airlock/vault{ locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -51491,12 +51295,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/vault, /turf/simulated/floor/plasteel/dark, /area/station/command/vault) "eXa" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood/fancy/cherry, /area/station/public/vacant_store) "eXm" = ( @@ -51508,6 +51314,7 @@ "eXw" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -51601,13 +51408,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/glass{ - name = "Service Hall" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/service/theatre, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -51629,6 +51436,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -51723,13 +51531,13 @@ }, /area/station/service/bar) "fby" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/court, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "court" }, /obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/carpet/black, /area/station/legal/courtroom) "fbB" = ( @@ -51801,14 +51609,14 @@ /area/station/public/fitness) "fdo" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/bottleofbanana{ +/obj/item/reagent_containers/drinks/bottle/bottleofbanana{ pixel_y = 16 }, -/obj/item/reagent_containers/food/drinks/bottle/milk{ +/obj/item/reagent_containers/drinks/bottle/milk{ pixel_y = 2; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/bottle/orangejuice{ +/obj/item/reagent_containers/drinks/bottle/orangejuice{ pixel_y = 4; pixel_x = 6 }, @@ -52070,10 +51878,7 @@ }, /area/station/public/vacant_store) "fhI" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/shard, /turf/simulated/floor/plating, @@ -52116,6 +51921,13 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/carpet, /area/station/service/library) +"fiz" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/orange, +/area/station/service/theatre) "fiC" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "Surgery2" @@ -52157,9 +51969,9 @@ "fiK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "KPPSouth"; - name = "Public Access" + id_tag = "KPPSouth" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -52225,12 +52037,12 @@ /area/station/hallway/secondary/exit) "fkv" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/armory, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "ArmoryLock"; name = "Armory Lockdown" }, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "fkz" = ( @@ -52346,16 +52158,12 @@ /area/station/maintenance/dormitory_maintenance) "fmc" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plasteel, /area/station/maintenance/dormitory_maintenance) "fmg" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Forensics Morgue" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -52367,7 +52175,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/security/forensics, +/obj/effect/mapping_helpers/airlock/access/any/security/forensics, /turf/simulated/floor/plating, /area/station/security/detective) "fmm" = ( @@ -52577,12 +52385,13 @@ /area/station/medical/surgery/secondary) "fpv" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "fqb" = ( @@ -52781,10 +52590,8 @@ }, /area/station/engineering/mechanic) "ftB" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Transit Tube" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/minisat, +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "transitlock"; name = "Transit Tube Lockdown" @@ -52802,8 +52609,9 @@ icon_state = "1-4" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/science/minisat, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ftD" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -52827,11 +52635,9 @@ "fuc" = ( /obj/machinery/door/airlock/external{ id_tag = "apmaint2_door_int"; - locked = 1; - name = "West Maintenance External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, @@ -52839,6 +52645,7 @@ autolink_id = "apmaint2_btn_int"; name = "interior access button" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/port) "fun" = ( @@ -53260,10 +53067,7 @@ }, /area/station/hallway/primary/central/ne) "fAW" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -53420,8 +53224,8 @@ /area/station/maintenance/starboard) "fDY" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -53478,6 +53282,7 @@ "fFE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -53593,8 +53398,14 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "fGU" = ( /obj/structure/cable{ d1 = 4; @@ -54317,6 +54128,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/fancy, /area/station/service/theatre) "fSx" = ( @@ -54341,11 +54153,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -54436,6 +54243,7 @@ dir = 8 }, /obj/effect/decal/cleanable/ants, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "fTR" = ( @@ -54461,6 +54269,7 @@ "fTX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -54603,12 +54412,12 @@ /turf/simulated/wall, /area/station/maintenance/electrical) "fWF" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ id_tag = "BrigRight" }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -54705,6 +54514,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "fYd" = ( @@ -55013,7 +54823,6 @@ /turf/simulated/floor/wood/oak, /area/station/command/office/hop) "gcZ" = ( -/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55025,14 +54834,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/welded, /obj/machinery/door/airlock/psych, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/wood/oak, /area/station/medical/patients_rooms) "gdK" = ( @@ -55065,6 +54875,7 @@ /area/station/science/test_chamber) "geW" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -55091,10 +54902,8 @@ /area/station/maintenance/starboard) "gfN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Desk" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55106,6 +54915,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) "gfY" = ( @@ -55479,7 +55289,7 @@ /area/station/engineering/controlroom) "glD" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/decal/cleanable/dirt, /obj/item/gun/projectile/revolver/russian{ pixel_y = 12 @@ -55672,7 +55482,7 @@ /area/station/medical/virology) "gpn" = ( /obj/effect/spawner/window/reinforced/plasma/grilled, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/station/science/toxins/mixing) "gpy" = ( @@ -55741,6 +55551,13 @@ icon_state = "neutralcorner" }, /area/station/public/locker) +"gqV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/landmark/start/dealer, +/turf/simulated/floor/wood/fancy/cherry, +/area/station/public/vacant_store) "grg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55774,8 +55591,8 @@ /area/station/security/checkpoint/south) "grj" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, @@ -55964,7 +55781,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore2) "gtR" = ( -/obj/item/seeds/coffee, +/obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -56036,10 +55853,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/fore) "gvn" = ( @@ -56244,6 +56058,7 @@ "gyL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -56253,15 +56068,16 @@ "gyY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "pub_room"; - name = "Public Meeting Room" + id_tag = "pub_room" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "gzd" = ( @@ -56313,8 +56129,8 @@ /area/station/service/theatre) "gAT" = ( /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -56426,9 +56242,6 @@ pixel_x = -3; pixel_y = 3 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ - dir = 8 - }, /obj/machinery/camera{ c_tag = "Brig Secure Armory East"; dir = 8 @@ -56437,6 +56250,9 @@ pixel_x = -3; pixel_y = 3 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "gCs" = ( @@ -56481,6 +56297,10 @@ /obj/machinery/door/window/classic/reversed{ name = "Toxins Launcher" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox{ + dir = 1 + }, /turf/simulated/floor/plating, /area/station/science/toxins/launch) "gCT" = ( @@ -56538,10 +56358,8 @@ /area/station/maintenance/starboard2) "gEj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -56563,6 +56381,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -56677,10 +56496,7 @@ }, /area/station/maintenance/fsmaint) "gGM" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -56932,9 +56748,6 @@ dir = 4; name = "Medbay Reception" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ - dir = 4 - }, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -56960,10 +56773,9 @@ "gLy" = ( /obj/machinery/door/airlock/external{ id_tag = "apsolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -56977,6 +56789,7 @@ name = "interior access button"; req_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "gLB" = ( @@ -57117,7 +56930,6 @@ /area/station/science/misc_lab) "gNh" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/armory, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -57134,14 +56946,14 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "gNi" = ( -/obj/machinery/door/airlock/research{ - name = "Abandoned Equipment Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "gNj" = ( @@ -57194,7 +57006,7 @@ /area/station/medical/virology) "gOz" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk, +/obj/item/food/snacks/disk, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -57307,10 +57119,7 @@ /turf/simulated/floor/carpet/royalblack, /area/station/legal/magistrate) "gQm" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard, /obj/item/shard{ icon_state = "small" @@ -57455,10 +57264,7 @@ }, /area/station/maintenance/fsmaint) "gSY" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/shard, /turf/simulated/floor/plating, @@ -57533,7 +57339,9 @@ }, /area/station/engineering/control) "gTF" = ( -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) @@ -57565,10 +57373,7 @@ /turf/simulated/wall, /area/station/supply/abandoned_boxroom) "gUg" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/chair/stool/bar{ dir = 8 }, @@ -57594,6 +57399,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/damageturf, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "gUx" = ( @@ -57620,7 +57426,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "gVw" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -57628,9 +57434,9 @@ /area/station/medical/chemistry) "gVD" = ( /obj/machinery/door/airlock{ - name = "Toilet"; id_tag = "DormToilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -57944,7 +57750,7 @@ /obj/item/toy/figure/crew/captain, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/lighter/zippo/nt_rep, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) "hbH" = ( @@ -58047,8 +57853,6 @@ name = "Dungeon"; req_access = list(63) }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -58056,6 +57860,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/interrogation) "hcY" = ( @@ -58245,11 +58050,11 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ id_tag = "mining_home"; - locked = 1; - name = "Mining Dock Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "hgg" = ( @@ -58257,14 +58062,11 @@ /obj/structure/transit_tube/station{ dir = 1 }, -/obj/structure/transit_tube_pod{ - dir = 8 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "hgs" = ( /obj/structure/cable{ d1 = 1; @@ -58303,16 +58105,14 @@ }, /area/station/medical/virology/lab) "hhp" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Checkpoint" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -58328,6 +58128,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -58613,6 +58414,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/carpet, /area/station/security/permabrig) "hlS" = ( @@ -58645,8 +58447,8 @@ "hmU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -58760,6 +58562,7 @@ /obj/machinery/door/airlock/command/cmo/glass{ id_tag = "CMO" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "CMO" }, @@ -58789,7 +58592,7 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/cmo, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -58800,10 +58603,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "hqq" = ( -/obj/machinery/door/airlock/glass{ - name = "Chapel Morgue" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -58811,10 +58612,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/service/crematorium, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) "hqG" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -58840,9 +58643,9 @@ /area/station/supply/storage) "hqM" = ( /obj/machinery/door/airlock{ - name = "Bedroom"; id_tag = "PrivateRoom2" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -58851,7 +58654,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/fancy/oak, /area/station/public/sleep_male) "hqR" = ( @@ -58898,6 +58700,7 @@ /area/station/maintenance/medmaint) "hrU" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/holosign/surgery{ id = "Surgery2" }, @@ -58917,7 +58720,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/surgery, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -59111,6 +58913,16 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/research) +"hvN" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/landmark/start/bath, +/turf/simulated/floor/plasteel/freezer, +/area/station/public/pool) "hvS" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; @@ -59229,16 +59041,15 @@ }, /area/station/science/misc_lab) "hxF" = ( -/obj/machinery/door/airlock/glass{ - name = "Chapel Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) "hxL" = ( @@ -59359,7 +59170,7 @@ /area/station/engineering/break_room) "hzw" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_x = -6 }, /turf/simulated/floor/plasteel{ @@ -59554,17 +59365,15 @@ /area/station/science/research) "hCM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/research) "hCZ" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/parquet, /area/station/service/library) "hDf" = ( @@ -60004,9 +59813,6 @@ /obj/machinery/door/window{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/chapel_office{ - dir = 1 - }, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "hJe" = ( @@ -60029,17 +59835,17 @@ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit/maintenance) "hJo" = ( @@ -60062,11 +59868,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -60106,6 +59907,7 @@ "hKc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -60362,10 +60164,7 @@ }, /area/station/security/permabrig) "hNR" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/shard{ icon_state = "small"; pixel_x = -8; @@ -60565,10 +60364,10 @@ }, /area/station/bridge/checkpoint/south) "hQJ" = ( -/obj/effect/mapping_helpers/airlock/access/any/command/magistrate, /obj/machinery/door/airlock/command, -/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/magistrate, /turf/simulated/floor/wood/oak, /area/station/legal/magistrate) "hQV" = ( @@ -60799,6 +60598,7 @@ /obj/structure/chair/sofa/right{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/plasteel/dark, /area/station/public/locker) "hVo" = ( @@ -60855,7 +60655,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "hVT" = ( /obj/effect/turf_decal/stripes/white/line{ color = "lightblue" @@ -60880,10 +60680,7 @@ /area/station/medical/morgue) "hWh" = ( /obj/machinery/light/small/directional/north, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -61125,13 +60922,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/fitness) "ibG" = ( @@ -61300,6 +61097,7 @@ /area/station/engineering/control) "ieo" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -61318,7 +61116,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -61362,6 +61159,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "iex" = ( @@ -61397,7 +61197,7 @@ pixel_x = -4; pixel_y = -4 }, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /obj/item/radio/intercom/directional/west, /turf/simulated/floor/carpet, /area/station/security/detective) @@ -61411,10 +61211,7 @@ }, /area/station/security/permabrig) "ieW" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/shard{ icon_state = "small" @@ -61510,6 +61307,7 @@ /area/station/maintenance/fore) "igB" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61518,7 +61316,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "igI" = ( @@ -61752,8 +61550,8 @@ /area/station/ai_monitored/storage/eva) "ikQ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 7 }, /obj/effect/decal/cleanable/dirt, @@ -61995,6 +61793,7 @@ /area/station/supply/storage) "iol" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -62011,7 +61810,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "cmo" }, @@ -62092,9 +61890,8 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint" - }, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -62105,7 +61902,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/simulated/floor/plasteel, /area/station/maintenance/dormitory_maintenance) "ipy" = ( @@ -62205,8 +62001,6 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/mapping_helpers/airlock/access/any/security/iaa, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -62224,16 +62018,18 @@ icon_state = "2-8" }, /obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "iaa" }, +/obj/effect/mapping_helpers/airlock/access/any/security/iaa, /turf/simulated/floor/wood/fancy/oak, /area/station/legal/lawoffice) "iqN" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -62241,6 +62037,7 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/service/theatre) "iqR" = ( @@ -62473,6 +62270,7 @@ /area/station/service/bar/atrium) "itO" = ( /obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -62502,9 +62300,8 @@ /area/station/maintenance/starboard) "iud" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering" - }, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -62529,7 +62326,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -62582,6 +62379,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) +"iuP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel{ + icon_state = "bar" + }, +/area/station/security/permabrig) "iuU" = ( /obj/structure/chair{ dir = 4 @@ -62644,9 +62448,9 @@ /area/station/security/podpilot) "iwz" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -62889,9 +62693,9 @@ /area/station/hallway/primary/central/north) "iBn" = ( /obj/machinery/door/airlock/freezer, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/effect/mapping_helpers/airlock/welded, -/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/simulated/floor/plating, /area/station/maintenance/dormitory_maintenance) "iBr" = ( @@ -62937,7 +62741,9 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/structure/window/reinforced{ dir = 8 }, @@ -63140,6 +62946,7 @@ /area/station/service/bar/atrium) "iFR" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -63151,12 +62958,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/hallway/primary/aft) "iGm" = ( @@ -63473,9 +63278,9 @@ /area/station/security/detective) "iLJ" = ( /obj/machinery/door/airlock{ - name = "Bedroom"; id_tag = "PrivateRoom1" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -63484,7 +63289,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/fancy, /area/station/public/sleep_female) "iMa" = ( @@ -63577,6 +63381,7 @@ /obj/structure/chair/sofa/right{ dir = 1 }, +/obj/effect/landmark/start/vip, /turf/simulated/floor/plasteel/dark, /area/station/service/theatre) "iNL" = ( @@ -63648,6 +63453,7 @@ "iOx" = ( /obj/machinery/hologram/holopad, /obj/effect/spawner/xmastree, +/obj/effect/landmark/start/artist, /turf/simulated/floor/wood/fancy, /area/station/service/theatre) "iOy" = ( @@ -63702,12 +63508,13 @@ /area/station/medical/medbay) "iPE" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "iPQ" = ( @@ -63854,6 +63661,7 @@ /area/station/maintenance/medmaint) "iRO" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -63873,7 +63681,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -63883,7 +63690,7 @@ /area/station/maintenance/medmaint) "iSe" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_y = 10 }, /obj/effect/decal/cleanable/dirt, @@ -64229,10 +64036,9 @@ /obj/machinery/door/airlock/research/glass{ autoclose = 0; id_tag = "tox_airlock_exterior"; - locked = 1; - name = "Xenobiology Kill Room" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 2; d2 = 8; @@ -64243,6 +64049,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, /turf/simulated/floor/plasteel/dark, /area/station/science/xenobiology) "iYd" = ( @@ -64573,8 +64380,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "jeJ" = ( @@ -64657,10 +64464,10 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel/dark, /area/station/security/prison/cell_block/A) "jfO" = ( @@ -64739,9 +64546,6 @@ dir = 1; name = "Cargo Bay Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ - dir = 1 - }, /obj/effect/turf_decal/delivery, /obj/item/desk_bell{ anchored = 1; @@ -64754,6 +64558,9 @@ id_tag = "cargodesk"; name = "Cargo Desk Shutters" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -65011,9 +64818,8 @@ }, /area/station/science/research) "jjl" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, +/obj/machinery/door/airlock/hydroponics/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -65141,16 +64947,16 @@ "jkM" = ( /obj/machinery/door/airlock/external{ id_tag = "enginen_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) @@ -65187,14 +64993,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "jmi" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Turbine Generator Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "jmD" = ( @@ -65327,7 +65133,7 @@ "jof" = ( /obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "jog" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/closet/secure_closet/engineering_electrical, @@ -65429,7 +65235,7 @@ }, /area/station/science/genetics) "jpy" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/engineering/hardsuitstorage) @@ -65619,7 +65425,6 @@ /obj/effect/mapping_helpers/airlock/polarized{ id = "psych" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -65631,8 +65436,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/psych/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/wood/oak, /area/station/medical/psych) "jsE" = ( @@ -66118,13 +65924,13 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/fitness) "jBa" = ( @@ -66177,6 +65983,7 @@ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/old_kitchen) "jCz" = ( @@ -66293,6 +66100,7 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -66382,6 +66190,7 @@ /obj/structure/chair/comfy/black{ dir = 8 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/carpet, /area/station/service/bar/atrium) "jGG" = ( @@ -66445,8 +66254,8 @@ /area/station/service/theatre) "jHK" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -66487,6 +66296,7 @@ "jIg" = ( /obj/machinery/light_construct/directional/east, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "chapel" @@ -66499,12 +66309,12 @@ /area/station/maintenance/disposal/west) "jIO" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/processing) "jJc" = ( @@ -66705,9 +66515,9 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/station/security/brig) "jKL" = ( @@ -66731,10 +66541,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plasteel{ icon_state = "black" }, @@ -66933,6 +66740,14 @@ icon_state = "darkredfull" }, /area/station/security/permabrig) +"jOu" = ( +/obj/machinery/turretid/stun{ + name = "AI Upload Turret Control"; + pixel_y = 8; + req_one_access_txt = "75" + }, +/turf/simulated/wall, +/area/station/turret_protected/ai_upload) "jOB" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -67280,6 +67095,7 @@ dir = 1 }, /obj/machinery/light/directional/south, +/obj/effect/landmark/start/artist, /turf/simulated/floor/plasteel/dark, /area/station/public/locker) "jTW" = ( @@ -67364,6 +67180,7 @@ /area/station/public/pool) "jVi" = ( /obj/machinery/door/airlock/freezer, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -67384,6 +67201,7 @@ /obj/structure/chair/stool{ dir = 1 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "jWq" = ( @@ -67487,8 +67305,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -67548,6 +67366,7 @@ /area/station/maintenance/starboard) "jZi" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/holosign/surgery{ id = "Surgery2" }, @@ -67565,7 +67384,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/surgery, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -67818,15 +67636,16 @@ "kdg" = ( /obj/machinery/door/airlock/external{ id_tag = "escape_door_ext"; - locked = 1; - name = "Escape External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /obj/machinery/access_button/east{ autolink_id = "escape_btn_ext"; name = "exterior access button"; req_access_txt = "10;13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "kdm" = ( @@ -67844,6 +67663,7 @@ dir = 1 }, /obj/machinery/newscaster/directional/south, +/obj/effect/landmark/start/bar, /turf/simulated/floor/plasteel/dark, /area/station/service/theatre) "kdu" = ( @@ -68147,9 +67967,8 @@ }, /area/station/hallway/primary/central/west) "khL" = ( -/obj/machinery/door/airlock/tranquillite{ - name = "Mime's Office" - }, +/obj/machinery/door/airlock/tranquillite, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -68158,7 +67977,7 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/mime, +/obj/effect/mapping_helpers/airlock/access/any/service/mime, /turf/simulated/floor/mineral/tranquillite, /area/station/service/mime) "khQ" = ( @@ -68196,7 +68015,6 @@ /obj/machinery/door/window/classic/reversed{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -68268,6 +68086,7 @@ dir = 9 }, /obj/effect/spawner/random_spawners/blood_maybe, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "kjw" = ( @@ -68290,6 +68109,7 @@ /area/station/public/fitness) "kjP" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -68302,7 +68122,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) "kjR" = ( @@ -68349,10 +68168,8 @@ }, /area/station/maintenance/apmaint) "kkD" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Break Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/door/airlock/engineering/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -68368,6 +68185,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) "kkR" = ( @@ -68384,6 +68202,19 @@ "klf" = ( /turf/simulated/floor/plasteel/dark, /area/station/public/locker) +"klu" = ( +/obj/machinery/door/airlock/external{ + hackProof = 1; + id_tag = "emergency_home"; + locked = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/exit) "klz" = ( /obj/structure/cable{ d1 = 4; @@ -68424,10 +68255,8 @@ /area/station/medical/morgue) "kmi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Toxins Mixing Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -68436,6 +68265,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/science/tox, /turf/simulated/floor/plasteel, /area/station/science/toxins/mixing) "kmy" = ( @@ -68527,10 +68357,8 @@ /area/station/security/warden) "knY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -68562,6 +68390,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -69013,18 +68842,18 @@ "kxP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/security/court, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "court" }, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/wood/fancy/oak, /area/station/legal/courtroom) "kxX" = ( @@ -69079,16 +68908,15 @@ /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "kyz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Science Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/port) "kyI" = ( @@ -69231,11 +69059,11 @@ /area/station/service/theatre) "kAG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/plasteel, /area/station/engineering/controlroom) "kAK" = ( @@ -69346,15 +69174,14 @@ "kDl" = ( /obj/structure/table/reinforced, /obj/item/trash/plate, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, /area/station/maintenance/old_kitchen) "kDv" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Restaurant" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/wood/oak, /area/station/service/bar/atrium) @@ -69433,26 +69260,19 @@ }, /area/station/security/permabrig) "kFr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "kFG" = ( /obj/effect/mapping_helpers/airlock/polarized{ id = "HoS" }, /obj/machinery/door/airlock/command/hos/glass{ - id_tag = "hosofficedoor"; - name = "Head of Security" + id_tag = "hosofficedoor" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/hos, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -69480,6 +69300,8 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/hos, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel/dark, /area/station/command/office/hos) "kFL" = ( @@ -69620,6 +69442,13 @@ icon_state = "grimy" }, /area/station/maintenance/old_detective) +"kGD" = ( +/obj/structure/chair/sofa/left{ + dir = 4 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/orange, +/area/station/service/bar/atrium) "kGI" = ( /obj/effect/turf_decal{ dir = 1 @@ -69673,7 +69502,7 @@ /area/station/service/hydroponics) "kHq" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/candy/caramel, +/obj/item/food/snacks/candy/caramel, /obj/structure/window/reinforced{ dir = 8 }, @@ -69706,6 +69535,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood/fancy/cherry, /area/station/public/vacant_store) "kIl" = ( @@ -69909,7 +69739,7 @@ /area/station/science/toxins/mixing) "kME" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) "kMH" = ( @@ -70069,11 +69899,7 @@ /area/station/maintenance/fore2) "kOr" = ( /obj/structure/table, -/obj/item/camera{ - name = "Autopsy Camera"; - pixel_x = 4; - pixel_y = 8 - }, +/obj/item/camera/autopsy, /obj/item/autopsy_scanner{ pixel_x = -2; pixel_y = 4 @@ -70088,13 +69914,15 @@ }, /area/station/medical/morgue) "kOs" = ( -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /turf/simulated/floor/plasteel, /area/station/science/storage) "kOA" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "kOD" = ( @@ -70107,6 +69935,7 @@ "kOE" = ( /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/delivery/hollow, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" @@ -70315,15 +70144,14 @@ /turf/simulated/floor/wood/fancy/cherry, /area/station/public/vacant_store) "kTo" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Xenobiology Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "kTs" = ( @@ -70338,6 +70166,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "kTw" = ( @@ -70405,10 +70234,7 @@ /area/station/maintenance/starboard2) "kUF" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/stack/rods, /obj/effect/decal/cleanable/glass, /turf/simulated/floor/plating, @@ -70542,13 +70368,11 @@ /turf/simulated/floor/carpet, /area/station/security/permabrig) "kWx" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Library Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/service/library, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/port) @@ -70558,11 +70382,12 @@ id_tag = "vir_int_door"; locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/east{ autolink_id = "vir_int_button"; name = "interior access button" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "kWB" = ( @@ -70995,9 +70820,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore) "lfg" = ( -/obj/machinery/door/airlock/bathroom{ - name = "Toilet" - }, +/obj/machinery/door/airlock/bathroom, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -71088,7 +70912,6 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ - name = "Bedroom"; id_tag = "PrivateRoom2" }, /obj/effect/mapping_helpers/airlock/autoname, @@ -71149,6 +70972,7 @@ /area/station/service/kitchen) "lhF" = ( /obj/machinery/door/airlock/virology, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -71165,7 +70989,6 @@ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/any/medical/virology, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -71187,8 +71010,8 @@ "lhR" = ( /obj/structure/table/reinforced, /obj/machinery/light/directional/west, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour{ +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour{ pixel_x = 2; pixel_y = 2 }, @@ -71233,10 +71056,8 @@ }, /area/station/hallway/primary/central/se) "liD" = ( -/obj/machinery/door/airlock/research{ - name = "Toxins Launch Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71249,6 +71070,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/tox, /turf/simulated/floor/plasteel, /area/station/science/toxins/launch) "liZ" = ( @@ -71265,20 +71087,20 @@ /area/station/maintenance/old_kitchen) "ljm" = ( /obj/structure/safe/floor, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "ljq" = ( @@ -71391,6 +71213,7 @@ /obj/machinery/door/airlock/multi_tile/glass{ dir = 2 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71407,14 +71230,14 @@ /area/station/maintenance/old_kitchen) "lkZ" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream, -/obj/item/reagent_containers/food/snacks/frozen/icecream, -/obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich, -/obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream, +/obj/item/food/snacks/frozen/icecream, +/obj/item/food/snacks/frozen/icecreamsandwich, +/obj/item/food/snacks/frozen/icecreamsandwich, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" @@ -71736,6 +71559,16 @@ icon_state = "neutralcorner" }, /area/station/hallway/secondary/bridge) +"lqB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "lqJ" = ( /obj/machinery/camera{ c_tag = "Aft Starboard Solars" @@ -71836,9 +71669,8 @@ }, /area/station/maintenance/starboard2) "lsd" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Holding Area" - }, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ icon_state = "redfull" @@ -72050,13 +71882,12 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/door/airlock/command/hos/glass{ - name = "Head of Security Bedroom" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/hos, +/obj/machinery/door/airlock/command/hos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "hosroom" }, +/obj/effect/mapping_helpers/airlock/access/any/security/hos, /turf/simulated/floor/wood, /area/station/command/office/hos) "lvO" = ( @@ -72379,15 +72210,13 @@ /turf/simulated/wall, /area/station/engineering/mechanic) "lBa" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Library Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/service/library, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/service/library) @@ -72407,10 +72236,8 @@ /area/station/command/office/rd) "lBi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Break Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/science, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -72419,6 +72246,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) "lBj" = ( @@ -72439,7 +72267,7 @@ }, /area/station/hallway/primary/central/sw) "lBT" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -72493,9 +72321,10 @@ /area/station/maintenance/electrical) "lCy" = ( /obj/machinery/door/airlock/vault, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "lCD" = ( @@ -72521,10 +72350,10 @@ /area/station/hallway/primary/central/se) "lCR" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/welded, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -72552,6 +72381,7 @@ /area/station/medical/storage/secondary) "lDp" = ( /obj/structure/chair/sofa/left, +/obj/effect/landmark/start/vip, /turf/simulated/floor/plasteel/dark, /area/station/service/theatre) "lDq" = ( @@ -72743,13 +72573,12 @@ }, /area/station/security/processing) "lHc" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Head of Personnel Bedroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, /turf/simulated/floor/wood/oak, /area/station/command/office/hop) "lHp" = ( @@ -72839,7 +72668,7 @@ }, /area/station/maintenance/disposal/west) "lIv" = ( -/obj/machinery/suit_storage_unit/clown, +/obj/machinery/suit_storage_unit/clown/secure, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) @@ -72884,7 +72713,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/ai_monitored/storage/eva) "lIQ" = ( -/obj/machinery/suit_storage_unit/clown, +/obj/machinery/suit_storage_unit/clown/secure, /obj/machinery/door_control/shutter/east{ id = "Clown"; name = "Clowns Privacy Shutters Control" @@ -73091,16 +72920,16 @@ /area/station/maintenance/starboard2) "lLS" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -73251,6 +73080,13 @@ icon_state = "darkred" }, /area/station/security/storage) +"lOT" = ( +/obj/structure/chair/sofa/right{ + dir = 4 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/orange, +/area/station/service/bar/atrium) "lOZ" = ( /obj/structure/cable{ d1 = 1; @@ -73378,9 +73214,8 @@ }, /area/station/security/storage) "lPW" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Containment Cells" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -73400,7 +73235,7 @@ /turf/simulated/floor/plasteel, /area/station/medical/virology/lab) "lPY" = ( -/obj/machinery/suit_storage_unit/security/hos, +/obj/machinery/suit_storage_unit/security/hos/secure, /obj/effect/turf_decal/siding/wood{ dir = 9 }, @@ -73554,11 +73389,11 @@ /area/station/science/test_chamber) "lSB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -73633,6 +73468,7 @@ /area/station/security/permabrig) "lTY" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -73828,7 +73664,9 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "lYg" = ( -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -74001,7 +73839,7 @@ /turf/simulated/floor/plasteel/grimy, /area/station/service/chapel) "mbC" = ( -/obj/machinery/suit_storage_unit/cmo, +/obj/machinery/suit_storage_unit/cmo/secure, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -74018,6 +73856,7 @@ /area/station/command/bridge) "mbV" = ( /obj/structure/chair/stool, +/obj/effect/landmark/start/artist, /turf/simulated/floor/transparent/glass/reinforced, /area/station/public/locker) "mbY" = ( @@ -74243,7 +74082,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/electrical) "mgx" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /obj/machinery/light/directional/south, /obj/structure/sign/poster/official/random/south, /turf/simulated/floor/plasteel{ @@ -74341,9 +74180,8 @@ /area/station/public/toilet) "mit" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public{ - name = "Bar" - }, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/service/bar, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -74537,8 +74375,8 @@ name = "Kitchen Shutters" }, /obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/snacks/burrito, -/obj/item/reagent_containers/food/snacks/burrito{ +/obj/item/food/snacks/burrito, +/obj/item/food/snacks/burrito{ pixel_x = 5; pixel_y = 5 }, @@ -74660,10 +74498,10 @@ /area/station/security/warden) "mng" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/candy/cotton/blue, -/obj/item/reagent_containers/food/snacks/candy/cotton/pink, -/obj/item/reagent_containers/food/snacks/candy/cotton/rainbow, -/obj/item/reagent_containers/food/snacks/candy/cotton/yellow, +/obj/item/food/snacks/candy/cotton/blue, +/obj/item/food/snacks/candy/cotton/pink, +/obj/item/food/snacks/candy/cotton/rainbow, +/obj/item/food/snacks/candy/cotton/yellow, /obj/structure/sign/poster/official/random/north, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -74697,9 +74535,9 @@ /area/station/maintenance/aft) "mnw" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -75006,7 +74844,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -75116,11 +74954,11 @@ /area/station/engineering/mechanic) "muR" = ( /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/medical/chemistry, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -75219,12 +75057,12 @@ "mxm" = ( /obj/machinery/door/airlock/atmos/glass{ heat_proof = 1; - name = "Supermatter Chamber"; id_tag = "smint"; locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/engineering/engine/supermatter) "mxB" = ( @@ -75272,13 +75110,14 @@ }, /area/station/hallway/primary/fore) "myi" = ( -/obj/item/vending_refill/cola, +/obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, /area/station/science/break_room) "myI" = ( /obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "myP" = ( @@ -75373,15 +75212,15 @@ /area/station/service/library) "mzE" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat{ +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat{ pixel_x = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -75497,16 +75336,14 @@ /turf/simulated/floor/carpet, /area/station/legal/lawoffice) "mBY" = ( -/obj/machinery/door/airlock/engineering{ - name = "Fore Starboard Solar Access" - }, +/obj/machinery/door/airlock/engineering, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "mCt" = ( @@ -75775,17 +75612,16 @@ }, /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_ext"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/west{ autolink_id = "perma_btn_ext"; name = "Prison Wing Access Button"; req_one_access_txt = "2" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "mIK" = ( @@ -76031,10 +75867,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/fore) "mPO" = ( @@ -76114,10 +75947,9 @@ "mQK" = ( /obj/machinery/door/airlock/external{ id_tag = "fssolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -76131,6 +75963,7 @@ name = "interior access button"; req_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "mQL" = ( @@ -76553,9 +76386,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/public{ - name = "Shower" - }, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/pool) "mVy" = ( @@ -76675,15 +76507,8 @@ }, /area/station/maintenance/starboard2) "mYH" = ( -/obj/machinery/power/treadmill{ - dir = 4; - id = "treadmill1" - }, -/obj/machinery/treadmill_monitor{ - pixel_x = 32; - id = "treadmill1" - }, /obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/boxinggloves, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" @@ -76763,9 +76588,9 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/bathroom{ id = "toilet2"; - id_tag = "toilet2"; - name = "Toilet" + id_tag = "toilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "mZR" = ( @@ -76890,11 +76715,9 @@ "naY" = ( /obj/machinery/door/airlock/external{ id_tag = "fssolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -76905,6 +76728,7 @@ name = "exterior access button"; req_access_txt = "10;13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "nbx" = ( @@ -76954,9 +76778,9 @@ /obj/machinery/door/airlock/virology{ autoclose = 0; id_tag = "virolab_door_ext"; - locked = 1; - name = "Virology Lab External Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/south{ layer = 3.6; autolink_id = "virolab_btn_ext"; @@ -76973,7 +76797,6 @@ icon_state = "4-8" }, /obj/effect/mapping_helpers/airlock/access/any/medical/virology, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77149,9 +76972,8 @@ /turf/simulated/floor/carpet/cyan, /area/station/security/prison/cell_block/A) "neI" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Patients Room" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -77308,6 +77130,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" @@ -77460,11 +77285,12 @@ codes_txt = "delivery"; location = "Science" }, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /obj/machinery/door/window/classic/normal{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/science/break_room) "njJ" = ( @@ -77492,11 +77318,11 @@ /area/station/security/warden) "njV" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing{ +/obj/item/reagent_containers/drinks/bottle/bottleofnothing{ pixel_y = 19 }, /obj/item/grown/bananapeel, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_x = -9 }, /turf/simulated/floor/plating, @@ -77717,10 +77543,8 @@ /area/station/medical/medbay) "nnL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Mech Bay" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -77732,19 +77556,21 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) "nnM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "pub_room"; - name = "Public Meeting Room" + id_tag = "pub_room" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/wood/oak, /area/station/science/robotics/showroom) "nnZ" = ( @@ -77820,7 +77646,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/grown/pineapple{ +/obj/item/food/snacks/grown/pineapple{ name = "Старый ананас"; desc = "Довольно старый ананас. Интересно как он тут оказался и почему он так странно пахнет..." }, @@ -77971,9 +77797,8 @@ /turf/simulated/wall/r_wall, /area/station/security/permabrig) "nra" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/fitness) "nri" = ( @@ -78017,9 +77842,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, +/obj/machinery/door/airlock/service/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/service/janitor, /turf/simulated/floor/plasteel, @@ -78139,6 +77963,7 @@ }, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -78169,7 +77994,6 @@ /area/station/hallway/primary/central/west) "nvb" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -78178,6 +78002,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/public/pool) "nvd" = ( @@ -78366,11 +78191,8 @@ }, /area/station/medical/storage) "nxO" = ( -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/genetics, -/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -78380,6 +78202,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/research) "nyl" = ( @@ -78554,7 +78377,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/research) "nAV" = ( -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteblue" @@ -78569,10 +78392,9 @@ "nAX" = ( /obj/machinery/door/airlock/external{ id_tag = "assolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/cable{ d1 = 1; @@ -78582,12 +78404,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/access_button/west{ autolink_id = "assolar_btn_int"; name = "interior access button"; req_access_txt = "10;13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "nAZ" = ( @@ -78743,6 +78565,7 @@ /obj/structure/chair/sofa/pew/right{ dir = 4 }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "chapel" @@ -79123,12 +78946,12 @@ "nHK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; volume = 0 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; volume = 0 @@ -79302,12 +79125,11 @@ /turf/simulated/floor/plasteel, /area/station/security/processing) "nJW" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Science Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "nKf" = ( @@ -79949,6 +79771,7 @@ /area/station/engineering/controlroom) "nRz" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79963,7 +79786,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/port) @@ -80123,9 +79945,9 @@ /area/station/medical/medbay2) "nUC" = ( /obj/machinery/door/airlock/multi_tile/glass{ - dir = 2; - name = "Restaurant" + dir = 2 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80187,6 +80009,13 @@ icon_state = "neutralfull" }, /area/station/maintenance/starboard) +"nVU" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/simulated/floor/transparent/glass/reinforced, +/area/station/public/pool) "nWe" = ( /obj/machinery/door/poddoor/multi_tile/two_tile_hor{ id_tag = "unknowndoor" @@ -80222,8 +80051,8 @@ /area/station/command/office/ce) "nWy" = ( /obj/machinery/door/airlock/psych, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -80231,6 +80060,7 @@ dir = 4 }, /obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology, /turf/simulated/floor/plating, /area/station/medical/patients_rooms) "nWC" = ( @@ -80320,10 +80150,12 @@ /obj/machinery/door/airlock/external{ id_tag = "arrivalsn_door_ext" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/east{ autolink_id = "arrivalsn_btn_ext"; name = "exterior access button" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "nXR" = ( @@ -80479,6 +80311,7 @@ /area/station/maintenance/dormitory_maintenance) "obk" = ( /obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) @@ -80584,13 +80417,13 @@ /obj/item/toy/minimeteor{ pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; initialized = 1; volume = 0 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; initialized = 1; @@ -80691,7 +80524,7 @@ /area/station/engineering/atmos) "oeG" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_y = 4; pixel_x = -8; initialized = 1 @@ -81189,6 +81022,7 @@ /area/station/maintenance/port) "omF" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -81201,7 +81035,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "omI" = ( @@ -81309,6 +81142,7 @@ /obj/machinery/computer/guestpass{ pixel_y = 30 }, +/obj/machinery/recharge_station, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "yellow" @@ -81470,7 +81304,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/item/reagent_containers/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood/oak, @@ -81488,12 +81322,12 @@ /area/station/maintenance/old_kitchen) "ori" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -81506,9 +81340,6 @@ dir = 4; name = "Kitchen Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ dir = 4 }, @@ -81618,6 +81449,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "otb" = ( @@ -81672,6 +81504,10 @@ /obj/machinery/light/directional/east, /turf/simulated/floor/plating, /area/station/supply/storage) +"otB" = ( +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "otH" = ( /obj/machinery/kitchen_machine/grill, /obj/machinery/newscaster/directional/north, @@ -82119,12 +81955,10 @@ }, /area/station/medical/virology) "oCI" = ( -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/effect/mapping_helpers/airlock/welded, +/obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/airlock/mining{ - name = null - }, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plating, /area/station/supply/abandoned_boxroom) "oCK" = ( @@ -82221,13 +82055,13 @@ "oEO" = ( /obj/machinery/door/airlock/highsecurity, /obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/engine, /area/station/maintenance/incinerator) "oEP" = ( @@ -82281,18 +82115,18 @@ "oFN" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; - locked = 1; - name = "Labor Camp Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "oFY" = ( @@ -82300,6 +82134,7 @@ /obj/structure/chair/comfy/red{ dir = 8 }, +/obj/effect/landmark/start/bar, /turf/simulated/floor/carpet, /area/station/service/theatre) "oGe" = ( @@ -82357,10 +82192,15 @@ /obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel/dark, /area/station/hallway/primary/starboard) -"oHG" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" +"oHD" = ( +/obj/effect/landmark/start/barber, +/turf/simulated/floor/plasteel{ + icon_state = "barber" }, +/area/station/service/barber) +"oHG" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/station/public/fitness) "oHK" = ( @@ -82461,11 +82301,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/multi_tile/supply/glass{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -82500,7 +82340,9 @@ /area/station/science/break_room) "oKf" = ( /obj/structure/window/reinforced, -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/structure/window/reinforced{ dir = 8 }, @@ -82514,17 +82356,17 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/hydroponics) "oKN" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel/dark, /area/station/security/prisonlockers) "oKV" = ( @@ -82622,7 +82464,6 @@ /area/station/command/office/cmo) "oMr" = ( /obj/machinery/turretid/lethal{ - control_area = "\improper Telecoms Central Compartment"; name = "Telecommunications Turret Control"; pixel_y = 8 }, @@ -82754,6 +82595,7 @@ /area/station/science/research) "oPj" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) @@ -82800,10 +82642,8 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/dormitory_maintenance) "oQJ" = ( @@ -82914,13 +82754,13 @@ "oSD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; initialized = 1; volume = 0 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; initialized = 1; @@ -83050,14 +82890,13 @@ /area/station/hallway/primary/central/west) "oVj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Division Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel, /area/station/science/research) "oVs" = ( @@ -83230,6 +83069,7 @@ /area/station/engineering/mechanic) "oXr" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/public/pool) @@ -83444,12 +83284,12 @@ /area/station/maintenance/fore) "pai" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/medical/morgue) "paj" = ( @@ -83523,15 +83363,6 @@ /obj/effect/turf_decal/siding/wood, /turf/simulated/floor/wood/fancy/oak, /area/station/legal/magistrate) -"pbJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) "pbQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -83540,14 +83371,14 @@ /area/station/service/library) "pbY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/bottle/vermouth{ +/obj/item/reagent_containers/drinks/bottle/vermouth{ pixel_x = -6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/tequila{ +/obj/item/reagent_containers/drinks/bottle/tequila{ pixel_x = 6; pixel_y = 6 }, @@ -83754,9 +83585,8 @@ /area/station/maintenance/old_kitchen) "pfn" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/public{ - name = "Shower" - }, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -83985,14 +83815,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/security/execution) "piQ" = ( @@ -84083,11 +83913,9 @@ "pkj" = ( /obj/machinery/door/airlock/external{ id_tag = "apsolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -84101,6 +83929,7 @@ name = "exterior access button"; req_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) "pkv" = ( @@ -84108,6 +83937,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84664,9 +84494,8 @@ /area/station/engineering/hardsuitstorage) "pso" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Public Access" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -84765,10 +84594,8 @@ }, /area/station/supply/storage) "psN" = ( -/obj/machinery/door/airlock/research{ - name = "Toxins Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/tox_storage, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -84781,6 +84608,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/tox_storage, /turf/simulated/floor/plasteel/white, /area/station/science/storage) "psZ" = ( @@ -84814,11 +84642,9 @@ "ptq" = ( /obj/machinery/door/airlock/external{ id_tag = "stationai_door_ext"; - locked = 1; - name = "Minisat Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -84829,8 +84655,15 @@ name = "exterior access button"; req_access_txt = "10;13" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "ptU" = ( /obj/effect/spawner/random_spawners/blood_maybe, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -84935,16 +84768,16 @@ "pwY" = ( /obj/machinery/door/airlock/external{ id_tag = "enginen_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) @@ -84956,6 +84789,13 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) +"pxe" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/orange, +/area/station/service/bar/atrium) "pxy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -85023,8 +84863,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel/dark, /area/station/security/execution) "pys" = ( @@ -85260,6 +85100,7 @@ }, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -85368,18 +85209,18 @@ /turf/simulated/floor/plating, /area/station/command/bridge) "pDk" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/court, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/door/airlock/lawyer/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "court" }, +/obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/simulated/floor/wood/fancy/oak, /area/station/legal/courtroom) "pDS" = ( @@ -85398,7 +85239,7 @@ "pER" = ( /obj/structure/table/wood, /obj/item/book/manual/barman_recipes, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/sign/poster/official/high_class_martini{ pixel_y = 32 }, @@ -85415,9 +85256,9 @@ "pEY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "KPPSouth"; - name = "Public Access" + id_tag = "KPPSouth" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "EscapeLockdown"; name = "Escape Shuttle Lockdown" @@ -85599,6 +85440,7 @@ id_tag = "specops_home"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "pHK" = ( @@ -85744,6 +85586,7 @@ /obj/structure/chair/wood{ dir = 4 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/old_kitchen) "pKl" = ( @@ -85840,6 +85683,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel/freezer, /area/station/public/pool) "pLI" = ( @@ -85875,6 +85719,7 @@ /obj/structure/chair/plastic{ dir = 8 }, +/obj/effect/landmark/start/bath, /turf/simulated/floor/transparent/glass/reinforced, /area/station/public/pool) "pLU" = ( @@ -86013,11 +85858,11 @@ /area/station/engineering/controlroom) "pOp" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_y = 10; pixel_x = 8 }, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_y = -6; pixel_x = 5 }, @@ -86062,7 +85907,6 @@ }, /area/station/bridge/checkpoint/south) "pOZ" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel/dark, /area/station/security/storage) @@ -86134,7 +85978,7 @@ icon_state = "0-4" }, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "pQa" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "HoS" @@ -86416,10 +86260,8 @@ }, /area/station/hallway/primary/central) "pWh" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Test Chamber" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "RnDChem"; name = "Biohazard Shutter" @@ -86430,6 +86272,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/engine, /area/station/science/test_chamber) "pWq" = ( @@ -86496,6 +86339,7 @@ /area/station/engineering/break_room) "pWT" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port) @@ -86587,6 +86431,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel/grimy, /area/station/security/permabrig) "pYo" = ( @@ -86663,7 +86508,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -86795,6 +86640,7 @@ /area/station/command/office/cmo) "qct" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -86821,11 +86667,10 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "holdingcellprivacy" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel, /area/station/security/processing) "qcK" = ( @@ -86855,13 +86700,13 @@ dir = 8; name = "Security Reception" }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ - dir = 8 - }, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 8 + }, /turf/simulated/floor/plating, /area/station/security/brig) "qdk" = ( @@ -86891,6 +86736,7 @@ "qdW" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/library) "qeg" = ( @@ -86995,9 +86841,8 @@ /turf/simulated/floor/plasteel, /area/station/security/processing) "qfX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Garden" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -87318,6 +87163,7 @@ /area/station/security/permabrig) "qlM" = ( /obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/access/any/medical/virology, @@ -87355,6 +87201,7 @@ dir = 8 }, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/maintenance/medmaint) "qmz" = ( @@ -87394,11 +87241,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/airlock/mining{ - name = null - }, +/obj/machinery/door/airlock/mining, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/storage) "qmT" = ( @@ -87549,6 +87394,7 @@ "qpB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dust, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "qpD" = ( @@ -87731,6 +87577,7 @@ /area/station/science/explab) "qtv" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, @@ -88024,7 +87871,7 @@ /area/station/legal/courtroom) "qwS" = ( /turf/simulated/wall/r_wall, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "qxd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -88052,13 +87899,15 @@ "qxk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "qxs" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "qxt" = ( @@ -88075,6 +87924,7 @@ /area/station/maintenance/dormitory_maintenance) "qxB" = ( /obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/cable{ d1 = 4; @@ -88236,10 +88086,7 @@ /turf/simulated/floor/plating, /area/station/security/podpilot) "qBo" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dust, /turf/simulated/floor/wood/oak, @@ -88273,7 +88120,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 8 }, /turf/simulated/floor/plasteel/dark, @@ -88297,8 +88144,7 @@ /obj/machinery/door/window/classic/normal{ name = "Bar Delivery" }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, -/obj/effect/mapping_helpers/airlock/access/any/service/bar, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -88348,10 +88194,10 @@ /obj/machinery/door/window/classic/reversed{ name = "Library Desk Door" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/library, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light_switch/east, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/library, /turf/simulated/floor/carpet, /area/station/service/library) "qDj" = ( @@ -88517,7 +88363,7 @@ /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyerPort" }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/welded, /obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -88649,7 +88495,7 @@ }, /area/station/medical/virology/lab) "qGy" = ( -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/suit_storage_unit/engine/secure, /obj/effect/turf_decal/stripes/line, /obj/structure/table/reinforced, /obj/structure/sign/poster/official/report_crimes{ @@ -88674,14 +88520,14 @@ }, /obj/structure/table/wood, /obj/machinery/light/directional/west, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/bottle/wine{ pixel_y = 5 }, /turf/simulated/floor/plasteel/dark, @@ -88757,10 +88603,8 @@ }, /area/station/maintenance/port) "qIe" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -88770,7 +88614,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "qIl" = ( @@ -88825,8 +88669,25 @@ "qJk" = ( /turf/simulated/wall, /area/station/maintenance/old_detective) +"qJx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/bath, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/station/public/pool) "qJA" = ( -/obj/machinery/atmospherics/pipe/simple/insulated{ +/obj/machinery/atmospherics/pipe/simple/visible{ dir = 8 }, /turf/simulated/floor/plasteel/white, @@ -89328,6 +89189,21 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) +"qQX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel, +/area/station/security/permabrig) "qRc" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -89400,18 +89276,17 @@ /obj/machinery/door/airlock/external{ hackProof = 1; id_tag = "emergency_home"; - locked = 1; - name = "Escape Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, /area/station/security/checkpoint/south) "qSo" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/station/public/locker) "qSp" = ( @@ -89441,15 +89316,12 @@ name = "Chemistry Delivery"; dir = 1 }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot{ - dir = 1 - }, /obj/structure/plasticflaps{ opacity = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -89498,7 +89370,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/storage) "qTe" = ( -/obj/item/reagent_containers/food/snacks/candy/gummyworm/green, +/obj/item/food/snacks/candy/gummyworm/green, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; @@ -90205,7 +90077,9 @@ }, /area/station/science/genetics) "red" = ( -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -90279,10 +90153,10 @@ dir = 4; name = "Area control access" }, +/obj/item/clothing/mask/gas, /obj/effect/mapping_helpers/airlock/windoor/access/any/science/research{ dir = 4 }, -/obj/item/clothing/mask/gas, /turf/simulated/floor/engine, /area/station/science/test_chamber) "rfB" = ( @@ -90468,7 +90342,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -90590,10 +90464,10 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ icon_state = "darkredcorners" }, @@ -90700,6 +90574,7 @@ /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/delivery/hollow, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -90980,6 +90855,7 @@ /area/station/medical/medbay) "rrL" = ( /obj/machinery/door/airlock/freezer, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -91113,12 +90989,14 @@ /obj/machinery/door/airlock/external{ id_tag = "arrivalsn_door_int" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/access_button/west{ autolink_id = "arrivalsn_btn_int"; name = "exterior access button"; pixel_y = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry) "rtS" = ( @@ -91206,7 +91084,7 @@ /area/station/security/podpilot) "ruI" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 8; pixel_x = -6; initialized = 1 @@ -91267,9 +91145,9 @@ "rvI" = ( /obj/machinery/door/airlock/bathroom{ id = "toilet1"; - id_tag = "toilet1"; - name = "Toilet" + id_tag = "toilet1" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/service/theatre) "rvJ" = ( @@ -91370,10 +91248,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -92000,7 +91875,7 @@ dir = 4 }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "rJi" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -92167,7 +92042,7 @@ dir = 8 }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "rMi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/glass, @@ -92231,7 +92106,7 @@ /area/station/medical/storage) "rMZ" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -92341,12 +92216,12 @@ icon_state = "0-2" }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "rPk" = ( /obj/machinery/door/airlock{ - name = "Toilet"; id_tag = "DormToilet3" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -92623,7 +92498,7 @@ dir = 5 }, /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6; pixel_y = 4 }, @@ -92666,11 +92541,11 @@ pixel_y = 3 }, /obj/item/storage/fancy/donut_box, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -92769,9 +92644,7 @@ }, /area/station/medical/patients_rooms) "rWk" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/brig, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/station/security/prisonlockers) "rWw" = ( @@ -92848,7 +92721,6 @@ "rXK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -92857,6 +92729,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "rXW" = ( @@ -92867,13 +92740,14 @@ /area/station/science/explab/chamber) "rXX" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "rXY" = ( @@ -92914,7 +92788,7 @@ /area/station/command/bridge) "rYu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ pixel_y = 2 }, /obj/machinery/newscaster/directional/south, @@ -92947,7 +92821,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 8 }, /turf/simulated/floor/plasteel/dark, @@ -93063,7 +92937,7 @@ pixel_x = -14; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; initialized = 1 @@ -93250,17 +93124,8 @@ }, /area/station/science/break_room) "scR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -93342,6 +93207,7 @@ id = "Cloning Room" }, /obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -93351,9 +93217,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -93578,6 +93443,7 @@ /area/station/security/storage) "siO" = ( /obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -93594,8 +93460,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/access/any/medical/morgue, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -93603,10 +93467,9 @@ "siP" = ( /obj/machinery/door/airlock/external{ id_tag = "engines_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -93621,6 +93484,7 @@ name = "interior access button"; req_access_txt = "10;13" }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) @@ -93667,7 +93531,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/suit_storage_unit/atmos/secure, /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "sko" = ( @@ -93684,11 +93548,12 @@ id_tag = "med_outer_door"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/east{ autolink_id = "med_outer_button"; name = "interior access button" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/engine, /area/station/maintenance/starboard2) "skW" = ( @@ -93823,12 +93688,21 @@ }, /turf/simulated/floor/wood/oak, /area/station/command/meeting_room) +"snx" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/assistant, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) "snC" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/stack/rods{ amount = 3 }, @@ -93849,6 +93723,7 @@ /area/station/maintenance/starboard2) "son" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -93856,8 +93731,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 2; @@ -93869,6 +93742,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel/dark, /area/station/security/permabrig) "soV" = ( @@ -93911,6 +93785,7 @@ /area/station/medical/storage) "spf" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) @@ -94011,7 +93886,7 @@ /area/station/service/mime) "sqk" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -94045,17 +93920,16 @@ "srs" = ( /obj/machinery/door/airlock/external{ id_tag = "atmostanks_door_int"; - locked = 1; - name = "Atmos External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/access_button/west{ autolink_id = "atmostanks_btn_int"; name = "interior access button"; req_access_txt = "32" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plasteel, /area/station/engineering/gravitygenerator) "srJ" = ( @@ -94147,6 +94021,7 @@ /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyerPort" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, @@ -94156,7 +94031,6 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -94248,17 +94122,22 @@ req_access_txt = "10;13"; vent_link_id = "stationai_vent" }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - autolink_id = "stationai_vent"; - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "suE" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/light/directional/south, @@ -94290,6 +94169,7 @@ /obj/structure/chair{ dir = 1 }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "sve" = ( @@ -94330,13 +94210,14 @@ /area/station/hallway/primary/central/sw) "swm" = ( /obj/machinery/computer/card/minor/qm, +/obj/effect/turf_decal/delivery/hollow, /obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo Requests Console"; - pixel_y = 30 + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_y = 30; + announcementConsole = 1 }, -/obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" @@ -94693,12 +94574,6 @@ dir = 8; name = "Hydroponics Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "Hydroponics Shutters"; @@ -94710,7 +94585,10 @@ name = "Kitchen Privacy Shutters" }, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 1 + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 8 }, /turf/simulated/floor/plating, /area/station/service/hydroponics) @@ -94934,15 +94812,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/landmark/start/barber, /turf/simulated/floor/plasteel{ icon_state = "barber" }, /area/station/service/barber) "sCq" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -95095,7 +94971,7 @@ network = list("SS13","Engineering") }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "sEI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -95249,6 +95125,7 @@ /area/station/science/rnd) "sIa" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -95256,8 +95133,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -95276,6 +95151,7 @@ icon_state = "1-4" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel/dark, /area/station/security/permabrig) "sIg" = ( @@ -95372,6 +95248,7 @@ /area/station/medical/surgery/secondary) "sJZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel, /area/station/security/permabrig) "sKr" = ( @@ -95516,9 +95393,9 @@ name = "escape pod 3" }, /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_3) @@ -95671,7 +95548,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "sPz" = ( /obj/machinery/light/small/directional/north, /obj/structure/sign/vacuum{ @@ -95706,14 +95583,14 @@ /turf/simulated/floor/plasteel/dark, /area/station/security/execution) "sPW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "sQa" = ( /obj/structure/cable{ d1 = 4; @@ -95721,6 +95598,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/siding/wood, +/obj/effect/landmark/start/dealer, /turf/simulated/floor/wood/fancy/cherry, /area/station/public/vacant_store) "sQe" = ( @@ -95830,10 +95708,8 @@ /turf/simulated/floor/plasteel, /area/station/medical/virology/lab) "sRJ" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -95845,7 +95721,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting, /turf/simulated/floor/plasteel, /area/station/supply/sorting) "sRU" = ( @@ -95926,6 +95802,7 @@ "sUk" = ( /obj/structure/chair/stool, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/old_kitchen) "sUn" = ( @@ -95981,7 +95858,7 @@ int_button_link_id = "fpsolar_btn_int"; int_door_link_id = "fpsolar_door_int"; pixel_y = 25; - req_access_txt = "32"; + req_access_txt = "24"; vent_link_id = "fpsolar_vent" }, /obj/structure/cable{ @@ -95993,9 +95870,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "sVu" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Gambling Den" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /obj/structure/cable{ d1 = 1; @@ -96070,10 +95946,7 @@ }, /area/station/engineering/control) "sWY" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dust, /turf/simulated/floor/wood/oak, /area/station/maintenance/starboard) @@ -96137,7 +96010,6 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "Interrogation" @@ -96148,6 +96020,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/processing) "sYf" = ( @@ -96205,10 +96078,7 @@ /area/station/public/locker) "sYQ" = ( /obj/structure/closet/secure_closet/detective, -/obj/item/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "detectives camera" - }, +/obj/item/camera/detective, /obj/item/restraints/handcuffs, /obj/item/storage/lockbox/spy_kit, /obj/item/storage/box/bodybags, @@ -96283,7 +96153,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -96291,9 +96160,9 @@ }, /obj/machinery/door/airlock/bathroom{ id = "toilet2"; - id_tag = "toilet2"; - name = "Toilet" + id_tag = "toilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/public/toilet) "tad" = ( @@ -96411,10 +96280,8 @@ /area/station/maintenance/starboard2) "tbM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -96443,6 +96310,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -96687,7 +96555,7 @@ /area/station/hallway/secondary/exit) "tgq" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -96702,6 +96570,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) "tgD" = ( @@ -96747,6 +96616,7 @@ /obj/structure/weightmachine/stacklifter, /obj/effect/turf_decal/delivery/hollow, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -96815,6 +96685,7 @@ /area/station/security/storage) "tjq" = ( /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Prison Gate"; name = "Prison Lockdown Blast Doors" @@ -97106,7 +96977,7 @@ /area/station/maintenance/starboard2) "tnj" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, @@ -97182,9 +97053,9 @@ /area/station/hallway/primary/fore) "toG" = ( /obj/machinery/door/airlock/hydroponics, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -97720,12 +97591,11 @@ /area/station/public/fitness) "twD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "E.X.P.E.R.I-MENTOR Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel/white, /area/station/science/explab) "txc" = ( @@ -97736,7 +97606,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/parquet, /area/station/service/library) "txi" = ( @@ -97860,7 +97729,8 @@ /area/station/engineering/controlroom) "tzq" = ( /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) "tAa" = ( @@ -98042,6 +97912,7 @@ /area/station/medical/reception) "tDD" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "tDR" = ( @@ -98084,7 +97955,7 @@ pixel_x = 2; pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /obj/machinery/camera{ c_tag = "Brig Head of Security's Bedroom"; dir = 1 @@ -98543,6 +98414,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "tNd" = ( @@ -98635,13 +98507,13 @@ /area/station/command/office/hos) "tOf" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/blue{ dir = 6 @@ -98813,10 +98685,9 @@ "tRi" = ( /obj/machinery/door/airlock/external{ id_tag = "assolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -98830,7 +98701,7 @@ name = "exterior access button"; req_access_txt = "13" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) "tRF" = ( @@ -98868,11 +98739,11 @@ /area/station/hallway/secondary/entry) "tSt" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /turf/simulated/floor/plasteel/white, @@ -98912,6 +98783,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plasteel{ icon_state = "chapel" }, @@ -98934,15 +98806,15 @@ "tTZ" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; - locked = 1; - name = "Labor Camp Airlock" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/station/security/permabrig) "tUs" = ( @@ -99119,7 +98991,7 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plating, /area/station/public/vacant_office) "tWL" = ( @@ -99508,9 +99380,8 @@ /area/station/maintenance/dormitory_maintenance) "ucc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Cryogenic Dormitories" - }, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -99518,13 +99389,14 @@ "uci" = ( /obj/machinery/door/airlock/external{ id_tag = "apmaint2_door_ext"; - locked = 1; - name = "West Maintenance External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/north{ autolink_id = "apmaint2_btn_ext"; name = "exterior access button" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plasteel, /area/station/maintenance/port) "ucm" = ( @@ -99538,6 +99410,7 @@ "ucQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" @@ -99635,9 +99508,9 @@ /area/station/command/bridge) "uew" = ( /obj/machinery/door/airlock{ - name = "Toilet"; id_tag = "DormToilet1" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -99962,10 +99835,9 @@ "ujF" = ( /obj/machinery/door/airlock/external{ id_tag = "fpsolar_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -99974,8 +99846,9 @@ /obj/machinery/access_button/south{ autolink_id = "fpsolar_btn_ext"; name = "exterior access button"; - req_access_txt = "32" + req_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "ujU" = ( @@ -100158,6 +100031,7 @@ /obj/effect/turf_decal/siding/dark_red{ dir = 6 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "unR" = ( @@ -100171,7 +100045,7 @@ icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "unT" = ( /obj/structure/rack, /obj/effect/turf_decal/delivery/hollow, @@ -100425,8 +100299,9 @@ /obj/machinery/door/window/classic/reversed{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mule_bot, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) "uqn" = ( @@ -100567,6 +100442,13 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/central/sw) +"utu" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/simulated/floor/plasteel, +/area/station/maintenance/fore) "utQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -100775,6 +100657,11 @@ }, /turf/simulated/wall, /area/station/service/kitchen) +"uzH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/prisoner, +/turf/simulated/floor/plasteel/freezer, +/area/station/security/permabrig) "uzO" = ( /obj/structure/disposalpipe/junction{ dir = 8; @@ -100903,15 +100790,19 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "uBg" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan, /obj/effect/decal/cleanable/dirt, @@ -101140,6 +101031,7 @@ "uGe" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutral" @@ -101170,12 +101062,13 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/public/fitness) "uHo" = ( @@ -101185,6 +101078,7 @@ /obj/effect/turf_decal/siding/dark_red{ dir = 9 }, +/obj/effect/landmark/start/artist, /turf/simulated/floor/carpet/arcade, /area/station/public/arcade) "uHq" = ( @@ -101218,9 +101112,8 @@ /turf/simulated/floor/carpet/black, /area/station/security/warden) "uHS" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/iaa, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -101228,6 +101121,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/iaa, /turf/simulated/floor/plating, /area/station/legal/lawoffice) "uHX" = ( @@ -101407,9 +101301,9 @@ /area/station/maintenance/medmaint) "uKC" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/multi_tile/supply/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, /turf/simulated/floor/plasteel, /area/station/supply/office) "uKF" = ( @@ -101426,7 +101320,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "uKR" = ( -/obj/item/reagent_containers/food/snacks/candy/gummybear/green, +/obj/item/food/snacks/candy/gummybear/green, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, /turf/simulated/floor/plasteel{ @@ -101576,9 +101470,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Control Room" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/station/public/fitness) "uMS" = ( @@ -101843,6 +101736,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel/dark, /area/station/security/permabrig) "uPY" = ( @@ -101899,11 +101793,9 @@ "uQJ" = ( /obj/machinery/door/airlock/external{ id_tag = "stationai_door_int"; - locked = 1; - name = "Minisat Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -101917,8 +101809,15 @@ name = "interior access button"; req_access_txt = "10;13" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "uQP" = ( /obj/structure/chair/sofa/right{ dir = 8 @@ -101927,7 +101826,7 @@ /area/station/service/bar/atrium) "uQQ" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /obj/item/kitchen/utensil/fork{ pixel_x = -5 }, @@ -102041,10 +101940,10 @@ pixel_x = -3; pixel_y = -3 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ +/obj/machinery/light/directional/east, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 8 }, -/obj/machinery/light/directional/east, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "uSu" = ( @@ -102086,24 +101985,6 @@ icon_state = "darkblue" }, /area/station/security/detective) -"uSM" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "uST" = ( /obj/effect/turf_decal/delivery/hollow, /obj/effect/decal/cleanable/dirt, @@ -102124,6 +102005,7 @@ /area/station/maintenance/apmaint) "uTf" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -102136,7 +102018,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/access/any/service/bar, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/service/barber) @@ -102231,6 +102112,9 @@ /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -102263,6 +102147,7 @@ /area/station/engineering/controlroom) "uUo" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -102403,11 +102288,6 @@ dir = 4 }, /obj/effect/landmark/start/doctor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" @@ -102524,12 +102404,13 @@ id_tag = "med_int_door"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/access_button/east{ autolink_id = "med_int_button"; name = "interior access button" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/engine, /area/station/maintenance/starboard2) "uXV" = ( @@ -102551,7 +102432,7 @@ "uYg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dust, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -102637,7 +102518,6 @@ /obj/machinery/door/window/classic/normal{ name = "Cryo Tank Storage" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general, /obj/machinery/light/directional/north, /turf/simulated/floor/plasteel{ dir = 5; @@ -102659,7 +102539,7 @@ "vaT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/fries{ +/obj/item/food/snacks/fries{ pixel_y = 2 }, /turf/simulated/floor/plating, @@ -102691,7 +102571,7 @@ dir = 1 }, /obj/structure/window/plasmareinforced, -/obj/machinery/atmospherics/pipe/simple/insulated, +/obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter{ layer = 3.3 }, @@ -102870,7 +102750,7 @@ /area/station/legal/lawoffice) "veB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy/geranium, /obj/item/soap/deluxe, /obj/machinery/power/apc{ cell_type = 25000; @@ -102943,14 +102823,13 @@ /area/station/engineering/atmos/control) "vgr" = ( /obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/access/any/medical/morgue, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -102992,9 +102871,9 @@ }, /obj/machinery/door/airlock/security/glass{ id_tag = "perma_door_int"; - locked = 1; - name = "Prison Wing" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/south{ autolink_id = "perma_btn_int"; name = "Prison Wing Access Button"; @@ -103002,10 +102881,9 @@ pixel_y = 0; pixel_x = -24 }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -103060,9 +102938,9 @@ /area/station/science/toxins/mixing) "vii" = ( /obj/machinery/door/airlock/public/glass{ - id_tag = "ExitPrivate"; - name = "Public Access" + id_tag = "ExitPrivate" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "ExitPrivate" }, @@ -103189,11 +103067,15 @@ /obj/structure/sign/vacuum{ pixel_x = -32 }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + autolink_id = "stationai_vent" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "vkw" = ( /obj/machinery/hologram/holopad, /obj/structure/cable{ @@ -103242,11 +103124,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteblue" @@ -103313,11 +103190,11 @@ /area/station/service/library) "vlR" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -6; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 6; pixel_y = 10 }, @@ -103454,7 +103331,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "voc" = ( @@ -103656,7 +103533,7 @@ /turf/simulated/floor/wood/oak, /area/station/service/theatre) "vrM" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/suit_storage_unit/security/secure, /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel{ dir = 5; @@ -103687,6 +103564,7 @@ /area/station/public/toilet) "vse" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" @@ -103699,16 +103577,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" }, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/medmaint) "vsi" = ( @@ -103810,7 +103686,9 @@ }, /area/station/maintenance/starboard) "vvh" = ( -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/effect/turf_decal/delivery/hollow, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 @@ -103818,18 +103696,19 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos/control) "vvF" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "cellprivacy" }, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel/dark, /area/station/security/processing) "vvS" = ( /obj/structure/table/wood, /obj/item/picket_sign, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "vwk" = ( @@ -103912,6 +103791,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel/dark, /area/station/security/permabrig) "vxH" = ( @@ -104068,15 +103948,15 @@ dir = 1; name = "Kitchen Desk" }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 1 - }, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "kitchenhall"; name = "Kitchen Shutters" }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 1 + }, /turf/simulated/floor/plating, /area/station/service/kitchen) "vzG" = ( @@ -104104,9 +103984,8 @@ }, /area/station/medical/storage) "vAj" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Chapel" - }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -104179,8 +104058,8 @@ /area/station/hallway/secondary/bridge) "vCt" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -104199,11 +104078,12 @@ id_tag = "vir_outer_door"; locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/access_button/east{ autolink_id = "vir_outer_button"; name = "interior access button" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "vCV" = ( @@ -104335,11 +104215,12 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, /obj/machinery/recharger, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "vEN" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Biohazard_medi"; name = "Quarantine Lockdown" @@ -104355,9 +104236,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/station/maintenance/aft) "vEQ" = ( @@ -104382,23 +104261,6 @@ }, /turf/simulated/floor/plasteel/grimy, /area/station/public/vacant_office) -"vFy" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue" - }, -/area/station/medical/medbay2) "vFB" = ( /obj/machinery/hologram/holopad{ pixel_x = 16 @@ -104511,11 +104373,11 @@ /area/station/engineering/controlroom) "vHD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Turbine Generator Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/simulated/floor/plasteel, /area/station/maintenance/turbine) "vHE" = ( @@ -104535,10 +104397,7 @@ }, /area/station/medical/morgue) "vHZ" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/starboard) @@ -104725,9 +104584,9 @@ "vJP" = ( /obj/machinery/door/airlock/external{ id_tag = "escape_door_int"; - locked = 1; - name = "Escape External Access" + locked = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/access_button/east{ @@ -104735,6 +104594,7 @@ name = "interior access button"; req_access_txt = "10;13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) "vKr" = ( @@ -104801,6 +104661,7 @@ /obj/machinery/alarm/directional/north, /obj/structure/sign/poster/official/random/east, /obj/structure/chair/comfy/brown, +/obj/effect/landmark/start/bar, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -104902,9 +104763,9 @@ "vMT" = ( /obj/machinery/door/airlock/bathroom{ id = "toilet2"; - id_tag = "toilet2"; - name = "Toilet" + id_tag = "toilet2" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden/crude, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -104915,6 +104776,7 @@ /obj/item/bedsheet/red, /obj/effect/decal/cleanable/dirt, /obj/machinery/alarm/directional/east, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plating, /area/station/maintenance/virology_maint) "vNh" = ( @@ -104936,9 +104798,8 @@ /area/station/security/processing) "vNm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Primary tool storage" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -105109,10 +104970,7 @@ "vQN" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/armory{ - dir = 8 + dir = 4 }, /obj/machinery/door/poddoor/shutters/preopen{ dir = 8; @@ -105124,6 +104982,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ + dir = 4 + }, /turf/simulated/floor/plasteel/dark, /area/station/security/warden) "vQR" = ( @@ -105152,10 +105013,9 @@ autoclose = 0; heat_proof = 1; id_tag = "turbine_door_ext"; - locked = 1; - name = "Turbine Exterior Airlock" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -105166,6 +105026,7 @@ name = "Gas Turbine Access Button"; pixel_y = 24 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /turf/simulated/floor/engine, /area/station/maintenance/turbine) "vRk" = ( @@ -105257,15 +105118,16 @@ "vTv" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - id_tag = "pub_room"; - name = "Public Meeting Room" + id_tag = "pub_room" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "vTJ" = ( @@ -105464,10 +105326,8 @@ /area/station/security/prisonlockers) "vVZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -105492,6 +105352,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -105530,10 +105391,8 @@ /area/station/maintenance/fsmaint) "vWB" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research/glass{ - name = "Robotics Lab" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -105542,6 +105401,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "vWK" = ( @@ -105551,6 +105411,7 @@ /area/station/maintenance/medmaint) "vWU" = ( /obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/polarized{ id = "VirRest" @@ -105567,7 +105428,6 @@ icon_state = "4-8" }, /obj/effect/mapping_helpers/airlock/access/any/medical/virology, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -105601,6 +105461,7 @@ /area/station/security/permabrig) "vXG" = ( /obj/machinery/door/airlock/science, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -105612,7 +105473,6 @@ }, /obj/effect/mapping_helpers/airlock/access/any/medical/genetics, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -105729,10 +105589,8 @@ }, /area/station/hallway/secondary/bridge) "vZO" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Science Chemistry" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/research, +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -105748,6 +105606,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/science/research, /turf/simulated/floor/plasteel/white, /area/station/science/misc_lab) "waa" = ( @@ -105782,6 +105641,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/abandoned_garden) "waz" = ( +/obj/effect/landmark/spawner/prisoner, /turf/simulated/floor/plasteel/dark, /area/station/security/permabrig) "waQ" = ( @@ -105928,7 +105788,7 @@ /area/space/nearstation) "wdu" = ( /turf/simulated/wall, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "wdz" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -106004,7 +105864,7 @@ "weH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/birthdaycakeslice, +/obj/item/food/snacks/birthdaycakeslice, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "weO" = ( @@ -106201,7 +106061,7 @@ /obj/item/clothing/mask/cigarette/pipe, /obj/item/clothing/accessory/holster, /obj/item/clothing/suit/jacket/leather/overcoat, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/item/clothing/head/fedora/brownfedora, /turf/simulated/floor/plating, /area/station/maintenance/old_detective) @@ -106411,13 +106271,6 @@ icon_state = "green" }, /area/station/hallway/secondary/exit) -"wlY" = ( -/obj/machinery/door/airlock/external{ - id_tag = "trade_dock"; - locked = 1 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/entry) "wmc" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -106456,9 +106309,8 @@ }, /area/station/medical/virology) "wmB" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Isolation B" - }, +/obj/machinery/door/airlock/virology/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/item/soap, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -106542,10 +106394,9 @@ "wou" = ( /obj/machinery/door/airlock/external{ id_tag = "engines_door_ext"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -106557,6 +106408,7 @@ name = "exterior access button"; req_access_txt = "10;13" }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/simulated/floor/plasteel, /area/station/engineering/control) @@ -106751,8 +106603,8 @@ /area/station/maintenance/fsmaint) "wtG" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -106767,6 +106619,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel, /area/station/maintenance/dormitory_maintenance) "wtM" = ( @@ -107040,14 +106893,8 @@ dir = 8 }, /obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel/dark, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "wxg" = ( /obj/machinery/light/small/directional/north, /obj/effect/turf_decal/delivery/hollow, @@ -107135,10 +106982,9 @@ "wzi" = ( /obj/machinery/door/airlock/external{ id_tag = "fpsolar_door_int"; - locked = 1; - name = "Engineering External Access" + locked = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -107150,8 +106996,9 @@ /obj/machinery/access_button/north{ autolink_id = "fpsolar_btn_int"; name = "interior access button"; - req_access_txt = "32" + req_access_txt = "13" }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/simulated/floor/plating, /area/station/maintenance/auxsolarport) "wzJ" = ( @@ -107359,6 +107206,7 @@ /area/station/command/office/cmo) "wDr" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -107626,7 +107474,9 @@ /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 }, -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/effect/turf_decal/delivery/red/hollow, /turf/simulated/floor/plasteel/dark, /area/station/security/execution) @@ -107759,7 +107609,7 @@ /obj/item/stack/packageWrap{ pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/reagent_containers/glass/bucket{ pixel_x = 6 }, @@ -107813,9 +107663,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/maintenance{ - name = "Forensics Morgue" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/west) @@ -107829,9 +107678,9 @@ /area/station/engineering/mechanic) "wMZ" = ( /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel, /area/station/security/processing) "wNp" = ( @@ -107852,10 +107701,8 @@ /area/station/science/research) "wNv" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Expedition Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/command/expedition, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -107863,6 +107710,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/command/expedition, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -107997,16 +107845,16 @@ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ id_tag = "BrigLeft" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "Security Blast Door" }, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -108099,6 +107947,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/landmark/start/prisoner, /turf/simulated/floor/carpet, /area/station/security/permabrig) "wRE" = ( @@ -108137,10 +107986,7 @@ /turf/simulated/floor/engine, /area/station/science/explab/chamber) "wRZ" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/fore) "wSa" = ( @@ -108241,10 +108087,7 @@ }, /area/station/maintenance/fsmaint) "wTf" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) "wTo" = ( @@ -108261,6 +108104,7 @@ id = "CMO_Bedroom" }, /obj/machinery/door/airlock/command/cmo/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -108269,7 +108113,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/mapping_helpers/airlock/access/any/medical/cmo, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -108346,9 +108189,9 @@ /obj/machinery/door/airlock/security/glass{ id_tag = "BrigRight" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/doors, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -108445,7 +108288,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ dir = 8 }, /turf/simulated/floor/plasteel/dark, @@ -108550,7 +108393,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "wWY" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "Interrogation" @@ -108665,9 +108508,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore2) "wYw" = ( -/obj/machinery/door/airlock/glass{ - name = "Barber Shop" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -108700,10 +108542,7 @@ /turf/simulated/floor/plating, /area/station/engineering/mechanic) "wYP" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -108823,9 +108662,8 @@ "xaO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -108886,9 +108724,9 @@ /area/station/medical/virology/lab) "xcg" = ( /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/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /obj/machinery/alarm/directional/south, /turf/simulated/floor/plasteel{ dir = 10; @@ -108993,8 +108831,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/access/any/security/general, /obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -109040,6 +108878,10 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"xeo" = ( +/obj/effect/landmark/start/artist, +/turf/simulated/floor/wood/fancy, +/area/station/service/theatre) "xeI" = ( /obj/structure/cable{ d1 = 1; @@ -109110,8 +108952,6 @@ id_tag = "Secure Gate"; name = "Security Blast Door" }, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel/dark, /area/station/security/prison/cell_block/A) @@ -109222,7 +109062,7 @@ }, /obj/effect/landmark/spawner/rev, /obj/machinery/light/small/directional/south, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; volume = 0 @@ -109338,9 +109178,10 @@ "xkM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/science, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/medical/genetics, +/obj/effect/mapping_helpers/airlock/access/any/medical/morgue, /obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -109359,6 +109200,7 @@ /area/station/service/expedition) "xkZ" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -109371,7 +109213,7 @@ }, /area/station/medical/virology/lab) "xli" = ( -/obj/machinery/suit_storage_unit/mime, +/obj/machinery/suit_storage_unit/mime/secure, /obj/machinery/door_control/shutter/west{ id = "Mime"; name = "Mimes Privacy Shutters Control" @@ -109601,10 +109443,9 @@ "xoD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "hopofficedoor"; - name = "Head of Personnel" + id_tag = "hopofficedoor" }, -/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -109613,6 +109454,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/wood/oak, /area/station/command/office/hop) "xoF" = ( @@ -109693,11 +109536,10 @@ /area/station/maintenance/medmaint) "xqb" = ( /obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/security/armory, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -109712,6 +109554,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/armory, /turf/simulated/floor/plasteel/dark, /area/station/security/warden) "xqd" = ( @@ -109733,6 +109576,7 @@ "xql" = ( /obj/structure/weightmachine/stacklifter, /obj/effect/turf_decal/delivery/hollow, +/obj/effect/landmark/start/assistant, /turf/simulated/floor/plasteel, /area/station/public/fitness) "xqw" = ( @@ -109811,14 +109655,15 @@ /area/station/public/pool) "xrW" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/simulated/floor/plasteel, /area/station/maintenance/fore) "xse" = ( @@ -109876,7 +109721,6 @@ icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/windoor/access/any/medical/virology, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/virology, /turf/simulated/floor/plasteel, /area/station/medical/virology/lab) "xsR" = ( @@ -110258,15 +110102,15 @@ icon_state = "1-4" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/command/magistrate, -/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "magistrate" }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/command/magistrate, /turf/simulated/floor/wood/fancy/oak, /area/station/legal/magistrate) "xxW" = ( @@ -110366,14 +110210,13 @@ /turf/simulated/floor/carpet/royalblack, /area/station/legal/courtroom) "xBs" = ( -/obj/machinery/door/airlock/multi_tile/security/glass{ - name = "Brig" - }, +/obj/machinery/door/airlock/multi_tile/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/security/doors, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/storage) "xBx" = ( @@ -110704,6 +110547,18 @@ /obj/effect/landmark/start/psychiatrist, /turf/simulated/floor/carpet, /area/station/medical/psych) +"xGk" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/assistant, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) "xGw" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -110765,10 +110620,7 @@ }, /area/station/medical/reception) "xHN" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -110797,6 +110649,9 @@ c_tag = "Brig Prison Hall"; dir = 8 }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/station/security/permabrig) "xIf" = ( @@ -110924,7 +110779,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "xJH" = ( @@ -111318,7 +111173,9 @@ }, /area/station/hallway/secondary/entry) "xOZ" = ( -/obj/machinery/atmospherics/portable/canister/sleeping_agent, +/obj/machinery/atmospherics/portable/canister/sleeping_agent{ + volume = 200 + }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/science/storage) @@ -111333,16 +111190,12 @@ id_tag = "Secure Armory"; name = "Secure Armory Shutters" }, -/obj/machinery/door/window/reinforced/normal{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general{ - dir = 1 - }, +/obj/machinery/door/window/reinforced/normal, /obj/machinery/door/poddoor/preopen{ id_tag = "ArmoryLock"; name = "Armory Lockdown" }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general, /turf/simulated/floor/plasteel/dark, /area/station/security/armory/secure) "xPs" = ( @@ -111573,6 +111426,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/uncertain, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "chapel" @@ -111678,8 +111532,16 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port) +"xTY" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/obj/effect/landmark/start/bar, +/turf/simulated/floor/carpet/orange, +/area/station/service/bar/atrium) "xUg" = ( /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/barricade/wooden, /turf/simulated/floor/plating, /area/station/maintenance/starboard2) @@ -112459,16 +112321,15 @@ /area/station/engineering/atmos/control) "yhe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Mining Dock" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -112562,7 +112423,7 @@ dir = 8; icon_state = "vault" }, -/area/station/engineering/aitransit) +/area/station/engineering/ai_transit_tube) "yiO" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -112644,6 +112505,10 @@ }, /turf/simulated/floor/plating, /area/station/security/processing) +"yku" = ( +/obj/effect/landmark/start/artist, +/turf/simulated/floor/carpet/arcade, +/area/station/public/arcade) "ykw" = ( /obj/structure/cable{ d1 = 1; @@ -121562,7 +121427,7 @@ bLR bNM bNM bNM -bTM +bTH bNM bNM bNM @@ -123104,7 +122969,7 @@ bUJ aaa bku bmq -bTS +bPV bpq brr aaa @@ -123875,7 +123740,7 @@ bUJ aaa bPU bms -bZw +oMO bms bXR aaa @@ -124130,11 +123995,11 @@ aaa aaa bUJ abj -bPV +csr abj -chw abj -bPV +abj +csr aaa aaa aaa @@ -124389,7 +124254,7 @@ bUJ aaa bPW wXe -chw +abj wXe bXS aaa @@ -124646,7 +124511,7 @@ bUJ aaa abj bRQ -chw +abj bWb abj aaa @@ -127674,7 +127539,7 @@ aaa aaa dij dij -aGW +sso dij dij aaa @@ -130810,7 +130675,7 @@ bge bGu bwN abj -bUJ +chw abj abj abj @@ -131071,7 +130936,7 @@ ptq qwS qwS abj -csy +bPW abj bXU bZl @@ -131328,7 +131193,7 @@ suC vkv qwS bZf -ctI +bZf ctJ bXU bZm @@ -131786,7 +131651,7 @@ aaa aaa dij dij -aGW +sso dij abj aaa @@ -131796,7 +131661,7 @@ abj aaa abj dij -aGW +sso dij dij abj @@ -131842,7 +131707,7 @@ fGI eNr pPZ rJg -pbJ +kFr jof bXU bXU @@ -140768,7 +140633,7 @@ abj abj abj syc -wlY +ebA ebA acC abj @@ -143346,7 +143211,7 @@ aaa acC ant jTD -dyU +utu aAj apI lpk @@ -143618,7 +143483,7 @@ hle bGx rwU kyg -tEA +oHD sCp tEA wYw @@ -144003,7 +143868,7 @@ dPE dQi fGy hRF -dRM +aMt fTn dRM ozL @@ -144398,7 +144263,7 @@ jZx idp aKl kAy -hEG +eiG lSB hEG vrJ @@ -144652,7 +144517,7 @@ sGa vxa aOx uDK -idp +xeo aKl dBq dBq @@ -144914,7 +144779,7 @@ aKl lSB aPS kAy -aPS +fiz nkM aYZ aYZ @@ -145680,7 +145545,7 @@ aEx qKt aOx aHJ -idp +xeo aKl dBq dBq @@ -146199,7 +146064,7 @@ aIX kAy hEG lSB -hEG +eiG dBq dBq dBq @@ -146453,7 +146318,7 @@ aGy cnC rza efP -dDJ +dBq dBq dBq dBq @@ -146831,7 +146696,7 @@ duw duw duw dJx -dSr +dKK dIx dIx dIx @@ -146979,11 +146844,11 @@ rWV rWV gRS bcv -bhK +kGD onD gRS bhK -onD +lOT gRS sKr xfy @@ -147497,7 +147362,7 @@ ldZ bTg mDu uQP -bTg +xTY blo yed xfy @@ -148524,7 +148389,7 @@ bdR uQP bTg gRS -uQP +pxe bTg gRS sKr @@ -149312,7 +149177,7 @@ bCs bHr rDN bHs -bOT +jOu bKS bMY gTy @@ -150421,7 +150286,7 @@ hhp dUu jev dTy -dKQ +klu dXn dKQ dIO @@ -151449,7 +151314,7 @@ hId ryk dTy dTy -dKQ +klu dXn dKQ dIO @@ -153924,8 +153789,8 @@ bgS wGq wXc bnh -bel -dlE +bbi +bov hMM spq wkq @@ -158091,7 +157956,7 @@ qRc wQQ rbM yff -vFy +dtz dtz toO dtz @@ -158348,7 +158213,7 @@ gbi gbi gbi gbi -uSM +kOA gbi nTE nLC @@ -159095,7 +158960,7 @@ pbz hTV bCH wDd -ygh +gqV jtC coM crX @@ -160303,7 +160168,7 @@ aaa aaa dij dij -aGW +sso dij abj adg @@ -161831,7 +161696,7 @@ aaa aaa aaa dij -aGW +sso dij dij abj @@ -163232,7 +163097,7 @@ jWj cIk kYb cIk -cIk +yku anv hmU gnn @@ -163375,7 +163240,7 @@ aaa aaa aaa aaa -aGW +sso abj ace aco @@ -163473,11 +163338,11 @@ hYU cwk uMO cAs -cAs +snx cAs qqh kQm -kQm +xGk kQm ibt nQT @@ -165537,7 +165402,7 @@ cJC prx cHa cJn -qGm +qJx kaG kyI xrg @@ -166059,7 +165924,7 @@ cWh cWh ckX cWh -nZg +hvN wqV hQq abj @@ -167268,13 +167133,13 @@ wcy qnD saC fGi -uFf +lqB saC qnD saC rRb bfH -bfH +uzH rRb eYN rRb @@ -167339,11 +167204,11 @@ hQq wIb pLT wgH -pLT +nVU tfF pLT bUe -pLT +nVU aTC hQq cHa @@ -168302,7 +168167,7 @@ bil syi rRb uWd -cyV +iuP xmd lLS xPW @@ -169849,11 +169714,11 @@ bSX axt vXr bfC +otB tqm +qQX tqm -hZR -tqm -tqm +otB qgl rRb nCq @@ -170101,7 +169966,7 @@ axA dgi rRb cXP -nRv +eRj aXt axt fxa diff --git a/_maps/map_files220/generic/Admin_Zone.dmm b/_maps/map_files220/generic/Admin_Zone.dmm index c794f3ba7784..cb4a80df0e1e 100644 --- a/_maps/map_files220/generic/Admin_Zone.dmm +++ b/_maps/map_files220/generic/Admin_Zone.dmm @@ -691,13 +691,13 @@ /area/admin) "kQ" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/berries, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/berries, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/mushroom/amanita, /turf/simulated/floor/wood/oak, /area/admin) "kT" = ( @@ -3247,7 +3247,7 @@ "Vh" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files220/generic/Lavaland.dmm b/_maps/map_files220/generic/Lavaland.dmm index f05615226571..cc3eeb2e9c3e 100644 --- a/_maps/map_files220/generic/Lavaland.dmm +++ b/_maps/map_files220/generic/Lavaland.dmm @@ -178,9 +178,8 @@ /turf/simulated/floor/plasteel, /area/mine/laborcamp) "aB" = ( -/obj/machinery/door/airlock{ - name = "Labor Camp Bathroom" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/white, @@ -363,10 +362,8 @@ /area/mine/laborcamp/security) "ba" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/security/glass{ - name = "Labor Camp Security" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Labor"; name = "labor camp blast door" @@ -382,6 +379,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -606,16 +604,15 @@ /turf/simulated/floor/plasteel, /area/mine/laborcamp) "bA" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Labor Camp Backroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/mine/laborcamp) "bB" = ( @@ -674,22 +671,22 @@ /area/shuttle/mining) "bG" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -1; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 7; pixel_y = 5 }, @@ -732,22 +729,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Infirmary" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/dark, /area/mine/laborcamp) "bM" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Labor Camp Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/mine/laborcamp) "bN" = ( @@ -755,9 +750,9 @@ /area/mine/outpost/cafeteria) "bO" = ( /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Labor Shuttle Airlock" + id_tag = "s_docking_airlock" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/labour, /obj/structure/fans/tiny, /obj/docking_port/stationary{ @@ -774,11 +769,8 @@ /area/shuttle/siberia) "bP" = ( /obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external{ - name = "Catwalk Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 @@ -786,6 +778,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/catwalk, /area/mine/outpost/engineering) "bQ" = ( @@ -799,9 +792,8 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "bR" = ( -/obj/machinery/door/airlock/glass{ - name = "Cafeteria" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -811,7 +803,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" @@ -974,7 +965,7 @@ /area/mine/outpost/storage) "cl" = ( /obj/structure/lattice/catwalk/mining, -/obj/item/reagent_containers/food/snacks/fortunecookie{ +/obj/item/food/snacks/fortunecookie{ pixel_y = -5; pixel_x = -6 }, @@ -1253,8 +1244,9 @@ }, /area/mine/outpost/cafeteria) "cV" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "cW" = ( @@ -1292,10 +1284,10 @@ "cZ" = ( /obj/structure/fans/tiny, /obj/machinery/door/airlock/multi_tile/supply/glass, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -1715,12 +1707,10 @@ /area/mine/outpost/hallway/east) "dL" = ( /obj/machinery/door/airlock/maintenance/external{ - name = "Processing Room"; welded = 1 }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -1729,6 +1719,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/production) "dM" = ( @@ -1829,15 +1820,14 @@ /turf/simulated/floor/plating, /area/mine/outpost/maintenance/east) "dX" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "EVA Storage" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -1966,9 +1956,8 @@ /turf/simulated/floor/lava/lava_land_surface, /area/lavaland/surface/outdoors/legion) "ek" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Hallway" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -1976,8 +1965,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -2221,9 +2210,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/mining/glass{ - name = "Hallway" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -2233,22 +2221,19 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ icon_state = "darkgreencorners"; dir = 4 }, /area/mine/outpost/hallway/west) "eI" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, -/obj/machinery/door/airlock/maintenance{ - name = "Infirmary Maintence" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/medbay) "eJ" = ( @@ -2348,9 +2333,8 @@ }, /area/mine/outpost/storage) "eT" = ( -/obj/machinery/door/airlock/command/qm/glass{ - name = "Quartermaster's Office" - }, +/obj/machinery/door/airlock/command/qm/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, @@ -2362,11 +2346,11 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/effect/mapping_helpers/airlock/polarized{ id = "mining qm" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, +/obj/effect/mapping_helpers/airlock/access/any/command/blueshield, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -2388,11 +2372,11 @@ /area/mine/outpost/hallway/west) "eW" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -2426,19 +2410,17 @@ }, /area/mine/outpost/hallway/west) "fa" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Hallway" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ icon_state = "darkpurplecorners" }, /area/mine/outpost/hallway/west) "fb" = ( /obj/structure/reagent_dispensers/oil, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "fc" = ( @@ -2559,18 +2541,17 @@ /area/mine/outpost/hallway/west) "fn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Box Storage" - }, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -2597,9 +2578,8 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "fr" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Infirmary" - }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -2613,7 +2593,6 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -2621,13 +2600,12 @@ /area/mine/outpost/medbay) "fs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Box Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -2688,15 +2666,14 @@ }, /area/mine/outpost/hallway/west) "fz" = ( -/obj/machinery/door/airlock/external/glass{ - name = "Shuttle Dock" - }, +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkredfull" @@ -2954,16 +2931,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock/atmos{ - name = "Life Support" - }, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/catwalk, /area/mine/outpost/engineering) "gf" = ( @@ -3085,9 +3059,8 @@ /turf/simulated/floor/lava/mapping_lava, /area/lavaland/surface/outdoors/legion) "gp" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Central Hallway Maintence" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -3095,8 +3068,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/hallway/west) "gq" = ( @@ -3182,9 +3154,9 @@ dir = 4 }, /obj/machinery/door/airlock/external{ - id_tag = "laborcamp_away2"; - name = "Labor Camp Airlock" + id_tag = "laborcamp_away2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/mine/laborcamp) "gy" = ( @@ -3258,9 +3230,9 @@ /obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ - id_tag = "laborcamp_away2"; - name = "Labor Camp Airlock" + id_tag = "laborcamp_away2" }, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel, /area/mine/laborcamp) "gG" = ( @@ -4504,12 +4476,10 @@ /area/lavaland/surface/outdoors) "lx" = ( /obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /obj/effect/spawner/random_spawners/dirt_maybe, -/obj/machinery/door/airlock/maintenance/external/glass{ - name = "Landing Pad" - }, +/obj/machinery/door/airlock/maintenance/external/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/catwalk, /area/mine/outpost/hallway/west) "ly" = ( @@ -5029,10 +4999,9 @@ /area/lavaland/surface/outdoors/legion) "mU" = ( /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, -/obj/machinery/door/airlock/research{ - name = "Mech Bay" - }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel, /area/mine/outpost/mechbay) "mV" = ( @@ -5231,13 +5200,11 @@ /turf/simulated/floor/carpet, /area/mine/outpost/quartermaster) "nX" = ( -/obj/machinery/door/airlock/maintenance/external{ - name = "Catwalk Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "ob" = ( @@ -5301,7 +5268,7 @@ "oB" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/item/radio/intercom/directional/south, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/east) @@ -5704,12 +5671,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, -/obj/machinery/door/airlock/atmos{ - name = "Life Support" - }, +/obj/machinery/door/airlock/atmos, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, /obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/catwalk, /area/mine/outpost/hallway/west) @@ -5749,9 +5713,8 @@ /turf/simulated/floor/carpet, /area/mine/outpost/quartermaster) "st" = ( -/obj/machinery/door/airlock/glass{ - name = "Construction Site" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -5760,6 +5723,7 @@ /obj/machinery/atmospherics/pipe/cap/hidden/supply{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "sv" = ( @@ -5782,9 +5746,8 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/outpost/catwalk) "sD" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Hallway" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment{ dir = 8 }, @@ -5792,8 +5755,8 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -5801,6 +5764,7 @@ /area/mine/outpost/hallway/west) "sF" = ( /obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /turf/simulated/floor/plasteel/white, /area/mine/laborcamp) "sL" = ( @@ -6133,11 +6097,9 @@ /area/mine/outpost/hallway/east) "uq" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, -/obj/machinery/door/airlock/maintenance{ - name = "Mech Bay Maintence" - }, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/mechbay) "us" = ( @@ -6174,9 +6136,9 @@ "uG" = ( /obj/structure/fans/tiny, /obj/machinery/door/airlock/external/glass{ - name = "Shuttle Airlock"; id_tag = "mining_away" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plasteel{ dir = 8; @@ -6296,9 +6258,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public{ - name = "Tool Storage" - }, +/obj/machinery/door/airlock/public, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -6319,10 +6280,9 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "vk" = ( -/obj/machinery/door/airlock/titanium{ - name = "Labor Shuttle Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/siberia) "vm" = ( @@ -6561,9 +6521,8 @@ "wI" = ( /obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/highsecurity{ - name = "Communications" - }, +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -6575,8 +6534,8 @@ icon_state = "4-8" }, /obj/effect/spawner/random_spawners/dirt_maybe, -/obj/effect/mapping_helpers/airlock/access/any/supply/qm, /obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, /turf/simulated/floor/plasteel/dark, /area/mine/outpost/comms) "wN" = ( @@ -6971,9 +6930,8 @@ }, /area/mine/outpost/mechbay) "zt" = ( -/obj/machinery/door/airlock/glass{ - name = "Labor Camp Bedroom" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark/damageturf, @@ -7293,6 +7251,7 @@ id_tag = "s_docking_airlock"; req_access_txt = "48" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/docking_port/mobile/mining, /obj/structure/fans/tiny, /obj/docking_port/stationary{ @@ -7305,6 +7264,7 @@ turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface; width = 7 }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/simulated/floor/plating, /area/shuttle/mining) "AP" = ( @@ -7424,16 +7384,14 @@ }, /area/mine/outpost/lockers) "BE" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Airlock Maintence" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/airlock) "BH" = ( @@ -7543,9 +7501,8 @@ /turf/simulated/floor/lava/mapping_lava, /area/lavaland/surface/outdoors/outpost/catwalk) "Cy" = ( -/obj/machinery/door/airlock{ - name = "Labor Camp Prisoner Lockers" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/poddoor/preopen{ id_tag = "Labor"; name = "labor camp blast door" @@ -7736,9 +7693,8 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Dz" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Main Airlock" - }, +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7750,7 +7706,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /obj/structure/sign/directions/cargo{ dir = 8; pixel_y = -24 @@ -7760,6 +7715,7 @@ pixel_y = -30 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -7887,16 +7843,14 @@ }, /area/mine/outpost/hallway/west) "El" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Custodial Storage Maintence" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/custodial) "Em" = ( @@ -8136,11 +8090,11 @@ /area/mine/laborcamp) "FW" = ( /obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Labor Shuttle Airlock" + id_tag = "s_docking_airlock" }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/shuttle/siberia) "FX" = ( @@ -8281,11 +8235,11 @@ /area/lavaland/surface/outdoors/legion) "Hc" = ( /obj/machinery/door/airlock/external{ - id_tag = "laborcamp_away"; - name = "Labor Camp Airlock" + id_tag = "laborcamp_away" }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plating, /area/mine/laborcamp/security) "Hd" = ( @@ -8420,10 +8374,9 @@ /turf/simulated/floor/lava/mapping_lava, /area/lavaland/surface/outdoors/outpost/catwalk) "HN" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Labor Camp Security" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/simulated/floor/plasteel, /area/mine/laborcamp/security) "HO" = ( @@ -8920,12 +8873,10 @@ icon_state = "1-2" }, /obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external{ - name = "Processing Room Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "KD" = ( @@ -8945,12 +8896,10 @@ /area/lavaland/surface/outdoors/legion) "KL" = ( /obj/structure/fans/tiny, -/obj/machinery/door/airlock/maintenance/external/glass{ - name = "Landing Pad" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/maintenance/external/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/spawner/random_spawners/dirt_maybe, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/catwalk, /area/mine/outpost/hallway/west) "KN" = ( @@ -8979,9 +8928,8 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "KY" = ( -/obj/machinery/door/airlock{ - name = "Custodial Storage" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -8991,7 +8939,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ icon_state = "darkgreencorners" @@ -9461,12 +9408,6 @@ }, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/outpost/catwalk) -"NV" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/mine/outpost/maintenance/south) "NW" = ( /obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, @@ -9582,9 +9523,10 @@ /turf/simulated/floor/indestructible/boss, /area/lavaland/surface/outdoors/legion) "OM" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/spawner/random_spawners/dirt_maybe, /obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "OS" = ( @@ -9654,10 +9596,8 @@ /turf/simulated/floor/indestructible/boss, /area/lavaland/surface/outdoors/legion) "Pu" = ( -/obj/machinery/door/airlock/mining{ - name = "Miner Lockers" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -9666,6 +9606,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -10281,9 +10222,9 @@ /area/mine/outpost/hallway/east) "TU" = ( /obj/machinery/door/airlock/external{ - id_tag = "laborcamp_away"; - name = "Labor Camp Airlock" + id_tag = "laborcamp_away" }, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /turf/simulated/floor/plating, /area/mine/laborcamp) @@ -10599,9 +10540,8 @@ /turf/simulated/floor/indestructible/boss, /area/lavaland/surface/outdoors/legion) "Vz" = ( -/obj/machinery/door/airlock{ - name = "Restroom" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -10611,15 +10551,13 @@ /turf/simulated/floor/plasteel, /area/mine/laborcamp) "VD" = ( -/obj/machinery/door/airlock/glass{ - name = "Cafeteria" - }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/plasteel{ icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" @@ -10965,14 +10903,12 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Xy" = ( -/obj/machinery/door/airlock/maintenance/external{ - name = "Catwalk Access" - }, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/simulated/floor/catwalk, /area/mine/outpost/storage) "XD" = ( @@ -11160,9 +11096,8 @@ /turf/simulated/floor/plasteel, /area/mine/laborcamp) "YJ" = ( -/obj/machinery/door/airlock{ - name = "Labor Camp Storage" - }, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -11175,14 +11110,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/command/qm/glass{ - name = "Quartermaster's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/qm/glass, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ id = "mining qm" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/qm, /turf/simulated/floor/catwalk, /area/mine/outpost/quartermaster) "YV" = ( @@ -26540,7 +26473,7 @@ zy NR io ft -NV +cV eM ff ft diff --git a/_maps/map_files220/generic/centcomm.dmm b/_maps/map_files220/generic/centcomm.dmm index e55dcea3e40d..f0102f850792 100644 --- a/_maps/map_files220/generic/centcomm.dmm +++ b/_maps/map_files220/generic/centcomm.dmm @@ -159,7 +159,7 @@ /turf/simulated/floor/carpet, /area/syndicate_mothership/control) "afe" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /obj/structure/window/reinforced, @@ -385,15 +385,15 @@ /area/centcom/ss220/admin3) "anM" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/machinery/reagentgrinder{ @@ -1122,7 +1122,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/lemoncakeslice, +/obj/item/food/snacks/lemoncakeslice, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "aMw" = ( @@ -1386,7 +1386,7 @@ /area/ghost_bar) "aXh" = ( /obj/structure/table/wood/poker, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = -5; pixel_y = 9 }, @@ -1669,13 +1669,13 @@ /area/shuttle/trade/sol) "bjU" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 10 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plating{ icon = 'icons/turf/floors.dmi'; icon_state = "elevatorshaft"; @@ -2662,7 +2662,7 @@ /area/syndicate_mothership) "bUl" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/vermouth, +/obj/item/reagent_containers/drinks/bottle/vermouth, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/elite_squad) "bUU" = ( @@ -2830,8 +2830,8 @@ /turf/simulated/floor/carpet/black, /area/syndicate_mothership/jail) "bWK" = ( -/obj/machinery/jukebox/disco/anchored/indestructible, /obj/effect/turf_decal/box/white, +/obj/machinery/jukebox/disco/indestructible, /turf/simulated/floor/mineral/abductor, /area/centcom/ss220/bar) "bWW" = ( @@ -3792,7 +3792,7 @@ /turf/simulated/floor/grass/jungle/no_creep, /area/centcom/ss220/admin1) "cHl" = ( -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = 6; pixel_y = 2 }, @@ -3806,7 +3806,7 @@ pixel_x = -7; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/mugwort{ +/obj/item/reagent_containers/drinks/mugwort{ pixel_x = 8; pixel_y = 6 }, @@ -3883,15 +3883,15 @@ /area/wizard_station) "cKt" = ( /obj/machinery/economy/vending/boozeomat, -/obj/item/reagent_containers/food/drinks/bottle/cognac{ +/obj/item/reagent_containers/drinks/bottle/cognac{ pixel_x = 9; pixel_y = 23 }, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium{ +/obj/item/reagent_containers/drinks/bottle/absinthe/premium{ pixel_x = -8; pixel_y = 25 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 23 }, /turf/simulated/floor/carpet/red, @@ -3938,7 +3938,7 @@ /area/syndicate_mothership/elite_squad) "cLC" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/burger/bigbite{ +/obj/item/food/snacks/burger/bigbite{ pixel_y = 4 }, /turf/simulated/floor/carpet/black, @@ -4617,11 +4617,11 @@ /area/centcom/ss220/admin3) "djm" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -6; pixel_y = 4 }, @@ -4764,7 +4764,7 @@ }, /area/syndicate_mothership/jail) "doZ" = ( -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /obj/structure/table/wood/fancy/black, /turf/simulated/floor/plating{ icon = 'icons/turf/floors.dmi'; @@ -4775,13 +4775,13 @@ /area/syndicate_mothership/elite_squad) "dpf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/soysauce{ +/obj/item/reagent_containers/condiment/soysauce{ pixel_x = 12 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_x = -9; pixel_y = -4 }, @@ -4889,7 +4889,7 @@ /area/ninja/holding) "dsw" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /obj/machinery/light/directional/west, /turf/simulated/floor/plasteel{ icon_state = "cmo" @@ -5104,7 +5104,7 @@ /area/syndicate_mothership/cargo) "dzI" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/sliceable/chocolatecake, +/obj/item/food/snacks/sliceable/chocolatecake, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/elite_squad) "dzJ" = ( @@ -5304,9 +5304,7 @@ /area/centcom/ss220/admin1) "dFj" = ( /obj/structure/window/reinforced, -/obj/item/kirbyplants{ - icon_state = "applebush" - }, +/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -5420,11 +5418,11 @@ /area/shuttle/syndicate) "dIR" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -4; pixel_y = 6 }, @@ -5758,7 +5756,7 @@ "dSq" = ( /obj/structure/window/reinforced, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -6526,24 +6524,24 @@ /area/shuttle/syndicate_elite) "eyi" = ( /obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/spaghetti, +/obj/item/food/snacks/spaghetti, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -7143,11 +7141,11 @@ /obj/structure/table/reinforced{ color = "#996633" }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 4; pixel_y = 2 }, @@ -7512,7 +7510,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/diablo, +/obj/item/food/snacks/sliceable/pizza/diablo, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "fbl" = ( @@ -7630,19 +7628,19 @@ /area/syndicate_mothership/cargo) "fgh" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -2; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -2; pixel_y = 4 }, @@ -7837,25 +7835,25 @@ /obj/structure/closet/secure_closet/freezer/kitchen{ req_access = null }, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -8297,7 +8295,7 @@ /area/syndicate_mothership) "fAT" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/birthdaycakeslice, +/obj/item/food/snacks/birthdaycakeslice, /obj/item/kitchen/utensil/fork{ pixel_x = 11; pixel_y = 8 @@ -8762,7 +8760,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/onionrings, +/obj/item/food/snacks/onionrings, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "fTe" = ( @@ -9049,10 +9047,10 @@ /area/ghost_bar) "gff" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace{ pixel_x = 16; pixel_y = 9 }, @@ -9381,27 +9379,27 @@ /area/syndicate_mothership) "gtk" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -14; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 6; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -14; pixel_y = 4 }, @@ -9528,7 +9526,7 @@ pixel_x = -18; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -9578,9 +9576,9 @@ /turf/simulated/floor/carpet/black, /area/ghost_bar) "gyx" = ( -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, +/obj/item/food/snacks/grown/cannabis/rainbow, +/obj/item/food/snacks/grown/cannabis/rainbow, +/obj/item/food/snacks/grown/cannabis/rainbow, /turf/simulated/floor/wood/fancy/cherry, /area/trader_station/sol) "gzd" = ( @@ -9757,22 +9755,22 @@ /area/centcom/ss220/bar) "gDl" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/citrus/lime, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/citrus/lime, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/deus, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -10247,7 +10245,6 @@ /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) "gSz" = ( -/obj/effect/landmark/spawner/teleport_scroll, /obj/structure/table/wood/fancy/black, /obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet{ info = "Deliver five cream pies to the agreed place or your apprentice gets honked again"; @@ -10443,7 +10440,7 @@ /area/syndicate_mothership) "gXA" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/novelty, +/obj/item/reagent_containers/drinks/mug/novelty, /obj/item/candle/eternal/wizard{ pixel_y = 11 }, @@ -10843,7 +10840,7 @@ /obj/item/ashtray/glass{ pixel_x = 16 }, -/obj/item/reagent_containers/food/snacks/sliceable/turkey{ +/obj/item/food/snacks/sliceable/turkey{ pixel_y = 6 }, /turf/simulated/floor/carpet/red, @@ -10916,7 +10913,7 @@ /area/centcom/ss220/admin3) "hqi" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater/hell{ +/obj/item/reagent_containers/drinks/bottle/holywater/hell{ pixel_y = 2 }, /turf/simulated/floor/carpet, @@ -11942,7 +11939,7 @@ /area/syndicate_mothership) "hTA" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/benedict{ +/obj/item/food/snacks/benedict{ pixel_y = 6 }, /obj/item/kitchen/utensil/fork{ @@ -12004,7 +12001,7 @@ /area/space/centcomm) "hVt" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5; pixel_x = 12; pixel_y = 8 @@ -12712,11 +12709,11 @@ /area/centcom/ss220/admin3) "iuR" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -6; pixel_y = 4 }, @@ -12749,18 +12746,18 @@ /area/abductor_ship) "ivy" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 11; pixel_y = 13 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = 4; pixel_y = 7 }, @@ -12805,7 +12802,7 @@ /area/shuttle/syndicate) "iwf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chocolatecakeslice, +/obj/item/food/snacks/chocolatecakeslice, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/elite_squad) "iwk" = ( @@ -12815,7 +12812,7 @@ /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "iwE" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "navybluefull" @@ -12882,7 +12879,7 @@ /area/syndicate_mothership) "ize" = ( /obj/structure/table, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 6 }, /obj/item/clothing/gloves/color/latex/nitrile, @@ -13383,7 +13380,7 @@ dir = 1; name = "Стойка выдачи" }, -/obj/item/reagent_containers/food/snacks/sliceable/braincake{ +/obj/item/food/snacks/sliceable/braincake{ pixel_y = 4 }, /turf/simulated/floor/plasteel{ @@ -14228,7 +14225,7 @@ /area/centcom/ss220/supply) "jAn" = ( /obj/machinery/kitchen_machine/oven, -/obj/item/reagent_containers/food/snacks/rawcookies/chocochips{ +/obj/item/food/snacks/rawcookies/chocochips{ pixel_x = -1; pixel_y = 6 }, @@ -14575,11 +14572,11 @@ /obj/item/stack/spacecash/c10000, /obj/item/stack/spacecash/c10000, /obj/item/stack/spacecash/c10000, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /obj/item/coin/gold, /obj/item/toy/plushie/corgi, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin2) "jNJ" = ( @@ -14794,10 +14791,10 @@ /area/centcom/ss220/admin1) "jZg" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/tofukabob, -/obj/item/reagent_containers/food/snacks/tofukabob, -/obj/item/reagent_containers/food/snacks/tofukabob, -/obj/item/reagent_containers/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -16164,7 +16161,7 @@ /turf/simulated/floor/grass/no_creep, /area/centcom/ss220/bar) "leo" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 4 }, @@ -16257,7 +16254,7 @@ /area/centcom/ss220/command) "liv" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/applepie, +/obj/item/food/snacks/applepie, /obj/item/kitchen/utensil/fork{ pixel_x = -12; pixel_y = 8 @@ -16272,7 +16269,7 @@ /area/syndicate_mothership/jail) "liW" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -16702,7 +16699,7 @@ }, /area/centcom/ss220/general) "lvh" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 1 }, @@ -16741,7 +16738,7 @@ pixel_x = 18; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -17811,7 +17808,7 @@ }, /area/centcom/ss220/command) "lYC" = ( -/obj/machinery/computer{ +/obj/machinery/computer/nonfunctional{ dir = 1 }, /turf/simulated/floor/plasteel{ @@ -18612,7 +18609,7 @@ /area/syndicate_mothership/elite_squad) "mIR" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/bananacakeslice{ +/obj/item/food/snacks/bananacakeslice{ pixel_y = 4 }, /obj/item/kitchen/utensil/fork{ @@ -18960,7 +18957,7 @@ amount = 115; desc = null }, -/obj/item/reagent_containers/food/snacks/soup/beetsoup{ +/obj/item/food/snacks/soup/beetsoup{ desc = "Со вкусом политических убийств"; name = "Борщ"; pixel_y = 16 @@ -19282,11 +19279,11 @@ /area/shuttle/syndicate) "nkM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -19612,7 +19609,7 @@ /area/centcom/ss220/command) "nvT" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/light_fake{ dir = 4 }, @@ -19842,7 +19839,7 @@ }, /area/centcom/ss220/admin2) "nDz" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 4 }, @@ -19876,7 +19873,7 @@ /area/centcom/ss220/jail) "nES" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 6 }, /turf/simulated/floor/plasteel/dark, @@ -20449,7 +20446,7 @@ /obj/structure/light_fake/spot{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/sliceable/limecake{ +/obj/item/food/snacks/sliceable/limecake{ pixel_y = 2 }, /turf/simulated/floor/plasteel{ @@ -20619,7 +20616,7 @@ /turf/simulated/floor/plating, /area/shuttle/administration) "oiT" = ( -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = -8; pixel_y = 4 }, @@ -20666,7 +20663,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/bacon, +/obj/item/food/snacks/sliceable/pizza/bacon, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "olA" = ( @@ -21249,7 +21246,7 @@ /obj/structure/table/holotable/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/burger/cheese, +/obj/item/food/snacks/burger/cheese, /turf/simulated/floor/carpet/black, /area/trader_station/sol) "oGr" = ( @@ -21784,7 +21781,7 @@ /area/centcom/ss220/general) "oYY" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/burger/cheese{ +/obj/item/food/snacks/burger/cheese{ pixel_y = 3 }, /turf/simulated/floor/carpet/black, @@ -22166,11 +22163,11 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/drinks/bottle/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, /turf/simulated/floor/plating{ @@ -22382,7 +22379,7 @@ /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) "pyl" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /obj/structure/window/reinforced{ dir = 8 }, @@ -23153,7 +23150,7 @@ /area/centcom/ss220/admin2) "qbf" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -24781,7 +24778,7 @@ /area/ghost_bar) "rjq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/watermelonslice, +/obj/item/food/snacks/watermelonslice, /obj/effect/decal/syndie_logo{ icon_state = "logo11" }, @@ -24947,7 +24944,7 @@ "rqA" = ( /obj/structure/table/wood/fancy, /obj/effect/spawner/lootdrop{ - loot = list(/obj/item/reagent_containers/food/snacks/baguette=10,/obj/item/reagent_containers/food/snacks/applepie=10,/obj/item/reagent_containers/food/snacks/applepie=10,/obj/item/reagent_containers/food/snacks/soup/bloodsoup=10,/obj/item/reagent_containers/food/snacks/boiledrice=10,/obj/item/reagent_containers/food/snacks/carrotfries=10,/obj/item/reagent_containers/food/drinks/cans/cola=10,""=70); + loot = list(/obj/item/food/snacks/baguette=10,/obj/item/food/snacks/applepie=10,/obj/item/food/snacks/applepie=10,/obj/item/food/snacks/soup/bloodsoup=10,/obj/item/food/snacks/boiledrice=10,/obj/item/food/snacks/carrotfries=10,/obj/item/reagent_containers/drinks/cans/cola=10,""=70); name = "Food CC Spawner #1" }, /turf/simulated/floor/wood, @@ -25230,7 +25227,7 @@ /area/centcom/ss220/supply) "rtF" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -25740,7 +25737,7 @@ /area/centcom/ss220/court) "rOo" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/boiledbuckwheat{ +/obj/item/food/snacks/boiledbuckwheat{ pixel_y = 2 }, /obj/item/kitchen/utensil/spoon{ @@ -25996,7 +25993,7 @@ /area/ghost_bar) "rVg" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 4 }, @@ -26820,11 +26817,11 @@ /area/syndicate_mothership/infteam) "sDS" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/appletart{ +/obj/item/food/snacks/appletart{ pixel_x = -16; pixel_y = -10 }, -/obj/item/reagent_containers/food/snacks/applecakeslice{ +/obj/item/food/snacks/applecakeslice{ pixel_y = 4 }, /obj/item/kitchen/utensil/fork{ @@ -26949,7 +26946,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/meatsteak, +/obj/item/food/snacks/meatsteak, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "sIn" = ( @@ -27697,7 +27694,7 @@ /obj/structure/table/holotable/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/turkey, +/obj/item/food/snacks/sliceable/turkey, /turf/simulated/floor/carpet/black, /area/trader_station/sol) "thG" = ( @@ -28043,7 +28040,7 @@ /turf/simulated/floor/mineral/plastitanium, /area/shuttle/syndicate) "tuO" = ( -/obj/item/reagent_containers/food/snacks/pie{ +/obj/item/food/snacks/pie{ pixel_x = -8; pixel_y = 13 }, @@ -28476,7 +28473,7 @@ pixel_x = 5; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -28677,7 +28674,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza, +/obj/item/food/snacks/sliceable/pizza/macpizza, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "tQU" = ( @@ -28703,12 +28700,12 @@ }, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/infteam) "tSu" = ( @@ -29060,12 +29057,12 @@ /obj/structure/sign/securearea{ pixel_x = -32 }, -/obj/machinery/suit_storage_unit/gamma, +/obj/machinery/suit_storage_unit/gamma/secure, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/gamma/space) "ued" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 8 }, /turf/simulated/floor/plasteel/dark, @@ -29423,7 +29420,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/salad/herb, +/obj/item/food/snacks/salad/herb, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "utb" = ( @@ -29932,10 +29929,10 @@ /area/centcom/ss220/admin1) "uMM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 7 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -7; pixel_y = 7 }, @@ -30778,7 +30775,7 @@ pixel_x = 5; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -30943,7 +30940,7 @@ /obj/structure/sign/poster/contraband/random{ pixel_x = 30 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) "vwP" = ( @@ -31781,7 +31778,7 @@ /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) "wdR" = ( -/obj/machinery/computer, +/obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -32172,9 +32169,7 @@ /area/shuttle/trade/sol) "wtd" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/radio/phone{ - desc = "How else would the wizards order pizza?" - }, +/obj/structure/pondering_orb, /obj/effect/turf_decal/woodsiding{ dir = 6 }, @@ -32388,7 +32383,7 @@ /area/shuttle/syndicate) "wBj" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{ +/obj/item/reagent_containers/drinks/bottle/vodka/badminka{ pixel_x = 8; pixel_y = 7 }, @@ -32456,7 +32451,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -7 }, /obj/structure/curtain/black{ @@ -32763,9 +32758,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen{ req_access = null }, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/structure/curtain/black{ pixel_y = 32; anchored = 1 @@ -33037,7 +33032,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/food/snacks/hotdog, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "wVB" = ( @@ -33780,7 +33775,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake, +/obj/item/food/snacks/sliceable/birthdaycake, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "xpi" = ( @@ -33971,7 +33966,7 @@ /area/centcom/ss220/command) "xtE" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/bottle/wine{ pixel_x = -5; pixel_y = 6 }, diff --git a/code/__DEFINES/_tgs_defines.dm b/code/__DEFINES/_tgs_defines.dm index 4aa8662ec4ca..b8ec5f16be5d 100644 --- a/code/__DEFINES/_tgs_defines.dm +++ b/code/__DEFINES/_tgs_defines.dm @@ -3,7 +3,7 @@ #define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) #define TGS_READ_GLOBAL(Name) GLOB.##Name #define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value -#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "
Host Announcement: [html_encode(##message)]
") +#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "
Host Announcement: [html_encode(##message)]
") #define TGS_INFO_LOG(message) log_tgs(message, "INF") #define TGS_WARNING_LOG(message) log_tgs(message, "WRN") #define TGS_ERROR_LOG(message) log_tgs(message, "ERR") diff --git a/code/__DEFINES/access_defines.dm b/code/__DEFINES/access_defines.dm index d70c203f562c..a897dba5de26 100644 --- a/code/__DEFINES/access_defines.dm +++ b/code/__DEFINES/access_defines.dm @@ -65,7 +65,6 @@ #define ACCESS_XENOARCH 65 #define ACCESS_PARAMEDIC 66 #define ACCESS_BLUESHIELD 67 -#define ACCESS_SALVAGE_CAPTAIN 69 // Salvage ship captain's quarters // #define ACCESS_MECHANIC 70 // AA07 2021-10-02 - Removed: Kept for history sake // #define ACCESS_PILOT 71 // AA07 2021-10-02 - Removed: Kept for history sake #define ACCESS_NTREP 73 @@ -73,6 +72,8 @@ #define ACCESS_MINISAT 75 #define ACCESS_MINERAL_STOREROOM 76 #define ACCESS_NETWORK 77 +#define ACCESS_CARGO_BAY 78 +#define ACCESS_SUPPLY_SHUTTLE 79 #define ACCESS_WEAPONS 99 //Weapon authorization for secbots diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm deleted file mode 100644 index 8b137891791f..000000000000 --- a/code/__DEFINES/antagonists.dm +++ /dev/null @@ -1 +0,0 @@ - diff --git a/code/__DEFINES/asset_defines.dm b/code/__DEFINES/asset_defines.dm new file mode 100644 index 000000000000..6ec6d6052691 --- /dev/null +++ b/code/__DEFINES/asset_defines.dm @@ -0,0 +1,8 @@ +/// Get html to load a url. +/// for use inside of browse() calls to html assets that might be loaded on a cdn. +#define URL2HTMLLOADER(url) {""} + +/// Generate a filename for this asset +/// The same asset will always lead to the same asset name +/// Generated names do not include file extension. +#define GENERATE_ASSET_NAME(file) "asset.[md5(fcopy_rsc(file))]" diff --git a/code/__DEFINES/atmospherics_defines.dm b/code/__DEFINES/atmospherics_defines.dm index 6ebab8f8b262..24f271ed8c4a 100644 --- a/code/__DEFINES/atmospherics_defines.dm +++ b/code/__DEFINES/atmospherics_defines.dm @@ -82,6 +82,7 @@ #define BODYTEMP_NORMAL 310.15 //The natural temperature for a body #define BODYTEMP_AUTORECOVERY_DIVISOR 12 //This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive. +#define BODYTEMP_AUTORECOVERY_LOW 2 //This is the divisor that handles how much you go back to your preferred body temperature, between the cold and hot damaging limits. The higher the number, the slower the recovery. #define BODYTEMP_AUTORECOVERY_MINIMUM 10 //Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50. #define BODYTEMP_COLD_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster. #define BODYTEMP_HEAT_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster. diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm new file mode 100644 index 000000000000..149f5d856988 --- /dev/null +++ b/code/__DEFINES/chat.dm @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// How many chat payloads to keep in history +#define CHAT_RELIABILITY_HISTORY_SIZE 5 +/// How many resends to allow before giving up +#define CHAT_RELIABILITY_MAX_RESENDS 3 + +#define MESSAGE_TYPE_SYSTEM "system" +#define MESSAGE_TYPE_LOCALCHAT "localchat" +#define MESSAGE_TYPE_RADIO "radio" +#define MESSAGE_TYPE_INFO "info" +#define MESSAGE_TYPE_WARNING "warning" +#define MESSAGE_TYPE_DEADCHAT "deadchat" +#define MESSAGE_TYPE_OOC "ooc" +#define MESSAGE_TYPE_ADMINPM "adminpm" +#define MESSAGE_TYPE_COMBAT "combat" +#define MESSAGE_TYPE_ADMINCHAT "adminchat" +#define MESSAGE_TYPE_MENTORCHAT "mentorchat" +#define MESSAGE_TYPE_EVENTCHAT "eventchat" +#define MESSAGE_TYPE_ADMINLOG "adminlog" +#define MESSAGE_TYPE_ATTACKLOG "attacklog" +#define MESSAGE_TYPE_DEBUG "debug" diff --git a/code/__DEFINES/chat_box_defines.dm b/code/__DEFINES/chat_box_defines.dm index f2ffff8aa07c..40a1c491cf37 100644 --- a/code/__DEFINES/chat_box_defines.dm +++ b/code/__DEFINES/chat_box_defines.dm @@ -2,6 +2,7 @@ #define chat_box_examine(str) ("
" + str + "
") #define chat_box_red(str) ("
" + str + "
") #define chat_box_green(str) ("
" + str + "
") +#define chat_box_purple(str) ("
" + str + "
") #define chat_box_notice(str) ("
" + str + "
") #define chat_box_healthscan(str) ("
" + str + "
") #define chat_box_notice_thick(str) ("
" + str + "
") diff --git a/code/__DEFINES/color_defines.dm b/code/__DEFINES/color_defines.dm index 2f8c847c66ee..98aa5963c3bd 100644 --- a/code/__DEFINES/color_defines.dm +++ b/code/__DEFINES/color_defines.dm @@ -129,6 +129,11 @@ #define COLOR_THEME_OPERATIVE "#B8221F" #define COLOR_THEME_GLASS "#75A4C4" #define COLOR_THEME_CLOCKWORK "#CFBA47" +// SS220 ADDITION - START +#define COLOR_THEME_VAPORWAVE "#bc3ce3" +#define COLOR_THEME_DETECTIVE "#c7b08b" +#define COLOR_THEME_TRASENKNOX "#3ce375" +// SS220 ADDITION - END // Color matrix utilities #define COLOR_MATRIX_ADD(C) list(COLOR_RED, COLOR_GREEN, COLOR_BLUE, C) diff --git a/code/__DEFINES/combat_defines.dm b/code/__DEFINES/combat_defines.dm index b84987651527..e25451497205 100644 --- a/code/__DEFINES/combat_defines.dm +++ b/code/__DEFINES/combat_defines.dm @@ -53,6 +53,7 @@ //Health Defines #define HEALTH_THRESHOLD_CRIT 0 +#define HEALTH_THRESHOLD_KNOCKOUT -50 #define HEALTH_THRESHOLD_DEAD -100 //Grab levels diff --git a/code/__DEFINES/construction_defines.dm b/code/__DEFINES/construction_defines.dm index 9612ed7f2c1f..3264c0e96165 100644 --- a/code/__DEFINES/construction_defines.dm +++ b/code/__DEFINES/construction_defines.dm @@ -2,14 +2,14 @@ //Defines for construction states -//girder construction states +/// girder construction states #define GIRDER_NORMAL 0 #define GIRDER_REINF_STRUTS 1 #define GIRDER_REINF 2 #define GIRDER_DISPLACED 3 #define GIRDER_DISASSEMBLED 4 -//rwall construction states +/// rwall construction states #define RWALL_INTACT 0 #define RWALL_SUPPORT_LINES 1 #define RWALL_COVER 2 @@ -18,31 +18,31 @@ #define RWALL_SUPPORT_RODS 5 #define RWALL_SHEATH 6 -//window construction states +/// window construction states #define WINDOW_OUT_OF_FRAME 0 #define WINDOW_IN_FRAME 1 #define WINDOW_SCREWED_TO_FRAME 2 -//airlock assembly construction states +/// airlock assembly construction states #define AIRLOCK_ASSEMBLY_NEEDS_WIRES 0 #define AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS 1 #define AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER 2 -//used by airlocks and airlock wires. +/// used by airlocks and airlock wires. #define AICONTROLDISABLED_OFF 0 // Silicons can control the airlock normally. #define AICONTROLDISABLED_ON 1 // Silicons cannot control the airlock, but can hack the airlock. #define AICONTROLDISABLED_BYPASS 2 // Silicons can control the airlock because they succeeded on the hack #define AICONTROLDISABLED_PERMA 3 // Wire cutting an airlock on AICONTROLDISABLED_BYPASS toggles it between AICONTROLDISABLED_BYPASS and this. -//plastic flaps construction states +/// plastic flaps construction states #define PLASTIC_FLAPS_NORMAL 0 #define PLASTIC_FLAPS_DETACHED 1 -//Mounted Frames BITMASK +/// Mounted Frames BITMASK #define MOUNTED_FRAME_SIMFLOOR (1 << 0) #define MOUNTED_FRAME_NOSPACE (1 << 1) -//ai core defines +/// ai core defines #define EMPTY_CORE 0 #define CIRCUIT_CORE 1 #define SCREWED_CORE 2 @@ -50,31 +50,38 @@ #define GLASS_CORE 4 #define AI_READY_CORE 5 -//other construction-related things +/// other construction-related things -//windows affected by nar'sie turn this color. +/// windows affected by nar'sie turn this color. #define NARSIE_WINDOW_COLOUR "#7D1919" -//let's just pretend fulltile windows being children of border windows is fine +/// let's just pretend fulltile windows being children of border windows is fine #define FULLTILE_WINDOW_DIR NORTHEAST -//Material defines, for determining how much of a given material an item contains -#define MAT_METAL "$metal" -#define MAT_GLASS "$glass" -#define MAT_SILVER "$silver" -#define MAT_GOLD "$gold" -#define MAT_DIAMOND "$diamond" -#define MAT_URANIUM "$uranium" -#define MAT_PLASMA "$plasma" -#define MAT_BLUESPACE "$bluespace" -#define MAT_BANANIUM "$bananium" -#define MAT_TRANQUILLITE "$tranquillite" -#define MAT_TITANIUM "$titanium" -#define MAT_BIOMASS "$biomass" -#define MAT_PLASTIC "$plastic" -//The amount of materials you get from a sheet of mineral like iron/diamond/glass etc +/// Range of a tint control button, that works only in its area. +#define TINT_CONTROL_RANGE_AREA 0 + +/// ID of a tint control button with no group specified, so it controls only windows also with no group specified ('null-like' id). +#define TINT_CONTROL_GROUP_NONE 0 + +/// Material defines, for determining how much of a given material an item contains +#define MAT_METAL "metal" +#define MAT_GLASS "glass" +#define MAT_SILVER "silver" +#define MAT_GOLD "gold" +#define MAT_DIAMOND "diamond" +#define MAT_URANIUM "uranium" +#define MAT_PLASMA "plasma" +#define MAT_BLUESPACE "bluespace" +#define MAT_BANANIUM "bananium" +#define MAT_TRANQUILLITE "tranquillite" +#define MAT_TITANIUM "titanium" +#define MAT_BIOMASS "biomass" +#define MAT_PLASTIC "plastic" + +/// The amount of materials you get from a sheet of mineral like iron/diamond/glass etc #define MINERAL_MATERIAL_AMOUNT 2000 -//The maximum size of a stack object. +/// The maximum size of a stack object. #define MAX_STACK_SIZE 50 -//maximum amount of cable in a coil +/// maximum amount of cable in a coil #define MAXCOIL 30 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index a64306a38d1d..f680b67faaba 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -157,9 +157,6 @@ ///from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width) #define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" #define COMPONENT_RAD_WAVE_HANDLED (1<<0) -///from internal loop in atom/movable/proc/CanReach(): (list/next) -#define COMSIG_ATOM_CANREACH "atom_can_reach" - #define COMPONENT_BLOCK_REACH (1<<0) ///from base of atom/screwdriver_act(): (mob/living/user, obj/item/I) #define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" ///from base of atom/wrench_act(): (mob/living/user, obj/item/I) @@ -525,7 +522,12 @@ #define COMSIG_CARBON_UPDATE_HANDCUFFED "carbon_update_handcuff" /// From /mob/living/carbon/regenerate_icons() #define COMSIG_CARBON_REGENERATE_ICONS "carbon_regen_icons" - +/// From /mob/living/carbon/enter_stamcrit() +#define COMSIG_CARBON_ENTER_STAMINACRIT "carbon_enter_staminacrit" +/// From /mob/living/carbon/update_stamina() +#define COMSIG_CARBON_EXIT_STAMINACRIT "carbon_exit_staminacrit" +/// From /mob/living/carbon/handle_status_effects() +#define COMSIG_CARBON_STAMINA_REGENERATED "carbon_stamina_regenerated" // /mob/living/simple_animal/hostile signals #define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" @@ -702,6 +704,9 @@ ///called in /obj/item/gun/process_fire (user, target, params, zone_override) #define COMSIG_MOB_FIRED_GUN "mob_fired_gun" +///called in /obj/item/gun/process_fire (user, target) +#define COMSIG_GUN_FIRED "gun_fired" + // /obj/item/grenade signals ///called in /obj/item/gun/process_fire (user, target, params, zone_override) @@ -765,6 +770,10 @@ ///From mob/living/carbon/human/attackedby(): (mob/living/carbon/human/attacker). Also found on species/disarm and species/harm #define COMSIG_HUMAN_ATTACKED "human_attacked" +///from /mob/living/carbon/human/proc/check_shields(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) +#define COMSIG_HUMAN_CHECK_SHIELDS "human_check_shields" + #define SHIELD_BLOCK (1<<0) + // /datum/species signals ///from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species) @@ -796,7 +805,7 @@ //Food -///from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder) +///from base of obj/item/food/snacks/attack(): (mob/living/eater, mob/feeder) #define COMSIG_FOOD_EATEN "food_eaten" //Reagent diff --git a/code/__DEFINES/inventory_defines.dm b/code/__DEFINES/inventory_defines.dm index 95ab8b6ae8d1..546a9a664038 100644 --- a/code/__DEFINES/inventory_defines.dm +++ b/code/__DEFINES/inventory_defines.dm @@ -5,3 +5,8 @@ #define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits #define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons #define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe + +//Inventory depth: limits how many nested storage items you can access directly. +//1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc +#define INVENTORY_DEPTH 3 +#define STORAGE_VIEW_DEPTH 2 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 3242f672b982..cab2662a7ec6 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -27,6 +27,8 @@ #define isaliensentinel(A) (istype(A, /mob/living/carbon/alien/humanoid/sentinel)) +#define isalienqueen(A) (istype(A, /mob/living/carbon/alien/humanoid/queen)) + // Simple animals #define issimple_animal(A) (istype(A, /mob/living/simple_animal)) @@ -119,7 +121,7 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list( #define isradio(A) istype(A, /obj/item/radio) #define ispill(A) istype(A, /obj/item/reagent_containers/pill) #define ispatch(A) istype(A, /obj/item/reagent_containers/patch) -#define isfood(A) istype(A, /obj/item/reagent_containers/food) +#define isfood(A) istype(A, /obj/item/food) // Modsuits #define ismodcontrol(A) istype(A, /obj/item/mod/control) diff --git a/code/__DEFINES/keybindings_defines.dm b/code/__DEFINES/keybindings_defines.dm index cc1c80d83c56..6568d8a45094 100644 --- a/code/__DEFINES/keybindings_defines.dm +++ b/code/__DEFINES/keybindings_defines.dm @@ -14,6 +14,8 @@ #define KB_CATEGORY_EMOTE_SILICON 14 #define KB_CATEGORY_EMOTE_ANIMAL 15 #define KB_CATEGORY_EMOTE_CUSTOM 16 +#define KB_CATEGORY_CLICK 17 +#define KB_CATEGORY_COMMUNICATION 18 #define KB_CATEGORY_UNSORTED 1000 ///Max length of a keypress command before it's considered to be a forged packet/bogus command diff --git a/code/__DEFINES/language_defines.dm b/code/__DEFINES/language_defines.dm index 2134628966db..345c73d193fc 100644 --- a/code/__DEFINES/language_defines.dm +++ b/code/__DEFINES/language_defines.dm @@ -1,13 +1,3 @@ -//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. @@ -18,6 +8,7 @@ #define NO_STUTTER 256 // No stuttering, slurring, or other speech problems #define NOBABEL 512 // Not granted by book of babel. Typically antag languages. #define NOLIBRARIAN 1024 // Flag for banning the Librarian from certain languages. (actual 1984) +#define HIVEMIND_RUNECHAT (1<<11) // Flag for letting hivemind languages have a runechat appear over the head of the recipient //Auto-accent level defines. #define AUTOHISS_OFF 0 diff --git a/code/__DEFINES/mappers.dm b/code/__DEFINES/mappers.dm new file mode 100644 index 000000000000..28c2977aa9ef --- /dev/null +++ b/code/__DEFINES/mappers.dm @@ -0,0 +1,21 @@ +/// Create directional subtypes for a path to simplify mapping. +#define MAPPING_DIRECTIONAL_HELPERS(path, offset_y, offset_x) ##path/directional/north {\ + name = "north bump"; \ + dir = NORTH; \ + pixel_y = offset_y; \ +} \ +##path/directional/south {\ + name = "south bump"; \ + dir = SOUTH; \ + pixel_y = -offset_y; \ +} \ +##path/directional/east {\ + name = "east bump"; \ + dir = EAST; \ + pixel_x = offset_x; \ +} \ +##path/directional/west {\ + name = "west bump"; \ + dir = WEST; \ + pixel_x = -offset_x; \ +} diff --git a/code/__DEFINES/martial_arts.dm b/code/__DEFINES/martial_arts.dm index 4eb139cc44a1..4e8111e05733 100644 --- a/code/__DEFINES/martial_arts.dm +++ b/code/__DEFINES/martial_arts.dm @@ -6,6 +6,7 @@ #define MARTIAL_COMBO_DONE_CLEAR_COMBOS 5 // If the combo should do a basic hit after it's done #define MARTIAL_ARTS_CANNOT_USE -1 +#define MARTIAL_ARTS_ACT_SUCCESS 1 #define MARTIAL_COMBO_STEP_HARM "Harm" #define MARTIAL_COMBO_STEP_DISARM "Disarm" diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 482bc95f622c..fc47625b19da 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -313,6 +313,23 @@ #define TRIGGER_GUARD_NONE 0 #define TRIGGER_GUARD_NORMAL 1 +// These comments mirror the below define in the order of operations to help you understand what it is doing + // Check if datum I is a mob + // If I is a mob, return the client of mob I + // Else, check to see if I is a client + // If I is a client, return I + // Else, check to see if I is a mind + // If I is a mind, try and return the mind's current mob's client + +/// Return a Client +#define CLIENT_FROM_VAR(I) (ismob(I) \ + ? I:client \ + : istype(I, /client) \ + ? I \ + : istype(I, /datum/mind \ + ? I:current?:client \ + : null)) + // Macro to get the current elapsed round time, rather than total world runtime #define ROUND_TIME (SSticker.time_game_started ? (world.time - SSticker.time_game_started) : 0) @@ -588,3 +605,5 @@ #define TS_INFESTATION_WHITE_SPIDER 3 #define TS_INFESTATION_PRINCESS_SPIDER 4 #define TS_INFESTATION_QUEEN_SPIDER 5 + +#define MAX_ALLOWED_TELEPORTS_PER_PROCESS 20 diff --git a/code/__DEFINES/mob_defines.dm b/code/__DEFINES/mob_defines.dm index de0aafa4096e..f1514f1126f0 100644 --- a/code/__DEFINES/mob_defines.dm +++ b/code/__DEFINES/mob_defines.dm @@ -11,6 +11,10 @@ #define ORGAN_BURNT (1 << 7) #define ORGAN_SALVED (1 << 8) +// Organ datum defines. Each one of these represents a slot for organ datums in internal_organ_datums +#define ORGAN_DATUM_HEART "heart" +#define ORGAN_DATUM_LUNGS "lungs" + // For limb resistance flags #define CANNOT_BREAK (1 << 0) #define CANNOT_DISMEMBER (1 << 1) diff --git a/code/__DEFINES/pipes.dm b/code/__DEFINES/pipes.dm index 92fc2f12788f..dbf877001bf8 100644 --- a/code/__DEFINES/pipes.dm +++ b/code/__DEFINES/pipes.dm @@ -11,8 +11,8 @@ #define PIPE_MVALVE 8 #define PIPE_PUMP 9 #define PIPE_SCRUBBER 10 -#define PIPE_INSULATED_STRAIGHT 11 -#define PIPE_INSULATED_BENT 12 +// #define PIPE_INSULATED_STRAIGHT 11 +// #define PIPE_INSULATED_BENT 12 #define PIPE_GAS_FILTER 13 #define PIPE_GAS_MIXER 14 #define PIPE_PASSIVE_GATE 15 diff --git a/code/__DEFINES/preferences_defines.dm b/code/__DEFINES/preferences_defines.dm index 8272092d330d..15d4b3dba673 100644 --- a/code/__DEFINES/preferences_defines.dm +++ b/code/__DEFINES/preferences_defines.dm @@ -1,73 +1,76 @@ //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_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_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 // obsolete -#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_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 // obsolete +#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 // Defunct as of 2023-03-12 -#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_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 // Defunct as of 2024-01-29 // #define PREFTOGGLE_DISABLE_KARMA 262144 // Defunct as of 2023-03-12 -#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 // Made obsolete with key bindings +#define PREFTOGGLE_CHAT_NO_MENTORTICKETLOGS 524288 +// #define PREFTOGGLE_TYPING_ONCE 1048576 // Defunct as of 2024-01-29 +#define PREFTOGGLE_AMBIENT_OCCLUSION 2097152 +#define PREFTOGGLE_CHAT_GHOSTPDA 4194304 +// #define PREFTOGGLE_NUMPAD_TARGET 8388608 // Made obsolete with key bindings -#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. +#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. -#define TOGGLES_DEFAULT (PREFTOGGLE_CHAT_OOC|PREFTOGGLE_CHAT_DEAD|PREFTOGGLE_CHAT_GHOSTEARS|PREFTOGGLE_CHAT_GHOSTSIGHT|PREFTOGGLE_CHAT_PRAYER|PREFTOGGLE_CHAT_RADIO|PREFTOGGLE_CHAT_DEBUGLOGS|PREFTOGGLE_CHAT_LOOC|PREFTOGGLE_MEMBER_PUBLIC|PREFTOGGLE_DONATOR_PUBLIC|PREFTOGGLE_AMBIENT_OCCLUSION|PREFTOGGLE_CHAT_GHOSTPDA|PREFTOGGLE_NUMPAD_TARGET) +#define TOGGLES_DEFAULT (PREFTOGGLE_CHAT_OOC|PREFTOGGLE_CHAT_DEAD|PREFTOGGLE_CHAT_GHOSTEARS|PREFTOGGLE_CHAT_GHOSTSIGHT|PREFTOGGLE_CHAT_PRAYER|PREFTOGGLE_CHAT_RADIO|PREFTOGGLE_CHAT_DEBUGLOGS|PREFTOGGLE_CHAT_LOOC|PREFTOGGLE_MEMBER_PUBLIC|PREFTOGGLE_DONATOR_PUBLIC|PREFTOGGLE_AMBIENT_OCCLUSION|PREFTOGGLE_CHAT_GHOSTPDA) // toggles_2 variables. These MUST be prefixed with PREFTOGGLE_2 -#define PREFTOGGLE_2_RANDOMSLOT (1<<0) // 1 -#define PREFTOGGLE_2_FANCYUI (1<<1) // 2 -#define PREFTOGGLE_2_ITEMATTACK (1<<2) // 4 -#define PREFTOGGLE_2_WINDOWFLASHING (1<<3) // 8 -#define PREFTOGGLE_2_ANON (1<<4) // 16 -#define PREFTOGGLE_2_AFKWATCH (1<<5) // 32 -#define PREFTOGGLE_2_RUNECHAT (1<<6) // 64 -#define PREFTOGGLE_2_DEATHMESSAGE (1<<7) // 128 -#define PREFTOGGLE_2_EMOTE_BUBBLE (1<<8) // 256 +#define PREFTOGGLE_2_RANDOMSLOT (1<<0) // 1 +#define PREFTOGGLE_2_FANCYUI (1<<1) // 2 +#define PREFTOGGLE_2_ITEMATTACK (1<<2) // 4 +#define PREFTOGGLE_2_WINDOWFLASHING (1<<3) // 8 +#define PREFTOGGLE_2_ANON (1<<4) // 16 +#define PREFTOGGLE_2_AFKWATCH (1<<5) // 32 +#define PREFTOGGLE_2_RUNECHAT (1<<6) // 64 +#define PREFTOGGLE_2_DEATHMESSAGE (1<<7) // 128 +// #define PREFTOGGLE_2_EMOTE_BUBBLE (1<<8) // 256 - Defunct as of 2024-01-29 // Yes I know this being an "enable to disable" is misleading, but it avoids having to tweak all existing pref entries -#define PREFTOGGLE_2_REVERB_DISABLE (1<<9) // 512 -#define PREFTOGGLE_2_FORCE_WHITE_RUNECHAT (1<<10) // 1024 -#define PREFTOGGLE_2_SIMPLE_STAT_PANEL (1<<11) // 2048 -#define PREFTOGGLE_2_SEE_ITEM_OUTLINES (1<<12) // 4096 -#define PREFTOGGLE_2_HIDE_ITEM_TOOLTIPS (1<<13) // 8192 -#define PREFTOGGLE_2_THOUGHT_BUBBLE (1<<14) // 16384 -#define PREFTOGGLE_2_MC_TABS (1<<15) // 32768 -#define PREFTOGGLE_2_DANCE_DISCO (1<<16) // 65536 -#define PREFTOGGLE_2_MOD_ACTIVATION_METHOD (1<<17) // 131072 -#define PREFTOGGLE_2_PARALLAX_IN_DARKNESS (1<<18) // 262144 -#define PREFTOGGLE_2_DISABLE_TGUI_LISTS (1<<19) // 524288 - -#define TOGGLES_2_TOTAL 1048575 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. - -#define TOGGLES_2_DEFAULT (PREFTOGGLE_2_FANCYUI|PREFTOGGLE_2_ITEMATTACK|PREFTOGGLE_2_WINDOWFLASHING|PREFTOGGLE_2_RUNECHAT|PREFTOGGLE_2_DEATHMESSAGE|PREFTOGGLE_2_EMOTE_BUBBLE|PREFTOGGLE_2_SEE_ITEM_OUTLINES|PREFTOGGLE_2_THOUGHT_BUBBLE|PREFTOGGLE_2_DANCE_DISCO|PREFTOGGLE_2_MOD_ACTIVATION_METHOD) +#define PREFTOGGLE_2_REVERB_DISABLE (1<<9) // 512 +#define PREFTOGGLE_2_FORCE_WHITE_RUNECHAT (1<<10) // 1024 +#define PREFTOGGLE_2_SIMPLE_STAT_PANEL (1<<11) // 2048 +#define PREFTOGGLE_2_SEE_ITEM_OUTLINES (1<<12) // 4096 +#define PREFTOGGLE_2_HIDE_ITEM_TOOLTIPS (1<<13) // 8192 +#define PREFTOGGLE_2_THOUGHT_BUBBLE (1<<14) // 16384 +#define PREFTOGGLE_2_MC_TABS (1<<15) // 32768 +#define PREFTOGGLE_2_DANCE_DISCO (1<<16) // 65536 +#define PREFTOGGLE_2_MOD_ACTIVATION_METHOD (1<<17) // 131072 +#define PREFTOGGLE_2_PARALLAX_IN_DARKNESS (1<<18) // 262144 +#define PREFTOGGLE_2_DISABLE_TGUI_INPUT (1<<19) // 524288 +#define PREFTOGGLE_2_ENABLE_TGUI_SAY_LIGHT_MODE (1<<20) // 1048576 +#define PREFTOGGLE_2_SWAP_INPUT_BUTTONS (1<<21) // 2097152 +#define PREFTOGGLE_2_LARGE_INPUT_BUTTONS (1<<22) // 4194304 + +#define TOGGLES_2_TOTAL 8388607 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. + +#define TOGGLES_2_DEFAULT (PREFTOGGLE_2_FANCYUI|PREFTOGGLE_2_ITEMATTACK|PREFTOGGLE_2_WINDOWFLASHING|PREFTOGGLE_2_RUNECHAT|PREFTOGGLE_2_DEATHMESSAGE|PREFTOGGLE_2_SEE_ITEM_OUTLINES|PREFTOGGLE_2_THOUGHT_BUBBLE|PREFTOGGLE_2_DANCE_DISCO|PREFTOGGLE_2_MOD_ACTIVATION_METHOD|PREFTOGGLE_2_SWAP_INPUT_BUTTONS|PREFTOGGLE_2_LARGE_INPUT_BUTTONS) // Sanity checks #if TOGGLES_TOTAL > 16777215 @@ -125,10 +128,11 @@ #define MAX_SAVE_SLOTS 30 // Save slots for regular players #define MAX_SAVE_SLOTS_MEMBER 30 // Save slots for BYOND members -#define TAB_CHAR 0 -#define TAB_GAME 1 -#define TAB_GEAR 2 -#define TAB_KEYS 3 +#define TAB_CHAR 0 +#define TAB_GAME 1 +#define TAB_ANTAG 2 +#define TAB_GEAR 3 +#define TAB_KEYS 4 // Colourblind modes #define COLOURBLIND_MODE_NONE "None" diff --git a/code/__DEFINES/sound_defines.dm b/code/__DEFINES/sound_defines.dm index 1f64c9a9c78a..262f2a600f69 100644 --- a/code/__DEFINES/sound_defines.dm +++ b/code/__DEFINES/sound_defines.dm @@ -11,10 +11,11 @@ #define CHANNEL_ASH_STORM 1015 #define CHANNEL_RADIO_NOISE 1014 // radio headset noise #define CHANNEL_BOSS_MUSIC 1013 +#define CHANNEL_GENERAL 1012 // SS220 ADDITION START -#define CHANNEL_TTS_RADIO 1012 -#define CHANNEL_TTS_LOCAL 1011 -#define CHANNEL_CINEMATIC 1010 +#define CHANNEL_TTS_RADIO 1011 +#define CHANNEL_TTS_LOCAL 1010 +#define CHANNEL_CINEMATIC 1009 // SS220 ADDITION END #define USER_VOLUME(M, C) M?.client?.prefs.get_channel_volume(C) @@ -22,7 +23,7 @@ //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1009 // SS220 EDIT +#define CHANNEL_HIGHEST_AVAILABLE 1008 #define MAX_INSTRUMENT_CHANNELS (128 * 6) diff --git a/code/__DEFINES/speech_channels.dm b/code/__DEFINES/speech_channels.dm new file mode 100644 index 000000000000..68067d21aec6 --- /dev/null +++ b/code/__DEFINES/speech_channels.dm @@ -0,0 +1,11 @@ +// Used to direct channels to speak into. +#define SAY_CHANNEL "Say" +#define RADIO_CHANNEL "Radio" +#define WHISPER_CHANNEL "Whisper" +#define ME_CHANNEL "Me" +#define OOC_CHANNEL "OOC" +#define LOOC_CHANNEL "LOOC" +#define MENTOR_CHANNEL "Mentor" +#define ADMIN_CHANNEL "Admin" +#define DSAY_CHANNEL "Dsay" + diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index addf59e2f02e..ac824022f6cf 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -3,12 +3,6 @@ #define UNCONSCIOUS 1 #define DEAD 2 -// TGUI flags -#define STATUS_INTERACTIVE 2 // GREEN Visability -#define STATUS_UPDATE 1 // ORANGE Visability -#define STATUS_DISABLED 0 // RED Visability -#define STATUS_CLOSE -1 // Close the interface - /* Shuttles */ diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index a7ee1856f94d..b903749ea310 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -60,6 +60,8 @@ #define STATUS_EFFECT_REVOLUTION_PROTECT /datum/status_effect/rev_protection +#define STATUS_EFFECT_BEARSERKER_RAGE /datum/status_effect/bearserker_rage + ///////////// // DEBUFFS // ///////////// @@ -106,6 +108,10 @@ #define STATUS_BOOKWYRM /datum/status_effect/bookwyrm +#define STATUS_EFFECT_ABDUCTOR_COOLDOWN /datum/status_effect/abductor_cooldown //warning status, prevents abductor from being recalled for 10 seconds + +#define STATUS_EFFECT_MAGIC_DISGUISE /datum/status_effect/magic_disguise + //#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse //#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured @@ -182,6 +188,8 @@ #define STATUS_EFFECT_LWAPSCOPE /datum/status_effect/lwap_scope /// This status effect allows a mob to be revived with a defibrillator. #define STATUS_EFFECT_REVIVABLE /datum/status_effect/limited_bonus/revivable +/// Causes a random safe teleport every 2 seconds for a limited time +#define STATUS_EFFECT_TELEPORT_ROULETTE /datum/status_effect/teleport_roulette /// Status effects for different actions #define STATUS_EFFECT_REMOVE_CUFFS /datum/status_effect/action_status_effect/remove_handcuffs diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 19a59ed2faf6..53962a8ee9a1 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -84,10 +84,12 @@ #define INIT_ORDER_LATE_MAPPING -40 #define INIT_ORDER_PATH -50 #define INIT_ORDER_PERSISTENCE -95 +#define INIT_ORDER_CHAT -100 // Should be last to ensure chat remains smooth during init. // Subsystem fire priority, from lowest to highest priority // If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) +#define FIRE_PRIORITY_PING 10 #define FIRE_PRIORITY_NANOMOB 10 #define FIRE_PRIORITY_NIGHTSHIFT 10 #define FIRE_PRIORITY_IDLE_NPC 10 @@ -112,6 +114,7 @@ #define FIRE_PRIORITY_MOBS 100 #define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_TICKER 200 +#define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_RUNECHAT 410 // I hate how high the fire priority on this is -aa #define FIRE_PRIORITY_OVERLAYS 500 #define FIRE_PRIORITY_DELAYED_VERBS 950 diff --git a/code/__DEFINES/tgui_defines.dm b/code/__DEFINES/tgui_defines.dm index 6257e24d9f8c..ccd8d25f6f70 100644 --- a/code/__DEFINES/tgui_defines.dm +++ b/code/__DEFINES/tgui_defines.dm @@ -1,4 +1,4 @@ -// TGUI defines +// TGUI Modal defines #define UI_MODAL_INPUT_MAX_LENGTH 1024 #define UI_MODAL_INPUT_MAX_LENGTH_NAME 64 // Names for generally anything don't go past 32, let alone 64. @@ -6,3 +6,41 @@ #define UI_MODAL_DELEGATE 2 #define UI_MODAL_ANSWER 3 #define UI_MODAL_CLOSE 4 + +/// Green eye; fully interactive +#define UI_INTERACTIVE 2 +/// Orange eye; updates but is not interactive +#define UI_UPDATE 1 +/// Red eye; disabled, does not update +#define UI_DISABLED 0 +/// UI Should close +#define UI_CLOSE -1 + +/// Maximum number of windows that can be suspended/reused +#define TGUI_WINDOW_SOFT_LIMIT 5 +/// Maximum number of open windows +#define TGUI_WINDOW_HARD_LIMIT 9 + +/// Maximum ping timeout allowed to detect zombie windows +#define TGUI_PING_TIMEOUT (4 SECONDS) +/// Used for rate-limiting to prevent DoS by excessively refreshing a TGUI window +#define TGUI_REFRESH_FULL_UPDATE_COOLDOWN (1 SECONDS) + +/// Window does not exist +#define TGUI_WINDOW_CLOSED 0 +/// Window was just opened, but is still not ready to be sent data +#define TGUI_WINDOW_LOADING 1 +/// Window is free and ready to receive data +#define TGUI_WINDOW_READY 2 + +/// Get a window id based on the provided pool index +#define TGUI_WINDOW_ID(index) "tgui-window-[index]" +/// Get a pool index of the provided window id +#define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13)) + +/// Creates a message packet for sending via output() +#define TGUI_CREATE_MESSAGE(type, payload) ( \ + url_encode(json_encode(list( \ + "type" = type, \ + "payload" = payload, \ + )))) diff --git a/code/__DEFINES/tools_defines.dm b/code/__DEFINES/tools_defines.dm index 70af463f7ddb..dff98f4bda19 100644 --- a/code/__DEFINES/tools_defines.dm +++ b/code/__DEFINES/tools_defines.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(surgery_tool_behaviors, list( //Wirecutter messages #define WIRECUTTER_SNIP_MESSAGE user.visible_message("[user] cuts the wires from [src]!", "You cut the wires from [src]!", "You hear snipping.") -#define WIRECUTTER_ATTEMPT_DISMANTLE_MESSAGE user.visible_message("[user] begins cutting [src] apart... ", "You begin cutting [src] apart...", "You hear snipping.") +#define WIRECUTTER_ATTEMPT_DISMANTLE_MESSAGE user.visible_message("[user] begins cutting [src] apart...", "You begin cutting [src] apart...", "You hear snipping.") #define WIRECUTTER_DISMANTLE_SUCCESS_MESSAGE user.visible_message("[user] cuts [src] apart!", "You cut [src] apart!", "You hear snipping.") //Welder messages and other stuff diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index de2800a7ccc8..1fdbbbaa60e2 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -40,7 +40,7 @@ GLOBAL_PROTECT(log_end) for(var/client/C in GLOB.admins) if(check_rights(R_DEBUG | R_VIEWRUNTIMES, FALSE, C.mob) && (C.prefs.toggles & PREFTOGGLE_CHAT_DEBUGLOGS)) - to_chat(C, "DEBUG: [text]") + to_chat(C, "DEBUG: [text]", MESSAGE_TYPE_DEBUG, confidential = TRUE) /proc/log_game(text) if(GLOB.configuration.logging.game_logging) @@ -149,8 +149,19 @@ GLOBAL_PROTECT(log_end) /proc/log_runtime_summary(text) rustg_log_write(GLOB.runtime_summary_log, "[text][GLOB.log_end]") -/proc/log_tgui(text) - rustg_log_write(GLOB.tgui_log, "[text][GLOB.log_end]") +/proc/log_tgui(user_or_client, text) + var/list/messages = list() + if(!user_or_client) + messages.Add("no user") + else if(ismob(user_or_client)) + var/mob/user = user_or_client + messages.Add("[user.ckey] (as [user])") + else if(isclient(user_or_client)) + var/client/client = user_or_client + messages.Add("[client.ckey]") + messages.Add(": [text]") + messages.Add("[GLOB.log_end]") + rustg_log_write(GLOB.tgui_log, messages.Join()) #ifdef REFERENCE_TRACKING /proc/log_gc(text) diff --git a/code/__HELPERS/api.dm b/code/__HELPERS/api.dm index 1a0b567e959a..9f25fe4c2a40 100644 --- a/code/__HELPERS/api.dm +++ b/code/__HELPERS/api.dm @@ -20,7 +20,7 @@ if(IsAdminAdvancedProcCall()) // Admins shouldnt fuck with this - to_chat(usr, "API interaction blocked: Advanced ProcCall detected.") + to_chat(usr, "API interaction blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to interact with the internal API via advanced proc-call") log_admin("[key_name(usr)] attempted to interact with the internal API via advanced proc-call") return diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 397c05c466c8..0ec44eb327f0 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -2,7 +2,7 @@ /proc/wrap_file(filepath) if(IsAdminAdvancedProcCall()) // Admins shouldnt fuck with this - to_chat(usr, "File load blocked: Advanced ProcCall detected.") + to_chat(usr, "File load blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to load files via advanced proc-call") log_admin("[key_name(usr)] attempted to load files via advanced proc-call") return @@ -12,7 +12,7 @@ /proc/wrap_file2text(filepath) if(IsAdminAdvancedProcCall()) // Admins shouldnt fuck with this - to_chat(usr, "File load blocked: Advanced ProcCall detected.") + to_chat(usr, "File load blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to load files via advanced proc-call") log_admin("[key_name(usr)] attempted to load files via advanced proc-call") return @@ -33,11 +33,6 @@ return text -//Sends resource files to client cache -/client/proc/getFiles() - for(var/file in args) - src << browse_rsc(file) - /client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list("txt", "log", "htm", "json")) // wow why was this ever a parameter root = "data/logs/" diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 2caf08837271..b6a7a52b5a5c 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -103,7 +103,7 @@ DEFINE_BITFIELD(smoothing_junction, list( for(var/direction in GLOB.cardinal) switch(find_type_in_direction(direction)) if(NULLTURF_BORDER) - if((smoothing_flags & SMOOTH_BORDER)) + if(smoothing_flags & SMOOTH_BORDER) . |= direction //BYOND and smooth dirs are the same for cardinals if(ADJ_FOUND) . |= direction //BYOND and smooth dirs are the same for cardinals @@ -112,7 +112,7 @@ DEFINE_BITFIELD(smoothing_junction, list( if(. & WEST_JUNCTION) switch(find_type_in_direction(NORTHWEST)) if(NULLTURF_BORDER) - if((smoothing_flags & SMOOTH_BORDER)) + if(smoothing_flags & SMOOTH_BORDER) . |= NORTHWEST_JUNCTION if(ADJ_FOUND) . |= NORTHWEST_JUNCTION @@ -120,7 +120,7 @@ DEFINE_BITFIELD(smoothing_junction, list( if(. & EAST_JUNCTION) switch(find_type_in_direction(NORTHEAST)) if(NULLTURF_BORDER) - if((smoothing_flags & SMOOTH_BORDER)) + if(smoothing_flags & SMOOTH_BORDER) . |= NORTHEAST_JUNCTION if(ADJ_FOUND) . |= NORTHEAST_JUNCTION @@ -129,7 +129,7 @@ DEFINE_BITFIELD(smoothing_junction, list( if(. & WEST_JUNCTION) switch(find_type_in_direction(SOUTHWEST)) if(NULLTURF_BORDER) - if((smoothing_flags & SMOOTH_BORDER)) + if(smoothing_flags & SMOOTH_BORDER) . |= SOUTHWEST_JUNCTION if(ADJ_FOUND) . |= SOUTHWEST_JUNCTION @@ -137,7 +137,7 @@ DEFINE_BITFIELD(smoothing_junction, list( if(. & EAST_JUNCTION) switch(find_type_in_direction(SOUTHEAST)) if(NULLTURF_BORDER) - if((smoothing_flags & SMOOTH_BORDER)) + if(smoothing_flags & SMOOTH_BORDER) . |= SOUTHEAST_JUNCTION if(ADJ_FOUND) . |= SOUTHEAST_JUNCTION diff --git a/code/__HELPERS/iconprocs.dm b/code/__HELPERS/iconprocs.dm index eb86df49e86d..067aabb188d3 100644 --- a/code/__HELPERS/iconprocs.dm +++ b/code/__HELPERS/iconprocs.dm @@ -299,3 +299,44 @@ world M.Blend("#ffffff", ICON_SUBTRACT) // apply mask Blend(M, ICON_ADD) + +// Converts an icon to base64. Operates by putting the icon in the iconCache savefile, +// exporting it as text, and then parsing the base64 from that. +// (This relies on byond automatically storing icons in savefiles as base64) +GLOBAL_DATUM_INIT(iconCache, /savefile, new /savefile("data/iconCache.sav")) + +GLOBAL_LIST_EMPTY(bicon_cache) + +/proc/icon2base64(icon/icon, iconKey = "misc") + if(!isicon(icon)) return 0 + + GLOB.iconCache[iconKey] << icon + var/iconData = GLOB.iconCache.ExportText(iconKey) + var/list/partial = splittext(iconData, "{") + return replacetext(copytext(partial[2], 3, -5), "\n", "") + +/proc/bicon(obj, use_class = 1) + var/class = use_class ? "class='icon misc'" : null + if(!obj) + return + + if(isicon(obj)) + if(!GLOB.bicon_cache["\ref[obj]"]) // Doesn't exist yet, make it. + GLOB.bicon_cache["\ref[obj]"] = icon2base64(obj) + + return "" + + // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. + var/atom/A = obj + var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" + if(!GLOB.bicon_cache[key]) // Doesn't exist, make it. + var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) + if(ishuman(obj)) // Shitty workaround for a BYOND issue. + var/icon/temp = I + I = icon() + I.Insert(temp, dir = SOUTH) + GLOB.bicon_cache[key] = icon2base64(I, key) + if(use_class) + class = "class='icon [A.icon_state]'" + + return "" diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index c4f932574a6e..812f8369e237 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -410,13 +410,6 @@ var/middle = L.len / 2 + 1 // Copy is first,second-1 return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list -//Mergsorge: uses sortAssoc() but uses the var's name specifically. This should probably be using mergeAtom() instead -/proc/sortNames(list/L) - var/list/Q = new() - for(var/atom/x in L) - Q[x.name] = x - return sortAssoc(Q) - /proc/mergeLists(list/L, list/R) var/Li=1 var/Ri=1 @@ -865,3 +858,15 @@ // Pick something else from a list than we last picked /proc/pick_excluding(list/l, exclude) return pick(l - exclude) + +///takes an input_key, as text, and the list of keys already used, outputting a replacement key in the format of "[input_key] ([number_of_duplicates])" if it finds a duplicate +///use this for lists of things that might have the same name, like mobs or objects, that you plan on giving to a player as input +/proc/avoid_assoc_duplicate_keys(input_key, list/used_key_list) + if(!input_key || !istype(used_key_list)) + return + if(used_key_list[input_key]) + used_key_list[input_key]++ + input_key = "[input_key] ([used_key_list[input_key]])" + else + used_key_list[input_key] = 1 + return input_key diff --git a/code/__HELPERS/mob_helpers.dm b/code/__HELPERS/mob_helpers.dm index 5a6fc82dc98e..81d2bd0efbeb 100644 --- a/code/__HELPERS/mob_helpers.dm +++ b/code/__HELPERS/mob_helpers.dm @@ -218,12 +218,14 @@ else return "unknown" else if(species == "Vox") switch(tone) - if(2) return "dark green" + if(2) return "plum" if(3) return "brown" if(4) return "gray" if(5) return "emerald" if(6) return "azure" - else return "green" + if(7) return "crimson" + if(8) return "nebula" + else return "lime" else return "unknown" @@ -582,7 +584,6 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker) to_chat(user, "No mob located in [A].") // Suppress the mouse macros -/client/var/next_mouse_macro_warning /mob/proc/LogMouseMacro(verbused, params) if(!client) return @@ -707,3 +708,7 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker) out_ckey = "(Disconnected)" return out_ckey + +/// rounds value to limited symbols after the period for organ damage and other values +/proc/round_health(health) + return round(health, 0.01) diff --git a/code/__HELPERS/name_helpers.dm b/code/__HELPERS/name_helpers.dm index 5f97da0fd55a..389d8a9759db 100644 --- a/code/__HELPERS/name_helpers.dm +++ b/code/__HELPERS/name_helpers.dm @@ -108,6 +108,10 @@ GLOBAL_VAR(syndicate_name) GLOBAL_VAR(syndicate_code_phrase) //Code phrase for traitors. GLOBAL_VAR(syndicate_code_response) //Code response for traitors. +//Cached regex search - for checking if codewords are used. +GLOBAL_DATUM(syndicate_code_phrase_regex, /regex) +GLOBAL_DATUM(syndicate_code_response_regex, /regex) + /* Should be expanded. How this works: @@ -122,9 +126,12 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. /N */ -/proc/generate_code_phrase()//Proc is used for phrase and response in master_controller.dm +/proc/generate_code_phrase(return_list = FALSE) // Proc is used for phrase and response in master_controller.dm - var/code_phrase = ""//What is returned when the proc finishes. + if(!return_list) + . = "" + else + . = list() var/words = pick(//How many words there will be. Minimum of two. 2, 4 and 5 have a lesser chance of being selected. 3 is the most likely. 50; 2, 200; 3, @@ -152,34 +159,34 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. switch(pick(safety))//Chance based on the safety list. if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. - switch(rand(1,2))//Mainly to add more options later. + switch(rand(1, 2)) // Mainly to add more options later. if(1) - if(names.len) - code_phrase += pick(names) + if(length(names)) + . += pick(names) if(2) - code_phrase += pick(GLOB.jobs)//Returns a job. // SS220 EDIT - ORIGINAL: (GLOB.joblist) + . += pick(GLOB.jobs)//Returns a job. // SS220 EDIT - ORIGINAL: (GLOB.joblist) safety -= 1 if(2) switch(rand(1,2))//Places or things. if(1) - code_phrase += pick(GLOB.cocktails) // SS220 EDIT - ORIGINAL: (drinks) + . += pick(GLOB.cocktails) // SS220 EDIT - ORIGINAL: (drinks) if(2) - code_phrase += pick(GLOB.locations) // SS220 EDIT - ORIGINAL: (locations) + . += pick(GLOB.locations) // SS220 EDIT - ORIGINAL: (locations) safety -= 2 if(3) - switch(rand(1,3))//Nouns, adjectives, verbs. Can be selected more than once. + switch(rand(1, 3)) // Nouns, adjectives, verbs. Can be selected more than once. if(1) - code_phrase += pick(GLOB.nouns) // SS220 EDIT - ORIGINAL: (nouns) + . += pick(GLOB.nouns) // SS220 EDIT - ORIGINAL: (nouns) if(2) - code_phrase += pick(GLOB.adjectives) + . += pick(GLOB.adjectives) if(3) - code_phrase += pick(GLOB.verbs) - if(words==1) - code_phrase += "." - else - code_phrase += ", " + . += pick(GLOB.verbs) - return code_phrase + if(!return_list) + if(words == 1) + . += "." + else + . += ", " /proc/GenerateKey() var/newKey @@ -187,89 +194,3 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") return newKey - -/* -//This proc tests the gen above. -/client/verb/test_code_phrase() - set name = "Generate Code Phrase" - set category = "Debug" - - to_chat(world, "Code Phrase is: [generate_code_phrase()]") - return - - - This was an earlier attempt at code phrase system, aside from an even earlier attempt (and failure). - This system more or less works as intended--aside from being unfinished--but it's still very predictable. - Particularly, the phrase opening statements are pretty easy to recognize and identify when metagaming. - I think the above-used method solves this issue by using words in a sequence, providing for much greater flexibility. - /N - - switch(choice) - if(1) - syndicate_code_phrase += pick("I'm looking for","Have you seen","Maybe you've seen","I'm trying to find","I'm tracking") - syndicate_code_phrase += " " - syndicate_code_phrase += pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - syndicate_code_phrase += " " - syndicate_code_phrase += pick(GLOB.last_names) - syndicate_code_phrase += "." - if(2) - syndicate_code_phrase += pick("How do I get to","How do I find","Where is","Where do I find") - syndicate_code_phrase += " " - syndicate_code_phrase += pick("Escape","Engineering","Atmos","the bridge","the brig","CentComm","the library","the chapel","a bathroom","Med Bay","Tool Storage","the escape shuttle","Robotics","a locker room","the living quarters","the gym","the autolathe","QM","the bar","the theater","the derelict") - syndicate_code_phrase += "?" - if(3) - if(prob(70)) - syndicate_code_phrase += pick("Get me","I want","I'd like","Make me") - syndicate_code_phrase += " a " - else - syndicate_code_phrase += pick("One") - syndicate_code_phrase += " " - syndicate_code_phrase += pick("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequila sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","wine","moonshine") - syndicate_code_phrase += "." - if(4) - syndicate_code_phrase += pick("I wish I was","My dad was","His mom was","Where do I find","The hero this station needs is","I'd fuck","I wouldn't trust","Someone caught","HoS caught","Someone found","I'd wrestle","I wanna kill") - syndicate_code_phrase += " [pick("a","the")] " - syndicate_code_phrase += pick("wizard","ninja","xeno","lizard","slime","monkey","syndicate","cyborg","clown","space carp","singularity","singulo","mime") - syndicate_code_phrase += "." - if(5) - syndicate_code_phrase += pick("Do we have","Is there","Where is","Where's","Who's") - syndicate_code_phrase += " " - syndicate_code_phrase += "[pick(GLOB.joblist)]" - syndicate_code_phrase += "?" - - switch(choice) - if(1) - if(prob(80)) - syndicate_code_response += pick("Try looking for them near","I they ran off to","Yes. I saw them near","Nope. I'm heading to","Try searching") - syndicate_code_response += " " - syndicate_code_response += pick("Escape","Engineering","Atmos","the bridge","the brig","CentComm","the library","the chapel","a bathroom","Med Bay","Tool Storage","the escape shuttle","Robotics","a locker room","the living quarters","the gym","the autolathe","QM","the bar","the theater","the derelict") - syndicate_code_response += "." - else if(prob(60)) - syndicate_code_response += pick("No. I'm busy, sorry.","I don't have the time.","Not sure, maybe?","There is no time.") - else - syndicate_code_response += pick("*shrug*","*smile*","*blink*","*sigh*","*laugh*","*nod*","*giggle*") - if(2) - if(prob(80)) - syndicate_code_response += pick("Go to","Navigate to","Try","Sure, run to","Try searching","It's near","It's around") - syndicate_code_response += " the " - syndicate_code_response += pick("[pick("south","north","east","west")] maitenance door","nearby maitenance","teleporter","[pick("cold","dead")] space","morgue","vacuum","[pick("south","north","east","west")] hall ","[pick("south","north","east","west")] hallway","[pick("white","black","red","green","blue","pink","purple")] [pick("rabbit","frog","lion","tiger","panther","snake","facehugger")]") - syndicate_code_response += "." - else if(prob(60)) - syndicate_code_response += pick("Try asking","Ask","Talk to","Go see","Follow","Hunt down") - syndicate_code_response += " " - if(prob(50)) - syndicate_code_response += pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - syndicate_code_response += " " - syndicate_code_response += pick(GLOB.last_names) - else - syndicate_code_response += " the " - syndicate_code_response += "[pic(GLOB.joblist)]" - syndicate_code_response += "." - else - syndicate_code_response += pick("*shrug*","*smile*","*blink*","*sigh*","*laugh*","*nod*","*giggle*") - if(3) - if(4) - if(5) - - return -*/ diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index bfa53476912c..a85939f05903 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -89,8 +89,6 @@ // Uses client.typing to check if the popup should appear or not /proc/typing_input(mob/user, message = "", title = "", default = "") - if(user.client.checkTyping()) // Prevent double windows - return null var/client/C = user.client // Save it in a var in case the client disconnects from the mob C.typing = TRUE var/msg = input(user, message, title, html_decode(default)) as text|null @@ -272,6 +270,10 @@ /proc/trim(text) return trim_left(trim_right(text)) +/// Returns a string that does not exceed max_length characters in size +/proc/trim_length(text, max_length) + return copytext_char(text, 1, max_length) + //Returns a string with the first element of the string capitalized. /proc/capitalize(t as text) return uppertext(copytext_char(t, 1, 2)) + copytext_char(t, 2) // SS220 EDIT - ORIGINAL: copytext diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm index 3f907bc09d57..b19bf436541a 100644 --- a/code/__HELPERS/trait_helpers.dm +++ b/code/__HELPERS/trait_helpers.dm @@ -226,6 +226,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai //***** MIND TRAITS *****/ #define TRAIT_HOLY "is_holy" // The mob is holy in regards to religion +#define TRAIT_TABLE_LEAP "table_leap" //***** ITEM AND MOB TRAITS *****// /// Show what machine/door wires do when held. @@ -242,6 +243,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_OBSCURED_WIRES "obscured_wires" /// Forces open doors after a delay specific to the item #define TRAIT_FORCES_OPEN_DOORS_ITEM "forces_open_doors_item_varient" +/// Makes the item no longer spit out a visible message when thrown +#define TRAIT_NO_THROWN_MESSAGE "no_message_when_thrown" /// A surgical tool; when in hand in help intent (and with a surgery in progress) won't attack the user #define TRAIT_SURGICAL "surgical_tool" @@ -305,7 +308,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" -#define TRAIT_TABLE_LEAP "table_leap" //traits that should be properly converted to genetic mutations one day #define TRAIT_LASEREYES "laser_eyes" diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index ac905dd1216a..9b8e2bb3ae4e 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -126,7 +126,7 @@ //Converts an angle (degrees) into an ss13 direction /proc/angle2dir(degree) - degree = ((degree+22.5)%365) + degree = (degree + 22.5) % 360 if(degree < 45) return NORTH if(degree < 90) return NORTHEAST if(degree < 135) return EAST @@ -209,16 +209,16 @@ return 'icons/mob/screen_white.dmi' if("Midnight") return 'icons/mob/screen_midnight.dmi' - // SS220 ADDITION START + // SS220 ADDITION - START if("Vaporwave") return 'modular_ss220/aesthetics/skin/icons/screen_vaporwave.dmi' if("Detective") return 'modular_ss220/aesthetics/skin/icons/screen_detective.dmi' - if("Trasen") + if("Trasenknox") return 'modular_ss220/aesthetics/skin/icons/screen_trasenknox.dmi' if("Clockwork") return 'modular_ss220/aesthetics/skin/icons/screen_clockwork.dmi' - // SS220 ADDITION END + // SS220 ADDITION - END else return 'icons/mob/screen_midnight.dmi' diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 751daeca3ac8..2389b37031e7 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -300,18 +300,18 @@ /proc/ionnum() return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" -//When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave. -/proc/freeborg() +// Selects an unlinked borg, used in the robot upload console +/proc/freeborg(mob/user) var/select var/list/borgs = list() for(var/mob/living/silicon/robot/A in GLOB.player_list) - if(A.stat == 2 || A.connected_ai || A.scrambledcodes || isdrone(A)) + if(A.stat == DEAD || A.connected_ai || A.scrambledcodes || isdrone(A)) continue var/name = "[A.real_name] ([A.modtype] [A.braintype])" borgs[name] = A if(length(borgs)) - select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs + select = tgui_input_list(user, "Unshackled borg signals detected:", "Borg selection", borgs) return borgs[select] //When a borg is activated, it can choose which AI it wants to be slaved to @@ -338,10 +338,12 @@ /proc/select_active_ai(mob/user) var/list/ais = active_ais() - if(length(ais)) - if(user) . = input(usr,"AI signals detected:", "AI selection") in ais - else . = pick(ais) - return . + if(!length(ais)) + return + if(user) + return tgui_input_list(user, "AI signals detected:", "AI selection", ais) + else + return pick(ais) /proc/get_sorted_mobs() var/list/old_list = getmobs() @@ -1601,7 +1603,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return closest_atom /proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types()) - if(value == FALSE) //nothing should be calling us with a number, so this is safe + if(!value) //nothing should be calling us with a number, so this is safe value = input("Enter type to find (blank for all, cancel to cancel)", "Search for type") as null|text if(isnull(value)) return @@ -1667,8 +1669,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /obj/item/reagent_containers/glass/bottle = "BOTTLE", /obj/item/reagent_containers/patch = "PATCH", /obj/item/reagent_containers/pill = "PILL", - /obj/item/reagent_containers/food/drinks = "DRINK", - /obj/item/reagent_containers/food = "FOOD", + /obj/item/reagent_containers/drinks = "DRINK", + /obj/item/food = "FOOD", /obj/item/reagent_containers/syringe = "SYRINGE", /obj/item/reagent_containers = "REAGENT_CONTAINERS", /obj/item/robot_parts = "ROBOT_PARTS", @@ -1965,6 +1967,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) */ /proc/get_channel_name(channel) switch(channel) + if(CHANNEL_GENERAL) + return "General Sounds" if(CHANNEL_LOBBYMUSIC) return "Lobby Music" if(CHANNEL_ADMIN) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 0578e08a32db..c0c2ffc27140 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -9,6 +9,8 @@ // Your data directory will grow by about a gigabyte every time you launch the server, as well as introducing potential instabilities over multiple BYOND versions. // #define ENABLE_BYOND_TRACY +// Uncomment this to enable support for multiple instances +// #define MULTIINSTANCE #ifdef CIBUILDING #define UNIT_TESTS diff --git a/code/_globalvars/lists/keybindings_lists.dm b/code/_globalvars/lists/keybindings_lists.dm index 350c5c3ec75e..72e001c87e41 100644 --- a/code/_globalvars/lists/keybindings_lists.dm +++ b/code/_globalvars/lists/keybindings_lists.dm @@ -2,6 +2,7 @@ GLOBAL_LIST_EMPTY(keybindings) GLOBAL_LIST_INIT(keybindings_groups, list( "Movement" = KB_CATEGORY_MOVEMENT, + "Communication" = KB_CATEGORY_COMMUNICATION, "Living" = KB_CATEGORY_LIVING, "General" = KB_CATEGORY_MOB, "General Emote" = KB_CATEGORY_EMOTE_GENERIC, @@ -15,6 +16,7 @@ GLOBAL_LIST_INIT(keybindings_groups, list( "Animal Emote" = KB_CATEGORY_EMOTE_ANIMAL, "Brain Emote" = KB_CATEGORY_EMOTE_BRAIN, "Alien Emote" = KB_CATEGORY_EMOTE_ALIEN, + "Click Keybinds" = KB_CATEGORY_CLICK, "Admin" = KB_CATEGORY_ADMIN, "Other" = KB_CATEGORY_UNSORTED, "Custom Emotes (Character-based)" = KB_CATEGORY_EMOTE_CUSTOM, diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 707a797c8ba5..648636a251bb 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -42,7 +42,6 @@ GLOBAL_LIST_EMPTY(global_radios) //list of all radios, across all z-levels GLOBAL_LIST_EMPTY(meteor_list) //list of all meteors GLOBAL_LIST_EMPTY(poi_list) //list of points of interest for observe/follow GLOBAL_LIST_EMPTY(active_jammers) // List of active radio jammers -GLOBAL_LIST_EMPTY(ladders) GLOBAL_LIST_EMPTY(mirrors) //list of all mirrors and mirror shields. GLOBAL_LIST_EMPTY(arc_emitters) //list of all arc emitters diff --git a/code/_globalvars/misc_globals.dm b/code/_globalvars/misc_globals.dm index db39391a7835..697445658137 100644 --- a/code/_globalvars/misc_globals.dm +++ b/code/_globalvars/misc_globals.dm @@ -56,3 +56,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/atmospherics/supermatter_cr GLOBAL_LIST_INIT(character_physiques, list("rail thin", "thin", "average", "well-built", "muscular", "overweight")) GLOBAL_LIST_INIT(character_heights, list("very short", "short", "average height", "tall", "very tall")) + +#define GLOBAL_SPARK_LIMIT 500 +/// Counter for the current amount of sparks +GLOBAL_VAR_INIT(sparks_active, 0) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 6e5ea7ed4cba..159b0cb0baa1 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -91,7 +91,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( ), /datum/mind = list( - "TRAIT_HOLY" = TRAIT_HOLY + "TRAIT_HOLY" = TRAIT_HOLY, + "TRAIT_TABLE_LEAP" = TRAIT_TABLE_LEAP ), /obj/item = list( @@ -101,7 +102,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CMAGGED" = TRAIT_CMAGGED, "TRAIT_FORCES_OPEN_DOORS" = TRAIT_FORCES_OPEN_DOORS_ITEM, "TRAIT_OBSCURED_WIRES" = TRAIT_OBSCURED_WIRES, - "TRAIT_XENO_INTERACTABLE" = TRAIT_XENO_INTERACTABLE + "TRAIT_XENO_INTERACTABLE" = TRAIT_XENO_INTERACTABLE, + "TRAIT_NO_THROWN_MESSAGE" = TRAIT_NO_THROWN_MESSAGE ), /turf = list( "bluespace_speed_trait" = TRAIT_BLUESPACE_SPEED diff --git a/code/_onclick/ai_onclick.dm b/code/_onclick/ai_onclick.dm index 093d9408014f..b821e3591dcd 100644 --- a/code/_onclick/ai_onclick.dm +++ b/code/_onclick/ai_onclick.dm @@ -35,30 +35,8 @@ if(control_disabled || stat) return - var/turf/pixel_turf = isturf(A) ? A : get_turf_pixel(A) - if(isnull(pixel_turf)) + if(!can_click_on_turf(A)) return - if(!can_see(A)) - if(isturf(A)) //On unmodified clients clicking the static overlay clicks the turf underneath - return // So there's no point messaging admins - add_attack_logs(src, src, "[key_name_admin(src)] might be running a modified client! (failed can_see on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))", ATKLOG_ALL) - var/message = "[key_name(src)] might be running a modified client! (failed can_see on AI click of [A]([COORD(pixel_turf)]))" - log_admin(message) - GLOB.discord_manager.send2discord_simple_noadmins("**\[Warning]** [key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") - - - var/turf_visible - if(pixel_turf) - turf_visible = GLOB.cameranet.checkTurfVis(pixel_turf) - if(!turf_visible) - if(istype(loc, /obj/item/aicard) && (pixel_turf in view(client.view, loc))) - turf_visible = TRUE - else - if(pixel_turf.obscured) - log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])") - add_attack_logs(src, src, "[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))", ATKLOG_ALL) - GLOB.discord_manager.send2discord_simple_noadmins("**\[Warning]** [key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") - return var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["ctrl"]) @@ -106,6 +84,41 @@ A.add_hiddenprint(src) A.attack_ai(src) +/mob/living/silicon/ai/MiddleShiftControlClickOn(atom/A) + return + +/mob/living/silicon/ai/can_use_clickbinds() + var/atom/atom_targeted = locateUID(client.moused_over) + if(atom_targeted) + return can_click_on_turf(atom_targeted) + +/mob/living/silicon/ai/proc/can_click_on_turf(atom/A) + var/turf/pixel_turf = isturf(A) ? A : get_turf_pixel(A) + if(isnull(pixel_turf)) + return + if(!can_see(A)) + if(isturf(A)) //On unmodified clients clicking the static overlay clicks the turf underneath + return // So there's no point messaging admins + add_attack_logs(src, src, "[key_name_admin(src)] might be running a modified client! (failed can_see on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))", ATKLOG_ALL) + var/message = "[key_name(src)] might be running a modified client! (failed can_see on AI click of [A]([COORD(pixel_turf)]))" + log_admin(message) + GLOB.discord_manager.send2discord_simple_noadmins("**\[Warning]** [key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") + return FALSE + + var/turf_visible + if(pixel_turf) + turf_visible = GLOB.cameranet.checkTurfVis(pixel_turf) + if(!turf_visible) + if(istype(loc, /obj/item/aicard) && (pixel_turf in view(client.view, loc))) + turf_visible = TRUE + else + if(pixel_turf.obscured) + log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])") + add_attack_logs(src, src, "[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))", ATKLOG_ALL) + GLOB.discord_manager.send2discord_simple_noadmins("**\[Warning]** [key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") + return FALSE + return TRUE + /* AI has no need for the UnarmedAttack() and RangedAttack() procs, because the AI code is not generic; attack_ai() is used instead. diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 5cbbc279a538..91e889369037 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -61,7 +61,7 @@ if(dragged && !modifiers[dragged]) return if(IsFrozen(A) && !is_admin(usr)) - to_chat(usr, "Interacting with admin-frozen players is not permitted.") + to_chat(usr, "Interacting with admin-frozen players is not permitted.") return if(modifiers["middle"] && modifiers["shift"] && modifiers["ctrl"]) MiddleShiftControlClickOn(A) @@ -129,40 +129,99 @@ return // operate three levels deep here (item in backpack in src; item in box in backpack in src, not any deeper) - var/sdepth = A.storage_depth(src) - if(A == loc || (A in loc) || (sdepth != -1 && sdepth <= 2)) - // No adjacency needed + if(A in direct_access()) if(W) W.melee_attack_chain(src, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) UnarmedAttack(A, 1) - return if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that return TRUE - // Allows you to click on a box's contents, if that box is on the ground, but no deeper than that - sdepth = A.storage_depth_turf() - if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) - if(A.Adjacent(src)) // see adjacent.dm - if(W) - W.melee_attack_chain(src, A, params) - else - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) - UnarmedAttack(A, 1) + if(can_reach(A, W)) + if(W) + W.melee_attack_chain(src, A, params) + else + if(ismob(A)) + changeNext_move(CLICK_CD_MELEE) + UnarmedAttack(A, 1) + + else + if(W) + W.afterattack(A, src, 0, params) // 0: not Adjacent + else + RangedAttack(A, params) - return - else // non-adjacent click - if(W) - W.afterattack(A,src,0,params) // 0: not Adjacent - else - RangedAttack(A, params) - return +/** + * A backwards depth-limited breadth-first-search to see if the target is + * logically "in" anything adjacent to us. + */ +/atom/movable/proc/can_reach(atom/ultimate_target, obj/item/tool, view_only = FALSE) //This might break mod storage. If it does, we hardcode mods / funny bag in here + var/list/direct_access = direct_access() + var/depth = 1 + (view_only ? STORAGE_VIEW_DEPTH : INVENTORY_DEPTH) + + var/list/closed = list() + var/list/checking = list(ultimate_target) + + while(length(checking) && depth > 0) + var/list/next = list() + --depth + + for(var/atom/target in checking) // will filter out nulls + if(closed[target] || isarea(target)) // avoid infinity situations + continue + + if(isturf(target) || isturf(target.loc) || (target in direct_access) || !(target.IsObscured()) || istype(target.loc, /obj/item/storage)) //Directly accessible atoms + if(target.Adjacent(src) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks + return TRUE + + closed[target] = TRUE + + if(!target.loc) + continue + + if(istype(target.loc, /obj/item/storage)) + next += target.loc + + checking = next + return FALSE + +/atom/movable/proc/direct_access() + return list(src, loc) + +/mob/direct_access(atom/target) + return ..() + contents + +/mob/living/direct_access(atom/target) + return ..() + get_contents() + +/proc/CheckToolReach(atom/movable/here, atom/movable/there, reach) + if(!here || !there) + return FALSE + switch(reach) + if(0, 1) + return FALSE //here.Adjacent(there) + if(2 to INFINITY) + var/obj/dummy = new(get_turf(here)) + dummy.pass_flags |= PASSTABLE + dummy.invisibility = 120 + for(var/i in 1 to reach) //Limit it to that many tries + var/turf/T = get_step(dummy, get_dir(dummy, there)) + if(dummy.can_reach(there)) + qdel(dummy) + return TRUE + if(!dummy.Move(T)) //we're blocked! + qdel(dummy) + return FALSE + qdel(dummy) + +/// Can this mob use keybinded click actions? (Altclick, Ctrlclick, ect) +/mob/proc/can_use_clickbinds() + return TRUE //Is the atom obscured by a PREVENT_CLICK_UNDER_1 object above it /atom/proc/IsObscured() diff --git a/code/_onclick/click_override.dm b/code/_onclick/click_override.dm index e1da5a150736..9bdd7691a1a4 100644 --- a/code/_onclick/click_override.dm +++ b/code/_onclick/click_override.dm @@ -33,23 +33,25 @@ to_chat(user, "You draw a bit of power from [src], you can use middle click or alt click to release the power!") /datum/middleClickOverride/badminClicker - var/summon_path = /obj/item/reagent_containers/food/snacks/cookie + var/summon_path = /obj/item/food/snacks/cookie /datum/middleClickOverride/badminClicker/onClick(atom/A, mob/living/user) var/atom/movable/newObject = new summon_path newObject.loc = get_turf(A) - to_chat(user, "You release the power you had stored up, summoning \a [newObject.name]! ") - usr.loc.visible_message("[user] waves [user.p_their()] hand and summons \a [newObject.name]") + to_chat(user, "You release the power you had stored up, summoning \a [newObject.name]!") + usr.loc.visible_message("[user] waves [user.p_their()] hand and summons \a [newObject.name]!") ..() -/datum/middleClickOverride/power_gloves +/datum/middleClickOverride/shock_implant -/datum/middleClickOverride/power_gloves/onClick(atom/A, mob/living/carbon/human/user) +/datum/middleClickOverride/shock_implant/onClick(atom/A, mob/living/carbon/human/user) if(A == user || user.a_intent == INTENT_HELP || user.a_intent == INTENT_GRAB) return FALSE if(user.incapacitated()) return FALSE - var/obj/item/clothing/gloves/color/yellow/power/P = user.gloves + var/obj/item/bio_chip/shock/P = locate() in user + if(!P) + return if(world.time < P.last_shocked + P.shock_delay) to_chat(user, "The gloves are still recharging.") return FALSE @@ -73,26 +75,31 @@ beam_from.Beam(target_atom, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 6) if(isliving(target_atom)) var/mob/living/L = target_atom - var/surplus_power = C.get_surplus() + var/powergrid = C.get_available_power() //We want available power, so the station being conservative doesn't mess with glove / dark bundle users if(user.a_intent == INTENT_DISARM) - add_attack_logs(user, L, "shocked with power gloves.") - L.adjustStaminaLoss(60) + add_attack_logs(user, L, "shocked with power bio-chip.") + L.apply_damage(60, STAMINA) L.Jitter(10 SECONDS) var/atom/throw_target = get_edge_target_turf(user, get_dir(user, get_step_away(L, user))) - L.throw_at(throw_target, surplus_power / 100000, surplus_power / 100000) //100 kW surplus throws 1 tile, 200 throws 2, etc. + L.throw_at(throw_target, powergrid / 100000, powergrid / 100000) //100 kW in grid throws 1 tile, 200 throws 2, etc. else - add_attack_logs(user, L, "electrocuted with[P.unlimited_power ? " unlimited" : null] power gloves") + add_attack_logs(user, L, "electrocuted with[P.unlimited_power ? " unlimited" : null] power bio-chip") if(P.unlimited_power) L.electrocute_act(1000, P, flags = SHOCK_NOGLOVES) //Just kill them else - electrocute_mob(L, C, P) + electrocute_mob(L, C.powernet, P) break var/list/next_shocked = list() - for(var/atom/movable/AM in orange(3, target_atom)) - if(AM == user || iseffect(AM) || isobserver(AM)) + for(var/mob/M in range(3, target_atom)) //Try to jump to a mob first + if(M == user || isobserver(M)) continue - next_shocked.Add(AM) - + next_shocked.Add(M) + break //Break this so it gets the closest, thank you + if(!length(next_shocked)) //No mob? Random bullshit go, try to get closer to a mob with luck + for(var/atom/movable/AM in orange(3, target_atom)) + if(AM == user || iseffect(AM) || isobserver(AM)) + continue + next_shocked.Add(AM) beam_from = target_atom target_atom = pick(next_shocked) A = target_atom diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 86949ea31c7a..ff5a81640882 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -95,13 +95,13 @@ return // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) - if(isturf(A) || isturf(A.loc)) - if(A.Adjacent(src)) // see adjacent.dm - W.melee_attack_chain(src, A, params) - return - else - W.afterattack(A, src, 0, params) - return + if(can_reach(A, W)) + W.melee_attack_chain(src, A, params) + return + W.afterattack(A, src, 0, params) + return + +/mob/living/silicon/robot/MiddleShiftControlClickOn(atom/A) return //Ctrl+Middle click cycles through modules diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index bca000eac812..2ff53932b0ce 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -105,6 +105,12 @@ return ..() /obj/screen/movable/action_button/hide_toggle/Click(location,control,params) + var/list/modifiers = params2list(params) + + if(modifiers["alt"]) + AltClick(usr) + return TRUE + usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden hidden = usr.hud_used.action_buttons_hidden diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 0b70b7f28f08..5385f46078cc 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -428,7 +428,7 @@ Recharging stations are available in robotics, the dormitory bathrooms, and the var/mob/living/simple_animal/diona/D = nymphs[1] D.split(TRUE) else - var/mob/living/simple_animal/diona/D = input("Select a nymph to drop:", "Nymph Dropping", nymphs[1]) as anything in nymphs + var/mob/living/simple_animal/diona/D = tgui_input_list(usr, "Select a nymph to drop:", "Nymph Dropping", nymphs) if(D in usr.contents) D.split(TRUE) @@ -652,7 +652,7 @@ so as to remain in compliance with the most up-to-date laws." success = poll.sign_up(G) if(success) // Add a small overlay to indicate we've signed up - update_signed_up_alert() + update_signed_up_alert(usr) else if(target) switch(action) if(NOTIFY_ATTACK) @@ -682,14 +682,14 @@ so as to remain in compliance with the most up-to-date laws." poll.remove_candidate(G) else poll.sign_up(G) - update_signed_up_alert() + update_signed_up_alert(G) -/obj/screen/alert/notify_action/proc/update_signed_up_alert() +/obj/screen/alert/notify_action/proc/update_signed_up_alert(mob/user) if(!signed_up_overlay) signed_up_overlay = image('icons/mob/screen_gen.dmi', icon_state = "selector") signed_up_overlay.layer = FLOAT_LAYER signed_up_overlay.plane = FLOAT_PLANE + 2 - if(usr in poll.signed_up) + if(user in poll.signed_up) overlays += signed_up_overlay else overlays -= signed_up_overlay @@ -724,8 +724,8 @@ so as to remain in compliance with the most up-to-date laws." if(!usr || !usr.client) return if(stone) - if(alert(usr, "Do you want to be captured by [stoner]'s soul stone? This will destroy your corpse and make it \ - impossible for you to get back into the game as your regular character.",, "No", "Yes") == "Yes") + if(tgui_alert(usr, "Do you want to be captured by [stoner]'s soul stone? This will destroy your corpse and make it \ + impossible for you to get back into the game as your regular character.", "Respawn", list("No", "Yes")) == "Yes") stone?.opt_in = TRUE /obj/screen/alert/notify_soulstone/Destroy() diff --git a/code/_onclick/hud/alien_hud.dm b/code/_onclick/hud/alien_hud.dm index 1dd86fe5ce5a..a541fca8b57d 100644 --- a/code/_onclick/hud/alien_hud.dm +++ b/code/_onclick/hud/alien_hud.dm @@ -16,8 +16,21 @@ /obj/screen/alien/nightvision/Click() var/mob/living/carbon/alien/humanoid/A = usr - A.nightvisiontoggle() + A.night_vision_toggle() + +/mob/living/carbon/alien/proc/night_vision_toggle() + if(!nightvision) + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + nightvision = TRUE + hud_used.nightvisionicon.icon_state = "nightvision1" + else + see_in_dark = initial(see_in_dark) + lighting_alpha = initial(lighting_alpha) + nightvision = FALSE + hud_used.nightvisionicon.icon_state = "nightvision0" + update_sight() /obj/screen/alien/plasma_display icon = 'icons/mob/screen_gen.dmi' diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 64c96c3e67e6..ec6bde573d6b 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -197,8 +197,12 @@ /obj/screen/fullscreen/cursor_catcher/proc/calculate_params() var/list/modifiers = params2list(mouse_params) - var/icon_x = text2num(modifiers["icon-x"]) - var/icon_y = text2num(modifiers["icon-y"]) + var/icon_x = text2num(LAZYACCESS(modifiers, "vis-x")) + if(isnull(icon_x)) + icon_x = text2num(LAZYACCESS(modifiers, "icon-x")) + var/icon_y = text2num(LAZYACCESS(modifiers, "vis-y")) + if(isnull(icon_y)) + icon_y = text2num(LAZYACCESS(modifiers, "icon-y")) var/our_x = round(icon_x / world.icon_size) var/our_y = round(icon_y / world.icon_size) given_turf = locate(owner.x + our_x - round(view_list[1] / 2), owner.y + our_y - round(view_list[2] / 2), owner.z) diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index fa53a7c6e0d7..75b34cfa1d3b 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -98,7 +98,7 @@ if(new_parallax_movedir == C.parallax_movedir) return var/animatedir = new_parallax_movedir - if(new_parallax_movedir == FALSE) + if(!new_parallax_movedir) var/animate_time = 0 for(var/thing in C.parallax_layers) var/obj/screen/parallax_layer/L = thing @@ -313,12 +313,17 @@ layer = 4 /obj/screen/parallax_layer/planet - icon_state = "planet" + icon_state = "planet_lava" blend_mode = BLEND_OVERLAY absolute = TRUE //Status of seperation speed = 3 layer = 30 +/obj/screen/parallax_layer/planet/Initialize(mapload) + . = ..() + if(SSmapping.lavaland_theme?.planet_icon_state) + icon_state = SSmapping.lavaland_theme.planet_icon_state + /obj/screen/parallax_layer/planet/update_status(mob/M) var/turf/T = get_turf(M) if(is_station_level(T.z)) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index abde11138fa9..85edb417fbad 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -133,7 +133,7 @@ // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. /obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - return + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) /obj/item/proc/get_clamped_volume() if(w_class) diff --git a/code/_onclick/observer_onclick.dm b/code/_onclick/observer_onclick.dm index 028419a79abd..c36c8f07a3de 100644 --- a/code/_onclick/observer_onclick.dm +++ b/code/_onclick/observer_onclick.dm @@ -62,6 +62,21 @@ /mob/dead/observer/ShiftClickOn(atom/A) examinate(A) +/mob/dead/observer/AltClickOn(atom/A) + AltClickNoInteract(src, A) + +/mob/dead/observer/AltShiftClickOn(atom/A) + return + +/mob/dead/observer/CtrlShiftClickOn(atom/A) + return + +/mob/dead/observer/MiddleShiftClickOn(atom/A) + return + +/mob/dead/observer/MiddleShiftControlClickOn(atom/A) + return + /atom/proc/attack_ghost(mob/user) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index f8193e8d4c1c..f8b8d2f535c8 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -112,6 +112,9 @@ /mob/new_player/ClickOn() return +/mob/new_player/can_use_clickbinds() + return FALSE + // pAIs are not intended to interact with anything in the world /mob/living/silicon/pai/UnarmedAttack(atom/A) return diff --git a/code/_onclick/overmind_onclick.dm b/code/_onclick/overmind_onclick.dm index 40c60b992686..ed9f06b63fc0 100644 --- a/code/_onclick/overmind_onclick.dm +++ b/code/_onclick/overmind_onclick.dm @@ -33,3 +33,15 @@ var/turf/T = get_turf(A) if(T) remove_blob(T) + +/mob/camera/blob/AltShiftClickOn(atom/A) + return AltClickOn(A) + +/mob/camera/blob/CtrlShiftClickOn(atom/A) + return CtrlClickOn(A) + +/mob/camera/blob/MiddleShiftClickOn(atom/A) + return MiddleClickOn(A) + +/mob/camera/blob/MiddleShiftControlClickOn(atom/A) + return MiddleClickOn(A) diff --git a/code/controllers/configuration/configuration_core.dm b/code/controllers/configuration/configuration_core.dm index 26d3647ae7ee..0ace31c5bd89 100644 --- a/code/controllers/configuration/configuration_core.dm +++ b/code/controllers/configuration/configuration_core.dm @@ -46,6 +46,8 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) var/datum/configuration_section/url_configuration/url /// Holder for the voting configuration datum var/datum/configuration_section/vote_configuration/vote + /// Holder for the asset cache configuration datum + var/datum/configuration_section/asset_cache_configuration/asset_cache /// Raw data. Stored here to avoid passing data between procs constantly var/list/raw_data = list() @@ -92,6 +94,7 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) system = new() url = new() vote = new() + asset_cache = new() // Load our stuff up var/config_file = "config/config.toml" @@ -129,6 +132,7 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) safe_load(system, "system_configuration") safe_load(url, "url_configuration") safe_load(vote, "voting_configuration") + safe_load(asset_cache, "asset_cache_configuration") // Proc to load up instance-specific overrides /datum/server_configuration/proc/load_overrides() diff --git a/code/controllers/configuration/sections/asset_cache_configuration.dm b/code/controllers/configuration/sections/asset_cache_configuration.dm new file mode 100644 index 000000000000..35fa4fef85d5 --- /dev/null +++ b/code/controllers/configuration/sections/asset_cache_configuration.dm @@ -0,0 +1,23 @@ +/datum/configuration_section/asset_cache_configuration + /// Type of asset transport that will be used for asset delivery. + /// Available options are "simple" or "webroot". + var/asset_transport = "simple" + /// Whether to make server passively send all browser assets to each client in the background + /// (instead of waiting for them to be needed) + var/asset_simple_preload = TRUE + /// Local folder to save assets to. + /// Assets will be saved in the format of asset.MD5HASH.EXT or in namespaces/hash/ + /// as ASSET_FILE_NAME or asset.MD5HASH.EXT + var/asset_cdn_webroot = "data/asset-store/" + /// URL the `asset_cdn_webroot` can be accessed from. + /// For best results the webserver powering this should return a long cache validity time, + /// as all assets sent via this transport use hash based urls + /// if you want to test this locally, you simpily run the `localhost-asset-webroot-server.py` python3 script + /// to host assets stored in `data/asset-store/` via http://localhost:58715/ + var/asset_cdn_url = "http://localhost:58715/" + +/datum/configuration_section/asset_cache_configuration/load_data(list/data) + CONFIG_LOAD_STR(asset_transport, data["asset_transport"]) + CONFIG_LOAD_BOOL(asset_simple_preload, data["asset_simple_preload"]) + CONFIG_LOAD_STR(asset_cdn_webroot, data["asset_cdn_webroot"]) + CONFIG_LOAD_STR(asset_cdn_url, data["asset_cdn_url"]) diff --git a/code/controllers/configuration/sections/job_configuration.dm b/code/controllers/configuration/sections/job_configuration.dm index d56faddfc749..41cbb0191466 100644 --- a/code/controllers/configuration/sections/job_configuration.dm +++ b/code/controllers/configuration/sections/job_configuration.dm @@ -1,7 +1,5 @@ /// Config holder for all job related things /datum/configuration_section/job_configuration - /// Do we want jobs to have minimal access or extra access (IE: Scientists having robotics access) - var/jobs_have_minimal_access = TRUE /// Do we want to restrict jobs based on account age var/restrict_jobs_on_account_age = FALSE /// Allow admins to bypass age-based job restrictions @@ -31,7 +29,6 @@ /datum/configuration_section/job_configuration/load_data(list/data) // Use the load wrappers here. That way the default isnt made 'null' if you comment out the config line - CONFIG_LOAD_BOOL(jobs_have_minimal_access, data["jobs_have_minimal_access"]) CONFIG_LOAD_BOOL(restrict_jobs_on_account_age, data["restrict_jobs_on_account_age"]) CONFIG_LOAD_BOOL(restrict_jobs_on_account_age_admin_bypass, data["restrict_jobs_on_account_age_admin_bypass"]) CONFIG_LOAD_BOOL(enable_exp_tracking, data["enable_exp_tracking"]) diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm index 3645cea82e83..93a1d2ce0860 100644 --- a/code/controllers/controller.dm +++ b/code/controllers/controller.dm @@ -23,5 +23,5 @@ */ /datum/controller/proc/log_startup_progress(message) Master.last_init_info = "([name]): [message]" - to_chat(world, "\[[name]] [message]") + to_chat(world, "\[[name]] [message]", MESSAGE_TYPE_DEBUG, confidential = TRUE) log_world("\[[name]] [message]") diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index d6c09473b631..8df9f1958dcf 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -41,10 +41,10 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) break else if(defcon == 1) //Exit Failsafe if we weren't able to recover the MC in the last stage log_game("FailSafe: Failed to recover MC while in emergency state. Failsafe exiting.") - message_admins("Failsafe failed critically while trying to recreate broken MC. Please manually fix the MC or reboot the server. Failsafe exiting now.") - message_admins("You can try manually calling these two procs:.") - message_admins("/proc/recover_all_SS_and_recreate_master: Most stuff should still function but expect instability/runtimes/broken stuff.") - message_admins("/proc/delete_all_SS_and_recreate_master: Most stuff will be broken but basic stuff like movement and chat should still work.") + message_admins("Failsafe failed critically while trying to recreate broken MC. Please manually fix the MC or reboot the server. Failsafe exiting now.") + message_admins("You can try manually calling these two procs:.") + message_admins("/proc/recover_all_SS_and_recreate_master: Most stuff should still function but expect instability/runtimes/broken stuff.") + message_admins("/proc/delete_all_SS_and_recreate_master: Most stuff will be broken but basic stuff like movement and chat should still work.") else if(recovery_result == -1) //Failed to recreate MC defcon-- sleep(initial(processing_interval)) //Wait a bit until the next try @@ -77,11 +77,11 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) --defcon if(2) - to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") --defcon if(1) - to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") --defcon var/rtn = Recreate_MC() if(rtn > 0) @@ -90,7 +90,7 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) to_chat(GLOB.admins, "MC restarted successfully") else if(rtn < 0) log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0") - to_chat(GLOB.admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") + to_chat(GLOB.admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again //no need to handle that specially when defcon 0 can handle it @@ -131,7 +131,7 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) to_chat(GLOB.admins, "Failsafe recovered MC while in emergency state [defcon_pretty()]") else log_game("FailSafe: Failsafe in emergency state and was unable to recreate MC while in defcon state [defcon_pretty()].") - message_admins("Failsafe in emergency state and master down, trying to recreate MC while in defcon level [defcon_pretty()] failed.") + message_admins("Failsafe in emergency state and master down, trying to recreate MC while in defcon level [defcon_pretty()] failed.") ///Recreate all SSs which will still cause data survive due to Recover(), the new Master will then find and take them from global.vars /proc/recover_all_SS_and_recreate_master() @@ -149,7 +149,7 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) Master.Initialize(10, FALSE, TRUE) //Need to manually start the MC, normally world.new would do this to_chat(GLOB.admins, "MC successfully recreated after recovering all subsystems!") else - message_admins("Failed to create new MC!") + message_admins("Failed to create new MC!") ///Delete all existing SS to basically start over /proc/delete_all_SS_and_recreate_master() diff --git a/code/controllers/master.dm b/code/controllers/master.dm index bfaae9a4d2b4..54d7c3b019b7 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -185,7 +185,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined. The following implications are now in effect: [BadBoy.offline_implications]" BadBoy.flags |= SS_NO_FIRE if(msg) - to_chat(GLOB.admins, "[msg]") + to_chat(GLOB.admins, "[msg]") log_world(msg) if(istype(Master.subsystems)) @@ -195,10 +195,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new current_runlevel = Master.current_runlevel StartProcessing(10) else - to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") + to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") Initialize(20, TRUE) - // Please don't stuff random bullshit here, // Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize() /datum/controller/master/Initialize(delay, init_sss, tgs_prime) @@ -326,7 +325,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new SS.state = SS_IDLE if((SS.flags & (SS_TICKER|SS_BACKGROUND)) == SS_TICKER) tickersubsystems += SS - timer += world.tick_lag * rand(1, 5) + // Timer subsystems aren't allowed to bunch up, so we offset them a bit + timer += world.tick_lag * rand(0, 1) SS.next_fire = timer continue @@ -401,14 +401,15 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/checking_runlevel = current_runlevel if(cached_runlevel != checking_runlevel) //resechedule subsystems + var/list/old_subsystems = current_runlevel_subsystems cached_runlevel = checking_runlevel current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] - var/stagger = world.time - for(var/I in current_runlevel_subsystems) - var/datum/controller/subsystem/SS = I - if(SS.next_fire <= world.time) - stagger += world.tick_lag * rand(1, 5) - SS.next_fire = stagger + //now we'll go through all the subsystems we want to offset and give them a next_fire + for(var/datum/controller/subsystem/SS as anything in current_runlevel_subsystems) + //we only want to offset it if it's new and also behind + if(SS.next_fire > world.time || (SS in old_subsystems)) + continue + SS.next_fire = world.time + world.tick_lag * rand(0, DS2TICKS(min(SS.wait, 2 SECONDS))) subsystems_to_check = current_runlevel_subsystems else @@ -530,7 +531,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new queue_node = queue_node.queue_next continue - if((queue_node_flags & SS_BACKGROUND)) + if(queue_node_flags & SS_BACKGROUND) if(!bg_calc) current_tick_budget = queue_priority_count_bg bg_calc = TRUE diff --git a/code/controllers/subsystem/SSair.dm b/code/controllers/subsystem/SSair.dm index 0a97e76490e5..0d4f7b8858f0 100644 --- a/code/controllers/subsystem/SSair.dm +++ b/code/controllers/subsystem/SSair.dm @@ -361,6 +361,7 @@ SUBSYSTEM_DEF(air) for(var/obj/machinery/atmospherics/A in machines_to_init) A.atmos_init() count++ + CHECK_TICK return count //this can't be done with setup_atmos_machinery() because diff --git a/code/controllers/subsystem/SSchat.dm b/code/controllers/subsystem/SSchat.dm new file mode 100644 index 000000000000..604f18c2d7c4 --- /dev/null +++ b/code/controllers/subsystem/SSchat.dm @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(chat) + name = "Chat" + flags = SS_TICKER|SS_NO_INIT + wait = 1 + priority = FIRE_PRIORITY_CHAT + init_order = INIT_ORDER_CHAT + offline_implications = "Chat will no longer function correctly. Immediate server restart recommended." + + /// Associates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() + + /// Associates a ckey with an associative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Associates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > CHAT_RELIABILITY_HISTORY_SIZE) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) + +/datum/controller/subsystem/chat/fire() + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOC(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) + return + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > CHAT_RELIABILITY_MAX_RESENDS) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) + SSblackbox.record_feedback( + "nested tally", + "chat_resend_byond_version", + 1, + list( + "[client.byond_version]", + "[client.byond_build]", + ), + ) diff --git a/code/controllers/subsystem/SSchat_pings.dm b/code/controllers/subsystem/SSchat_pings.dm deleted file mode 100644 index 24fb85d0bd87..000000000000 --- a/code/controllers/subsystem/SSchat_pings.dm +++ /dev/null @@ -1,17 +0,0 @@ -SUBSYSTEM_DEF(chat_pings) - name = "Chat Pings" - flags = SS_NO_INIT - runlevels = RUNLEVEL_INIT | RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME // ALL OF THEM - wait = 30 SECONDS // Chat pings every 30 seconds - cpu_display = SS_CPUDISPLAY_LOW - /// List of all held chat datums - var/list/datum/chatOutput/chat_datums = list() // Do NOT put this in Initialize(). You will cause issues. - -/datum/controller/subsystem/chat_pings/fire(resumed) - for(var/datum/chatOutput/CO as anything in chat_datums) - CO.updatePing() - if(MC_TICK_CHECK) - return - -/datum/controller/subsystem/chat_pings/get_stat_details() - return "P: [length(chat_datums)]" diff --git a/code/controllers/subsystem/SSdbcore.dm b/code/controllers/subsystem/SSdbcore.dm index e0dfe5c1067a..88624dc784ce 100644 --- a/code/controllers/subsystem/SSdbcore.dm +++ b/code/controllers/subsystem/SSdbcore.dm @@ -249,7 +249,7 @@ SUBSYSTEM_DEF(dbcore) */ /datum/controller/subsystem/dbcore/proc/NewQuery(sql_query, arguments) if(IsAdminAdvancedProcCall()) - to_chat(usr, "DB query blocked: Advanced ProcCall detected.") + to_chat(usr, "DB query blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to create a DB query via advanced proc-call") log_admin("[key_name(usr)] attempted to create a DB query via advanced proc-call") return FALSE @@ -386,7 +386,7 @@ SUBSYSTEM_DEF(dbcore) if(!.) SSdbcore.total_errors++ if(usr) - to_chat(usr, "A SQL error occurred during this operation, please inform an admin or a coder.") + to_chat(usr, "A SQL error occurred during this operation, please inform an admin or a coder.", MESSAGE_TYPE_ADMINLOG, confidential = TRUE) message_admins("An SQL error has occurred. Please check the server logs, with the following timestamp ID: \[[time_stamp()]]") /** diff --git a/code/controllers/subsystem/SSdebugview.dm b/code/controllers/subsystem/SSdebugview.dm index 6b145b416be3..0f973a5deb21 100644 --- a/code/controllers/subsystem/SSdebugview.dm +++ b/code/controllers/subsystem/SSdebugview.dm @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(debugview) entries += "\[Processing] Cost: [round(SSprocessing.cost, 1)]ms | P: [length(SSprocessing.processing)]" entries += "\[Projectiles] Cost: [round(SSprojectiles.cost, 1)]ms | P: [length(SSprojectiles.processing)]" entries += "\[Runechat] Cost: [round(SSrunechat.cost, 1)]ms | AM: [SSrunechat.bucket_count] | SQ: [length(SSrunechat.second_queue)]" - entries += "\[TGUI] Cost: [round(SStgui.cost, 1)]ms | P: [length(SStgui.processing_uis)]" + entries += "\[TGUI] Cost: [round(SStgui.cost, 1)]ms | P: [length(SStgui.open_uis)]]" entries += "\[Timer] Cost: [round(SStimer.cost, 1)]ms | B: [SStimer.bucket_count] | P: [length(SStimer.second_queue)] | RST: [SStimer.bucket_reset_count]" // Do some parsing to format it properly diff --git a/code/controllers/subsystem/SSghost_spawns.dm b/code/controllers/subsystem/SSghost_spawns.dm index c433765f0bc6..9811088f742d 100644 --- a/code/controllers/subsystem/SSghost_spawns.dm +++ b/code/controllers/subsystem/SSghost_spawns.dm @@ -96,7 +96,7 @@ SUBSYSTEM_DEF(ghost_spawns) if(P != P2 && P.hash == P2.hash) // If there's already a poll for an identical mob type ongoing and the client is signed up for it, sign them up for this one if(!inherited_sign_up && (M in P2.signed_up) && P.sign_up(M, TRUE)) - A.update_signed_up_alert() + A.update_signed_up_alert(M) inherited_sign_up = TRUE // This number is used to display the number of polls the alert regroups num_stack++ diff --git a/code/controllers/subsystem/SSinstancing.dm b/code/controllers/subsystem/SSinstancing.dm index 51c2532c472c..58eb372391a8 100644 --- a/code/controllers/subsystem/SSinstancing.dm +++ b/code/controllers/subsystem/SSinstancing.dm @@ -1,3 +1,4 @@ +#ifdef MULTIINSTANCE SUBSYSTEM_DEF(instancing) name = "Instancing" runlevels = RUNLEVEL_INIT | RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME @@ -182,3 +183,4 @@ SUBSYSTEM_DEF(instancing) qdel(dbq1) return null // If we are here, it means we didnt find our player on another server +#endif diff --git a/code/controllers/subsystem/SSjobs.dm b/code/controllers/subsystem/SSjobs.dm index f520b06ae41a..8c5a04e9a2c0 100644 --- a/code/controllers/subsystem/SSjobs.dm +++ b/code/controllers/subsystem/SSjobs.dm @@ -12,6 +12,7 @@ SUBSYSTEM_DEF(jobs) var/list/type_occupations = list() //Dict of all jobs, keys are types var/list/prioritized_jobs = list() // List of jobs set to priority by HoP/Captain var/list/id_change_records = list() // List of all job transfer records + var/probability_of_antag_role_restriction = 100 // Dict probability of a job rolling an antagonist role var/id_change_counter = 1 //Players who need jobs var/list/unassigned = list() @@ -24,6 +25,8 @@ SUBSYSTEM_DEF(jobs) var/late_arrivals_spawning = FALSE /// Do we spawn people drunkenly due to the party last night? var/drunken_spawning = FALSE + /// A list of minds that have failed to roll antagonist. Cleared when job selection finishes. + var/list/failed_head_antag_roll = list() /datum/controller/subsystem/jobs/Initialize() if(!length(occupations)) @@ -42,7 +45,7 @@ SUBSYSTEM_DEF(jobs) occupations = list() var/list/all_jobs = subtypesof(/datum/job) if(!all_jobs.len) - to_chat(world, "Error setting up jobs, no job datums found") + to_chat(world, "Error setting up jobs, no job datums found.") return 0 for(var/J in all_jobs) @@ -90,6 +93,8 @@ SUBSYSTEM_DEF(jobs) return FALSE if(job.barred_by_missing_limbs(player.client)) return FALSE + if(!job.is_donor_allowed(player.client)) // SS220 ADD - Donor Jobs + return FALSE var/available = latejoin ? job.is_position_available() : job.is_spawn_position_available() @@ -152,6 +157,13 @@ SUBSYSTEM_DEF(jobs) Debug("FOC incompatbile with antagonist role, Player: [player]") continue if(player.client.prefs.active_character.GetJobDepartment(job, level) & job.flag) + if(player.mind.special_role && player.mind && (job.title in SSticker.mode.single_antag_positions)) //We want to check if they want the job, before rolling the prob chance + if((player.mind in SSjobs.failed_head_antag_roll) || !prob(probability_of_antag_role_restriction)) + Debug("FOC Failed probability of getting a second antagonist position in this job, Player: [player], Job:[job.title]") + SSjobs.failed_head_antag_roll |= player.mind + continue + else + probability_of_antag_role_restriction /= 10 Debug("FOC pass, Player: [player], Level:[level]") candidates += player return candidates @@ -183,6 +195,10 @@ SUBSYSTEM_DEF(jobs) Debug("GRJ player not enough playtime, Player: [player]") continue + if(!job.is_donor_allowed(player.client)) // SS220 ADD - Donor Jobs + Debug("DO player not enough donor level, Player: [player], Job:[job.title]") + continue + if(job.barred_by_disability(player.client)) Debug("GRJ player has disability rendering them ineligible for job, Player: [player]") continue @@ -194,7 +210,13 @@ SUBSYSTEM_DEF(jobs) if(player.mind && (job.title in player.mind.restricted_roles)) Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") continue - + if(player.mind.special_role && player.mind && (job.title in SSticker.mode.single_antag_positions)) + if((player.mind in SSjobs.failed_head_antag_roll) || !prob(probability_of_antag_role_restriction)) + Debug("GRJ Failed probability of getting a second antagonist position in this job, Player: [player], Job:[job.title]") + SSjobs.failed_head_antag_roll |= player.mind + continue + else + probability_of_antag_role_restriction /= 10 if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) Debug("GRJ Random job given, Player: [player], Job: [job]") AssignRole(player, job.title) @@ -365,6 +387,10 @@ SUBSYSTEM_DEF(jobs) Debug("DO player not enough playtime, Player: [player], Job:[job.title]") continue + if(!job.is_donor_allowed(player.client)) // SS220 ADD - Donor Jobs + Debug("DO player not enough donor level, Player: [player], Job:[job.title]") + continue + if(job.barred_by_disability(player.client)) Debug("DO player has disability rendering them ineligible for job, Player: [player], Job:[job.title]") continue @@ -376,12 +402,17 @@ SUBSYSTEM_DEF(jobs) if(player.mind && (job.title in player.mind.restricted_roles)) Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") continue - // If the player wants that job on this level, then try give it to him. if(player.client.prefs.active_character.GetJobDepartment(job, level) & job.flag) - // If the job isn't filled if(job.is_spawn_position_available()) + if(player.mind.special_role && player.mind && (job.title in SSticker.mode.single_antag_positions)) //We want to check if they want the job, before rolling the prob chance + if((player.mind in SSjobs.failed_head_antag_roll) || !prob(probability_of_antag_role_restriction)) + Debug("DO Failed probability of getting a second antagonist position in this job, Player: [player], Job:[job.title]") + SSjobs.failed_head_antag_roll |= player.mind + continue + else + probability_of_antag_role_restriction /= 10 Debug("DO pass, Player: [player], Level:[level], Job:[job.title]") Debug(" - Job Flag: [job.flag] Job Department: [player.client.prefs.active_character.GetJobDepartment(job, level)] Job Current Pos: [job.current_positions] Job Spawn Positions = [job.spawn_positions]") AssignRole(player, job.title) @@ -418,6 +449,7 @@ SUBSYSTEM_DEF(jobs) unassigned -= player log_debug("Dividing Occupations took [stop_watch(watch)]s") + failed_head_antag_roll = list() return TRUE /datum/controller/subsystem/jobs/proc/AssignRank(mob/living/carbon/human/H, rank, joined_late = FALSE) @@ -519,7 +551,7 @@ SUBSYSTEM_DEF(jobs) H = new_mob if(job && H) - job.after_spawn(H) + job.after_spawn(H, joined_late) // SS220 EDIT - jobs - prisoner spawn //Gives glasses to the vision impaired if(HAS_TRAIT(H, TRAIT_NEARSIGHT)) @@ -529,8 +561,10 @@ SUBSYSTEM_DEF(jobs) if(istype(G) && !G.prescription) G.upgrade_prescription() H.update_nearsighted_effects() + if(joined_late || job.admin_only) H.create_log(MISC_LOG, "Spawned as \an [H.dna?.species ? H.dna.species : "Undefined species"] named [H]. [joined_late ? "Joined during the round" : "Roundstart joined"] as job: [rank].") + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/jobs, show_location_blurb), H.client, H.mind), 1 SECONDS) //Moment for minds to boot up / people to load in return H if(late_arrivals_spawning) H.forceMove(pick(GLOB.latejoin)) @@ -545,6 +579,7 @@ SUBSYSTEM_DEF(jobs) H.Sleeping(5 SECONDS) H.Drunk((2 / liver_multiplier) MINUTES) H.create_log(MISC_LOG, "Spawned as \an [H.dna?.species ? H.dna.species : "Undefined species"] named [H]. Roundstart joined as job: [rank].") + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/jobs, show_location_blurb), H.client, H.mind), 1 SECONDS) //Moment for minds to boot up / people to load in return H /datum/controller/subsystem/jobs/proc/LoadJobs(highpop = FALSE) //ran during round setup, reads info from jobs list @@ -616,7 +651,7 @@ SUBSYSTEM_DEF(jobs) //fuck /datum/controller/subsystem/jobs/proc/CreateMoneyAccount(mob/living/H, rank, datum/job/job) - if(!job.has_bank_account) + if(job && !job.has_bank_account) return var/starting_balance = job?.department_account_access ? COMMAND_MEMBER_STARTING_BALANCE : CREW_MEMBER_STARTING_BALANCE var/datum/money_account/account = GLOB.station_money_database.create_account(H.real_name, starting_balance, ACCOUNT_SECURITY_ID, "NAS Trurl Accounting", TRUE) diff --git a/code/controllers/subsystem/SSping.dm b/code/controllers/subsystem/SSping.dm new file mode 100644 index 000000000000..d8fda04bddd6 --- /dev/null +++ b/code/controllers/subsystem/SSping.dm @@ -0,0 +1,41 @@ +/*! + * Copyright (c) 2022 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(ping) + name = "Ping" + priority = FIRE_PRIORITY_PING + wait = 4 SECONDS + flags = SS_NO_INIT + runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Chat ping system will no longer function correctly. No immediate action is needed." + + /// List used each time SS fires to track which clients have been processed so far + var/list/current_run = list() + +/datum/controller/subsystem/ping/stat_entry() + ..("P:[length(GLOB.clients)]") + +/datum/controller/subsystem/ping/fire(resumed = FALSE) + // Prepare the new batch of clients + if(!resumed) + src.current_run = GLOB.clients.Copy() + + // De-reference the list for sanic speeds + var/list/current_run = src.current_run + + while(length(current_run)) + var/client/client = current_run[current_run.len] + current_run.len-- + + if(client?.tgui_panel?.is_ready()) + // Send a soft ping + client.tgui_panel.window.send_message("ping/soft", list( + // Slightly less than the subsystem timer (somewhat arbitrary) + // to prevent incoming pings from resetting the afk state + "afk" = client.is_afk(3.5 SECONDS), + )) + + if(MC_TICK_CHECK) + return diff --git a/code/controllers/subsystem/SStgui.dm b/code/controllers/subsystem/SStgui.dm index 8ef9384f09c3..924a5f02919b 100644 --- a/code/controllers/subsystem/SStgui.dm +++ b/code/controllers/subsystem/SStgui.dm @@ -1,311 +1,357 @@ - /** - * tgui subsystem - * - * Contains all tgui state and subsystem code. - **/ - +/** + * tgui subsystem + * + * Contains all tgui state and subsystem code. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ SUBSYSTEM_DEF(tgui) - name = "TGUI" + name = "tgui" wait = 9 flags = SS_NO_INIT priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT - offline_implications = "All TGUIs will no longer process. Shuttle call recommended." - var/list/currentrun = list() - var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key. - var/list/processing_uis = list() // A list of processing UIs, ungrouped. - var/basehtml // The HTML base used for all UIs. + /// A list of UIs scheduled to process + var/list/current_run = list() + /// A list of open UIs + var/list/open_uis = list() + /// A list of open UIs, grouped by src_object. + var/list/open_uis_by_src = list() + /// The HTML base used for all UIs. + var/basehtml /datum/controller/subsystem/tgui/PreInit() - basehtml = file2text('tgui/packages/tgui/public/tgui.html') + basehtml = file2text('tgui/public/tgui.html') + // Inject inline polyfills + var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') + polyfill = "" + basehtml = replacetextEx(basehtml, "", polyfill) /datum/controller/subsystem/tgui/Shutdown() close_all_uis() -/datum/controller/subsystem/tgui/get_stat_details() - return "P:[length(processing_uis)]" - -/datum/controller/subsystem/tgui/get_metrics() - . = ..() - var/list/cust = list() - cust["processing"] = length(processing_uis) - .["custom"] = cust +/datum/controller/subsystem/tgui/stat_entry(msg) + msg = "P:[length(open_uis)]" + return ..() - -/datum/controller/subsystem/tgui/fire(resumed = 0) +/datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) - src.currentrun = processing_uis.Copy() - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while(currentrun.len) - var/datum/tgui/ui = currentrun[currentrun.len] - currentrun.len-- + src.current_run = open_uis.Copy() + // Cache for sanic speed (lists are references anyways) + var/list/current_run = src.current_run + while(current_run.len) + var/datum/tgui/ui = current_run[current_run.len] + current_run.len-- + // TODO: Move user/src_object check to process() if(ui && ui.user && ui.src_object) ui.process() else - processing_uis.Remove(ui) + open_uis.Remove(ui) if(MC_TICK_CHECK) return /** * public * - * Get an open UI given a user, src_object, and ui_key and try to update it with data. - * Returns the found UI. + * Requests a usable tgui window from the pool. + * Returns null if pool was exhausted. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - The object/datum which owns the UI. (REQUIRED) - * * ui_key - The ui_key of the UI. (REQUIRED) - * * datum/tgui/ui - The UI to be updated, if it exists. (OPTIONAL) - * * force_open - If the UI should be re-opened instead of updated. (OPTIONAL) + * required user mob + * return datum/tgui */ -/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = FALSE) - if(isnull(ui)) // No UI was passed, so look for one. - ui = get_open_ui(user, src_object, ui_key) - - if(!isnull(ui)) - var/data = src_object.ui_data(user) // Get data from the src_object. - if(!force_open) // UI is already open; update it. - ui.push_data(data) - else // Re-open it anyways. - ui.reinitialize(null, data) - return ui // We found the UI, return it. - else - return null // We couldn't find a UI. +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) + if(!user.client) + return + var/list/windows = user.client.tgui_windows + var/window_id + var/datum/tgui_window/window + var/window_found = FALSE + // Find a usable window + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + window_id = TGUI_WINDOW_ID(i) + window = windows[window_id] + // As we are looping, create missing window datums + if(!window) + window = new(user.client, window_id, pooled = TRUE) + // Skip windows with acquired locks + if(window.locked) + continue + if(window.status == TGUI_WINDOW_READY) + return window + if(window.status == TGUI_WINDOW_CLOSED) + window.status = TGUI_WINDOW_LOADING + window_found = TRUE + break + if(!window_found) + log_tgui(user, "Error: Pool exhausted") + return + return window /** - * private + * public * - * Get an open UI given a user, src_object, and ui_key. - * Returns the found UI. + * Force closes all tgui windows. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - The object/datum which owns the UI. (REQUIRED) - * * ui_key - The ui_key of the UI. (REQUIRED) + * required user mob */ -/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key) - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return null // No UIs open. - else if(isnull(open_uis[src_object_key][ui_key]) || !islist(open_uis[src_object_key][ui_key])) - return null // No UIs open for this object. - - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) // Find UIs for this object. - if(ui.user == user) // Make sure we have the right user - return ui - - return null // Couldn't find a UI! +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) + log_tgui(user, "force_close_all_windows") + if(user.client) + user.client.tgui_windows = list() + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + var/window_id = TGUI_WINDOW_ID(i) + user << browse(null, "window=[window_id]") /** - * private + * public * - * Update all UIs attached to src_object. - * Returns the number of UIs updated. + * Force closes the tgui window by window_id. * - * * datum/src_object - The object/datum which owns the UIs. - * * update_static_data - If the static data of the `src_object` should be updated for every viewing user. + * required user mob + * required window_id string */ -/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object, update_static_data = FALSE) - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return 0 // Couldn't find any UIs for this object. - - var/update_count = 0 - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - if(update_static_data) - src_object.update_static_data(ui.user, ui, ui_key) - ui.process(force = 1) // Update the UI. - update_count++ // Count each UI we update. - return update_count +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) + log_tgui(user, "force_close_window") + // Close all tgui datums based on window_id. + for(var/datum/tgui/ui in user.tgui_open_uis) + if(ui.window && ui.window.id == window_id) + ui.close(can_be_suspended = FALSE) + // Unset machine just to be sure. + user.unset_machine() + // Close window directly just to be sure. + user << browse(null, "window=[window_id]") /** - * private + * public * - * Close all UIs attached to src_object. - * Returns the number of UIs closed. + * Try to find an instance of a UI, and push an update to it. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + * optional force_open bool If the UI should be re-opened instead of updated. * - * * datum/src_object - The object/datum which owns the UIs. + * return datum/tgui The found UI. */ -/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) - if(!src_object.unique_datum_id) // First check if the datum has an UID set - return 0 - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return 0 // Couldn't find any UIs for this object. - - var/close_count = 0 - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - ui.close() // Close the UI. - close_count++ // Count each UI we close. - return close_count +/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, datum/tgui/ui, force_open = FALSE) + // Look up a UI if it wasn't passed + if(isnull(ui)) + ui = get_open_ui(user, src_object) + // Couldn't find a UI. + if(isnull(ui)) + return + var/data = src_object.ui_data(user) // Get data from the src_object. + if(force_open) // UI is already open; update it. + ui.send_full_update(data, TRUE) + return ui // We found the UI, return it + ui.process_status() + // UI ended up with the closed status + // or is actively trying to close itself. + // FIXME: Doesn't actually fix the paper bug. + if(ui.status <= UI_CLOSE) + ui.close() + return + ui.send_update() + return ui /** + * public + * + * Get a open UI given a user and src_object. * - * Gets the amount of open UIs on an object - * Returns the number of UIs open. + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. * - * * datum/src_object - The object/datum which owns the UIs. + * return datum/tgui The found UI. */ -/datum/controller/subsystem/tgui/proc/get_open_ui_count(datum/src_object) - if(!src_object.unique_datum_id) // First check if the datum has an UID set - return 0 - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return 0 // Couldn't find any UIs for this object. - - var/open_count = 0 - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - open_count++ // Count each UI thats open +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + var/key = "[src_object.UID()]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Make sure we have the right user + if(ui.user == user) + return ui + return - return open_count +/** + * public + * + * Update all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs updated. + */ +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + var/count = 0 + var/key = "[src_object.UID()]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.process(force = TRUE) + count++ + return count +/** + * public + * + * Close all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) + . = 0 + var/key = "[src_object.UID()]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + .++ + return /** - * private + * public + * + * Close all UIs regardless of their attachment to src_object. * - * Close *ALL* UIs - * Returns the number of UIs closed. + * return int The number of UIs closed. */ /datum/controller/subsystem/tgui/proc/close_all_uis() - var/close_count = 0 - for(var/src_object_key in open_uis) - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - ui.close() // Close the UI. - close_count++ // Count each UI we close. - return close_count + var/count = 0 + for(var/key in open_uis_by_src) + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + count++ + return count /** - * private + * public * * Update all UIs belonging to a user. - * Returns the number of UIs updated. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - If provided, only update UIs belonging this src_object. (OPTIONAL) - * * ui_key - If provided, only update UIs with this UI key. (OPTIONAL) + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only update UIs belonging this src_object. + * + * return int The number of UIs updated. */ -/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null) - if(isnull(user.open_uis) || !islist(user.open_uis) || open_uis.len == 0) - return 0 // Couldn't find any UIs for this user. - - var/update_count = 0 - for(var/datum/tgui/ui in user.open_uis) - if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) - ui.process(force = 1) // Update the UI. - update_count++ // Count each UI we upadte. - return update_count +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.process(force = TRUE) + count++ + return count /** - * private + * public * * Close all UIs belonging to a user. - * Returns the number of UIs closed. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - If provided, only close UIs belonging this src_object. (OPTIONAL) - * * ui_key - If provided, only close UIs with this UI key. (OPTIONAL) + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only close UIs belonging this src_object. + * + * return int The number of UIs closed. */ -/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null) - if(isnull(user.open_uis) || !islist(user.open_uis) || open_uis.len == 0) - return 0 // Couldn't find any UIs for this user. - - var/close_count = 0 - for(var/datum/tgui/ui in user.open_uis) - if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) - ui.close() // Close the UI. - close_count++ // Count each UI we close. - return close_count +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.close() + count++ + return count /** * private * * Add a UI to the list of open UIs. * - * * datum/tgui/ui - The UI to be added. + * required ui datum/tgui The UI to be added. */ /datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) - var/src_object_key = "[ui.src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object. - else if(isnull(open_uis[src_object_key][ui.ui_key]) || !islist(open_uis[src_object_key][ui.ui_key])) - open_uis[src_object_key][ui.ui_key] = list() // Make a list for the ui_key. - - // Append the UI to all the lists. - ui.user.open_uis |= ui - var/list/uis = open_uis[src_object_key][ui.ui_key] + var/key = "[ui.src_object.UID()]" + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + open_uis_by_src[key] = list() + ui.user.tgui_open_uis |= ui + var/list/uis = open_uis_by_src[key] uis |= ui - processing_uis |= ui + open_uis |= ui /** * private * * Remove a UI from the list of open UIs. - * Returns TRUE if removed, and FALSE if not. * - * * datum/tgui/ui - The UI to be removed. + * required ui datum/tgui The UI to be removed. + * + * return bool If the UI was removed or not. */ /datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) - var/src_object_key = "[ui.src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return FALSE // It wasn't open. - else if(isnull(open_uis[src_object_key][ui.ui_key]) || !islist(open_uis[src_object_key][ui.ui_key])) - return FALSE // It wasn't open. - - processing_uis.Remove(ui) // Remove it from the list of processing UIs. - if(ui.user) // If the user exists, remove it from them too. - ui.user.open_uis.Remove(ui) - var/Ukey = ui.ui_key - var/list/uis = open_uis[src_object_key][Ukey] // Remove it from the list of open UIs. + var/key = "[ui.src_object.UID()]" + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return FALSE + // Remove it from the list of processing UIs. + open_uis.Remove(ui) + // If the user exists, remove it from them too. + if(ui.user) + ui.user.tgui_open_uis.Remove(ui) + var/list/uis = open_uis_by_src[key] uis.Remove(ui) - if(!uis.len) - var/list/uiobj = open_uis[src_object_key] - uiobj.Remove(Ukey) - if(!uiobj.len) - open_uis.Remove(src_object_key) - - return TRUE // Let the caller know we did it. + if(length(uis) == 0) + open_uis_by_src.Remove(key) + return TRUE /** * private * * Handle client logout, by closing all their UIs. - * Returns the number of UIs closed. * - * * mob/user - The mob which logged out. + * required user mob The mob which logged out. + * + * return int The number of UIs closed. */ /datum/controller/subsystem/tgui/proc/on_logout(mob/user) - return close_user_uis(user) + close_user_uis(user) /** * private * * Handle clients switching mobs, by transferring their UIs. - * Returns TRUE if the UIs were transferred, and FALSE if not. * - * * mob/source - The client's original mob. - * * mob/target - The client's new mob. + * required user source The client's original mob. + * required user target The client's new mob. + * + * return bool If the UIs were transferred. */ /datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) - if(!source || isnull(source.open_uis) || !islist(source.open_uis) || open_uis.len == 0) - return FALSE // The old mob had no open UIs. - - if(isnull(target.open_uis) || !islist(target.open_uis)) - target.open_uis = list() // Create a list for the new mob if needed. - - for(var/datum/tgui/ui in source.open_uis) - ui.user = target // Inform the UIs of their new owner. - target.open_uis.Add(ui) // Transfer all the UIs. - - source.open_uis.Cut() // Clear the old list. - return TRUE // Let the caller know we did it. + // The old mob had no open UIs. + if(length(source?.tgui_open_uis) == 0) + return FALSE + if(isnull(target.tgui_open_uis) || !istype(target.tgui_open_uis, /list)) + target.tgui_open_uis = list() + // Transfer all the UIs. + for(var/datum/tgui/ui in source.tgui_open_uis) + // Inform the UIs of their new owner. + ui.user = target + target.tgui_open_uis.Add(ui) + // Clear the old list. + source.tgui_open_uis.Cut() + return TRUE diff --git a/code/controllers/subsystem/SSthrowing.dm b/code/controllers/subsystem/SSthrowing.dm index 606c762bb10b..10944b42c338 100644 --- a/code/controllers/subsystem/SSthrowing.dm +++ b/code/controllers/subsystem/SSthrowing.dm @@ -70,6 +70,8 @@ SUBSYSTEM_DEF(throwing) var/last_move = 0 ///When this variable is false, non dense mobs will be hit by a thrown item. useful for things that you dont want to be cheesed by crawling, EG. gravitational anomalies var/dodgeable = TRUE + /// Can a thrown mob move themselves to stop the throw? + var/block_movement = TRUE /datum/thrownthing/proc/tick() var/atom/movable/AM = thrownthing diff --git a/code/controllers/subsystem/SSticker.dm b/code/controllers/subsystem/SSticker.dm index 0e99b37bcd5d..2c500571b4e1 100644 --- a/code/controllers/subsystem/SSticker.dm +++ b/code/controllers/subsystem/SSticker.dm @@ -296,9 +296,25 @@ SUBSYSTEM_DEF(ticker) // Generate code phrases and responses if(!GLOB.syndicate_code_phrase) - GLOB.syndicate_code_phrase = generate_code_phrase() + var/temp_syndicate_code_phrase = generate_code_phrase(return_list = TRUE) + + var/codewords = jointext(temp_syndicate_code_phrase, "|") + var/regex/codeword_match = new("([codewords])", "ig") + + GLOB.syndicate_code_phrase_regex = codeword_match + temp_syndicate_code_phrase = jointext(temp_syndicate_code_phrase, ", ") + GLOB.syndicate_code_phrase = temp_syndicate_code_phrase + + if(!GLOB.syndicate_code_response) - GLOB.syndicate_code_response = generate_code_phrase() + var/temp_syndicate_code_response = generate_code_phrase(return_list = TRUE) + + var/codewords = jointext(temp_syndicate_code_response, "|") + var/regex/codeword_match = new("([codewords])", "ig") + + GLOB.syndicate_code_response_regex = codeword_match + temp_syndicate_code_response = jointext(temp_syndicate_code_response, ", ") + GLOB.syndicate_code_response = temp_syndicate_code_response // Run post setup stuff mode.post_setup() @@ -699,8 +715,10 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/reboot_helper(reason, end_string, delay) // Admins delayed round end. Just alert and dont bother with anything else. if(delay_end) - to_chat(world, "An admin has delayed the round end.") + to_chat(world, "An admin has delayed the round end.") return + if(delay) + INVOKE_ASYNC(src, TYPE_PROC_REF(/datum/controller/subsystem/ticker, show_server_restart_blurb), reason) if(!isnull(delay)) // Delay time was present. Use that. @@ -709,14 +727,14 @@ SUBSYSTEM_DEF(ticker) // Use default restart timeout delay = restart_timeout - to_chat(world, "Rebooting world in [delay/10] [delay > 10 ? "seconds" : "second"]. [reason]") + to_chat(world, "Rebooting world in [delay/10] [delay > 10 ? "seconds" : "second"]. [reason]") real_reboot_time = world.time + delay UNTIL(world.time > real_reboot_time) // Hold it here // And if we re-delayed, bail again if(delay_end) - to_chat(world, "Reboot was cancelled by an admin.") + to_chat(world, "Reboot was cancelled by an admin.") return if(end_string) diff --git a/code/controllers/subsystem/SStimer.dm b/code/controllers/subsystem/SStimer.dm index 53571e6eb7d8..7e80a9c06e75 100644 --- a/code/controllers/subsystem/SStimer.dm +++ b/code/controllers/subsystem/SStimer.dm @@ -224,7 +224,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])" @@ -502,14 +502,8 @@ 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 - var/static/list/bitfield_flags = list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT", "TIMER_LOOP") - 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! [name]") + stack_trace("Bucket already joined! [getTimerInfo()]") // Check if this timed event should be diverted to the client time bucket, or the secondary queue var/list/L @@ -529,7 +523,7 @@ SUBSYSTEM_DEF(timer) if(bucket_pos < SStimer.practical_offset && timeToRun < (SStimer.head_offset + TICKS2DS(BUCKET_LEN))) WARNING("Bucket pos in past: bucket_pos = [bucket_pos] < practical_offset = [SStimer.practical_offset] \ - && timeToRun = [timeToRun] < [SStimer.head_offset + TICKS2DS(BUCKET_LEN)], Timer: [name]") + && timeToRun = [timeToRun] < [SStimer.head_offset + TICKS2DS(BUCKET_LEN)], Timer: [getTimerInfo()]") bucket_pos = SStimer.practical_offset // Recover bucket_pos to avoid timer blocking queue var/datum/timedevent/bucket_head = bucket_list[bucket_pos] @@ -550,6 +544,21 @@ 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") + 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/controllers/subsystem/non_firing/SSassets.dm b/code/controllers/subsystem/non_firing/SSassets.dm index d2c9a90217df..83bd6b5b9b5b 100644 --- a/code/controllers/subsystem/non_firing/SSassets.dm +++ b/code/controllers/subsystem/non_firing/SSassets.dm @@ -2,15 +2,38 @@ SUBSYSTEM_DEF(assets) name = "Assets" init_order = INIT_ORDER_ASSETS flags = SS_NO_FIRE + /// Contains /datum/asset_cache_item var/list/cache = list() var/list/preload = list() + var/datum/asset_transport/transport = new() -/datum/controller/subsystem/assets/Initialize() - for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple)) - var/datum/asset/A = new type() - A.register() +/datum/controller/subsystem/assets/Initialize(timeofday) + load_assets() + apply_configuration() - preload = cache.Copy() //don't preload assets generated during the round +/datum/controller/subsystem/assets/Recover() + cache = SSassets.cache + preload = SSassets.preload - for(var/client/C in GLOB.clients) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(getFilesSlow), C, preload, FALSE), 10) +/datum/controller/subsystem/assets/proc/apply_configuration(initialize_transport = TRUE) + var/newtransporttype = /datum/asset_transport + switch(GLOB.configuration.asset_cache.asset_transport) + if("webroot") + newtransporttype = /datum/asset_transport/webroot + + if(newtransporttype == transport.type) + return + + var/datum/asset_transport/newtransport = new newtransporttype + if(newtransport.validate_config()) + transport = newtransport + + if(initialize_transport) + transport.Initialize(cache) + +/datum/controller/subsystem/assets/proc/load_assets() + for(var/datum/asset/asset_to_load as anything in typesof(/datum/asset)) + if(initial(asset_to_load._abstract)) + continue + + get_asset_datum(type) diff --git a/code/controllers/subsystem/non_firing/SSchangelog.dm b/code/controllers/subsystem/non_firing/SSchangelog.dm index cfff6afee409..52b9f2004283 100644 --- a/code/controllers/subsystem/non_firing/SSchangelog.dm +++ b/code/controllers/subsystem/non_firing/SSchangelog.dm @@ -53,12 +53,6 @@ SUBSYSTEM_DEF(changelog) if(!ss_ready) return // Only return here, we dont have to worry about a queue list because this will be called from ShowChangelog() - if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) - winset(C, "rpane.changelog", "background-color=#40628a;font-color=#ffffff;font-style=none") - else - winset(C, "rpane.changelog", "background-color=none;font-style=none") - - C.prefs.lastchangelog = current_cl_timestamp var/datum/db_query/updatePlayerCLTime = SSdbcore.NewQuery( @@ -76,22 +70,12 @@ SUBSYSTEM_DEF(changelog) /datum/controller/subsystem/changelog/proc/UpdatePlayerChangelogButton(client/C) // If SQL aint even enabled, or we aint ready just set the button to default style if(!SSdbcore.IsConnected() || !ss_ready) - if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) - winset(C, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") - else - winset(C, "rpane.changelog", "background-color=none;text-color=#000000") return // If we are ready, process the button style if(C.prefs.lastchangelog != current_cl_timestamp) - winset(C, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold") + winset(C, "rpane.changelog", "border=line;font-style=bold") to_chat(C, "Changelog has changed since your last visit.") - else - if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) - winset(C, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") - else - winset(C, "rpane.changelog", "background-color=none;text-color=#000000") - /datum/controller/subsystem/changelog/proc/OpenChangelog(client/C) // If SQL isnt enabled, dont even queue them, just tell them it wont work @@ -204,10 +188,13 @@ SUBSYSTEM_DEF(changelog) return data -/datum/controller/subsystem/changelog/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/controller/subsystem/changelog/ui_state(mob/user) + return GLOB.always_state + +/datum/controller/subsystem/changelog/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChangelogView", name, 750, 800, master_ui, state) + ui = new(user, src, "ChangelogView", name) ui.set_autoupdate(FALSE) ui.open() @@ -224,13 +211,13 @@ SUBSYSTEM_DEF(changelog) if("open_pr") var/pr_num = params["pr_number"] if(GLOB.configuration.url.github_url) - if(alert("This will open PR #[pr_num] in your browser. Are you sure?", "Open PR", "Yes", "No") == "No") + if(tgui_alert(usr, "This will open PR #[pr_num] in your browser. Are you sure?", "Open PR", list("Yes", "No")) != "Yes") return // If the github URL in the config has a trailing slash, it doesnt matter here, thankfully github accepts having a double slash: https://github.com/org/repo//pull/1 var/url = "[GLOB.configuration.url.github_url]/pull/[pr_num]" usr << link(url) - return + return TRUE to_chat(usr, "The GitHub URL is not set in the server configuration. PRs cannot be opened from changelog view. Please inform the server host.") diff --git a/code/controllers/subsystem/non_firing/SSmapping.dm b/code/controllers/subsystem/non_firing/SSmapping.dm index e5c776c8ed53..def0d7fffebc 100644 --- a/code/controllers/subsystem/non_firing/SSmapping.dm +++ b/code/controllers/subsystem/non_firing/SSmapping.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(mapping) ///List of areas that exist on the station this shift var/list/existing_station_areas ///What do we have as the lavaland theme today? - var/turf/simulated/floor/lavaland_theme + var/datum/lavaland_theme/lavaland_theme ///What primary cave theme we have picked for cave generation today. var/cave_theme @@ -40,8 +40,11 @@ SUBSYSTEM_DEF(mapping) F << next_map.type /datum/controller/subsystem/mapping/Initialize() - lavaland_theme = pick(/turf/simulated/floor/lava/lava_land_surface, /turf/simulated/floor/lava/lava_land_surface/plasma, /turf/simulated/floor/chasm/straight_down/lava_land_surface) + var/datum/lavaland_theme/lavaland_theme_type = pick(subtypesof(/datum/lavaland_theme)) + ASSERT(lavaland_theme_type) + lavaland_theme = new lavaland_theme_type log_startup_progress("We're in the mood for [initial(lavaland_theme.name)] today...") //We load this first. In the event some nerd ever makes a surface map, and we don't have it in lavaland in the event lavaland is disabled. + cave_theme = pick(BLOCKED_BURROWS, CLASSIC_CAVES, DEADLY_DEEPROCK) log_startup_progress("We feel like [cave_theme] today...") // Load all Z level templates @@ -71,14 +74,8 @@ SUBSYSTEM_DEF(mapping) log_startup_progress("Populating lavaland...") var/lavaland_setup_timer = start_watch() seedRuins(list(level_name_to_num(MINING)), GLOB.configuration.ruins.lavaland_ruin_budget, /area/lavaland/surface/outdoors/unexplored, GLOB.lava_ruins_templates) - switch(lavaland_theme) - if(/turf/simulated/floor/lava/lava_land_surface) - spawn_rivers(level_name_to_num(MINING)) //Default spawn, no tweaks needed - if(/turf/simulated/floor/lava/lava_land_surface/plasma) //More rivers, smaller - spawn_rivers(level_name_to_num(MINING), nodes = 2) - spawn_rivers(level_name_to_num(MINING), nodes = 2) - if(/turf/simulated/floor/chasm/straight_down/lava_land_surface) //Thiner chasms, bridges, reaches to edge of map. - spawn_rivers(level_name_to_num(MINING), nodes = 6, turf_type = /turf/simulated/floor/lava/mapping_lava, whitelist_area = /area/lavaland/surface/outdoors, min_x = 50, min_y = 7, max_x = 250, max_y = 225, prob = 10, prob_loss = 5) + if(lavaland_theme) + lavaland_theme.setup() var/time_spent = stop_watch(lavaland_setup_timer) log_startup_progress("Successfully populated lavaland in [time_spent]s.") else @@ -129,6 +126,8 @@ SUBSYSTEM_DEF(mapping) var/num_extra_space = rand(GLOB.configuration.ruins.extra_levels_min, GLOB.configuration.ruins.extra_levels_max) for(var/i in 1 to num_extra_space) GLOB.space_manager.add_new_zlevel("Ruin Area #[i]", linkage = CROSSLINKED, traits = list(REACHABLE_BY_CREW, SPAWN_RUINS, REACHABLE_SPACE_ONLY)) + CHECK_TICK + log_startup_progress("Loaded random space levels in [stop_watch(load_zlevels_timer)]s.") // Now spawn ruins, random budget between 20 and 30 for all zlevels combined. diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 4ec3beb5c6ff..14ab39fdcdfc 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -37,8 +37,6 @@ SUBSYSTEM_DEF(processing) if(MC_TICK_CHECK) return -/datum/var/isprocessing = FALSE - /datum/proc/process() set waitfor = 0 return PROCESS_KILL diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm index d3310abcaa67..e72f61da2227 100644 --- a/code/controllers/subsystem/tickets/tickets.dm +++ b/code/controllers/subsystem/tickets/tickets.dm @@ -252,14 +252,14 @@ SUBSYSTEM_DEF(tickets) C.man_up(returnClient(N)) T.lastStaffResponse = "Autoresponse: [message_key]" resolveTicket(N) - message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key] ") + message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key]") log_game("[C] has auto responded to [ticket_owner]\'s adminhelp with: [response_phrases[message_key]]") if("Mentorhelp") convert_ticket(T) else SEND_SOUND(returnClient(N), sound('sound/effects/adminhelp.ogg')) to_chat_safe(returnClient(N), "[key_name_hidden(C)] is autoresponding with: [response_phrases[message_key]]")//for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key] - message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key] ") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key + message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key]") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key T.lastStaffResponse = "Autoresponse: [message_key]" resolveTicket(N) log_game("[C] has auto responded to [ticket_owner]\'s adminhelp with: [response_phrases[message_key]]") diff --git a/code/datums/action.dm b/code/datums/action.dm index 0bdd5c4a0a36..0e6dc66076dc 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -445,7 +445,7 @@ /datum/action/item_action/instrument name = "Use Instrument" - desc = "Use the instrument specified" + desc = "Use the instrument specified." /datum/action/item_action/instrument/Trigger(left_click) if(istype(target, /obj/item/instrument)) @@ -551,7 +551,7 @@ /datum/action/item_action/accessory/herald name = "Mirror Walk" - desc = "Use near a mirror to enter it" + desc = "Use near a mirror to enter it." //Preset for spells /datum/action/spell_action diff --git a/code/datums/beam.dm b/code/datums/beam.dm index d40051220839..f67b5f2ed4c9 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -14,8 +14,9 @@ var/origin_oldloc = null var/static_beam = FALSE var/beam_type = /obj/effect/ebeam //must be subtype + var/beamcolor -/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3) +/datum/beam/New(beam_origin, beam_target,beam_icon = 'icons/effects/beam.dmi', beam_icon_state = "b_beam", time = 50, maxdistance = 10, btype = /obj/effect/ebeam, beam_sleep_time = 3, beam_color) endtime = world.time+time origin = beam_origin origin_oldloc = get_turf(origin) @@ -29,6 +30,7 @@ icon = beam_icon icon_state = beam_icon_state beam_type = btype + beamcolor = beam_color /datum/beam/proc/Start() Draw() @@ -77,10 +79,12 @@ //cropped by a transparent box of length-N pixel size if(N+32>length) var/icon/II = new(icon, icon_state) - II.DrawBox(null,1,(length-N),32,32) + II.DrawBox(null, 1, (length-N), 32, 32) X.icon = II else X.icon = base_icon + if(beamcolor) + X.color = beamcolor X.transform = rot_matrix //Calculate pixel offsets (If necessary) @@ -163,7 +167,7 @@ var/armor = L.run_armor_check(limb_to_hit, LASER) L.apply_damage(damage, BURN, limb_to_hit, armor) -/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3) - var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time) +/atom/proc/Beam(atom/BeamTarget, icon_state="b_beam", icon='icons/effects/beam.dmi', time = 5 SECONDS, maxdistance = 10, beam_type = /obj/effect/ebeam, beam_sleep_time = 3, beam_color) + var/datum/beam/newbeam = new(src, BeamTarget, icon, icon_state, time, maxdistance, beam_type, beam_sleep_time, beam_color) INVOKE_ASYNC(newbeam, TYPE_PROC_REF(/datum/beam, Start)) return newbeam diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 24d324d6e77f..e48861f533fd 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -1,24 +1,29 @@ /datum/browser var/mob/user var/title - var/window_id // window_id is used as the window name for browse and onclose + /// window_id is used as the window name for browse and onclose calls + var/window_id var/width = 0 var/height = 0 - var/atom/ref = null - var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id + /// UID of the host atom + var/atom_uid = null + /// Various options to control elements such as titlebar buttons for the window + var/list/window_options = list("focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;") // window option is set using window_id + /// Assoc list of stylesheets for use by the datum var/stylesheets[0] + /// Assoc list of script files for use by the datum var/scripts[0] - var/title_image - var/head_elements - var/body_elements - var/head_content = "" - var/content = "" - var/title_buttons = "" + /// Should default stylesheets be loaded + var/include_default_stylesheet = TRUE + /// Header HTML content of the browser datum + var/list/head_content = list() + /// HTML content of the browser datum + var/list/content = list() -/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/nref = null) - +/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/atom = null) user = nuser + RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(user_deleted)) window_id = nwindow_id if(ntitle) title = format_text(ntitle) @@ -26,64 +31,71 @@ width = nwidth if(nheight) height = nheight - if(nref) - ref = nref - add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs + if(atom) + atom_uid = atom.UID() + +/datum/browser/proc/user_deleted(datum/source) + SIGNAL_HANDLER + user = null /datum/browser/proc/set_title(ntitle) - title = format_text(ntitle) + title = islist(ntitle) ? ntitle : list(ntitle) /datum/browser/proc/add_head_content(nhead_content) - head_content = nhead_content - -/datum/browser/proc/set_title_buttons(ntitle_buttons) - title_buttons = ntitle_buttons + head_content = islist(nhead_content) ? nhead_content : list(nhead_content) /datum/browser/proc/set_window_options(nwindow_options) - window_options = nwindow_options - -/datum/browser/proc/set_title_image(ntitle_image) - //title_image = ntitle_image + window_options = islist(nwindow_options) ? nwindow_options : list(nwindow_options) /datum/browser/proc/add_stylesheet(name, file) - stylesheets[name] = file + if(istype(name, /datum/asset/spritesheet)) + var/datum/asset/spritesheet/sheet = name + stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]" + else + var/asset_name = "[name].css" + + stylesheets[asset_name] = file + + if(!SSassets.cache[asset_name]) + SSassets.transport.register_asset(asset_name, file) + +/datum/browser/proc/add_scss_stylesheet(name, file) + var/asset_name = "[name].scss" + stylesheets[asset_name] = file + + if(!SSassets.cache[asset_name]) + SSassets.transport.register_asset(asset_name, file) /datum/browser/proc/add_script(name, file) - scripts[name] = file + scripts["[ckey(name)].js"] = file + SSassets.transport.register_asset("[ckey(name)].js", file) /datum/browser/proc/set_content(ncontent) - content = ncontent + content = islist(ncontent) ? ncontent : list(ncontent) /datum/browser/proc/add_content(ncontent) content += ncontent /datum/browser/proc/get_header() - var/key - var/filename - for(key in stylesheets) - filename = "[ckey(key)].css" - user << browse_rsc(stylesheets[key], filename) - head_content += "" - - for(key in scripts) - filename = "[ckey(key)].js" - user << browse_rsc(scripts[key], filename) - head_content += "" - - var/title_attributes = "class='uiTitle'" - if(title_image) - title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'" - - return {" + if(include_default_stylesheet) + head_content += "" + + for(var/file in stylesheets) + head_content += "" + + for(var/file in scripts) + head_content += "" + + return {" - - - [head_content] + + + [head_content.Join("")]
- [title ? "
[title]
[title_buttons]
" : ""] + [title ? "
[title]
" : ""]
"} @@ -97,86 +109,60 @@ /datum/browser/proc/get_content() return {" [get_header()] - [content] + [content.Join("")] [get_footer()] "} -/datum/browser/proc/open(use_onclose = 1) +/datum/browser/proc/open(use_onclose = TRUE) + if(isnull(window_id)) //null check because this can potentially nuke goonchat + WARNING("Browser [title] tried to open with a null ID") + to_chat(user, "The [title] browser you tried to open failed a sanity check! Please report this on github!") + return + var/window_size = "" if(width && height) window_size = "size=[width]x[height];" - user << browse(get_content(), "window=[window_id];[window_size][window_options]") + if(include_default_stylesheet) + var/datum/asset/simple/common/common_asset = get_asset_datum(/datum/asset/simple/common) + common_asset.send(user) + if(length(stylesheets)) + SSassets.transport.send_assets(user, stylesheets) + if(length(scripts)) + SSassets.transport.send_assets(user, scripts) + user << browse(get_content(), "window=[window_id];[window_size][window_options.Join("")]") if(use_onclose) - onclose(user, window_id, ref) + onclose(user, window_id, atom_uid) /datum/browser/proc/close() - user << browse(null, "window=[window_id]") - -// This will allow you to show an icon in the browse window -// This is added to mob so that it can be used without a reference to the browser object -// There is probably a better place for this... -/mob/proc/browse_rsc_icon(icon, icon_state, dir = -1) - /* - var/icon/I - if(dir >= 0) - I = new /icon(icon, icon_state, dir) + if(!isnull(window_id))//null check because this can potentially nuke goonchat + user << browse(null, "window=[window_id]") else - I = new /icon(icon, icon_state) - dir = "default" - - var/filename = "[ckey("[icon]_[icon_state]_[dir]")].png" - src << browse_rsc(I, filename) - return filename - */ - - -// Registers the on-close verb for a browse window (client/verb/.windowclose) -// this will be called when the close-button of a window is pressed. -// -// This is usually only needed for devices that regularly update the browse window, -// e.g. canisters, timers, etc. -// -// windowid should be the specified window name -// e.g. code is : user << browse(text, "window=fred") -// then use : onclose(user, "fred") -// -// Optionally, specify the "ref" parameter as the controlled atom (usually src) -// to pass a "close=1" parameter to the atom's Topic() proc for special handling. -// Otherwise, the user mob's machine var will be reset directly. -// - -/proc/onclose(mob/user, windowid, atom/ref=null) - if(!user || !user.client) return - var/param = "null" - if(ref) - param = "\ref[ref]" - - winset(user, windowid, "on-close=\".windowclose [param]\"") + WARNING("Browser [title] tried to close with a null ID") -// to_chat(world, "OnClose [user]: [windowid] : ["on-close=\".windowclose [param]\""]") +/proc/onclose(mob/user, windowid, atom_uid) + if(!user?.client) + return + winset(user, windowid, "on-close=\".windowclose [atom_uid || "null"]\"") // the on-close client verb // called when a browser popup window is closed after registering with proc/onclose() -// if a valid atom reference is supplied, call the atom's Topic() with "close=1" +// if a valid atom uid is supplied, call the atom's Topic() with "close=1" // otherwise, just reset the client mob's machine var. // -/client/verb/windowclose(atomref as text) - set hidden = 1 // hide this verb from the user's panel - set name = ".windowclose" // no autocomplete on cmd line +/client/verb/windowclose(atom_uid as text) + set hidden = TRUE // hide this verb from the user's panel + set name = ".windowclose" // no autocomplete on cmd line -// to_chat(world, "windowclose: [atomref]") - if(atomref!="null") // if passed a real atomref - var/hsrc = locate(atomref) // find the reffed atom + if(atom_uid != "null") // if passed a real atom_uid + var/hsrc = locateUID(atom_uid) // find the reffed atom if(hsrc) -// to_chat(world, "[src] Topic [href] [hsrc]") + var/href = "close=1" usr = src.mob - src.Topic("close=1", list("close"="1"), hsrc) // this will direct to the atom's - return // Topic() proc via client.Topic() + src.Topic(href, params2list(href), hsrc) // this will direct to the atom's + return // Topic() proc via client.Topic() - // no atomref specified (or not found) + // no atom_uid specified (or not found) // so just reset the user mob's machine var - if(src && src.mob) -// to_chat(world, "[src] was [src.mob.machine], setting to null") + if(src?.mob) src.mob.unset_machine() - return diff --git a/code/datums/callback.dm b/code/datums/callback.dm index 9f2c8d0cd5fa..1179480781b4 100644 --- a/code/datums/callback.dm +++ b/code/datums/callback.dm @@ -22,17 +22,17 @@ global proc: GLOBAL_PROC_REF(procname) Example: - CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(some_proc_here)) + CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(some_proc_here), args) proc defined on current(src) object: PROC_REF(procname) Example: - CALLBACK(src, PROC_REF(some_proc_here)) + CALLBACK(src, PROC_REF(some_proc_here), args) proc defined on some other type: TYPE_PROC_REF(some_type, procname) Example: - CALLBACK(other_atom, TYPE_PROC_REF(other_atom_type, procname) + CALLBACK(other_atom, TYPE_PROC_REF(other_atom_type, procname), args) */ diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 000000000000..fd35bbc4eecf --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/components/codeword_hearing.dm b/code/datums/components/codeword_hearing.dm new file mode 100644 index 000000000000..8e9ee833ec74 --- /dev/null +++ b/code/datums/components/codeword_hearing.dm @@ -0,0 +1,47 @@ +/** + * Component that allows for highlighting of words or phrases in chat based on regular expressions. + * + * Hooks into /mob/proc/combine_message to wrap every regex match in the message + * between tags with the provided span class. This modifies the output that + * is sent to the parent's chat window. + * + * Removal of this component should be done by calling [GetComponents(/datum/component/codeword_hearing)] + * on the parent and then iterating through all components calling [delete_if_from_source(source)]. + */ +/datum/component/codeword_hearing + dupe_mode = COMPONENT_DUPE_ALLOWED + + /// Regex for matching words or phrases you want highlighted. + var/regex/replace_regex + /// The to use for highlighting matches. + var/span_class + /// The source of this component. Used to identify the source in delete_if_from_source since this component is COMPONENT_DUPE_ALLOWED. + var/source + +/datum/component/codeword_hearing/Initialize(regex/codeword_regex, highlight_span_class, component_source) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + replace_regex = codeword_regex + span_class = highlight_span_class + source = component_source + return ..() + +/datum/component/codeword_hearing/proc/handle_hearing(message) + var/mob/living/owner = parent + if(!istype(owner)) + return + + // don't skip codewords when owner speaks + if(!owner.can_hear()) + return + + return replace_regex.Replace(message, "$1") + +/// Since a parent can have multiple of these components on them simultaneously, this allows a datum to delete components from a specific source. +/datum/component/codeword_hearing/proc/delete_if_from_source(component_source) + if(source == component_source) + qdel(src) + return TRUE + + return FALSE diff --git a/code/datums/components/defibrillator.dm b/code/datums/components/defibrillator.dm index 945df4b16ed8..ff1020e5eca5 100644 --- a/code/datums/components/defibrillator.dm +++ b/code/datums/components/defibrillator.dm @@ -205,12 +205,12 @@ return if(target.undergoing_cardiac_arrest()) // Can have a heart attack and heart is either missing, necrotic, or not beating - var/obj/item/organ/internal/heart/heart = target.get_int_organ(/obj/item/organ/internal/heart) + var/datum/organ/heart/heart = target.get_int_organ_datum(ORGAN_DATUM_HEART) if(!heart) user.visible_message("[defib_ref] buzzes: Resuscitation failed - Failed to pick up any heart electrical activity.") - else if(heart.status & ORGAN_DEAD) + else if(heart.linked_organ.status & ORGAN_DEAD) user.visible_message("[defib_ref] buzzes: Resuscitation failed - Heart necrosis detected.") - if(!heart || (heart.status & ORGAN_DEAD)) + if(!heart || (heart.linked_organ.status & ORGAN_DEAD)) playsound(get_turf(defib_ref), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE return @@ -330,7 +330,7 @@ busy = TRUE target.visible_message("[user] has touched [target] with [parent]!", \ "[user] touches you with [parent], and you feel a strong jolt!") - target.adjustStaminaLoss(60) + target.apply_damage(60, STAMINA) target.KnockDown(10 SECONDS) playsound(get_turf(parent), 'sound/machines/defib_zap.ogg', 50, 1, -1) target.emote("gasp") @@ -345,7 +345,7 @@ if(!istype(target)) return busy = TRUE - target.adjustStaminaLoss(60) + target.apply_damage(60, STAMINA) target.emote("gasp") add_attack_logs(user, target, "Stunned with [parent]") target.KnockDown(4 SECONDS) @@ -384,8 +384,8 @@ return if(electrocute_mob(affecting, power_source, origin)) // shock anyone touching them >:) - var/obj/item/organ/internal/heart/HE = affecting.get_organ_slot("heart") - if(HE.parent_organ == "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 + var/datum/organ/heart/heart = affecting.get_int_organ_datum(ORGAN_DATUM_HEART) + if(heart.linked_organ.parent_organ == "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 [affecting.p_their()] arm!", \ "You feel a powerful shock travel up your [affecting.hand ? affecting.get_organ("l_arm") : affecting.get_organ("r_arm")] and back down your [affecting.hand ? affecting.get_organ("r_arm") : affecting.get_organ("l_arm")]!") affecting.set_heartattack(TRUE) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 82df42a0a820..42d9731dbc0d 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -93,7 +93,7 @@ if(istype(I, /obj/item/stack) && precise_insertion) var/atom/current_parent = parent var/obj/item/stack/S = I - requested_amount = input(user, "How much do you want to insert?", "Inserting [S.singular_name]s") as num|null + requested_amount = tgui_input_number(user, "How much do you want to insert?", "Inserting [S.singular_name]s", max_value = S.amount) if(isnull(requested_amount) || (requested_amount <= 0)) return if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || user.incapacitated() || !in_range(current_parent, user) || user.l_hand != I && user.r_hand != I) diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm index e9c36989d878..50ff05d4af1b 100644 --- a/code/datums/components/orbiter.dm +++ b/code/datums/components/orbiter.dm @@ -376,9 +376,6 @@ // Atom procs/vars /////////////////////////////////// -/// UID for the atom which the current atom is orbiting -/atom/movable/var/orbiting_uid = null - /** * Set an atom to orbit around another one. This atom will follow the base atom's movement and rotate around it. * diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm new file mode 100644 index 000000000000..effad26c8fec --- /dev/null +++ b/code/datums/components/shielded.dm @@ -0,0 +1,191 @@ +/** + * The shielded component causes the parent item to nullify a certain number of attacks against the wearer, see: shielded vests. + */ + +/datum/component/shielded + /// The person currently wearing us + var/mob/living/wearer + /// How many charges we can have max, and how many we start with + var/max_charges + /// How many charges we currently have + var/current_charges + /// How long we have to avoid being hit to replenish charges. If set to 0, we never recharge lost charges + var/recharge_start_delay = 20 SECONDS + /// Once we go unhit long enough to recharge, we replenish charges this often. The floor is effectively 1 second, AKA how often SSdcs processes + var/charge_increment_delay = 1 SECONDS + /// How many charges we recover on each charge increment + var/charge_recovery = 1 + /// What .dmi we're pulling the shield icon from + var/shield_icon_file = 'icons/effects/effects.dmi' + /// What icon is used when someone has a functional shield up + var/shield_icon = "shield-old" + /// Do we still shield if we're being held in-hand? If FALSE, it needs to be equipped to a slot to work + var/shield_inhand = FALSE + /// Should the shield lose charges equal to the damage dealt by a hit? + var/lose_multiple_charges = FALSE + /// Should the shield's alpha change to show its remaining charge + var/show_charge_as_alpha = FALSE + /// The item we use for recharging + var/recharge_path + /// The cooldown tracking when we were last hit + COOLDOWN_DECLARE(recently_hit_cd) + /// The cooldown tracking when we last replenished a charge + COOLDOWN_DECLARE(charge_add_cd) + /// A callback for the sparks/message that play when a charge is used, see [/datum/component/shielded/proc/default_run_hit_callback] + var/datum/callback/on_hit_effects + ///The visual effect + var/mutable_appearance/shield + +/datum/component/shielded/Initialize(max_charges = 3, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 1, lose_multiple_charges = FALSE, show_charge_as_alpha = FALSE, recharge_path = null, starting_charges = null, shield_icon_file = 'icons/effects/effects.dmi', shield_icon = "shield-old", shield_inhand = FALSE, run_hit_callback) + if(!isitem(parent) || max_charges <= 0) + return COMPONENT_INCOMPATIBLE + + src.max_charges = max_charges + src.recharge_start_delay = recharge_start_delay + src.charge_increment_delay = charge_increment_delay + src.charge_recovery = charge_recovery + src.lose_multiple_charges = lose_multiple_charges + src.show_charge_as_alpha = show_charge_as_alpha + src.recharge_path = recharge_path + src.shield_icon_file = shield_icon_file + src.shield_icon = shield_icon + src.shield_inhand = shield_inhand + src.on_hit_effects = run_hit_callback || CALLBACK(src, PROC_REF(default_run_hit_callback)) + if(isnull(starting_charges)) + current_charges = max_charges + else + current_charges = starting_charges + if(recharge_start_delay) + START_PROCESSING(SSdcs, src) + +/datum/component/shielded/Destroy(force, silent) + if(wearer) + shield_icon = "broken" + UnregisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS) + wearer.update_appearance(UPDATE_ICON) + wearer = null + on_hit_effects = null + return ..() + +/datum/component/shielded/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(lost_wearer)) + RegisterSignal(parent, COMSIG_ITEM_HIT_REACT, PROC_REF(on_hit_react)) + var/atom/shield = parent + if(ismob(shield.loc)) + var/mob/holder = shield.loc + if(holder.is_holding(parent) && !shield_inhand) + return + set_wearer(holder) + +/datum/component/shielded/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_HIT_REACT)) + var/atom/shield = parent + if(shield.loc == wearer) + lost_wearer(src, wearer) + +// Handle recharging, if we want to +/datum/component/shielded/process(seconds_per_tick) + if(current_charges >= max_charges) + STOP_PROCESSING(SSdcs, src) + return + + if(!COOLDOWN_FINISHED(src, recently_hit_cd)) + return + if(!COOLDOWN_FINISHED(src, charge_add_cd)) + return + + var/obj/item/item_parent = parent + COOLDOWN_START(src, charge_add_cd, charge_increment_delay) + adjust_charge(charge_recovery) // set the number of charges to current + recovery per increment, clamped from zero to max_charges + playsound(item_parent, 'sound/magic/charge.ogg', 50, TRUE) + if(current_charges == max_charges) + playsound(item_parent, 'sound/machines/ding.ogg', 50, TRUE) + +/datum/component/shielded/proc/adjust_charge(change) + current_charges = clamp(current_charges + change, 0, max_charges) + if(wearer) + wearer.update_appearance(UPDATE_ICON) + +/// Check if we've been equipped to a valid slot to shield +/datum/component/shielded/proc/on_equipped(datum/source, mob/user, slot) + SIGNAL_HANDLER + + if((slot == SLOT_HUD_LEFT_HAND || slot == SLOT_HUD_RIGHT_HAND) && !shield_inhand) + lost_wearer(source, user) + return + set_wearer(user) + +/// Either we've been dropped or our wearer has been QDEL'd. Either way, they're no longer our problem +/datum/component/shielded/proc/lost_wearer(datum/source, mob/user) + SIGNAL_HANDLER + + if(wearer) + UnregisterSignal(wearer, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_PARENT_QDELETING)) + wearer.cut_overlay(shield) + wearer.update_appearance(UPDATE_ICON) + wearer = null + +/datum/component/shielded/proc/set_wearer(mob/user) + wearer = user + RegisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) + RegisterSignal(wearer, COMSIG_PARENT_QDELETING, PROC_REF(lost_wearer)) + if(current_charges) + wearer.update_appearance(UPDATE_ICON) + +/// Used to draw the shield overlay on the wearer +/datum/component/shielded/proc/on_update_overlays(atom/parent_atom) + SIGNAL_HANDLER + wearer.cut_overlay(shield) + var/mutable_appearance/shield_appearance = mutable_appearance(shield_icon_file, (current_charges > 0 ? shield_icon : "broken"), MOB_LAYER + 0.01) + if(show_charge_as_alpha) + shield_appearance.alpha = (current_charges/max_charges)*255 + wearer.add_overlay(shield_appearance) + shield = shield_appearance + +/** + * This proc fires when we're hit, and is responsible for checking if we're charged, then deducting one + returning that we're blocking if so. + * It then runs the callback in [/datum/component/shielded/var/on_hit_effects] which handles the messages/sparks (so the visuals) + */ +/datum/component/shielded/proc/on_hit_react(datum/source, mob/living/carbon/human/owner, atom/movable/hitby, damage, attack_type) + SIGNAL_HANDLER + + COOLDOWN_START(src, recently_hit_cd, recharge_start_delay) + + if(current_charges <= 0) + return + . = COMPONENT_BLOCK_SUCCESSFUL + + var/charge_loss = 1 // how many charges do we lose + + if(istype(hitby, /obj/item/projectile)) + var/obj/item/projectile/P = hitby + if(P.shield_buster) + charge_loss = 3 + if(lose_multiple_charges) + charge_loss = damage //Double dip if health based instead + + if(lose_multiple_charges) // if the shield has health like damage we'll lose charges equal to the damage of the hit + charge_loss += damage + + adjust_charge(-charge_loss) + wearer.update_appearance(UPDATE_ICON) + + INVOKE_ASYNC(src, PROC_REF(actually_run_hit_callback), owner, hitby, current_charges) + + if(!recharge_start_delay) // if recharge_start_delay is 0, we don't recharge + return + + START_PROCESSING(SSdcs, src) // if we DO recharge, start processing so we can do that + +/// The wrapper to invoke the on_hit callback, so we don't have to worry about blocking in the signal handler +/datum/component/shielded/proc/actually_run_hit_callback(mob/living/owner, attack_text, current_charges) + on_hit_effects.Invoke(owner, attack_text, current_charges) + +/// Default on_hit proc, since cult robes are stupid and have different descriptions/sparks +/datum/component/shielded/proc/default_run_hit_callback(mob/living/owner, attack_text, current_charges) + do_sparks(2, TRUE, owner) + owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") + if(current_charges <= 0) + owner.visible_message("[owner]'s shield overloads!") + diff --git a/code/datums/components/spooky.dm b/code/datums/components/spooky.dm index b056bdcac71e..99f7ba058116 100644 --- a/code/datums/components/spooky.dm +++ b/code/datums/components/spooky.dm @@ -8,7 +8,7 @@ if(ishuman(user)) //this weapon wasn't meant for mortals. var/mob/living/carbon/human/U = user if(!istype(U.dna.species, /datum/species/skeleton)) - U.adjustStaminaLoss(35) //Extra Damage + U.apply_damage(35, STAMINA) //Extra Damage U.Jitter(70 SECONDS) U.SetStuttering(40 SECONDS) if(U.getStaminaLoss() > 95) @@ -23,7 +23,7 @@ C.Jitter(70 SECONDS) C.SetStuttering(40 SECONDS) if(!istype(H.dna.species, /datum/species/diona) && !istype(H.dna.species, /datum/species/machine) && !istype(H.dna.species, /datum/species/slime) && !istype(H.dna.species, /datum/species/golem) && !istype(H.dna.species, /datum/species/plasmaman)) - C.adjustStaminaLoss(25) //boneless humanoids don't lose the will to live + C.apply_damage(25, STAMINA) //boneless humanoids don't lose the will to live to_chat(C, "DOOT") spectral_change(H) @@ -51,7 +51,7 @@ change_name(H) //time for a new name! /datum/component/spooky/proc/change_name(mob/living/carbon/human/H) - var/t = stripped_input(H, "Enter your new skeleton name", H.real_name, null, MAX_NAME_LEN) + var/t = tgui_input_text(H, "Enter your new skeleton name", H.real_name, max_length = MAX_NAME_LEN) if(!t) t = "spooky skeleton" H.real_name = t diff --git a/code/datums/components/sticky.dm b/code/datums/components/sticky.dm index 49f6723ac622..7c36f3207953 100644 --- a/code/datums/components/sticky.dm +++ b/code/datums/components/sticky.dm @@ -24,9 +24,11 @@ /datum/component/sticky/RegisterWithParent() RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(stick_to_it)) + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(stick_to_it_throwing)) /datum/component/sticky/UnregisterFromParent() UnregisterSignal(parent, COMSIG_ITEM_PRE_ATTACK) + UnregisterSignal(parent, COMSIG_MOVABLE_IMPACT) /datum/component/sticky/proc/stick_to_it(obj/item/I, atom/target, mob/user, params) SIGNAL_HANDLER @@ -58,8 +60,23 @@ overlay.Shift(EAST, clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)) overlay.Shift(NORTH, clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)) + attach_signals(I) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/component/sticky/proc/stick_to_it_throwing(obj/item/thrown_item, atom/hit_target, throwingdatum, params) + SIGNAL_HANDLER + if(hit_target.GetComponent(/datum/component/sticky)) + return + + attached_to = hit_target + move_to_the_thing(parent) + + overlay = icon(thrown_item.icon, thrown_item.icon_state) + attach_signals(thrown_item) + +/datum/component/sticky/proc/attach_signals(obj/item/attached) attached_to.add_overlay(overlay, priority = TRUE) - I.invisibility = INVISIBILITY_ABSTRACT + attached.invisibility = INVISIBILITY_ABSTRACT RegisterSignal(attached_to, COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY, PROC_REF(pick_up)) RegisterSignal(attached_to, COMSIG_PARENT_EXAMINE, PROC_REF(add_sticky_text)) @@ -67,7 +84,6 @@ if(ismovable(attached_to)) RegisterSignal(attached_to, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) START_PROCESSING(SSobj, src) - return COMPONENT_CANCEL_ATTACK_CHAIN /datum/component/sticky/proc/pick_up(atom/A, mob/living/carbon/human/user) SIGNAL_HANDLER diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 582366258b0d..ac79cfb2597b 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(PDA_Manifest) is_custom_job = FALSE break - if(is_custom_job) + if(is_custom_job && foundrecord) real_title = foundrecord.fields["real_rank"] if(foundrecord) @@ -166,9 +166,17 @@ GLOBAL_VAR_INIT(record_id_num, 1001) G.fields["m_stat"] = "Stable" G.fields["sex"] = capitalize(H.gender) G.fields["species"] = H.dna.species.name - G.fields["photo"] = get_id_photo(H) - G.fields["photo-south"] = "data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = SOUTH))]" - G.fields["photo-west"] = "data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = WEST))]" + // Do some ID card checking stuff here to save on resources + var/card_photo + if(istype(H.wear_id, /obj/item/card/id)) + var/obj/item/card/id/IDC = H.wear_id + card_photo = IDC.photo + else + card_photo = get_id_photo(H) + + G.fields["photo"] = card_photo + G.fields["photo-south"] = "data:image/png;base64,[icon2base64(icon(card_photo, dir = SOUTH))]" + G.fields["photo-west"] = "data:image/png;base64,[icon2base64(icon(card_photo, dir = WEST))]" if(H.gen_record && !jobban_isbanned(H, ROLEBAN_RECORDS)) G.fields["notes"] = H.gen_record else diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 82b8bd2e2303..cf1715b7a878 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -9,6 +9,9 @@ var/var_edited = FALSE //Warranty void if seal is broken var/tmp/unique_datum_id = null + /// Used by SSprocessing + var/isprocessing = FALSE + /** * A cached version of our \ref * The brunt of \ref costs are in creating entries in the string tree (a tree of immutable strings) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 796072c95465..4cdee93d0ba6 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -22,7 +22,7 @@ /client/can_vv_get(var_name) var/static/list/protected_vars = list( - "address", "chatOutput", "computer_id", "connection", "jbh", "pm_tracker", "related_accounts_cid", "related_accounts_ip", "watchlisted" + "address", "computer_id", "connection", "jbh", "pm_tracker", "related_accounts_cid", "related_accounts_ip", "watchlisted" ) if(!check_rights(R_ADMIN, FALSE, usr) && (var_name in protected_vars)) return FALSE diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 0ff5231ae302..91873cf56a6b 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -2,9 +2,9 @@ /mob/proc/HasDisease(datum/disease/D) for(var/thing in viruses) var/datum/disease/DD = thing - if(D.IsSame(DD)) - return 1 - return 0 + if(DD.IsSame(D)) + return TRUE + return FALSE /mob/proc/CanContractDisease(datum/disease/D) @@ -153,9 +153,14 @@ if(HAS_TRAIT(src, TRAIT_VIRUSIMMUNE) && !D.bypasses_immunity) return FALSE - for(var/thing in D.required_organs) - if(!((locate(thing) in bodyparts) || (locate(thing) in internal_organs))) - return FALSE + for(var/organ in D.required_organs) + if(istext(organ) && get_int_organ_datum(organ)) + continue + if(locate(organ) in internal_organs) + continue + if(locate(organ) in bodyparts) + continue + return FALSE return ..() /mob/living/carbon/human/monkey/CanContractDisease(datum/disease/D) diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 404a45324e2f..6d19e603ca92 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -158,10 +158,9 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease)) qdel(src) /datum/disease/proc/IsSame(datum/disease/D) - if(istype(src, D.type)) - return 1 - return 0 - + if(ispath(D)) + return istype(src, D) + return istype(src, D.type) /datum/disease/proc/Copy() var/datum/disease/D = new type() diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 6e445daffc3f..08c6509defe6 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -86,13 +86,16 @@ GLOBAL_LIST_INIT(advance_cures, list( // Compares type then ID. /datum/disease/advance/IsSame(datum/disease/advance/D) + if(ispath(D)) + return FALSE - if(!(istype(D, /datum/disease/advance))) - return 0 + if(!istype(D, /datum/disease/advance)) + return FALSE if(GetDiseaseID() != D.GetDiseaseID()) - return 0 - return 1 + return FALSE + + return TRUE // To add special resistances. /datum/disease/advance/cure(resistance=1) diff --git a/code/datums/diseases/critical.dm b/code/datums/diseases/critical.dm index ac83c8f15de6..1807c8a86e3e 100644 --- a/code/datums/diseases/critical.dm +++ b/code/datums/diseases/critical.dm @@ -87,7 +87,10 @@ cure_chance = 10 stage_prob = 5 severity = HARMFUL - required_organs = list(/obj/item/organ/internal/heart) + disease_flags = CURABLE + required_organs = list(ORGAN_DATUM_HEART) + bypasses_immunity = TRUE + virus_heal_resistant = TRUE /datum/disease/critical/heart_failure/stage_act() if(..()) diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 0a23b014a59a..8ade68def32f 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -71,6 +71,8 @@ affected_mob.mind.transfer_to(new_mob) else new_mob.key = affected_mob.key + if(isrobot(new_mob)) + new_mob.rename_self("Cyborg", TRUE, TRUE) qdel(affected_mob) diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm index 83cf7609bf1c..e8f6bb317b5d 100644 --- a/code/datums/diseases/tuberculosis.dm +++ b/code/datums/diseases/tuberculosis.dm @@ -9,9 +9,9 @@ viable_mobtypes = list(/mob/living/carbon/human) cure_chance = 5 // Like hell are you getting out of hell desc = "A rare highly transmittable virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue." - required_organs = list(/obj/item/organ/internal/lungs) + required_organs = list(ORGAN_DATUM_LUNGS) severity = HARMFUL - bypasses_immunity = TRUE // Fungal and bacterial in nature; also infects the lungs + bypasses_immunity = TRUE //Fungal and bacterial in nature; also infects the lungs /datum/disease/tuberculosis/stage_act() if(!..()) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 1cfaf3d24bf4..64ae1fcc5bb1 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -177,7 +177,7 @@ /datum/dog_fashion/head/sombrero name = "Segnor REAL_NAME" - desc = "You must respect Elder Dogname" + desc = "You must respect Elder Dogname." /datum/dog_fashion/head/sombrero/New(mob/M) ..() @@ -211,7 +211,7 @@ /datum/dog_fashion/head/cone name = "REAL_NAME" - desc = "Omnicone's Chosen Champion" + desc = "Omnicone's Chosen Champion." /datum/dog_fashion/back/hardsuit name = "Space Explorer REAL_NAME" diff --git a/code/datums/emote.dm b/code/datums/emote.dm index 1cb1668e1182..42304b2f8795 100644 --- a/code/datums/emote.dm +++ b/code/datums/emote.dm @@ -531,7 +531,7 @@ return FALSE if(!check_rights(R_ADMIN, FALSE, user)) if(!GLOB.dsay_enabled) - to_chat(user, "Deadchat is globally muted") + to_chat(user, "Deadchat is globally muted.") return FALSE /** diff --git a/code/datums/keybindings/admin_keybinds.dm b/code/datums/keybindings/admin_keybinds.dm index 19cb750a2d71..f2f9675f2aa4 100644 --- a/code/datums/keybindings/admin_keybinds.dm +++ b/code/datums/keybindings/admin_keybinds.dm @@ -20,22 +20,6 @@ return SSdebugview.start_processing(C) -/datum/keybinding/admin/msay - name = "Msay" - keys = list("F4") - -/datum/keybinding/admin/msay/down(client/C) - . = ..() - C.get_mentor_say() - -/datum/keybinding/admin/asay - name = "Asay" - keys = list("F5") - -/datum/keybinding/admin/asay/down(client/C) - . = ..() - C.get_admin_say() - /datum/keybinding/admin/aghost name = "Aghost" keys = list("F6") @@ -68,11 +52,3 @@ /datum/keybinding/admin/invisimin/down(client/C) . = ..() C.invisimin() - -/datum/keybinding/admin/dsay - name = "Dsay" - keys = list("F10") - -/datum/keybinding/admin/dsay/down(client/C) - . = ..() - C.get_dead_say() diff --git a/code/datums/keybindings/click_keybindings.dm b/code/datums/keybindings/click_keybindings.dm new file mode 100644 index 000000000000..45835029acd5 --- /dev/null +++ b/code/datums/keybindings/click_keybindings.dm @@ -0,0 +1,77 @@ +/datum/keybinding/clickbind + category = KB_CATEGORY_CLICK + +/datum/keybinding/clickbind/can_use(client/C, mob/M) + return istype(M) && M.can_use_clickbinds() && ..() + +/datum/keybinding/clickbind/down(client/C) + ..() + if(C.mob.next_click > world.time) + return + C.mob.changeNext_click(1) + return locateUID(C.moused_over) + +/datum/keybinding/clickbind/alt_click + name = "Alt-Click" + +/datum/keybinding/clickbind/alt_click/down(client/C) + . = ..() + if(.) + C.mob.AltClickOn(.) + +/datum/keybinding/clickbind/ctrl_click + name = "Ctrl-Click" + +/datum/keybinding/clickbind/ctrl_click/down(client/C) + . = ..() + if(.) + C.mob.CtrlClickOn(.) + +/datum/keybinding/clickbind/shift_click + name = "Shift-Click" + +/datum/keybinding/clickbind/shift_click/down(client/C) + . = ..() + if(.) + C.mob.ShiftClickOn(.) + +/datum/keybinding/clickbind/middle_click + name = "Middle-Click" + +/datum/keybinding/clickbind/middle_click/down(client/C) + . = ..() + if(.) + C.mob.MiddleClickOn(.) + +/datum/keybinding/clickbind/alt_shift_click + name = "Alt-Shift-Click" + +/datum/keybinding/clickbind/alt_shift_click/down(client/C) + . = ..() + if(.) + C.mob.AltShiftClickOn(.) + +/datum/keybinding/clickbind/ctrl_shift_click + name = "Ctrl-Shift-Click" + +/datum/keybinding/clickbind/ctrl_shift_click/down(client/C) + . = ..() + if(.) + C.mob.CtrlShiftClickOn(.) + +/datum/keybinding/clickbind/middle_shift_click + name = "Middle-Shift-Click" + +/datum/keybinding/clickbind/middle_shift_click/down(client/C) + . = ..() + if(.) + C.mob.MiddleShiftClickOn(.) + +/datum/keybinding/clickbind/middle_shift_ctrl_click + name = "Middle-Shift-Ctrl-Click" + +/datum/keybinding/clickbind/middle_shift_ctrl_click/down(client/C) + . = ..() + if(.) + C.mob.MiddleShiftControlClickOn(.) + diff --git a/code/datums/keybindings/client.dm b/code/datums/keybindings/client.dm index b9f6cc79a62b..23a89404931d 100644 --- a/code/datums/keybindings/client.dm +++ b/code/datums/keybindings/client.dm @@ -9,38 +9,6 @@ . = ..() C.adminhelp() -/datum/keybinding/client/ooc - name = "OOC" - keys = list("O") - -/datum/keybinding/client/ooc/down(client/C) - . = ..() - C.ooc() - -/datum/keybinding/client/looc - name = "Local OOC" - keys = list("L") - -/datum/keybinding/client/looc/down(client/C) - . = ..() - C.looc() - -/datum/keybinding/client/say - name = "Say" - keys = list("T") - -/datum/keybinding/client/say/down(client/C) - . = ..() - C.mob.say_wrapper() - -/datum/keybinding/client/me - name = "Me" - keys = list("M") - -/datum/keybinding/client/me/down(client/C) - . = ..() - C.mob.me_wrapper() - /datum/keybinding/client/toggle_min_hud name = "Toggle Minimal HUD" keys = list("F12") diff --git a/code/datums/keybindings/communication_keybinds.dm b/code/datums/keybindings/communication_keybinds.dm new file mode 100644 index 000000000000..b3ddd289fda4 --- /dev/null +++ b/code/datums/keybindings/communication_keybinds.dm @@ -0,0 +1,74 @@ +/datum/keybinding/client/communication + category = KB_CATEGORY_COMMUNICATION + /// Used to store special rights if required by a keybind, such as R_ADMIN + var/required_rights + /// Used to map muted categories to channels + var/mute_category = MUTE_OOC + +/datum/keybinding/client/communication/down(client/C) + . = ..() + if(required_rights && !check_rights(required_rights, FALSE, C.mob)) + return + + if(mute_category && check_mute(C.ckey, mute_category)) + to_chat(C, "You cannot use [name] (muted).", MESSAGE_TYPE_WARNING) + return + + winset(C, null, "command=[C.tgui_say_create_open_command(name)]") + +/datum/keybinding/client/communication/ooc + name = OOC_CHANNEL + keys = list("O") + +/datum/keybinding/client/communication/ooc/down(client/C) + if(check_rights(R_ADMIN, FALSE, C.mob)) // You may pass + return ..() + + if(!GLOB.ooc_enabled) + to_chat(C, "OOC is globally muted.", MESSAGE_TYPE_WARNING) + return + + if(!GLOB.dooc_enabled && C.mob.stat == DEAD) + to_chat(C, "OOC for dead mobs has been turned off.", MESSAGE_TYPE_WARNING) + return + + return ..() + +/datum/keybinding/client/communication/looc + name = LOOC_CHANNEL + keys = list("L") + +/datum/keybinding/client/communication/say + name = SAY_CHANNEL + keys = list("T") + mute_category = MUTE_IC + +/datum/keybinding/client/communication/me + name = ME_CHANNEL + keys = list("M") + mute_category = MUTE_EMOTE + +/datum/keybinding/client/communication/whisper + name = WHISPER_CHANNEL + keys = list("U") + mute_category = MUTE_IC + +/datum/keybinding/client/communication/radio + name = RADIO_CHANNEL + keys = list("Y") + mute_category = MUTE_IC + +/datum/keybinding/client/communication/msay + name = MENTOR_CHANNEL + keys = list("F4") + required_rights = R_MENTOR | R_ADMIN + +/datum/keybinding/client/communication/asay + name = ADMIN_CHANNEL + keys = list("F5") + required_rights = R_ADMIN + +/datum/keybinding/client/communication/dsay + name = DSAY_CHANNEL + keys = list("F10") + required_rights = R_ADMIN diff --git a/code/datums/keybindings/living_keybinds.dm b/code/datums/keybindings/living_keybinds.dm index 4dfb11f1073b..47f59550ba45 100644 --- a/code/datums/keybindings/living_keybinds.dm +++ b/code/datums/keybindings/living_keybinds.dm @@ -21,17 +21,3 @@ . = ..() var/mob/living/M = C.mob M.resist() - -/datum/keybinding/living/whisper - name = "Whisper" - keys = list("U") - -/datum/keybinding/living/whisper/down(client/C) - var/mob/M = C.mob - M.set_typing_indicator(TRUE) - M.hud_typing = 1 - var/message = typing_input(M, "", "Whisper (text)") - M.hud_typing = 0 - M.set_typing_indicator(FALSE) - if(message) - M.whisper(message) diff --git a/code/datums/log_viewer.dm b/code/datums/log_viewer.dm index 9433683a5ec6..33d6f3a92ece 100644 --- a/code/datums/log_viewer.dm +++ b/code/datums/log_viewer.dm @@ -251,13 +251,13 @@ if(!result || result.ckey != __ckey){\ return if(href_list["add_mob"]) var/list/mobs = getpois(TRUE, TRUE) - var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a mob: ", mobs) - A.on_close(CALLBACK(src, PROC_REF(add_mob), usr)) + var/mob_choice = tgui_input_list(usr, "Please, select a mob: ", "Mob selector", mobs) + add_mob(usr, mobs[mob_choice]) return if(href_list["add_ckey"]) var/list/ckeys = GLOB.logging.get_ckeys_logged() - var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a ckey: ", ckeys) - A.on_close(CALLBACK(src, PROC_REF(add_ckey), usr)) + var/ckey_choice = tgui_input_list(usr, "Please, select a ckey: ", "Ckey selector", ckeys) + add_ckey(usr, ckey_choice) return if(href_list["remove_mob"]) var/mob/M = locate(href_list["remove_mob"]) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1d4eb334251b..2a0af53911a4 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1424,7 +1424,7 @@ return var/mob/living/carbon/human/H = current - var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") + var/gear = alert("Agent or Scientist Gear", "Gear", "Agent", "Scientist") if(gear) if(gear=="Agent") H.equipOutfit(/datum/outfit/abductor/agent) @@ -1657,9 +1657,9 @@ SSticker.mode.update_wiz_icons_added(src) /datum/mind/proc/make_Abductor() - var/role = alert("Abductor Role ?","Role","Agent","Scientist") - var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4) - var/teleport = alert("Teleport to ship ?","Teleport","Yes","No") + var/role = alert("Abductor Role?", "Role", "Agent", "Scientist") + var/team = input("Abductor Team?", "Team?") in list(1,2,3,4) + var/teleport = alert("Teleport to ship?", "Teleport", "Yes", "No") if(!role || !team || !teleport) return @@ -1724,6 +1724,9 @@ /datum/mind/proc/transfer_mindbound_actions(mob/living/new_character) for(var/X in spell_list) var/obj/effect/proc_holder/spell/S = X + if(!S.on_mind_transfer(new_character)) + current.RemoveSpell(S) + continue S.action.Grant(new_character) /datum/mind/proc/get_ghost(even_if_they_cant_reenter) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 8136bf81c680..c64099993e3c 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -50,7 +50,7 @@ /obj/item/storage/box/engineer = 1, /obj/item/flashlight = 1, /obj/item/card/emag = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1 + /obj/item/food/snacks/syndidonkpocket = 1 ) var/id_icon = "syndie" @@ -103,7 +103,7 @@ /obj/item/ammo_box/magazine/m10mm = 1, /obj/item/crowbar/red = 1, /obj/item/grenade/plastic/c4 = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, + /obj/item/food/snacks/syndidonkpocket = 1, /obj/item/flashlight = 1, /obj/item/clothing/shoes/combat = 1 ) @@ -381,13 +381,13 @@ l_ear = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/thermal/monocle id = /obj/item/card/id - l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana + l_pocket = /obj/item/food/snacks/grown/banana r_pocket = /obj/item/bikehorn r_hand = /obj/item/fireaxe backpack_contents = list( /obj/item/storage/box/survival = 1, /obj/item/flashlight = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana = 1, /obj/item/grenade/clown_grenade = 1, /obj/item/melee/baton/cattleprod = 1, /obj/item/stock_parts/cell/super = 1, @@ -420,14 +420,14 @@ pda = /obj/item/pda/mime backpack_contents = list( /obj/item/storage/box/survival = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofnothing = 1, /obj/item/toy/crayon/mime = 1, /obj/item/gun/projectile/automatic/pistol = 1, /obj/item/ammo_box/magazine/m10mm = 1, /obj/item/suppressor = 1, /obj/item/card/emag = 1, /obj/item/radio/uplink = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, + /obj/item/food/snacks/syndidonkpocket = 1, /obj/item/flashlight = 1 ) @@ -956,7 +956,7 @@ /datum/outfit/admin/modsuit/wizard // Technically not a MODsuit, we'll bundle it up in here for the future when it does become one name = "Hardsuit - Wizard" - suit = /obj/item/clothing/suit/space/hardsuit/shielded/wizard + suit = /obj/item/clothing/suit/space/hardsuit/wizard shoes = /obj/item/clothing/shoes/magboots/wizard /datum/outfit/admin/modsuit/medical @@ -1240,7 +1240,7 @@ l_hand = null backpack_contents = list( /obj/item/storage/box/engineer = 1, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard/arch = 1, + /obj/item/clothing/suit/space/hardsuit/wizard/arch = 1, /obj/item/clothing/shoes/magboots = 1, /obj/item/kitchen/knife/ritual = 1, /obj/item/clothing/suit/wizrobe/red = 1, @@ -1311,7 +1311,7 @@ /obj/item/stamp/clown = 1, /obj/item/toy/crayon/rainbow = 1, /obj/item/reagent_containers/spray/waterflower = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 1, + /obj/item/food/snacks/grown/banana = 1, ) shoes = /obj/item/clothing/shoes/clown_shoes diff --git a/code/datums/outfits/outfit_debug.dm b/code/datums/outfits/outfit_debug.dm index 28460989c297..e992aed1af2a 100644 --- a/code/datums/outfits/outfit_debug.dm +++ b/code/datums/outfits/outfit_debug.dm @@ -40,6 +40,11 @@ if(istype(I)) apply_to_card(I, H, get_all_accesses(), "Debugger", "admin") + H.dna.SetSEState(GLOB.breathlessblock, 1) + singlemutcheck(H, GLOB.breathlessblock, MUTCHK_FORCED) + H.dna.default_blocks.Add(GLOB.breathlessblock) + H.check_mutations = 1 + /obj/item/radio/headset/centcom/debug name = "AVD-CNED bowman headset" ks2type = /obj/item/encryptionkey/syndicate/all_channels @@ -62,10 +67,10 @@ to_chat(user, "You switch [src] to [change_voice ? "" : "not "]change your voice on syndicate communications.") /obj/item/encryptionkey/syndicate/all_channels/AltClick(mob/user) - var/new_name = stripped_input(user, "Enter new fake agent name...", "New name") + var/new_name = tgui_input_text(user, "Enter new fake agent name...", "New name", max_length = MAX_NAME_LEN) if(!new_name) return - fake_name = copytext(new_name, 1, MAX_NAME_LEN + 1) + fake_name = new_name /obj/item/clothing/mask/gas/welding/advanced name = "AVD-CNED welding mask" @@ -313,7 +318,7 @@ // put cool admin-only shit here :) /obj/item/storage/box/debug/misc_debug/populate_contents() new /obj/item/badminBook(src) - new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src) + new /obj/item/reagent_containers/drinks/bottle/vodka/badminka(src) new /obj/item/crowbar/power(src) // >admin only lol new /obj/item/clothing/gloves/fingerless/rapid/admin(src) new /obj/item/clothing/under/misc/acj(src) diff --git a/code/datums/pathfinding_mover.dm b/code/datums/pathfinding_mover.dm new file mode 100644 index 000000000000..fe168adc2fcc --- /dev/null +++ b/code/datums/pathfinding_mover.dm @@ -0,0 +1,128 @@ +/** + * A generalized datum for pathfinding, and moving to a target. + */ + +/datum/pathfinding_mover + /// Can be a simplemob bot, a drone, or even a pathfinding modsuit module (currently only implemented for drones) + VAR_PRIVATE/atom/movable/owner + /// The target turf we are after + VAR_PRIVATE/turf/target + + /// List of turfs through which a mod 'steps' to reach the waypoint + VAR_PRIVATE/list/path = list() + /// max amount of tries before resetting path to null + var/max_tries = 10 + /// How many times have we tried to move? + VAR_PRIVATE/tries = 0 + /// How many 2-tick delays per move (5 = 1 second) + var/move_speed = 2 + /// A counter for move_speed via modulo + VAR_PRIVATE/move_ticks = 0 + + /// Callback invoked on failure + var/datum/callback/on_set_path_null + /// Callback invoked on success + var/datum/callback/on_success + + /// The delay called as part of Move() + VAR_PRIVATE/atom/movable/owner_move_delay = 0 + /// Do we consider movement delay? Disable for non-mobs + var/consider_movement_delay = TRUE + /// Requires `consider_movement_delay = TRUE`, saves the last movement delay to prevent diagonal weirdness + VAR_PRIVATE/last_movement_delay + + +/datum/pathfinding_mover/New(_owner, _target) + target = _target + + owner = _owner + if(ismob(owner)) + var/mob/M = owner + owner_move_delay = M.movement_delay() + RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(signal_qdel)) + +/datum/pathfinding_mover/Destroy(force, ...) + UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/datum/pathfinding_mover/proc/generate_path(...) + set_path(get_path_to(arglist(list(owner, target) + args))) + return (length(path) > 0) + +/datum/pathfinding_mover/proc/set_target(atom/new_target) + if(!isatom(new_target)) + target = null + return + target = get_turf(new_target) + +/datum/pathfinding_mover/proc/set_path(list/newpath) + PRIVATE_PROC(TRUE) + + if(newpath == null) + on_set_path_null?.Invoke() // This is seperate to prevent invoking the callback if calling from generate_path + path = newpath ? newpath : list() + if(!length(path)) // Because newpath could be an empty list + STOP_PROCESSING(SSfastprocess, src) + tries = 0 + +/** + * Start moving towards our target, returns false if the path does not lead to the target + */ +/datum/pathfinding_mover/proc/start() + if(!target || !length(path)) // Pathfinding failed or a path/destination was not set. + set_path(null) + return FALSE + + var/turf/last_node = get_turf(path[length(path)]) // This is the turf at the end of the path + if(target != last_node) // The path should lead us to our given destination. If this is not true, we must stop. + set_path(null) + return FALSE + + START_PROCESSING(SSfastprocess, src) + return TRUE + +/** + * Using fast process, see if we should take the next step yet + */ +/datum/pathfinding_mover/process(wait) // 2 on fast process + move_ticks++ + if(move_speed && (move_ticks < move_speed)) + return + if(consider_movement_delay && (last_movement_delay > (move_ticks * wait))) + return + move_ticks = 0 + + if(tries >= max_tries) + set_path(null) + return // PROCESS_KILL called with set_path(null) + + if(get_turf(owner) == target) // We have arrived, no need to move again. + on_success?.Invoke(src) + return PROCESS_KILL + + generalized_step() + +/** + * Take our next step in our pathfinding algorithm + */ +/datum/pathfinding_mover/proc/generalized_step() // Step, increase tries if failed + PRIVATE_PROC(TRUE) + if(!length(path)) + return + + var/targetted_direction = get_dir(owner, path[1]) + + var/delay = owner_move_delay + if(IS_DIR_DIAGONAL(targetted_direction)) + delay *= SQRT_2 + + if(!owner.Move(path[1], targetted_direction, delay)) + tries++ + return + tries = 0 + if(consider_movement_delay) + last_movement_delay = delay + + // Increment the path + path.Cut(1, 2) diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm index a771be3430b3..41adb4a18829 100644 --- a/code/datums/pipe_datums.dm +++ b/code/datums/pipe_datums.dm @@ -228,7 +228,7 @@ GLOBAL_LIST_EMPTY(rpd_pipe_list) //Some pipes we don't want to be dispensable pipe_name = "passive vent" pipe_id = PIPE_PASV_VENT orientations = 4 - pipe_icon = "passive vent" + pipe_icon = "passive_vent" pipe_category = RPD_DEVICES rpd_dispensable = TRUE @@ -343,15 +343,6 @@ GLOBAL_LIST_EMPTY(rpd_pipe_list) //Some pipes we don't want to be dispensable pipe_id = PIPE_CIRCULATOR pipe_icon = "circ" -/datum/pipes/atmospheric/insulated - pipe_name = "insulated pipe" - pipe_id = PIPE_INSULATED_STRAIGHT - pipe_icon = "insulated" - -/datum/pipes/atmospheric/insulated/bent - pipe_name = "bent insulated pipe" - pipe_id = PIPE_INSULATED_BENT - /datum/pipes/disposal/left_sortjunction pipe_name = "disposals sort junction left" pipe_id = PIPE_DISPOSALS_SORT_LEFT diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 484b8d5bc50e..3582772446ae 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -36,7 +36,7 @@ /datum/recipe var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice var/list/items // example: =list(/obj/item/crowbar, /obj/item/welder) // place /foo/bar before /foo - var/result //example: = /obj/item/reagent_containers/food/snacks/donut + var/result //example: = /obj/item/food/snacks/donut var/time = 100 // 1/10 part of second /// Whether or not an upgraded kitchen machine will create more products using the same amount of ingredients var/duplicate = TRUE diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index af4b272b4d1a..83c2b9ef7b2c 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -6,10 +6,13 @@ qdel(src) owner = new_owner -/datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/ui_state/state = GLOB.observer_state, datum/tgui/master_ui = null) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/spawners_menu/ui_state(mob/user) + return GLOB.observer_state + +/datum/spawners_menu/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SpawnersMenu", "Spawners Menu", 700, 600, master_ui, state = state) + ui = new(user, src, "SpawnersMenu", "Spawners Menu") ui.open() /datum/spawners_menu/ui_data(mob/user) @@ -43,8 +46,9 @@ /datum/spawners_menu/ui_act(action, params) if(..()) return - var/spawners = replacetext(params["ID"], ",", ";") - var/list/possible_spawners = params2list(spawners) + var/list/possible_spawners = params["ID"] + if(!length(possible_spawners)) + return var/obj/effect/mob_spawn/MS = locate(pick(possible_spawners)) if(!MS || !istype(MS)) CRASH("A ghost tried to interact with an invalid spawner, or the spawner didn't exist.") diff --git a/code/datums/spell.dm b/code/datums/spell.dm index eac5f40356d8..3cd988a06247 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -461,6 +461,10 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existant vars return +///This proc is ran when a mind is transfered to a new mob. Tells it if the action should be transfered on return true, and tells it not to remove it on false +/obj/effect/proc_holder/spell/proc/on_mind_transfer(mob/living/L) + return TRUE + /obj/effect/proc_holder/spell/aoe name = "Spell" create_attack_logs = FALSE diff --git a/code/datums/spell_targeting/clicked_atom.dm b/code/datums/spell_targeting/clicked_atom.dm index 279d28e1cde0..d851edf993ec 100644 --- a/code/datums/spell_targeting/clicked_atom.dm +++ b/code/datums/spell_targeting/clicked_atom.dm @@ -7,6 +7,10 @@ /datum/spell_targeting/clicked_atom/choose_targets(mob/user, obj/effect/proc_holder/spell/spell, params, atom/clicked_atom) if(clicked_atom) return list(clicked_atom) - else - return null +/datum/spell_targeting/clicked_atom/external/choose_targets(mob/user, obj/effect/proc_holder/spell/spell, params, atom/clicked_atom) + . = ..() + if(!.) + return list() + if(!isturf(clicked_atom.loc) && !isturf(clicked_atom)) + return list() diff --git a/code/datums/spells/alien_spells/basetype_alien_spell.dm b/code/datums/spells/alien_spells/basetype_alien_spell.dm index 3cacc2e8e022..c4413e45d907 100644 --- a/code/datums/spells/alien_spells/basetype_alien_spell.dm +++ b/code/datums/spells/alien_spells/basetype_alien_spell.dm @@ -20,8 +20,7 @@ Updates the spell's actions on use as well, so they know when they can or can't /obj/effect/proc_holder/spell/alien_spell action_background_icon_state = "bg_alien" clothes_req = FALSE - /// Extremely fast cooldown, only present so the cooldown system doesn't explode - base_cooldown = 1 + base_cooldown = 0 create_attack_logs = FALSE /// Every alien spell creates only logs, no attack messages on someone placing weeds, but you DO get attack messages on neurotoxin and corrosive acid create_custom_logs = TRUE diff --git a/code/datums/spells/alien_spells/build_resin_structure.dm b/code/datums/spells/alien_spells/build_resin_structure.dm index aadbcabcdeaf..9da55a22ebf1 100644 --- a/code/datums/spells/alien_spells/build_resin_structure.dm +++ b/code/datums/spells/alien_spells/build_resin_structure.dm @@ -8,14 +8,18 @@ return new /datum/spell_targeting/self /obj/effect/proc_holder/spell/alien_spell/build_resin/cast(list/targets, mob/living/carbon/user) - var/static/list/resin_buildings = list("Resin Wall (55)" = image(icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi', icon_state = "resin_wall-0"), - "Resin Nest (55)" = image(icon = 'icons/mob/alien.dmi', icon_state = "nest"), - "Resin door (80)" = image(icon = 'icons/obj/smooth_structures/alien/resin_door.dmi', icon_state = "resin")) + var/static/list/resin_buildings = list("Resin Wall" = image(icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi', icon_state = "resin_wall-0"), + "Resin Nest" = image(icon = 'icons/mob/alien.dmi', icon_state = "nest"), + "Resin Door" = image(icon = 'icons/obj/smooth_structures/alien/resin_door.dmi', icon_state = "resin"), + "Revival Nest" = image(icon = 'icons/mob/alien.dmi', icon_state = "placeholder_rejuv_nest")) var/choice = show_radial_menu(user, user, resin_buildings, src, radius = 40) var/turf/turf_to_spawn_at = user.loc if(!choice) revert_cast(user) return + if(!do_mob(user, user, 3 SECONDS)) + revert_cast() + return if(isspaceturf(turf_to_spawn_at)) to_chat(user, "You cannot build the [choice] while in space!") revert_cast(user) @@ -27,15 +31,52 @@ return visible_message("[user] vomits up a thick purple substance and shapes it!") switch(choice) - if("Resin Wall (55)") + if("Resin Wall") new /obj/structure/alien/resin/wall(turf_to_spawn_at) - if("Resin Nest (55)") + if("Resin Nest") new /obj/structure/bed/nest(turf_to_spawn_at) - if("Resin door (80)") - var/plasma_current = user.get_plasma() - if(plasma_current >= 25) - new /obj/structure/alien/resin/door(turf_to_spawn_at) - user.add_plasma(-25) - return - to_chat(user, "You don't have enough plasma to place a door down.") - revert_cast(user) + if("Resin Door") + new /obj/structure/alien/resin/door(turf_to_spawn_at) + if("Revival Nest") + new /obj/structure/bed/revival_nest(turf_to_spawn_at) + +/obj/effect/proc_holder/spell/touch/alien_spell/consume_resin + name = "Consume resin structures" + desc = "Allows you to rip and tear straight through resin structures." + action_icon_state = "alien_resin" + hand_path = "/obj/item/melee/touch_attack/alien/consume_resin" + plasma_cost = 10 + base_cooldown = 5 SECONDS + +/obj/item/melee/touch_attack/alien/consume_resin + name = "Resin consumption" + desc = "The hunger..." + icon_state = "alien_acid" + +/obj/item/melee/touch_attack/alien/consume_resin/afterattack(atom/target, mob/living/carbon/user, proximity) + if(target == user) + to_chat(user, "You stop trying to consume resin.") + ..() + return + if(!proximity || !iscarbon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return + if(istype(target, /obj/structure/alien/weeds)) + qdel(target) + if(istype(target, /obj/structure/alien/weeds/node)) + user.add_plasma(50) + user.visible_message("[user] rips and tears into [target] with their teeth!", "You viciously rip apart and consume [target]!") + return + if(!plasma_check(10, user)) + to_chat(user, "You don't have enough plasma to perform this action!") + return + var/static/list/resin_objects = list(/obj/structure/alien/resin, /obj/structure/alien/egg, /obj/structure/bed/nest, /obj/structure/bed/revival_nest) + for(var/resin_type in resin_objects) + if(!istype(target, resin_type)) + continue + user.visible_message("[user] rips and tears into [target] with their teeth!") + if(!do_after(user, 3 SECONDS, target = target)) + return + to_chat(user, "You viciously rip apart and consume [target]!") + user.add_plasma(-10) + qdel(target) + ..() diff --git a/code/datums/spells/alien_spells/corrosive_acid_spit.dm b/code/datums/spells/alien_spells/corrosive_acid_spit.dm index 18a58b9494bf..17e7756f7c70 100644 --- a/code/datums/spells/alien_spells/corrosive_acid_spit.dm +++ b/code/datums/spells/alien_spells/corrosive_acid_spit.dm @@ -4,6 +4,7 @@ hand_path = "/obj/item/melee/touch_attack/alien/corrosive_acid" action_icon_state = "alien_acid" plasma_cost = 200 + base_cooldown = 15 SECONDS /obj/item/melee/touch_attack/alien/corrosive_acid name = "Corrosive acid" @@ -30,3 +31,45 @@ else to_chat(user, "You cannot dissolve this object.") ..() + +/obj/effect/proc_holder/spell/touch/alien_spell/burning_touch + name = "Blazing touch" + desc = "Boil acid within your hand to burn through anything you touch with it, deals a lot of damage to aliens and destroys resin structures instantly." + hand_path = "/obj/item/melee/touch_attack/alien/burning_touch" + action_icon_state = "alien_acid" + plasma_cost = 100 + base_cooldown = 10 SECONDS + +/obj/item/melee/touch_attack/alien/burning_touch + name = "Blazing touch" + desc = "The air warps around your hand, somehow the heat doesn't hurt." + icon_state = "alien_acid" + +/obj/item/melee/touch_attack/alien/burning_touch/afterattack(atom/target, mob/living/carbon/user, proximity) + if(target == user) + to_chat(user, "You cool down your boiled aid.") + ..() + return + if(!proximity || !iscarbon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return + if(!plasma_check(100, user)) + to_chat(user, "You don't have enough plasma to perform this action!") + return + if(isliving(target)) + var/mob/living/guy_to_burn = target + add_attack_logs(user, target, "Applied blazing touch") // Want this logged + guy_to_burn.adjustFireLoss(60) + guy_to_burn.adjust_fire_stacks(3) + guy_to_burn.IgniteMob() + user.visible_message("[user] touches [target] and a fireball erupts on contact!") + user.add_plasma(-100) + ..() + else + var/static/list/resin_objects = list(/obj/structure/alien/resin, /obj/structure/alien/egg, /obj/structure/bed/nest, /obj/structure/bed/revival_nest) + for(var/resin_type in resin_objects) + if(!istype(target, resin_type)) + continue + user.visible_message("[user] touches [target] and burns right through it!") + user.add_plasma(-100) + qdel(target) + ..() diff --git a/code/datums/spells/alien_spells/lay_alien_eggs.dm b/code/datums/spells/alien_spells/lay_alien_eggs.dm index 7789420e1c31..f2bfc89011f4 100644 --- a/code/datums/spells/alien_spells/lay_alien_eggs.dm +++ b/code/datums/spells/alien_spells/lay_alien_eggs.dm @@ -5,3 +5,35 @@ weed_type = /obj/structure/alien/egg weed_name = "alien egg" action_icon_state = "alien_egg" + requires_do_after = FALSE + +/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers + name = "Combust facehuggers and eggs" + desc = "Take over the programming of facehuggers and eggs, sending out a shockwave which causes them to combust." + plasma_cost = 25 + action_icon_state = "alien_egg" + base_cooldown = 3 SECONDS + +/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers/create_new_targeting() + return new /datum/spell_targeting/clicked_atom + +/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers/cast(list/targets, mob/living/carbon/user) + var/obj/target = targets[1] + var/turf/T = user.loc + if(!istype(T) || !istype(target)) + revert_cast() + return FALSE + + if(!istype(target, /obj/item/clothing/mask/facehugger) && !istype(target, /obj/structure/alien/egg)) + revert_cast() + return FALSE + + target.color = "#c72623" + addtimer(CALLBACK(src, PROC_REF(blow_it_up), target, user), 3 SECONDS) + to_chat(user, "[target] will explode in 3 seconds!") + return TRUE + +/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers/proc/blow_it_up(obj/target, mob/user) + add_attack_logs(user, target, "Caused it to explode") + explosion(get_turf(target), 0, 2, 3, 3, cause = user) + to_chat(user, "[target] has detonated!") diff --git a/code/datums/spells/alien_spells/neurotoxin_spit.dm b/code/datums/spells/alien_spells/neurotoxin_spit.dm index ca688886d131..ad4048f53a17 100644 --- a/code/datums/spells/alien_spells/neurotoxin_spit.dm +++ b/code/datums/spells/alien_spells/neurotoxin_spit.dm @@ -1,7 +1,7 @@ /obj/effect/proc_holder/spell/alien_spell/neurotoxin name = "Neurotoxin spit" desc = "This ability allows you to fire some neurotoxin. Knocks down anyone you hit, applies a small amount of stamina damage as well." - base_cooldown = 5 SECONDS + base_cooldown = 3 SECONDS plasma_cost = 50 selection_activated_message = "Your prepare some neurotoxin!" selection_deactivated_message = "You swallow your prepared neurotoxin." @@ -34,3 +34,9 @@ user.newtonian_move(get_dir(U, T)) return TRUE + +/obj/effect/proc_holder/spell/alien_spell/neurotoxin/death_to_xenos + name = "Neurotoxin spit" + desc = "This ability allows you to fire some neurotoxin. Knocks aliens down." + neurotoxin_type = /obj/item/projectile/bullet/anti_alien_toxin + base_cooldown = 2 SECONDS diff --git a/code/datums/spells/alien_spells/plasma_weeds.dm b/code/datums/spells/alien_spells/plasma_weeds.dm index c816475f7ea4..b254403bc6e2 100644 --- a/code/datums/spells/alien_spells/plasma_weeds.dm +++ b/code/datums/spells/alien_spells/plasma_weeds.dm @@ -2,9 +2,10 @@ name = "Plant weeds" desc = "Allows you to plant some alien weeds on the floor below you. Does not work while in space." plasma_cost = 50 - var/weed_type = /obj/structure/alien/weeds/node + var/atom/weed_type = /obj/structure/alien/weeds/node var/weed_name = "alien weed node" action_icon_state = "alien_plant" + var/requires_do_after = TRUE /obj/effect/proc_holder/spell/alien_spell/plant_weeds/create_new_targeting() return new /datum/spell_targeting/self @@ -26,5 +27,10 @@ revert_cast() return + user.visible_message("Vines burst from the back of [user], quickly scurring to the ground and swarm onto [user.loc].", "You begin infesting [user.loc] with [initial(weed_type.name)].") + if(requires_do_after && !do_mob(user, user, 2 SECONDS)) + revert_cast() + return + user.visible_message("[user] has planted \a [weed_name]!") new weed_type(T) diff --git a/code/datums/spells/alien_spells/queen_evolve.dm b/code/datums/spells/alien_spells/queen_evolve.dm index e8112f0506cb..75502cfcd690 100644 --- a/code/datums/spells/alien_spells/queen_evolve.dm +++ b/code/datums/spells/alien_spells/queen_evolve.dm @@ -1,7 +1,7 @@ /obj/effect/proc_holder/spell/alien_spell/evolve_queen name = "Evolve into an alien queen" desc = "Evolve into an alien queen." - plasma_cost = 500 + plasma_cost = 300 action_icon_state = "alien_evolve_drone" /obj/effect/proc_holder/spell/alien_spell/evolve_queen/create_new_targeting() @@ -17,8 +17,7 @@ // If there is no queen, that means we can evolve to_chat(user, "You begin to evolve!") user.visible_message("[user] begins to twist and contort!") - var/turf/userloc = user.loc - var/mob/living/carbon/alien/humanoid/queen/new_xeno = new(userloc) + var/mob/living/carbon/alien/humanoid/queen/new_xeno = new(get_turf(user)) user.mind.transfer_to(new_xeno) new_xeno.mind.name = new_xeno.name SSblackbox.record_feedback("tally", "alien_growth", 1, "queen") diff --git a/code/datums/spells/alien_spells/regurgitate.dm b/code/datums/spells/alien_spells/regurgitate.dm index effd0a9629bf..02960c88afb3 100644 --- a/code/datums/spells/alien_spells/regurgitate.dm +++ b/code/datums/spells/alien_spells/regurgitate.dm @@ -9,6 +9,9 @@ /obj/effect/proc_holder/spell/alien_spell/regurgitate/cast(list/targets, mob/living/carbon/user) for(var/mob/M in user.stomach_contents) var/turf/output_loc = user.loc + if(!istype(output_loc)) + return + user.stomach_contents -= M M.forceMove(output_loc) visible_message("[user] hurls out the contents of [p_their()] stomach!") return diff --git a/code/datums/spells/alien_spells/tail_lash.dm b/code/datums/spells/alien_spells/tail_lash.dm new file mode 100644 index 000000000000..0daa1e8a6a04 --- /dev/null +++ b/code/datums/spells/alien_spells/tail_lash.dm @@ -0,0 +1,23 @@ +/obj/effect/proc_holder/spell/alien_spell/tail_lash + name = "Tail lash" + desc = "Knocks down anyone around you." + action_icon_state = "tailsweep" + base_cooldown = 10 SECONDS + +/obj/effect/proc_holder/spell/alien_spell/tail_lash/create_new_targeting() + return new /datum/spell_targeting/self + +/obj/effect/proc_holder/spell/alien_spell/tail_lash/cast(list/targets, mob/user) + var/turf/T = user.loc + var/cast_resolved = FALSE + if(!istype(T)) + revert_cast() + return + for(var/mob/living/to_knock_down in orange(1, user)) + if(to_knock_down.KnockDown(10 SECONDS)) + cast_resolved = TRUE + to_knock_down.visible_message("[user] sweeps [to_knock_down] off their feet!") + if(!cast_resolved) + revert_cast() + + return cast_resolved diff --git a/code/datums/spells/alien_spells/transfer_plasma.dm b/code/datums/spells/alien_spells/transfer_plasma.dm index 1edf34dfa673..3ab94da1daf0 100644 --- a/code/datums/spells/alien_spells/transfer_plasma.dm +++ b/code/datums/spells/alien_spells/transfer_plasma.dm @@ -1,28 +1,55 @@ -/obj/effect/proc_holder/spell/touch/alien_spell/transfer_plasma +/obj/effect/proc_holder/spell/alien_spell/transfer_plasma name = "Transfer Plasma" desc = "Transfers 50 plasma to a nearby alien" - hand_path = "/obj/item/melee/touch_attack/alien/transfer_plasma" action_icon_state = "alien_transfer" plasma_cost = 50 -/obj/item/melee/touch_attack/alien/transfer_plasma - name = "plasma transfer" - desc = "Transfers 50 plasma to another alien." - icon_state = "alien_transfer" +/obj/effect/proc_holder/spell/alien_spell/transfer_plasma/create_new_targeting() + return new /datum/spell_targeting/clicked_atom -/obj/item/melee/touch_attack/alien/transfer_plasma/afterattack(atom/target, mob/living/carbon/user, proximity) - if(target == user) - to_chat(user, "You withdraw your readied plasma.") - ..() - return - if(!proximity || !isalien(target) || !iscarbon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) - return - if(!plasma_check(50, user)) - to_chat(user, "You don't have enough plasma to perform this action!") +/obj/effect/proc_holder/spell/alien_spell/transfer_plasma/cast(list/targets, mob/living/carbon/user) + var/mob/living/carbon/alien/target = targets[1] + var/turf/T = user.loc + if(!istype(T) || !istype(target)) + revert_cast() + return FALSE + + user.Beam(target, icon_state = "sendbeam", time = 2 SECONDS, beam_color = "#f180bd") + target.add_plasma(50) + to_chat(user, "You have transfered 50 plasma to [target].") + to_chat(target, "[user] has transfered 50 plasma to you!") + return TRUE + +/obj/effect/proc_holder/spell/alien_spell/syphon_plasma + name = "Syphon plasma" + desc = "Syphons 150 plasma from a nearby alien." + action_icon_state = "alien_transfer" + plasma_cost = 0 + base_cooldown = 10 SECONDS + +/obj/effect/proc_holder/spell/alien_spell/syphon_plasma/create_new_targeting() + return new /datum/spell_targeting/clicked_atom + +/obj/effect/proc_holder/spell/alien_spell/syphon_plasma/cast(list/targets, mob/living/carbon/user) + var/mob/living/carbon/alien/target = targets[1] + var/turf/T = user.loc + if(!istype(T) || !istype(target)) + revert_cast() + return FALSE + + user.Beam(target, icon_state = "drainbeam", time = 2 SECONDS, beam_color = "#f180bd") + var/obj/item/organ/internal/alien/plasmavessel/vessel = target.get_int_organ(/obj/item/organ/internal/alien/plasmavessel) + if(!vessel) return - user.add_plasma(-50) - var/mob/living/carbon/transfering_to = target - transfering_to.add_plasma(50) - to_chat(user, "You have transfered 50 plasma to [transfering_to].") - to_chat(transfering_to, "[user] has transfered 50 plasma to you!") - ..() + var/plasma_syphoned + if(vessel.stored_plasma < 150) + user.add_plasma(vessel.stored_plasma) + plasma_syphoned = vessel.stored_plasma + vessel.stored_plasma = 0 + else + user.add_plasma(150) + plasma_syphoned = 50 + vessel.stored_plasma = vessel.stored_plasma - 150 + to_chat(user, "You have syphoned [plasma_syphoned] plasma from [target].") + to_chat(target, "[user] has syphoned [plasma_syphoned] from you!") + return TRUE diff --git a/code/datums/spells/alien_spells/whisper.dm b/code/datums/spells/alien_spells/whisper.dm index 22febebc1f90..0f5369d04358 100644 --- a/code/datums/spells/alien_spells/whisper.dm +++ b/code/datums/spells/alien_spells/whisper.dm @@ -17,7 +17,7 @@ /obj/effect/proc_holder/spell/alien_spell/whisper/cast(list/targets, mob/living/carbon/user) var/mob/living/target = targets[1] - var/msg = sanitize(input("Message:", "Alien Whisper") as text|null) + var/msg = tgui_input_text(user, "Message:", "Alien Whisper") if(!msg) revert_cast(user) return diff --git a/code/datums/spells/area_teleport.dm b/code/datums/spells/area_teleport.dm index 80ad56996f83..60502ffbe86a 100644 --- a/code/datums/spells/area_teleport.dm +++ b/code/datums/spells/area_teleport.dm @@ -11,18 +11,18 @@ /obj/effect/proc_holder/spell/area_teleport/before_cast(list/targets, mob/user) ..() selected_area = null // Reset it - var/A + var/area_name if(!randomise_selection) - A = input("Area to teleport to", "Teleport", A) as null|anything in SSmapping.teleportlocs + area_name = tgui_input_list(user, "Area to teleport to", "Teleport", SSmapping.teleportlocs) else - A = pick(SSmapping.teleportlocs) + area_name = pick(SSmapping.teleportlocs) - if(!A) + if(!area_name) smoke_type = SMOKE_NONE return - var/area/thearea = SSmapping.teleportlocs[A] + var/area/thearea = SSmapping.teleportlocs[area_name] if(thearea.tele_proof && !istype(thearea, /area/wizard_station)) to_chat(user, "A mysterious force disrupts your arcane spell matrix, and you remain where you are.") diff --git a/code/datums/spells/chaplain_bless.dm b/code/datums/spells/chaplain_bless.dm index 8c88be8ba550..70b8eb8e7082 100644 --- a/code/datums/spells/chaplain_bless.dm +++ b/code/datums/spells/chaplain_bless.dm @@ -42,7 +42,7 @@ var/mob/living/carbon/human/target = targets[1] spawn(0) // allows cast to complete even if recipient ignores the prompt - if(alert(target, "[user] wants to bless you, in the name of [user.p_their()] religion. Accept?", "Accept Blessing?", "Yes", "No") == "Yes") // prevents forced conversions + if(tgui_alert(target, "[user] wants to bless you, in the name of [user.p_their()] religion. Accept?", "Accept Blessing?", list("Yes", "No")) == "Yes") // prevents forced conversions user.visible_message("[user] starts blessing [target] in the name of [SSticker.Bible_deity_name].", "You start blessing [target] in the name of [SSticker.Bible_deity_name].") if(do_after(user, 150, target = target)) user.visible_message("[user] has blessed [target] in the name of [SSticker.Bible_deity_name].", "You have blessed [target] in the name of [SSticker.Bible_deity_name].") diff --git a/code/datums/spells/cluwne.dm b/code/datums/spells/cluwne.dm index 34d2a86aeaf3..eeaed56ac114 100644 --- a/code/datums/spells/cluwne.dm +++ b/code/datums/spells/cluwne.dm @@ -12,6 +12,11 @@ action_icon_state = "cluwne" /mob/living/carbon/human/proc/makeCluwne() + if(istype(back, /obj/item/mod/control)) // Check if the target is wearing a modsuit + var/obj/item/mod/control/modsuit_control = back + if(istype(wear_suit, /obj/item/clothing/suit/mod)) // Check if the modsuit is deployed + modsuit_control.active = FALSE // Instantly deactivate the modsuit - if it was activated + modsuit_control.quick_deploy(src) // The modsuit is no longer deployed to_chat(src, "You feel funny.") if(!get_int_organ(/obj/item/organ/internal/brain/cluwne)) var/obj/item/organ/internal/brain/cluwne/idiot_brain = new diff --git a/code/datums/spells/disguise_self.dm b/code/datums/spells/disguise_self.dm new file mode 100644 index 000000000000..f45f3d226546 --- /dev/null +++ b/code/datums/spells/disguise_self.dm @@ -0,0 +1,22 @@ +/obj/effect/proc_holder/spell/disguise_self + name = "Disguise Self" + desc = "Disguise yourself as a crewmember, based on your current location. Also changes your voice. \ + The disguise will not hold up to being examined directly, and will break if you're damaged." + + school = "illusion" + base_cooldown = 10 SECONDS + clothes_req = FALSE + invocation = "Yutake Yutendes" + invocation_type = "whisper" + level_max = 0 //cannot be improved + action_icon_state = "disguise_self" + sound = null + +/obj/effect/proc_holder/spell/disguise_self/create_new_targeting() + return new /datum/spell_targeting/self + +/obj/effect/proc_holder/spell/disguise_self/cast(list/targets, mob/user = usr) + if(!ishuman(user)) + return FALSE + var/mob/living/carbon/human/H = user + H.apply_status_effect(STATUS_EFFECT_MAGIC_DISGUISE) diff --git a/code/datums/spells/mimic.dm b/code/datums/spells/mimic.dm index 4d807f4baaff..b7fe668761d9 100644 --- a/code/datums/spells/mimic.dm +++ b/code/datums/spells/mimic.dm @@ -188,7 +188,6 @@ examine_text = form.examine(user) name = form.name - /obj/effect/proc_holder/spell/mimic/morph action_background_icon_state = "bg_morph" diff --git a/code/datums/spells/wizard_spells.dm b/code/datums/spells/wizard_spells.dm index 8951fb00ffc2..e68728e9c4fc 100644 --- a/code/datums/spells/wizard_spells.dm +++ b/code/datums/spells/wizard_spells.dm @@ -359,7 +359,7 @@ centcom_cancast = FALSE /obj/effect/proc_holder/spell/fireball/create_new_targeting() - var/datum/spell_targeting/clicked_atom/C = new() + var/datum/spell_targeting/clicked_atom/external/C = new() C.range = 20 return C diff --git a/code/datums/station_traits/admin_panel.dm b/code/datums/station_traits/admin_panel.dm index 27c16dd2909d..9e088d8ea610 100644 --- a/code/datums/station_traits/admin_panel.dm +++ b/code/datums/station_traits/admin_panel.dm @@ -80,10 +80,8 @@ var/list/new_future_traits = list() var/list/station_trait_names = list() - var/station_trait_text = params["station_traits"] - var/list/temp_list = splittext(station_trait_text, ",") - for(var/thing in temp_list) //TODO QWERTY / HI REVIEWERS NAME THIS BETTER BUT ITS ALMOST MIDNIGHT AND i HATE MYSELF - var/datum/station_trait/station_trait_path = text2path(thing) + for(var/station_trait_text in params["station_traits"]) + var/datum/station_trait/station_trait_path = text2path(station_trait_text) if(!ispath(station_trait_path, /datum/station_trait) || station_trait_path == /datum/station_trait) log_admin("[key_name(ui.user)] tried to set an invalid future station trait: [station_trait_text]") to_chat(ui.user, "Invalid future station trait: [station_trait_text]") @@ -126,8 +124,11 @@ /datum/ui_module/station_traits_panel/proc/too_late_to_revert() return SSticker.current_state >= GAME_STATE_PLAYING -/datum/ui_module/station_traits_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/station_traits_panel/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/station_traits_panel/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "StationTraitsPanel", "Station Traits Panel", 700, 600, master_ui, state = state) + ui = new(user, src, "StationTraitsPanel") ui.open() diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index 24a56cb3c977..f8fb95e185c2 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -74,7 +74,7 @@ E.weight *= weight_multiplier for(var/role_weight in E.role_weights) E.role_weights[role_weight] *= weight_multiplier - if(disable_is_one_shot == TRUE) + if(disable_is_one_shot) E.one_shot = FALSE modified_event = TRUE if(!modified_event) diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 1374f9d0616d..4661f5efed8c 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -2,14 +2,14 @@ name = "Bananium Shipment" trait_type = STATION_TRAIT_NEUTRAL weight = 5 - report_message = "Rumor has it that the clown planet has been sending support packages to clowns in this system." + report_message = "An unidentified benefactor has dispatched a mysterious shipment to your station's clown. It was reported to smell faintly of bananas." trait_to_give = STATION_TRAIT_BANANIUM_SHIPMENTS -/datum/station_trait/bananium_shipment +/datum/station_trait/tranquilite_shipment name = "Tranquilite Shipment" trait_type = STATION_TRAIT_NEUTRAL weight = 5 - report_message = "Rumor has it that the mime federation has been sending support packages to mimes in this system." + report_message = "Shipping records show an unmarked crate being delivered to your station's mime." trait_to_give = STATION_TRAIT_TRANQUILITE_SHIPMENTS /datum/station_trait/unique_ai diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index d65790632129..61143bc0ccaf 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -747,3 +747,28 @@ /datum/status_effect/bookwyrm duration = BRAIN_DAMAGE_MOB_TIME alert_type = null + +/datum/status_effect/bearserker_rage + id = "bearserker rage" + duration = 5 SECONDS + status_type = STATUS_EFFECT_REFRESH + alert_type = /obj/screen/alert/status_effect/bearserker_rage + +/obj/screen/alert/status_effect/bearserker_rage + name = "Bearserker Rage" + desc = "Blood flows between your fingers, and Foh'Sie roars; \"MORE BLOOD!\"" + icon_state = "bearserker" + +/datum/status_effect/bearserker_rage/on_apply() + . = ..() + if(. && ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.physiology.stamina_mod *= 0.75 + add_attack_logs(owner, owner, "gained bearserker rage resistances", ATKLOG_ALL) + owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, TRUE, use_reverb = FALSE) + +/datum/status_effect/bearserker_rage/on_remove() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.physiology.stamina_mod /= 0.75 + add_attack_logs(owner, owner, "lost bearserker rage resistances", ATKLOG_ALL) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 0839d40d5971..2a2b60997626 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -247,7 +247,7 @@ owner.cut_overlay(overlay) /datum/status_effect/cult_stun_mark/proc/trigger() - owner.adjustStaminaLoss(60) + owner.apply_damage(60, STAMINA) owner.Silence(6 SECONDS) // refresh the silence qdel(src) @@ -1120,6 +1120,17 @@ animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1) animate(offset = 0, time = 10 SECONDS) + +/datum/status_effect/abductor_cooldown + id = "abductor_cooldown" + alert_type = /obj/screen/alert/status_effect/abductor_cooldown + duration = 10 SECONDS + +/obj/screen/alert/status_effect/abductor_cooldown + name = "Teleportation cooldown" + desc = "Per article A-113, all experimentors must wait 10000 milliseconds between teleports in order to ensure no long term genetic or mental damage happens to experimentor or test subjects." + icon_state = "bluespace" + #define DEFAULT_MAX_CURSE_COUNT 5 /// Status effect that gives the target miscellanous debuffs while throwing a status alert and causing them to smoke from the damage they're incurring. diff --git a/code/datums/status_effects/magic_disguise.dm b/code/datums/status_effects/magic_disguise.dm new file mode 100644 index 000000000000..9da1fb8dc39b --- /dev/null +++ b/code/datums/status_effects/magic_disguise.dm @@ -0,0 +1,86 @@ +/datum/status_effect/magic_disguise + id = "magic_disguise" + duration = -1 + tick_interval = -1 + alert_type = /obj/screen/alert/status_effect/magic_disguise + status_type = STATUS_EFFECT_REPLACE + var/datum/icon_snapshot/disguise + +/obj/screen/alert/status_effect/magic_disguise + name = "Disguised" + desc = "You are disguised as a crewmember." + icon = 'icons/mob/actions/actions.dmi' + icon_state = "chameleon_outfit" + +/datum/status_effect/magic_disguise/on_creation(mob/living/new_owner, mob/living/disguise_mob) + . = ..() + if(!ishuman(new_owner)) + return FALSE + if(!disguise_mob) + disguise_mob = select_disguise() + if(disguise_mob && ishuman(disguise_mob)) + create_disguise(disguise_mob) + if(disguise) + apply_disguise(new_owner) + return TRUE + else + to_chat(owner, "Your spell fails to find a disguise!") + return FALSE + +/datum/status_effect/magic_disguise/on_apply() + . = ..() + if(!ishuman(owner)) + return FALSE + + RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(remove_disguise)) + +/datum/status_effect/magic_disguise/on_remove() + owner.regenerate_icons() + ..() + +/datum/status_effect/magic_disguise/proc/select_disguise() + var/obj/machinery/door/airlock/AL + var/area/caster_area + + caster_area = get_area(owner) + for(var/obj/machinery/door/airlock/tmp in view(owner)) + if(get_area(tmp) == caster_area && !(tmp.req_access_txt == "0" && tmp.req_one_access_txt == "0")) //Ignore airlocks that arent in area or are public airlocks + AL = tmp + break + for(var/mob/living/carbon/human/disguise_source in shuffle(GLOB.player_list)) //Pick a random crewmember with access to this room + if((ACCESS_CAPTAIN in disguise_source.get_access()) || (ACCESS_HOP in disguise_source.get_access()) || (ACCESS_CLOWN in disguise_source.get_access())) + continue //We don't want the cap, HOP or clown as a disguise, too remarkable. If you're spotted by the Cap or HOP in their own office, disguising as them wont help you either + if((!AL || AL.allowed(disguise_source)) && !disguise_source.mind.offstation_role && disguise_source != owner) + return disguise_source + for(var/mob/living/carbon/human/backup_source in shuffle(GLOB.player_list)) //Pick a random crewmember if there's no one with access to the current room + if((ACCESS_CAPTAIN in backup_source.get_access()) || (ACCESS_HOP in backup_source.get_access()) || (ACCESS_CLOWN in backup_source.get_access())) + continue //ditto + if(!backup_source.mind.offstation_role && backup_source != owner) + return backup_source + return + +/datum/status_effect/magic_disguise/proc/create_disguise(mob/living/carbon/human/disguise_source) + var/datum/icon_snapshot/temp = new + temp.name = disguise_source.name + temp.icon = disguise_source.icon + temp.icon_state = disguise_source.icon_state + temp.overlays = disguise_source.get_overlays_copy(list(L_HAND_LAYER, R_HAND_LAYER)) + disguise = temp + +/datum/status_effect/magic_disguise/proc/apply_disguise(mob/living/carbon/human/H) + H.name_override = disguise.name + H.icon = disguise.icon + H.icon_state = disguise.icon_state + H.overlays = disguise.overlays + H.update_inv_r_hand() + H.update_inv_l_hand() + to_chat(H, "You disguise yourself as [disguise.name].") + +/datum/status_effect/magic_disguise/proc/remove_disguise() + SIGNAL_HANDLER // COMSIG_MOB_APPLY_DAMAGE + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + H.name_override = null + H.overlays.Cut() + qdel(src) diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index ff77a3edfaaf..2634cd51b5ed 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -374,6 +374,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/toy/plushie/carpplushie/dehy_carp cost = 4 +/datum/uplink_item/stealthy_weapons/knuckleduster + name = "Syndicate Knuckleduster" + desc = "A straightforward and fairly concealable melee weapon for bludgeoning someone to death in brutal fashion. This one is designed specifically to cause severe organ damage to the victim." + reference = "SKD" + item = /obj/item/melee/knuckleduster/syndie + cost = 10 + cant_discount = TRUE // GRENADES AND EXPLOSIVES @@ -796,6 +803,29 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/bio_chip_implanter/stealth cost = 45 +// CYBERNETICS + +/datum/uplink_item/cyber_implants + category = "Cybernetic Implants" + +/datum/uplink_item/cyber_implants/hackerman_deck + name = "Binyat Wireless Hacking System Autoimplanter" + desc = "This implant will allow you to wirelessly emag from a distance. However, it will slightly burn you \ + on use, and will be quite visual as you are emaging the object. \ + Will not show on unupgraded body scanners." + reference = "HKR" + item = /obj/item/autosurgeon/organ/syndicate/hackerman_deck + cost = 30 // Probably slightly less useful than an emag with heat / cooldown, but I am not going to make it cheaper or everyone picks it over emag + +/datum/uplink_item/cyber_implants/razorwire + name = "Razorwire Spool Arm Implant Autoimplanter" + desc = "A long length of monomolecular filament, built into the back of your hand. \ + Impossibly thin and flawlessly sharp, it should slice through organic materials with no trouble; \ + even from a few steps away. However, results against anything more durable will heavily vary." + reference = "RZR" + item = /obj/item/autosurgeon/organ/syndicate/razorwire + cost = 15 + // POINTLESS BADASSERY /datum/uplink_item/badass diff --git a/code/datums/uplink_items/uplink_nuclear.dm b/code/datums/uplink_items/uplink_nuclear.dm index 444dd9b696ed..5fbd96465e29 100644 --- a/code/datums/uplink_items/uplink_nuclear.dm +++ b/code/datums/uplink_items/uplink_nuclear.dm @@ -488,7 +488,7 @@ // SPACE SUITS -/datum/uplink_item/suits/hardsuit/elite +/datum/uplink_item/suits/elite_nukie name = "Elite Syndicate MODsuit" desc = "An advanced MODsuit with superior armor and mobility to the standard Syndicate MODsuit." item = /obj/item/mod/control/pre_equipped/elite @@ -497,11 +497,14 @@ excludefrom = list() uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) -/datum/uplink_item/suits/hardsuit/shielded - name = "Shielded Hardsuit" - desc = "An advanced hardsuit with built in energy shielding. The shields will rapidly recharge when not under fire." - item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi - cost = 150 +/datum/uplink_item/suits/shielded + name = "Energy Shield Module" + desc = "A personal, protective forcefield typically seen in military applications. \ + This advanced deflector shield is essentially a scaled down version of those seen on starships, \ + and the power cost can be an easy indicator of this. However, it is capable of blocking nearly any incoming attack, \ + though with its' low amount of separate charges, the user remains mortal." + item = /obj/item/mod/module/energy_shield + cost = 200 reference = "SHS" excludefrom = list() uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) @@ -543,17 +546,14 @@ // CYBERNETICS -/datum/uplink_item/cyber_implants - category = "Cybernetic Implants" - surplus = 0 - uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) - /datum/uplink_item/cyber_implants/thermals name = "Thermal Vision Implant" desc = "These cybernetic eyes will give you thermal vision. Comes with an autosurgeon." reference = "CIT" item = /obj/item/autosurgeon/organ/syndicate/thermal_eyes cost = 40 + surplus = 0 + uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) /datum/uplink_item/cyber_implants/xray name = "X-Ray Vision Implant" @@ -561,6 +561,8 @@ reference = "CIX" item = /obj/item/autosurgeon/organ/syndicate/xray_eyes cost = 50 + surplus = 0 + uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) /datum/uplink_item/cyber_implants/antistun name = "Hardened CNS Rebooter Implant" @@ -568,6 +570,8 @@ reference = "CIAS" item = /obj/item/autosurgeon/organ/syndicate/anti_stam cost = 60 + surplus = 0 + uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) /datum/uplink_item/cyber_implants/reviver name = "Hardened Reviver Implant" @@ -575,6 +579,8 @@ reference = "CIR" item = /obj/item/autosurgeon/organ/syndicate/reviver cost = 40 + surplus = 0 + uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) // BUNDLES diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index ecbd9908794d..7f437119a8b2 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -91,7 +91,7 @@ name = "Chef Excellence's Special Sauce" desc = "A custom sauce made from the highly poisonous fly amanita mushrooms. Anyone who ingests it will take variable toxin damage depending on how long it has been in their system, with a higher dosage taking longer to metabolize." reference = "CESS" - item = /obj/item/reagent_containers/food/condiment/syndisauce + item = /obj/item/reagent_containers/condiment/syndisauce cost = 10 job = list("Chef") surplus = 0 // Far too specific in its use. @@ -206,12 +206,12 @@ //Engineer /datum/uplink_item/jobspecific/powergloves - name = "Power Gloves" - desc = "Insulated gloves that can utilize the power of the station to deliver a short arc of electricity at a target. \ + name = "Power Bio-Chip" + desc = "A Bio-Chip that can utilize the power of the station to deliver a short arc of electricity at a target. \ Must be standing on a powered cable to use. \ - Activated by alt-clicking, or pressing the middle mouse button. Disarm intent will deal stamina damage and cause jittering, while harm intent will deal damage based on the power of the cable you're standing on." + Activated by alt-clicking, or pressing the middle mouse button. Disarm intent will deal stamina damage and cause jittering, while harm intent will deal damage based on the power of the cable you're standing on. Can be toggled on / off via the action button." reference = "PG" - item = /obj/item/clothing/gloves/color/yellow/power + item = /obj/item/bio_chip_implanter/shock cost = 50 job = list("Station Engineer", "Chief Engineer") @@ -412,6 +412,16 @@ excludefrom = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) cant_discount = TRUE +/datum/uplink_item/stealthy_weapons/bearserk + name = "Bearserker Pelt" + desc = "A bear pelt that infuses the wearer with bear spirits and knowledge on an occultic martial art known as Rage of the Space Bear. \ + The pelt itself is also armored, providing the wearer great longevity. \ + Made with love, lots of spirits and lots of the other kind of spirits by the Sydnicate-affiliated cult, Children of Ursa Major." + reference = "BSP" + item = /obj/item/clothing/head/bearpelt/bearserk + cost = 60 + excludefrom = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) + /datum/uplink_item/stealthy_tools/traitor_belt name = "Traitor's Toolbelt" desc = "A robust seven-slot belt made for carrying a broad variety of weapons, ammunition and explosives. It's modelled after the standard NT toolbelt so as to avoid suspicion while wearing it." @@ -663,7 +673,7 @@ /datum/uplink_item/explosives/detomatix name = "Detomatix PDA Cartridge" - desc = "When inserted into a personal digital assistant, this cartridge gives you five opportunities to detonate PDAs of crewmembers who have their message feature enabled. The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer. It has a chance to detonate your PDA." + desc = "When inserted into a personal digital assistant, this cartridge gives you five opportunities to detonate PDAs of crewmembers who have their message feature enabled. The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer." reference = "DEPC" item = /obj/item/cartridge/syndicate cost = 30 diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm index 018c865d2bb5..9ab3e9d32014 100644 --- a/code/datums/weather/weather_types/ash_storm.dm +++ b/code/datums/weather/weather_types/ash_storm.dm @@ -12,7 +12,7 @@ weather_duration_upper = 1200 weather_overlay = "ash_storm" - end_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now." + end_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now." end_duration = 300 end_overlay = "light_ash" @@ -32,9 +32,7 @@ /datum/weather/ash_storm/proc/is_shuttle_docked(shuttleId, dockId) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) - var/obj/docking_port/stationary/S = M.get_docked() - - return S.id == dockId + return M && M.getDockedId() == dockId /datum/weather/ash_storm/proc/update_eligible_areas() var/list/inside_areas = list() @@ -52,6 +50,10 @@ if(!laborShuttleDocked) eligible_areas -= get_areas(/area/shuttle/siberia) + var/golemShuttleOnPlanet = is_shuttle_docked("freegolem", "freegolem_lavaland") + if(!golemShuttleOnPlanet) + eligible_areas -= get_areas(/area/shuttle/freegolem) + for(var/i in 1 to eligible_areas.len) var/area/place = eligible_areas[i] if(place.outdoors) diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 3288038d4f1c..ccb43e11a816 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -27,6 +27,7 @@ /area/station/security/brig, /area/shuttle, /area/survivalpod, //although survivalpods are off-station, creating one on station no longer protects pods on station from the rad storm + /area/syndicate_depot/core, // exterior of depot still dangerous, gotta be inside /area/ruin, //Let us not completely kill space explorers. /area/station/command/server ) diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm index 4e4d5aab59d2..927030046acd 100644 --- a/code/datums/weather/weather_types/snow_storm.dm +++ b/code/datums/weather/weather_types/snow_storm.dm @@ -13,7 +13,7 @@ weather_duration_upper = 1500 end_duration = 100 - end_message = "The snowfall dies down, it should be safe to go outside again." + end_message = "The snowfall dies down, it should be safe to go outside again." // area_type = /area/awaymission/snowdin/outside target_trait = AWAY_LEVEL diff --git a/code/datums/wires/airlock_wires.dm b/code/datums/wires/airlock_wires.dm index 9fe15e604505..d87cc86d2e9a 100644 --- a/code/datums/wires/airlock_wires.dm +++ b/code/datums/wires/airlock_wires.dm @@ -7,8 +7,6 @@ holder_type = /obj/machinery/door/airlock wire_count = 12 // 10 actual, 2 duds. proper_name = "Airlock" - window_x = 400 - window_y = 101 /datum/wires/airlock/New(atom/_holder) wires = list( diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index b4dcd8bd001f..8660a8e64219 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -2,8 +2,6 @@ /datum/wires/alarm holder_type = /obj/machinery/alarm wire_count = 5 - window_x = 385 - window_y = 90 proper_name = "Air alarm" /datum/wires/alarm/New(atom/_holder) diff --git a/code/datums/wires/apc_wires.dm b/code/datums/wires/apc_wires.dm index 3c322ff37772..ca1167c28206 100644 --- a/code/datums/wires/apc_wires.dm +++ b/code/datums/wires/apc_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/power/apc wire_count = 4 proper_name = "APC" - window_x = 355 - window_y = 97 /datum/wires/apc/New(atom/_holder) wires = list(WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_AI_CONTROL) diff --git a/code/datums/wires/autolathe_wires.dm b/code/datums/wires/autolathe_wires.dm index 5339121c85a8..c0b7e14cea03 100644 --- a/code/datums/wires/autolathe_wires.dm +++ b/code/datums/wires/autolathe_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/autolathe wire_count = 10 proper_name = "Autolathe" - window_x = 340 - window_y = 55 /datum/wires/autolathe/New(atom/_holder) wires = list(WIRE_AUTOLATHE_HACK, WIRE_ELECTRIFY, WIRE_AUTOLATHE_DISABLE) diff --git a/code/datums/wires/camera_wires.dm b/code/datums/wires/camera_wires.dm index 39e0cb2c3e11..2bcdfb2ff606 100644 --- a/code/datums/wires/camera_wires.dm +++ b/code/datums/wires/camera_wires.dm @@ -4,8 +4,6 @@ holder_type = /obj/machinery/camera wire_count = 2 proper_name = "Camera" - window_x = 350 - window_y = 95 /datum/wires/camera/New(atom/_holder) wires = list(WIRE_FOCUS, WIRE_MAIN_POWER1) diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index acabe00ccaf6..4d68b3fda552 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -1,8 +1,6 @@ /datum/wires/explosive wire_count = 1 proper_name = "Explosive" - window_x = 320 - window_y = 50 /datum/wires/explosive/New(atom/_holder) wires = list(WIRE_EXPLODE) diff --git a/code/datums/wires/mod_wires.dm b/code/datums/wires/mod_wires.dm index d63c1162eda1..ba83886fb3e9 100644 --- a/code/datums/wires/mod_wires.dm +++ b/code/datums/wires/mod_wires.dm @@ -3,8 +3,6 @@ randomize = TRUE //Every modsuit is personalised wire_count = 6 // 4 actual, 2 duds proper_name = "MOD control unit" - window_x = 345 - window_y = 90 /datum/wires/mod/New(atom/holder) wires = list(WIRE_HACK, WIRE_DISABLE, WIRE_ELECTRIFY, WIRE_INTERFACE) diff --git a/code/datums/wires/mulebot_wires.dm b/code/datums/wires/mulebot_wires.dm index cb13b0d67184..437b32bc211f 100644 --- a/code/datums/wires/mulebot_wires.dm +++ b/code/datums/wires/mulebot_wires.dm @@ -3,8 +3,6 @@ holder_type = /mob/living/simple_animal/bot/mulebot wire_count = 10 proper_name = "Mulebot" - window_x = 370 - window_y = -12 /datum/wires/mulebot/New(atom/_holder) wires = list( diff --git a/code/datums/wires/nuclearbomb_wires.dm b/code/datums/wires/nuclearbomb_wires.dm index b3627ca091c0..6282f8904668 100644 --- a/code/datums/wires/nuclearbomb_wires.dm +++ b/code/datums/wires/nuclearbomb_wires.dm @@ -3,8 +3,6 @@ randomize = TRUE wire_count = 7 // 3 actual, 4 duds. proper_name = "Nuclear bomb" - window_x = 345 - window_y = 75 /datum/wires/nuclearbomb/New(atom/_holder) wires = list(WIRE_BOMB_LIGHT, WIRE_BOMB_TIMING, WIRE_BOMB_SAFETY) diff --git a/code/datums/wires/particle_accelerator_wires.dm b/code/datums/wires/particle_accelerator_wires.dm index e285f4cf8988..526ffd802700 100644 --- a/code/datums/wires/particle_accelerator_wires.dm +++ b/code/datums/wires/particle_accelerator_wires.dm @@ -2,8 +2,6 @@ wire_count = 5 holder_type = /obj/machinery/particle_accelerator/control_box proper_name = "Particle accelerator control" - window_x = 361 - window_y = 22 /datum/wires/particle_acc/control_box/New(atom/_holder) wires = list(WIRE_PARTICLE_POWER, WIRE_PARTICLE_STRENGTH, WIRE_PARTICLE_INTERFACE, WIRE_PARTICLE_POWER_LIMIT) diff --git a/code/datums/wires/radio_wires.dm b/code/datums/wires/radio_wires.dm index 1efee71692d8..2932ca3118af 100644 --- a/code/datums/wires/radio_wires.dm +++ b/code/datums/wires/radio_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/item/radio wire_count = 3 proper_name = "Radio" - window_x = 330 - window_y = 37 /datum/wires/radio/New(atom/_holder) wires = list(WIRE_RADIO_SIGNAL, WIRE_RADIO_RECEIVER, WIRE_RADIO_TRANSMIT) diff --git a/code/datums/wires/robot_wires.dm b/code/datums/wires/robot_wires.dm index 927980c57fa9..cde2d653a7c9 100644 --- a/code/datums/wires/robot_wires.dm +++ b/code/datums/wires/robot_wires.dm @@ -2,8 +2,6 @@ randomize = TRUE holder_type = /mob/living/silicon/robot wire_count = 5 - window_x = 340 - window_y = 106 proper_name = "Cyborg" /datum/wires/robot/New(atom/_holder) diff --git a/code/datums/wires/smartfridge_wires.dm b/code/datums/wires/smartfridge_wires.dm index 3955b1849b0d..78b82939e26d 100644 --- a/code/datums/wires/smartfridge_wires.dm +++ b/code/datums/wires/smartfridge_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/smartfridge wire_count = 3 proper_name = "Smartfridge" - window_x = 340 - window_y = 103 /datum/wires/smartfridge/New(atom/_holder) wires = list(WIRE_ELECTRIFY, WIRE_IDSCAN, WIRE_THROW_ITEM) @@ -12,7 +10,6 @@ /datum/wires/smartfridge/secure randomize = TRUE wire_count = 4 // 3 actual, 1 dud. - window_y = 97 /datum/wires/smartfridge/interactable(mob/user) var/obj/machinery/smartfridge/S = holder diff --git a/code/datums/wires/suitstorage.dm b/code/datums/wires/suitstorage.dm index d9df0399dd42..c9fd548f0a63 100644 --- a/code/datums/wires/suitstorage.dm +++ b/code/datums/wires/suitstorage.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/suit_storage_unit wire_count = 8 proper_name = "Suit storage unit" - window_x = 350 - window_y = 85 /datum/wires/suitstorage/New(atom/_holder) wires = list(WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_SAFETY, WIRE_SSU_UV) diff --git a/code/datums/wires/syndicatebomb_wires.dm b/code/datums/wires/syndicatebomb_wires.dm index bd996f72fccd..e8cb953f43b7 100644 --- a/code/datums/wires/syndicatebomb_wires.dm +++ b/code/datums/wires/syndicatebomb_wires.dm @@ -3,8 +3,6 @@ holder_type = /obj/machinery/syndicatebomb wire_count = 5 proper_name = "Syndicate bomb" - window_x = 320 - window_y = 22 /datum/wires/syndicatebomb/New(atom/_holder) wires = list(WIRE_BOMB_DELAY, WIRE_EXPLODE, WIRE_BOMB_UNBOLT,WIRE_BOMB_PROCEED, WIRE_BOMB_ACTIVATE) diff --git a/code/datums/wires/tesla_coil.dm b/code/datums/wires/tesla_coil.dm index f4dbf39017a1..30f15539b7ed 100644 --- a/code/datums/wires/tesla_coil.dm +++ b/code/datums/wires/tesla_coil.dm @@ -2,8 +2,6 @@ wire_count = 1 holder_type = /obj/machinery/power/tesla_coil proper_name = "Tesla coil" - window_x = 320 - window_y = 50 /datum/wires/tesla_coil/New(atom/_holder) wires = list(WIRE_TESLACOIL_ZAP) diff --git a/code/datums/wires/vending_wires.dm b/code/datums/wires/vending_wires.dm index 8fe759af72ef..0d591ca15a36 100644 --- a/code/datums/wires/vending_wires.dm +++ b/code/datums/wires/vending_wires.dm @@ -1,8 +1,6 @@ /datum/wires/vending holder_type = /obj/machinery/economy/vending wire_count = 4 - window_y = 112 - window_x = 350 proper_name = "Vending machine" /datum/wires/vending/New(atom/_holder) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 896be0f2c908..58fc524c8c0a 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -19,10 +19,6 @@ var/list/colors /// An associative list of signalers attached to the wires. The wire color is the key, and the signaler object reference is the value. var/list/assemblies - /// The width of the wire TGUI window. - var/window_x = 300 - /// The height of the wire TGUI window. Will get longer as needed, based on the `wire_count`. - var/window_y = 100 /datum/wires/New(atom/_holder) ..() @@ -92,10 +88,13 @@ /datum/wires/ui_host() return holder -/datum/wires/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/wires/ui_state(mob/user) + return GLOB.physical_state + +/datum/wires/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Wires", "[proper_name] wires", window_x, window_y + wire_count * 30, master_ui, state) + ui = new(user, src, "Wires", "[proper_name] wires") ui.open() /datum/wires/ui_data(mob/user) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 032046134e81..421a369e4ac4 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -20,6 +20,8 @@ var/map_name /// Is the lightswitch in this area on? Controls whether or not lights are on and off var/lightswitch = TRUE + /// Is the window tint control in this area on? Controls whether electrochromic windows and doors are tinted or not + var/window_tint = FALSE /// If TRUE, the local powernet in this area will have all its power channels switched off var/apc_starts_off = FALSE /// If TRUE, this area's local powernet will require power to properly operate machines diff --git a/code/game/area/misc_areas.dm b/code/game/area/misc_areas.dm index b64a443990e0..329e031f3903 100644 --- a/code/game/area/misc_areas.dm +++ b/code/game/area/misc_areas.dm @@ -26,6 +26,9 @@ icon_state = "space_near" dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT +/area/space/nearstation/disposals + icon_state = "nearspace_disposals" + /area/space/atmosalert() return diff --git a/code/game/area/shuttle_areas.dm b/code/game/area/shuttle_areas.dm index be9f5f44fb22..efd45956d8e5 100644 --- a/code/game/area/shuttle_areas.dm +++ b/code/game/area/shuttle_areas.dm @@ -234,63 +234,6 @@ /area/shuttle/research/outpost icon_state = "shuttle" -/area/shuttle/salvage - name = "\improper Salvage Ship" - icon_state = "yellow" - -/area/shuttle/salvage/start - name = "\improper Middle of Nowhere" - icon_state = "yellow" - -/area/shuttle/salvage/arrivals - name = "\improper Space Station Auxiliary Docking" - icon_state = "yellow" - -/area/shuttle/salvage/derelict - name = "\improper Derelict Station" - icon_state = "yellow" - -/area/shuttle/salvage/djstation - name = "\improper Ruskie DJ Station" - icon_state = "yellow" - -/area/shuttle/salvage/north - name = "\improper North of the Station" - icon_state = "yellow" - -/area/shuttle/salvage/east - name = "\improper East of the Station" - icon_state = "yellow" - -/area/shuttle/salvage/south - name = "\improper South of the Station" - icon_state = "yellow" - -/area/shuttle/salvage/commssat - name = "\improper The Communications Satellite" - icon_state = "yellow" - -/area/shuttle/salvage/mining - name = "\improper South-West of the Mining Asteroid" - icon_state = "yellow" - -/area/shuttle/salvage/abandoned_ship - name = "\improper Abandoned Ship" - icon_state = "yellow" - parallax_movedir = WEST - -/area/shuttle/salvage/clown_asteroid - name = "\improper Clown Asteroid" - icon_state = "yellow" - -/area/shuttle/salvage/trading_post - name = "\improper Trading Post" - icon_state = "yellow" - -/area/shuttle/salvage/transit - name = "\improper hyperspace" - icon_state = "shuttle" - /area/shuttle/supply name = "Supply Shuttle" icon_state = "shuttle3" diff --git a/code/game/area/ss13_areas/command_areas.dm b/code/game/area/ss13_areas/command_areas.dm index 1b9314b7fd0a..1e63b839053e 100644 --- a/code/game/area/ss13_areas/command_areas.dm +++ b/code/game/area/ss13_areas/command_areas.dm @@ -72,7 +72,3 @@ /area/station/command/customs name = "Customs" icon_state = "checkpoint1" - -/area/station/command/customs2 - name = "Customs" - icon_state = "security" diff --git a/code/game/area/ss13_areas/engineering_areas.dm b/code/game/area/ss13_areas/engineering_areas.dm index 03c3a6751de2..aa68e2d90e61 100644 --- a/code/game/area/ss13_areas/engineering_areas.dm +++ b/code/game/area/ss13_areas/engineering_areas.dm @@ -88,11 +88,11 @@ /area/station/engineering/solar/aft name = "\improper Aft Solar Array" - icon_state = "aft" + icon_state = "Asolars" /area/station/engineering/solar/starboard name = "\improper Starboard Solar Array" - icon_state = "ASsolars" + icon_state = "Ssolars" /area/station/engineering/solar/starboard/aft name = "\improper Aft Starboard Solar Array" diff --git a/code/game/area/ss13_areas/legal_areas.dm b/code/game/area/ss13_areas/legal_areas.dm index f829565ac5c1..c366e054fbcf 100644 --- a/code/game/area/ss13_areas/legal_areas.dm +++ b/code/game/area/ss13_areas/legal_areas.dm @@ -3,6 +3,10 @@ name = "\improper Courtroom" icon_state = "courtroom" +/area/station/legal/courtroom/gallery + name = "\improper Courtroom Gallery" + icon_state = "courtroom" + /area/station/legal/lawoffice name = "\improper Law Office" icon_state = "law" @@ -13,7 +17,3 @@ icon_state = "magistrate" sound_environment = SOUND_AREA_SMALL_SOFTFLOOR -/area/station/legal/courtroom/dap - name = "\improper Courtroom Defense and Prosecution" - icon_state = "seccourt" - sound_environment = SOUND_AREA_LARGE_ENCLOSED diff --git a/code/game/area/ss13_areas/medical_areas.dm b/code/game/area/ss13_areas/medical_areas.dm index 1501c839bb34..12c18beab250 100644 --- a/code/game/area/ss13_areas/medical_areas.dm +++ b/code/game/area/ss13_areas/medical_areas.dm @@ -39,31 +39,24 @@ icon_state = "patients" sound_environment = SOUND_AREA_SMALL_SOFTFLOOR +/area/station/medical/patients_rooms1 + name = "\improper Patient Room" + icon_state = "patients" + sound_environment = SOUND_AREA_SMALL_SOFTFLOOR + +/area/station/medical/patients_rooms_secondary + name = "\improper Patient Room Secondary" + icon_state = "patients" + sound_environment = SOUND_AREA_SMALL_SOFTFLOOR + /area/station/medical/ward name = "\improper Medbay Patient Ward" icon_state = "patientsward" -/area/station/medical/isolation/a - name = "Isolation A" - icon_state = "medbayisoa" - -/area/station/medical/isolation/b - name = "Isolation B" - icon_state = "medbayisob" - -/area/station/medical/isolation/c - name = "Isolation C" - icon_state = "medbayisoc" - -/area/station/medical/isolation - name = "Isolation Access" - icon_state = "medbayisoaccess" - /area/station/medical/coldroom name = "Cold Room" icon_state = "coldroom" - /area/station/medical/storage/secondary name = "Medical Secondary Storage" icon_state = "medbaysecstorage" diff --git a/code/game/area/ss13_areas/public_areas.dm b/code/game/area/ss13_areas/public_areas.dm index a0baa65505ec..f5c9408384e1 100644 --- a/code/game/area/ss13_areas/public_areas.dm +++ b/code/game/area/ss13_areas/public_areas.dm @@ -132,6 +132,10 @@ /area/station/hallway/secondary/entry/south +/area/station/hallway/secondary/entry/east + +/area/station/hallway/secondary/entry/west + /area/station/hallway/secondary/entry/lounge name = "\improper Arrivals Lounge" @@ -159,14 +163,6 @@ name = "\improper Secondary Cryogenic Dormitories" icon_state = "Sleep" -/area/station/public/sleep_male - name = "\improper Male Dorm" - icon_state = "Sleep" - -/area/station/public/sleep_female - name = "\improper Female Dorm" - icon_state = "Sleep" - /area/station/public/locker name = "\improper Locker Room" icon_state = "locker" @@ -176,12 +172,6 @@ icon_state = "toilet" sound_environment = SOUND_AREA_SMALL_ENCLOSED -/area/station/public/toilet/male - name = "\improper Male Toilets" - -/area/station/public/toilet/female - name = "\improper Female Toilets" - /area/station/public/toilet/unisex name = "\improper Unisex Restroom" @@ -200,10 +190,6 @@ name = "\improper Mr Chang's" icon_state = "changs" -/area/station/public/clothing - name = "\improper Clothing Shop" - icon_state = "Theatre" - /area/station/public/pet_store name = "\improper Pet Store" icon_state = "pet_store" @@ -226,10 +212,6 @@ name = "Primary Tool Storage" icon_state = "primarystorage" -/area/station/public/storage/autolathe - name = "Autolathe Storage" - icon_state = "storage" - /area/station/public/storage/art name = "Art Supply Storage" icon_state = "storage" @@ -246,9 +228,6 @@ name = "Office Supplies" icon_state = "office_supplies" -/area/station/public/recreation - name = "\improper Recreation Area" - /area/station/public/construction name = "\improper Construction Area" icon_state = "construction" diff --git a/code/game/area/ss13_areas/security_areas.dm b/code/game/area/ss13_areas/security_areas.dm index b384eb63f666..4729423116c2 100644 --- a/code/game/area/ss13_areas/security_areas.dm +++ b/code/game/area/ss13_areas/security_areas.dm @@ -51,14 +51,6 @@ name = "\improper Prison Cell Block A" icon_state = "brigcella" -/area/station/security/prison/cell_block/B - name = "\improper Prison Cell Block B" - icon_state = "brigcellb" - -/area/station/security/prison/cell_block/C - name = "\improper Prison Cell Block C" - icon_state = "brig" - /area/station/security/execution name = "Execution" icon_state = "execution" @@ -78,11 +70,6 @@ name = "Security Equipment Storage" icon_state = "securityequipmentstorage" -/area/station/security/interrogation/observation - name = "Interrogation Observation" - icon_state = "security" - can_get_auto_cryod = FALSE - /area/station/security/evidence name = "\improper Evidence Room" icon_state = "evidence" @@ -110,10 +97,6 @@ name = "\improper Secure Armory" icon_state = "secarmory" -/area/station/security/securehallway - name = "\improper Brig Secure Hallway" - icon_state = "securehall" - /area/station/security/detective name = "\improper Detective's Office" icon_state = "detective" @@ -133,22 +116,6 @@ name = "\improper Security Checkpoint" icon_state = "checkpoint1" -/area/station/security/checkpoint/supply - name = "Security Post - Cargo Bay" - icon_state = "checkpoint1" - -/area/station/security/checkpoint/engineering - name = "Security Post - Engineering" - icon_state = "checkpoint1" - -/area/station/security/checkpoint/medical - name = "Security Post - Medbay" - icon_state = "checkpoint1" - -/area/station/security/checkpoint/science - name = "Security Post - Science" - icon_state = "checkpoint1" - // Solitary /area/station/security/permasolitary name = "Solitary Confinement" diff --git a/code/game/area/ss13_areas/service_areas.dm b/code/game/area/ss13_areas/service_areas.dm index 1d524096164b..4639602103e4 100644 --- a/code/game/area/ss13_areas/service_areas.dm +++ b/code/game/area/ss13_areas/service_areas.dm @@ -12,10 +12,6 @@ icon_state = "bar" sound_environment = SOUND_AREA_WOODFLOOR -/area/station/service/bar/atrium - name = "Atrium" - icon_state = "bar" - /area/station/service/theatre name = "\improper Theatre" icon_state = "Theatre" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 98220ce3ae90..582a307920b6 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -36,6 +36,8 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom + /// Materials scannable by detective + var/list/suit_fibers var/admin_spawned = FALSE //was this spawned by an admin? used for stat tracking stuff. @@ -515,8 +517,10 @@ /atom/proc/welder_act(mob/living/user, obj/item/I) return +/// This is when an atom is emagged. Should return false if it fails, or it has no emag_act defined. /atom/proc/emag_act(mob/user) SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT, user) + return FALSE /atom/proc/unemag() return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a2a2294907b2..98c6784021b5 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -38,6 +38,13 @@ /// Icon state for thought bubbles. Normally set by mobs. var/thought_bubble_image = "thought_bubble" + // Atmos + var/pressure_resistance = 10 + var/last_high_pressure_movement_air_cycle = 0 + + /// UID for the atom which the current atom is orbiting + var/orbiting_uid = null + /atom/movable/attempt_init(loc, ...) var/turf/T = get_turf(src) if(T && SSatoms.initialized != INITIALIZATION_INSSATOMS && GLOB.space_manager.is_zlevel_dirty(T.z)) @@ -394,7 +401,7 @@ step(src, AM.dir) ..() -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = INFINITY, dodgeable = TRUE) +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = INFINITY, dodgeable = TRUE, block_movement = TRUE) if(!target || (flags & NODROP) || speed <= 0) return 0 @@ -435,6 +442,7 @@ TT.diagonals_first = diagonals_first TT.callback = callback TT.dodgeable = dodgeable + TT.block_movement = block_movement var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) @@ -674,9 +682,11 @@ return //We inline a MAPTEXT() here, because there's no good way to statically add to a string like this active_hud.screentip_text.maptext = "[name]" + usr.client.moused_over = UID() /atom/movable/MouseExited(location, control, params) usr.hud_used.screentip_text.maptext = "" + usr.client.moused_over = null /atom/movable/proc/choose_crush_crit(mob/living/carbon/victim) if(!length(GLOB.tilt_crits)) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 51d8bbc88417..29124ecc5031 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -503,6 +503,7 @@ holder.icon_state = "hudjani" holder.alpha = 130 holder.plane = ABOVE_LIGHTING_PLANE + holder.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I'll just put this somewhere near the end... diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index cd7794592742..090aa51320fa 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -370,17 +370,21 @@ GLOBAL_LIST_EMPTY(bad_blocks) return num2hex(value, 3) /datum/dna/proc/UpdateUI() + var/list/ui_text_list = list() uni_identity = "" for(var/block in UI) - uni_identity += EncodeDNABlock(block) + ui_text_list += EncodeDNABlock(block) + uni_identity = ui_text_list.Join("") //testing("New UI: [uni_identity]") dirtyUI = 0 /datum/dna/proc/UpdateSE() //var/oldse=struc_enzymes + var/list/se_text_list = list() struc_enzymes = "" for(var/block in SE) - struc_enzymes += EncodeDNABlock(block) + se_text_list += EncodeDNABlock(block) + struc_enzymes = se_text_list.Join("") //testing("Old SE: [oldse]") //testing("New SE: [struc_enzymes]") dirtySE = 0 diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 7fb1115727fb..2eff528db17e 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -186,6 +186,7 @@ put_in(L) if(user.pulling == L) user.stop_pulling() + QDEL_LIST_CONTENTS(L.grabbed_by) return TRUE /obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params) @@ -398,13 +399,16 @@ ui_interact(user) -/obj/machinery/computer/scan_consolenew/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) +/obj/machinery/computer/scan_consolenew/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, datum/tgui/ui = null) if(user == connected.occupant) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DNAModifier", name, 660, 700, master_ui, state) + ui = new(user, src, "DNAModifier", name) ui.open() /obj/machinery/computer/scan_consolenew/ui_data(mob/user) @@ -732,8 +736,8 @@ var/datum/dna2/record/buf = buffers[bufferId] - if((buf.types & DNA2_BUF_UI)) - if((buf.types & DNA2_BUF_UE)) + if(buf.types & DNA2_BUF_UI) + if(buf.types & DNA2_BUF_UE) connected.occupant.real_name = buf.dna.real_name connected.occupant.name = buf.dna.real_name connected.occupant.UpdateAppearance(buf.dna.UI.Copy()) diff --git a/code/game/dna/mutations/mutation_powers.dm b/code/game/dna/mutations/mutation_powers.dm index e2b9231b1a90..b8a1e0370d98 100644 --- a/code/game/dna/mutations/mutation_powers.dm +++ b/code/game/dna/mutations/mutation_powers.dm @@ -734,7 +734,7 @@ var/obj/item/organ/external/head/head_organ = M.get_organ("head") var/obj/item/organ/internal/eyes/eyes_organ = M.get_int_organ(/obj/item/organ/internal/eyes) - var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female") + var/new_gender = tgui_alert(user, "Please select gender.", "Character Generation", list("Male", "Female")) if(new_gender) if(new_gender == "Male") M.change_gender(MALE) @@ -750,13 +750,13 @@ //Alt heads. if(head_organ.dna.species.bodyflags & HAS_ALT_HEADS) var/list/valid_alt_heads = M.generate_valid_alt_heads() - var/new_alt_head = input("Please select alternate head", "Character Generation", head_organ.alt_head) as null|anything in valid_alt_heads + var/new_alt_head = tgui_input_list(user, "Please select alternate head", "Character Generation", valid_alt_heads) if(new_alt_head) M.change_alt_head(new_alt_head) // hair var/list/valid_hairstyles = M.generate_valid_hairstyles() - var/new_style = input("Please select hair style", "Character Generation", head_organ.h_style) as null|anything in valid_hairstyles + var/new_style = tgui_input_list(user, "Please select hair style", "Character Generation", valid_hairstyles) // if new style selected (not cancel) if(new_style) @@ -774,7 +774,7 @@ // facial hair var/list/valid_facial_hairstyles = M.generate_valid_facial_hairstyles() - new_style = input("Please select facial style", "Character Generation", head_organ.f_style) as null|anything in valid_facial_hairstyles + new_style = tgui_input_list(user, "Please select facial style", "Character Generation", valid_facial_hairstyles) if(new_style) M.change_facial_hair(new_style) @@ -792,7 +792,7 @@ //Head accessory. if(head_organ.dna.species.bodyflags & HAS_HEAD_ACCESSORY) var/list/valid_head_accessories = M.generate_valid_head_accessories() - var/new_head_accessory = input("Please select head accessory style", "Character Generation", head_organ.ha_style) as null|anything in valid_head_accessories + var/new_head_accessory = tgui_input_list(user, "Please select head accessory style", "Character Generation", valid_head_accessories) if(new_head_accessory) M.change_head_accessory(new_head_accessory) @@ -804,8 +804,8 @@ //Body accessory. if((M.dna.species.tail && M.dna.species.bodyflags & (HAS_TAIL)) || (M.dna.species.wing && M.dna.species.bodyflags & (HAS_WING))) var/list/valid_body_accessories = M.generate_valid_body_accessories() - if(valid_body_accessories.len > 1) //By default valid_body_accessories will always have at the very least a 'none' entry populating the list, even if the user's species is not present in any of the list items. - var/new_body_accessory = input("Please select body accessory style", "Character Generation", M.body_accessory) as null|anything in valid_body_accessories + if(length(valid_body_accessories) > 1) //By default valid_body_accessories will always have at the very least a 'none' entry populating the list, even if the user's species is not present in any of the list items. + var/new_body_accessory = tgui_input_list(user, "Please select body accessory style", "Character Generation", valid_body_accessories) if(new_body_accessory) M.change_body_accessory(new_body_accessory) @@ -813,7 +813,7 @@ //Head markings. if(M.dna.species.bodyflags & HAS_HEAD_MARKINGS) var/list/valid_head_markings = M.generate_valid_markings("head") - var/new_marking = input("Please select head marking style", "Character Generation", M.m_styles["head"]) as null|anything in valid_head_markings + var/new_marking = tgui_input_list(user, "Please select head marking style", "Character Generation", valid_head_markings) if(new_marking) M.change_markings(new_marking, "head") @@ -824,7 +824,7 @@ //Body markings. if(M.dna.species.bodyflags & HAS_BODY_MARKINGS) var/list/valid_body_markings = M.generate_valid_markings("body") - var/new_marking = input("Please select body marking style", "Character Generation", M.m_styles["body"]) as null|anything in valid_body_markings + var/new_marking = tgui_input_list(user, "Please select body marking style", "Character Generation", valid_body_markings) if(new_marking) M.change_markings(new_marking, "body") @@ -834,7 +834,7 @@ //Tail markings. if(M.dna.species.bodyflags & HAS_TAIL_MARKINGS) var/list/valid_tail_markings = M.generate_valid_markings("tail") - var/new_marking = input("Please select tail marking style", "Character Generation", M.m_styles["tail"]) as null|anything in valid_tail_markings + var/new_marking = tgui_input_list("Please select tail marking style", "Character Generation", valid_tail_markings) if(new_marking) M.change_markings(new_marking, "tail") @@ -918,20 +918,19 @@ if(user.mind?.miming) // Dont let mimes telepathically talk to_chat(user,"You can't communicate without breaking your vow of silence.") return - var/say = input("What do you wish to say") as text|null + var/say = tgui_input_text(user, "What do you wish to say?", "Project Mind") if(!say || usr.stat) return - say = strip_html(say) - say = pencode_to_html(say, usr, format = 0, fields = 0) + say = pencode_to_html(say, usr, format = FALSE, fields = FALSE) for(var/mob/living/target in targets) log_say("(TPATH to [key_name(target)]) [say]", user) user.create_log(SAY_LOG, "Telepathically said '[say]' using [src]", target) if(target.dna?.GetSEState(GLOB.remotetalkblock)) - target.show_message("You hear [user.real_name]'s voice: [say]") + target.show_message("You hear [user.real_name]'s voice: [say]") else - target.show_message("You hear a voice that seems to echo around the room: [say]") - user.show_message("You project your mind into [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"]: [say]") + target.show_message("You hear a voice that seems to echo around the room: [say]") + user.show_message("You project your mind into [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"]: [say]") for(var/mob/dead/observer/G in GLOB.player_list) G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]") @@ -955,8 +954,8 @@ var/message = "You feel your mind expand briefly... (Click to send a message.)" if(target.dna?.GetSEState(GLOB.remotetalkblock)) message = "You feel [user.real_name] request a response from you... (Click here to project mind.)" - user.show_message("You offer your mind to [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"].") - target.show_message("[message]") + user.show_message("You offer your mind to [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"].") + target.show_message("[message]") available_targets += target addtimer(CALLBACK(src, PROC_REF(removeAvailability), target), 100) @@ -964,7 +963,7 @@ if(target in available_targets) available_targets -= target if(!(target in available_targets)) - target.show_message("You feel the sensation fade...") + target.show_message("You feel the sensation fade...") /obj/effect/proc_holder/spell/mindscan/Topic(href, href_list) var/mob/living/user @@ -977,18 +976,17 @@ if(!(target in available_targets)) return available_targets -= target - var/say = input("What do you wish to say") as text|null + var/say = tgui_input_text(user, "What do you wish to say?", "Scan Mind") if(!say) return - say = strip_html(say) - say = pencode_to_html(say, target, format = 0, fields = 0) + say = pencode_to_html(say, target, format = FALSE, fields = FALSE) user.create_log(SAY_LOG, "Telepathically responded '[say]' using [src]", target) log_say("(TPATH to [key_name(target)]) [say]", user) if(target.dna?.GetSEState(GLOB.remotetalkblock)) - target.show_message("You project your mind into [user.name]: [say]") + target.show_message("You project your mind into [user.name]: [say]") else - target.show_message("You fill the space in your thoughts: [say]") - user.show_message("You hear [target.name]'s voice: [say]") + target.show_message("You fill the space in your thoughts: [say]") + user.show_message("You hear [target.name]'s voice: [say]") for(var/mob/dead/observer/G in GLOB.player_list) G.show_message("Telepathic response from [target] ([ghost_follow_link(target, ghost=G)]) to [user] ([ghost_follow_link(user, ghost=G)]): [say]") diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm index 41a81a2ae2c2..274916d4937e 100644 --- a/code/game/gamemodes/cult/blood_magic.dm +++ b/code/game/gamemodes/cult/blood_magic.dm @@ -97,6 +97,21 @@ var/invocation = "Hoi there something's wrong!" var/health_cost = 0 +/datum/action/innate/cult/blood_spell/proc/get_panel_text() + if(initial(charges) == 1) + return + var/available_charges = hand_magic ? "[hand_magic.uses]" : "[charges]" + return "[available_charges]/[initial(charges)]" + +/datum/action/innate/cult/blood_spell/UpdateButtonIcon() + . = ..() + var/text = get_panel_text() + if(!text || !button) + return + var/image/count_down_holder = image('icons/effects/effects.dmi', icon_state = "nothing") + count_down_holder.maptext = "
[text]
" + button.add_overlay(count_down_holder) + /datum/action/innate/cult/blood_spell/Grant(mob/living/owner, datum/action/innate/cult/blood_magic/BM) if(health_cost) desc += "
Deals [health_cost] damage to your arm per use." @@ -295,6 +310,7 @@ var/mob/living/carbon/human/H = target H.Hallucinate(120 SECONDS) attached_action.charges-- + attached_action.UpdateButtonIcon() attached_action.desc = attached_action.base_desc attached_action.desc += "
Has [attached_action.charges] use\s remaining." attached_action.UpdateButtonIcon() @@ -358,6 +374,9 @@ charges = 5 magic_path = /obj/item/melee/blood_magic/manipulator +/datum/action/innate/cult/blood_spell/manipulation/get_panel_text() + return hand_magic ? "[hand_magic.uses]" : "[charges]" + // The "magic hand" items /obj/item/melee/blood_magic name = "\improper magical aura" @@ -458,7 +477,7 @@ to_chat(user, "In a brilliant flash of red, [L] falls to the ground!") L.KnockDown(10 SECONDS) - L.adjustStaminaLoss(60) + L.apply_damage(60, STAMINA) L.apply_status_effect(STATUS_EFFECT_CULT_STUN) L.flash_eyes(1, TRUE) if(issilicon(target)) @@ -565,6 +584,7 @@ else user.visible_message("This victim doesn't have enough arms to complete the restraint!") return + source.UpdateButtonIcon() ..() /obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user) @@ -700,37 +720,34 @@ if(user.holy_check()) return if(proximity_flag) - // Shielded suit if(istype(target, /obj/item/clothing/suit/hooded/cultrobes/cult_shield)) - var/obj/item/clothing/suit/hooded/cultrobes/cult_shield/C = target - if(C.current_charges < 3) - uses-- - to_chat(user, "You empower [target] with blood, recharging its shields!") - playsound(user, 'sound/magic/cult_spell.ogg', 25, TRUE, SOUND_RANGE_SET(7)) - C.current_charges = 3 - C.shield_state = "shield-cult" - user.update_inv_wear_suit() // The only way a suit can be clicked on is if its on the floor, in the users bag, or on the user, so we will play it safe if it is on the user. - else + var/datum/component/shielded/shield = target.GetComponent(/datum/component/shielded) + if(shield.current_charges >= 3) to_chat(user, "[target] is already at full charge!") return + uses-- + to_chat(user, "You empower [target] with blood, recharging its shields!") + playsound(user, 'sound/magic/cult_spell.ogg', 25, TRUE, SOUND_RANGE_SET(7)) + shield.current_charges = 3 + user.update_appearance(UPDATE_ICON) + return ..() // Veil Shifter - else if(istype(target, /obj/item/cult_shift)) + if(istype(target, /obj/item/cult_shift)) var/obj/item/cult_shift/S = target - if(S.uses < 4) - uses-- - to_chat(user, "You empower [target] with blood, recharging its ability to shift!") - playsound(user, 'sound/magic/cult_spell.ogg', 25, TRUE, SOUND_RANGE_SET(7)) - S.uses = 4 - S.icon_state = "shifter" - else + if(S.uses >= 4) to_chat(user, "[target] is already at full charge!") return - else - to_chat(user, "The spell will not work on [target]!") - return - ..() + uses-- + to_chat(user, "You empower [target] with blood, recharging its ability to shift!") + playsound(user, 'sound/magic/cult_spell.ogg', 25, TRUE, SOUND_RANGE_SET(7)) + S.uses = 4 + S.icon_state = "shifter" + return ..() + + to_chat(user, "The spell will not work on [target]!") + return ..() //Blood Rite: Absorb blood to heal cult members or summon weapons /obj/item/melee/blood_magic/manipulator @@ -860,10 +877,12 @@ target.clean_blood() else steal_blood(user, target) + source.UpdateButtonIcon() return if(isconstruct(target)) heal_construct(user, target) + source.UpdateButtonIcon() return if(istype(target, /obj/item/blood_orb)) @@ -873,8 +892,10 @@ to_chat(user, "You obtain [candidate.blood] blood from the orb of blood!") playsound(user, 'sound/misc/enter_blood.ogg', 50, extrarange = SOUND_RANGE_SET(7)) qdel(candidate) + source.UpdateButtonIcon() return blood_draw(target, user) + source.UpdateButtonIcon() /obj/item/melee/blood_magic/manipulator/proc/blood_draw(atom/target, mob/living/carbon/human/user) var/temp = 0 @@ -978,3 +999,4 @@ to_chat(user, "You need a free hand for this rite!") uses += BLOOD_BARRAGE_COST // Refund the charges qdel(rite) + source.UpdateButtonIcon() diff --git a/code/game/gamemodes/cult/cult_actions.dm b/code/game/gamemodes/cult/cult_actions.dm index 26c08709a2dd..4db5796e848a 100644 --- a/code/game/gamemodes/cult/cult_actions.dm +++ b/code/game/gamemodes/cult/cult_actions.dm @@ -18,7 +18,7 @@ check_flags = AB_CHECK_CONSCIOUS /datum/action/innate/cult/comm/Activate() - var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") + var/input = tgui_input_text(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", encode = FALSE) if(!input || !IsAvailable()) return cultist_commune(usr, input) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index ee9c00bfb532..23ec5b39dd0e 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -150,9 +150,6 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) hoodtype = /obj/item/clothing/head/hooded/cult_hoodie - var/current_charges = 3 - var/shield_state = "shield-cult" - var/shield_on = "shield-cult" /obj/item/clothing/head/hooded/cult_hoodie name = "empowered cultist hood" @@ -174,25 +171,16 @@ user.Confused(20 SECONDS) user.Weaken(10 SECONDS) -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(current_charges && !owner.holy_check()) - owner.visible_message("[attack_text] is deflected in a burst of blood-red sparks!") - current_charges-- - playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - new /obj/effect/temp_visual/cult/sparks(get_turf(owner)) - if(istype(hitby, /obj/item/projectile)) - var/obj/item/projectile/P = hitby - if(P.shield_buster) - current_charges = 0 //Change it to remove 3 charges if it ever has its max shield limit increased above 3. - if(!current_charges) - owner.visible_message("The runed shield around [owner] suddenly disappears!") - shield_state = "broken" - owner.update_inv_wear_suit() - return TRUE - return FALSE -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/special_overlays() - return mutable_appearance('icons/effects/cult_effects.dmi', shield_state, MOB_LAYER + 0.01) +/obj/item/clothing/suit/hooded/cultrobes/cult_shield/setup_shielding() + AddComponent(/datum/component/shielded, recharge_start_delay = 0 SECONDS, shield_icon_file = 'icons/effects/cult_effects.dmi', shield_icon = "shield-cult", run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged))) + +/// A proc for callback when the shield breaks, since cult robes are stupid and have different effects +/obj/item/clothing/suit/hooded/cultrobes/cult_shield/proc/shield_damaged(mob/living/wearer, attack_text, new_current_charges) + wearer.visible_message("[attack_text] is deflected in a burst of blood-red sparks!") + new /obj/effect/temp_visual/cult/sparks(get_turf(wearer)) + if(new_current_charges == 0) + wearer.visible_message("The runed shield around [wearer] suddenly disappears!") /obj/item/clothing/suit/hooded/cultrobes/flagellant_robe name = "flagellant's robes" @@ -260,7 +248,7 @@ to_chat(user, "[src] crumbles to ashes.") qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/unholywater +/obj/item/reagent_containers/drinks/bottle/unholywater name = "flask of unholy water" desc = "Toxic to nonbelievers; this water renews and reinvigorates the faithful of a cult." icon_state = "holyflask" @@ -610,7 +598,7 @@ S.trigger() else L.KnockDown(10 SECONDS) - L.adjustStaminaLoss(60) + L.apply_damage(60, STAMINA) L.apply_status_effect(STATUS_EFFECT_CULT_STUN) L.flash_eyes(1, TRUE) if(issilicon(L)) diff --git a/code/game/gamemodes/cult/cult_mode.dm b/code/game/gamemodes/cult/cult_mode.dm index f2abcc0acedc..4f2d21d8b5c1 100644 --- a/code/game/gamemodes/cult/cult_mode.dm +++ b/code/game/gamemodes/cult/cult_mode.dm @@ -94,7 +94,6 @@ var/datum/action/innate/toggle_clumsy/A = new A.Grant(cult_mind.current) - add_cult_actions(cult_mind) update_cult_icons_added(cult_mind) cult_objs.study(cult_mind.current) to_chat(cult_mind.current, "For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Cultist)") diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 7db14947e373..efd2e7a02b51 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -145,7 +145,7 @@ selection_prompt = "You study the rituals on the altar..." selection_title = "Altar" creation_message = "You kneel before the altar and your faith is rewarded with a %ITEM%!" - choosable_items = list("Eldritch Whetstone" = /obj/item/whetstone/cult, "Flask of Unholy Water" = /obj/item/reagent_containers/food/drinks/bottle/unholywater, + choosable_items = list("Eldritch Whetstone" = /obj/item/whetstone/cult, "Flask of Unholy Water" = /obj/item/reagent_containers/drinks/bottle/unholywater, "Construct Shell" = /obj/structure/constructshell) /obj/structure/cult/functional/altar/Initialize(mapload) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index f9690f5c683a..58f8b12ae5f1 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -70,8 +70,8 @@ if(!(A in summon_areas)) to_chat(user, "[SSticker.cultdat.entity_name] can only be summoned where the veil is weak - in [english_list(summon_areas)]!") return FALSE - var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence AND your location!", - "Are you prepared for the final battle?", "My life for [SSticker.cultdat.entity_name]!", "No") + var/confirm_final = tgui_alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence AND your location!", + "Are you prepared for the final battle?", list("My life for [SSticker.cultdat.entity_name]!", "No")) if(user) if(confirm_final == "No" || confirm_final == null) to_chat(user, "You decide to prepare further before scribing the rune.") @@ -124,7 +124,7 @@ if(rune == /obj/effect/rune/narsie) narsie_rune = TRUE if(initial(rune.req_keyword)) - keyword = stripped_input(user, "Please enter a keyword for the rune.", "Enter Keyword") + keyword = tgui_input_text(user, "Please enter a keyword for the rune.", "Enter Keyword") if(!keyword) return diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 4627b8d41821..74b722faf3cb 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -369,7 +369,7 @@ structure_check() searches for nearby cultist structures required for the invoca var/obj/item/melee/cultblade/dagger/D = new(get_turf(src)) if(H.equip_to_slot_if_possible(D, SLOT_HUD_IN_BACKPACK, FALSE, TRUE)) - to_chat(H, "You have a dagger in your backpack. Use it to do [SSticker.cultdat.entity_title1]'s bidding. ") + to_chat(H, "You have a dagger in your backpack. Use it to do [SSticker.cultdat.entity_title1]'s bidding.") else to_chat(H, "There is a dagger on the floor. Use it to do [SSticker.cultdat.entity_title1]'s bidding.") @@ -913,7 +913,7 @@ structure_check() searches for nearby cultist structures required for the invoca log_game("Manifest rune failed - user is a ghost") return - var/choice = alert(user, "You tear open a connection to the spirit realm...", null, "Summon a Cult Ghost", "Ascend as a Dark Spirit", "Cancel") + var/choice = tgui_alert(user, "You tear open a connection to the spirit realm...", "Invoke", list("Summon a Cult Ghost", "Ascend as a Dark Spirit", "Cancel")) if(choice == "Summon a Cult Ghost") if(!is_station_level(z) || istype(get_area(src), /area/space)) to_chat(user, "The veil is not weak enough here to manifest spirits, you must be on station!") @@ -1001,15 +1001,12 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/manifest/proc/ghostify(mob/living/user, turf/T) ADD_TRAIT(user, SCRYING, CULT_TRAIT) - user.add_atom_colour(RUNE_COLOR_DARKRED, ADMIN_COLOUR_PRIORITY) user.visible_message("[user] freezes statue-still, glowing an unearthly red.", "You see what lies beyond. All is revealed. In this form you find that your voice booms above all others.") - ghost = user.ghostize(TRUE) + ghost = user.ghostize(TRUE, RUNE_COLOR_DARKRED, "Dark Spirit of [user.name]") var/datum/action/innate/cult/comm/spirit/CM = new var/datum/action/innate/cult/check_progress/V = new //var/datum/action/innate/cult/ghostmark/GM = new - ghost.name = "Dark Spirit of [ghost.name]" - ghost.color = "red" CM.Grant(ghost) V.Grant(ghost) //GM.Grant(ghost) diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index 52edccc9e73a..6ea8194fe61f 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -2,6 +2,7 @@ name = "extended" config_tag = "extended" required_players = 0 + single_antag_positions = list() /datum/game_mode/announce() to_chat(world, "The current game mode is - Extended Role-Playing!") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index e93cea24c1f6..82d3a6fa07b1 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -43,6 +43,9 @@ var/list/datum/station_goal/station_goals = list() // A list of all station goals for this game mode + /// Each item in this list can only be rolled once on average. + var/list/single_antag_positions = list("Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster") + /datum/game_mode/proc/announce() //to be calles when round starts to_chat(world, "Notice: [src] did not define announce()") diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 8b95f5126ef7..52aee2543b3c 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -237,7 +237,7 @@ if(!istype(T) || !is_station_level(T.z)) to_chat(owner, "You cannot activate the doomsday device while off-station!") return - if(alert(owner, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", "confirm = TRUE;", "confirm = FALSE;") != "confirm = TRUE;") + if(tgui_alert(owner, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", list("confirm = TRUE;", "confirm = FALSE;")) != "confirm = TRUE;") return if(active) return //prevent the AI from activating an already active doomsday @@ -341,6 +341,7 @@ turret.health += 30 turret.eprojectile = /obj/item/projectile/beam/laser/ai_turret/heavylaser //Once you see it, you will know what it means to FEAR. turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg' + AI.turrets_upgraded = TRUE //Hostile Station Lockdown: Locks, bolts, and electrifies every airlock on the station. After 90 seconds, the doors reset. /datum/AI_Module/lockdown @@ -460,21 +461,21 @@ /datum/AI_Module/overload_machine module_name = "Machine Overload" mod_pick_name = "overload" - description = "Overheats an electrical machine, causing a small explosion and destroying it. Two uses per purchase." + description = "Overheats an electrical machine, causing a moderately-sized explosion and destroying it. Four uses per purchase." cost = 20 power_type = /datum/action/innate/ai/ranged/overload_machine unlock_text = "You enable the ability for the station's APCs to direct intense energy into machinery." /datum/action/innate/ai/ranged/overload_machine name = "Overload Machine" - desc = "Overheats a machine, causing a small explosion after a short time." + desc = "Overheats a machine, causing a moderately-sized explosion after a short time." button_icon_state = "overload_machine" - uses = 2 + uses = 4 linked_ability_type = /obj/effect/proc_holder/ranged_ai/overload_machine /datum/action/innate/ai/ranged/overload_machine/proc/detonate_machine(obj/machinery/M) if(M && !QDELETED(M)) - explosion(get_turf(M), 0,1,1,0) + explosion(get_turf(M), 0, 3, 5, 0) if(M) //to check if the explosion killed it before we try to delete it qdel(M) @@ -581,7 +582,7 @@ if(!owner_AI.can_place_transformer(src)) return active = TRUE - if(alert(owner, "Are you sure you want to place the machine here?", "Are you sure?", "Yes", "No") == "No") + if(tgui_alert(owner, "Are you sure you want to place the machine here?", "Are you sure?", list("Yes", "No")) != "Yes") active = FALSE return if(!owner_AI.can_place_transformer(src)) @@ -626,6 +627,107 @@ to_chat(src, "[alert_msg]") return success +//Turret Assembly: Assemble an AI turret at the chosen location. One use per purchase +/datum/AI_Module/place_turret + module_name = "Deploy Turret" + mod_pick_name = "turretdeployer" + description = "Build a turret anywhere that lethally targets organic life in sight." + cost = 30 + power_type = /datum/action/innate/ai/place_turret + unlock_text = "You prepare an energy turret for deployment." + unlock_sound = 'sound/items/rped.ogg' + +/datum/action/innate/ai/place_turret + name = "Deploy Turret" + desc = "Build a turret anywhere that lethally targets organic life in sight." + button_icon_state = "deploy_turret" + uses = 1 + auto_use_uses = FALSE + var/image/turf_overlay + +/datum/action/innate/ai/place_turret/New() + ..() + turf_overlay = image('icons/turf/overlays.dmi') + +/datum/action/innate/ai/place_turret/Activate() + if(active) + to_chat(owner, "Your assemblers can only construct one turret at a time.") + return + if(!owner_AI.can_place_turret(src)) + return + active = TRUE + var/response = alert(owner, "Are you sure you want to place a turret here? Deployment will take a few seconds to complete, in which the turret will be vulnerable.", "Are you sure?", "No", "Yes") + if(!response || response == "No") + active = FALSE + return + if(!owner_AI.can_place_turret(src)) + active = FALSE + return + deploy_turret() + active = FALSE + +/datum/action/innate/ai/place_turret/proc/deploy_turret() + var/turf/T = get_turf(owner_AI.eyeobj) + + //Handles the turret construction and configuration + playsound(T, 'sound/items/rped.ogg', 100, TRUE) //Plays a sound both at the location of the construction to alert players and to the user as feedback + owner.playsound_local(owner, 'sound/items/rped.ogg', 50, FALSE, use_reverb = FALSE) + to_chat(owner, "You order your electronics to assemble a turret. This will take a few seconds.") + var/obj/effect/temp_visual/rcd_effect/spawning_effect = new(T) + QDEL_IN(spawning_effect, 5 SECONDS) + + //Deploys as lethal. Nonlethals can be enabled. + var/obj/machinery/porta_turret/turret = new /obj/machinery/porta_turret/ai_turret(T) + turret.disabled = TRUE + turret.lethal = TRUE + turret.raised = TRUE //While raised, it is vulnerable to damage + turret.targetting_is_configurable = FALSE + turret.check_synth = TRUE + turret.invisibility = 100 + + //If turrets are already upgraded, beef it up + if(owner_AI.turrets_upgraded) + turret.health += 30 + turret.eprojectile = /obj/item/projectile/beam/laser/ai_turret/heavylaser //Big gun + turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg' + + if(do_after_once(owner, 5 SECONDS, target = T, allow_moving = TRUE)) //Once this is done, turret is armed and dangerous + turret.raised = initial(turret.raised) + turret.invisibility = initial(turret.invisibility) + turret.disabled = initial(turret.disabled) + new /obj/effect/temp_visual/rcd_effect/end(T) + playsound(T, 'sound/items/deconstruct.ogg', 100, TRUE) + to_chat(owner, "Turret deployed.") + adjust_uses(-1) + +/mob/living/silicon/ai/proc/can_place_turret(datum/action/innate/ai/place_turret/action) + if(!eyeobj || !isturf(eyeobj.loc) || incapacitated() || !action) + return + + var/turf/simulated/floor/deploylocation = get_turf(eyeobj) + + var/image/I = action.turf_overlay + I.loc = deploylocation + client.images += I + I.icon_state = "redOverlay" + var/datum/camerachunk/C = GLOB.cameranet.getCameraChunk(deploylocation.x, deploylocation.y, deploylocation.z) + + if(!istype(deploylocation)) + to_chat(src, "There isn't enough room! Make sure you are placing the machine in a clear area and on a floor.") + return FALSE + if(!C.visibleTurfs[deploylocation]) + to_chat(src, "You don't have camera vision of this location!") + addtimer(CALLBACK(src, PROC_REF(remove_transformer_image), client, I, deploylocation), 3 SECONDS) + return FALSE + if(is_blocked_turf(deploylocation)) + to_chat(src, "That area must be clear of objects!") + addtimer(CALLBACK(src, PROC_REF(remove_transformer_image), client, I, deploylocation), 3 SECONDS) + return FALSE + + I.icon_state = "greenOverlay" //greenOverlay and redOverlay for success and failure respectively + addtimer(CALLBACK(src, PROC_REF(remove_transformer_image), client, I, deploylocation), 3 SECONDS) + return TRUE + //Blackout: Overloads a random number of lights across the station. Three uses. /datum/AI_Module/blackout module_name = "Blackout" @@ -748,6 +850,7 @@ /datum/AI_Module/cameracrack/upgrade(mob/living/silicon/ai/AI) if(AI.builtInCamera) + AI.cracked_camera = TRUE QDEL_NULL(AI.builtInCamera) /datum/AI_Module/engi_upgrade diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 41d8aad47085..9dc28ac372b1 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -10,6 +10,7 @@ required_players = 15 var/max_teams = 4 abductor_teams = 1 + single_antag_positions = list() var/list/datum/mind/scientists = list() var/list/datum/mind/agents = list() var/list/datum/objective/team_objectives = list() @@ -206,7 +207,7 @@ if(console.experiment.points >= objective.target_amount) to_chat(world, "[team_name] team fulfilled its mission!") else - to_chat(world, "[team_name] team failed its mission.") + to_chat(world, "[team_name] team failed its mission.") ..() return 1 diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index bdac0e91c34d..38f5e35374b2 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -321,7 +321,7 @@ to_chat(user, "Your target is already under a mind-controlling influence!") return - var/command = stripped_input(user, "Enter the command for your target to follow. Uses Left: [G.mind_control_uses], Duration: [DisplayTimeText(G.mind_control_duration)]", "Enter command") + var/command = tgui_input_text(user, "Enter the command for your target to follow. Uses Left: [G.mind_control_uses], Duration: [DisplayTimeText(G.mind_control_duration)]", "Enter command") if(!command) return @@ -341,7 +341,7 @@ if(L.stat == DEAD) to_chat(user, "Your target is dead!") return - var/message = stripped_input(user, "Write a message to send to your target's brain.", "Enter message") + var/message = tgui_input_text(user, "Write a message to send to your target's brain.", "Enter message") if(!message) return if(QDELETED(L) || L.stat == DEAD) @@ -506,7 +506,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} add_attack_logs(user, L, "Put to sleep with [src]") else L.AdjustDrowsy(2 SECONDS) - to_chat(user, "Sleep inducement works fully only on stunned specimens! ") + to_chat(user, "Sleep inducement works fully only on stunned specimens!") L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ "You suddenly feel drowsy!") diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index 81a53fe481a9..71890815b0df 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -29,7 +29,7 @@ /datum/surgery_step/internal/extract_organ/begin_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) for(var/obj/item/I in target.internal_organs) - // Allows for multiple subtypes of heart. + // Allows for multiple subtypes of heart. Doesn't use the organ datum so that slimes dont get their brains pulled out of their head if(istype(I, /obj/item/organ/internal/heart)) IC = I break diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 0cb5317bb8a6..b8c75eb8bd32 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -6,14 +6,15 @@ dead_icon = null status = ORGAN_ROBOT origin_tech = "materials=4;biotech=7;abductor=3" - beating = TRUE + organ_datums = list(/datum/organ/heart/always_beating) // alien glands are immune to stopping + tough = TRUE //not easily broken by combat damage + var/cooldown_low = 300 var/cooldown_high = 300 var/next_activation = 0 var/uses // -1 For inifinite var/human_only = FALSE var/active = FALSE - tough = TRUE //not easily broken by combat damage var/mind_control_uses = 1 var/mind_control_duration = 1800 @@ -84,9 +85,6 @@ update_gland_hud() /obj/item/organ/internal/heart/gland/on_life() - if(!beating) - // alien glands are immune to stopping. - beating = TRUE if(!active) return if(!ownerCheck()) @@ -265,7 +263,7 @@ /obj/item/organ/internal/heart/gland/egg/activate() owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]") - new /obj/item/reagent_containers/food/snacks/egg/gland(get_turf(owner)) + new /obj/item/food/snacks/egg/gland(get_turf(owner)) /obj/item/organ/internal/heart/gland/electric cooldown_low = 800 diff --git a/code/game/gamemodes/miniantags/abduction/machinery/abductor_camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/abductor_camera.dm index 1a0dd8c0bb4e..d4aac9db2692 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/abductor_camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/abductor_camera.dm @@ -89,7 +89,9 @@ return var/obj/machinery/abductor/console/console = target - console.TeleporterRetrieve() + if(!console.TeleporterRetrieve()) + to_chat(owner, "Error, unable to recall target. Please ensure they are not buckled, and that you have waited the required 10000 milliseconds!") + playsound(owner, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) /datum/action/innate/teleport_self name = "Send Self" @@ -124,7 +126,7 @@ if(!target || !iscarbon(owner)) return var/obj/machinery/abductor/console/console = target - console.SelectDisguise(remote=1) + console.SelectDisguise(TRUE, usr) /datum/action/innate/set_droppoint name = "Set Experiment Release Point" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index 3946527036b7..65a5d01cc9f6 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -102,7 +102,6 @@ dat += "NO AGENT VEST DETECTED" var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() /obj/machinery/abductor/console/Topic(href, href_list) @@ -120,7 +119,7 @@ if(vest) vest.toggle_nodrop() else if(href_list["select_disguise"]) - SelectDisguise() + SelectDisguise(FALSE, usr) else if(href_list["dispense"]) switch(href_list["dispense"]) if("baton") @@ -140,7 +139,7 @@ /obj/machinery/abductor/console/proc/TeleporterRetrieve() if(pad && gizmo && gizmo.marked) - pad.Retrieve(gizmo.marked) + return pad.Retrieve(gizmo.marked) /obj/machinery/abductor/console/proc/TeleporterSend() if(pad) @@ -150,10 +149,10 @@ if(vest) vest.flip_mode() -/obj/machinery/abductor/console/proc/SelectDisguise(remote = 0) - var/entry_name = input( "Choose Disguise", "Disguise") as null|anything in disguises +/obj/machinery/abductor/console/proc/SelectDisguise(remote, mob/user) + var/entry_name = tgui_input_list(user, "Choose Disguise", "Abductor Disguises", disguises) var/datum/icon_snapshot/chosen = disguises[entry_name] - if(chosen && (remote || in_range(usr,src))) + if(chosen && (remote || in_range(user, src))) vest.SetDisguise(chosen) /obj/machinery/abductor/console/proc/SetDroppoint(turf/location,user) @@ -165,9 +164,7 @@ pad.teleport_target = location to_chat(user, "Location marked as test subject release point.") - /obj/machinery/abductor/console/proc/Link_Abduction_Equipment() // these must all be explicitly `in machines` or they will not properly link. - for(var/obj/machinery/abductor/pad/p in GLOB.abductor_equipment) if(p.team == team) pad = p diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index 8d490c75109e..0370c73435df 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -40,10 +40,13 @@ if(!length(colors)) colors = shuffle(color_pool) -/obj/machinery/abductor/gland_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) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/abductor/gland_dispenser/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/abductor/gland_dispenser/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GlandDispenser", name, 300, 338, master_ui, state) + ui = new(user, src, "GlandDispenser", name) ui.open() /obj/machinery/abductor/gland_dispenser/ui_data(mob/user) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index e23b5075a55b..2322549036a9 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -9,7 +9,7 @@ var/credits = 0 var/list/history = list() var/list/abductee_minds = list() - var/flash = " - || - " + var/flash = "Idle." var/obj/machinery/abductor/console/console var/mob/living/carbon/human/occupant @@ -38,17 +38,19 @@ return TRUE visible_message("[user] puts [target] into [src].") + QDEL_LIST_CONTENTS(target.grabbed_by) target.forceMove(src) occupant = target + flash = "Machine ready." update_icon(UPDATE_ICON_STATE) add_fingerprint(user) return TRUE /obj/machinery/abductor/experiment/attack_hand(mob/user) - if(..()) + if(!isabductor(user)) + to_chat(user, "You don't understand any of the alien writing!") return - - experimentUI(user) + ui_interact(user) /obj/machinery/abductor/experiment/proc/dissection_icon(mob/living/carbon/human/H) var/icon/I = icon(H.stand_icon) @@ -60,75 +62,62 @@ return I -/obj/machinery/abductor/experiment/proc/experimentUI(mob/user) - var/dat - dat += "

Experiment

" +/obj/machinery/abductor/experiment/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/abductor/experiment/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/abductor/experiment/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ExperimentConsole", name) + ui.open() + +/obj/machinery/abductor/experiment/ui_data(mob/user) + var/list/data = list() + data["open"] = occupant ? TRUE : FALSE + data["feedback"] = flash + data["occupant"] = occupant ? TRUE : FALSE + data["occupant_name"] = null + data["occupant_status"] = null if(occupant) - var/icon/H = icon(dissection_icon(occupant), dir = SOUTH) - if(H) - user << browse_rsc(H, "dissection_img.png") - dat += "
" - dat += "" - dat += "" - else - dat += "ERR: Unable to retrieve image data for occupant." - dat += "Probe
" - dat += "Dissect
" - dat += "Analyze
" - dat += "
" - else - dat += "Experiment " - - if(!occupant) - dat += "

Machine Unoccupied

" - else - dat += "

Subject Status :

" - dat += "[occupant.name] => " - switch(occupant.stat) - if(0) - dat += "Conscious" - if(1) - dat += "Unconscious" - else - dat += "Deceased" - dat += "
" - dat += "[flash]" - dat += "
" - dat += "Scan" - dat += "Eject Occupant" : "unoccupied=1'>Unoccupied"]" - var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.set_content(dat) - popup.open() - -/obj/machinery/abductor/experiment/Topic(href, href_list) - if(..() || usr == occupant) - return - usr.set_machine(src) - if(href_list["refresh"]) - updateUsrDialog() + var/mob/living/mob_occupant = occupant + data["occupant_name"] = mob_occupant.name + data["occupant_status"] = mob_occupant.stat + return data + +/obj/machinery/abductor/experiment/ui_act(action, list/params) + . = ..() + if(.) return - if(href_list["eject"]) - eject_abductee() - return - if(occupant && occupant.stat != DEAD) - if(href_list["experiment"]) - flash = Experiment(occupant,href_list["experiment"]) - updateUsrDialog() - add_fingerprint(usr) -/obj/machinery/abductor/experiment/proc/Experiment(mob/occupant,type) + switch(action) + if("door") + eject_abductee() + flash = "Specimen ejected!" + + if("experiment") + if(!occupant) + return + var/mob/living/mob_occupant = occupant + if(mob_occupant.stat == DEAD) + return + flash = experiment(mob_occupant, params["experiment_type"], usr) + return TRUE + +/obj/machinery/abductor/experiment/proc/experiment(mob/occupant,type) var/mob/living/carbon/human/H = occupant var/point_reward = 0 if(H in history) - return "Specimen already in database." + return "Specimen already in database." if(H.stat == DEAD) atom_say("Specimen deceased - please provide fresh sample.") - return "Specimen deceased." + return "Specimen deceased." var/obj/item/organ/internal/heart/gland/GlandTest = locate() in H.internal_organs if(!GlandTest) atom_say("Experimental dissection not detected!") - return "No glands detected!" + return "No glands detected!" if(H.mind != null && H.ckey != null) history += H abductee_minds += H.mind @@ -158,22 +147,22 @@ point_reward++ if(point_reward > 0) eject_abductee() - SendBack(H) - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + send_back(H) + playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) points += point_reward credits += point_reward - return "Experiment successful! [point_reward] new data-points collected." + return "Experiment successful! [point_reward] new data-points collected." else - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) - return "Experiment failed! No replacement organ detected." + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + return "Experiment failed! No replacement organ detected." else atom_say("Brain activity nonexistent - disposing sample...") eject_abductee() - SendBack(H) - return "Specimen braindead - disposed." + send_back(H) + return "Specimen braindead - disposed." -/obj/machinery/abductor/experiment/proc/SendBack(mob/living/carbon/human/H) +/obj/machinery/abductor/experiment/proc/send_back(mob/living/carbon/human/H) H.Sleeping(16 SECONDS) if(console && console.pad && console.pad.teleport_target) H.forceMove(console.pad.teleport_target) @@ -201,6 +190,7 @@ var/mob/living/carbon/human/H = grabbed.affecting H.forceMove(src) occupant = H + flash = "Machine ready." update_icon(UPDATE_ICON_STATE) add_fingerprint(user) qdel(G) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm index f655a304455c..57e913418658 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm @@ -7,8 +7,11 @@ var/turf/teleport_target /obj/machinery/abductor/pad/proc/Warp(mob/living/target) - if(!target.buckled) - target.forceMove(get_turf(src)) + if(target.buckled || target.has_status_effect(STATUS_EFFECT_ABDUCTOR_COOLDOWN)) + return FALSE + target.forceMove(get_turf(src)) + target.apply_status_effect(STATUS_EFFECT_ABDUCTOR_COOLDOWN) + return TRUE /obj/machinery/abductor/pad/proc/Send() if(teleport_target == null) @@ -23,7 +26,7 @@ /obj/machinery/abductor/pad/proc/Retrieve(mob/living/target) flick("alien-pad", src) new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) - Warp(target) + return Warp(target) /obj/machinery/abductor/pad/proc/MobToLoc(place,mob/living/target) new/obj/effect/temp_visual/teleport_abductor(place) @@ -31,6 +34,7 @@ flick("alien-pad", src) target.forceMove(place) new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) + target.apply_status_effect(STATUS_EFFECT_ABDUCTOR_COOLDOWN) /obj/machinery/abductor/pad/proc/PadToLoc(place) new/obj/effect/temp_visual/teleport_abductor(place) @@ -39,6 +43,7 @@ for(var/mob/living/target in src.loc) target.forceMove(place) new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) + target.apply_status_effect(STATUS_EFFECT_ABDUCTOR_COOLDOWN) /obj/effect/temp_visual/teleport_abductor name = "Huh" diff --git a/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm b/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm index e0a32fe54689..594ede9117e0 100644 --- a/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm +++ b/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm @@ -193,7 +193,7 @@ if(!choice) return - var/msg = stripped_input(usr, "What do you wish to tell [choice]?", null, "") + var/msg = tgui_input_text(usr, "What do you wish to tell [choice]?", null, "") if(!(msg)) return log_say("(SLAUGHTER to [key_name(choice)]) [msg]", usr) @@ -212,6 +212,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "demon_heart" origin_tech = "combat=5;biotech=7" + organ_datums = list(/datum/organ/heart/always_beating) /obj/item/organ/internal/heart/demon/update_icon_state() return //always beating visually @@ -219,9 +220,6 @@ /obj/item/organ/internal/heart/demon/prepare_eat() return // Just so people don't accidentally waste it -/obj/item/organ/internal/heart/demon/Stop() - return 0 // Always beating. - /obj/item/organ/internal/heart/demon/attack_self(mob/living/user) user.visible_message("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!", \ "An unnatural hunger consumes you. You raise [src] to your mouth and devour it!") @@ -246,7 +244,7 @@ // Eating a 2nd heart. Gives the ability to drag people into blood and eat them. if(HAS_TRAIT(user, TRAIT_BLOODCRAWL)) - to_chat(user, "You feel differ- CONSUME THEM! ") + to_chat(user, "You feel differ- CONSUME THEM!") ADD_TRAIT(user, TRAIT_BLOODCRAWL_EAT, "bloodcrawl_eat") qdel(src) // Replacing their demon heart with another demon heart is pointless, just delete this one and return. return TRUE diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index bf2cc95482d2..f3ede2875d14 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -29,7 +29,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 AIStatus = AI_OFF - butcher_results = list(/obj/item/reagent_containers/food/snacks/ectoplasm = 1) + butcher_results = list(/obj/item/food/snacks/ectoplasm = 1) var/summoned = FALSE var/cooldown = 0 var/damage_transfer = 1 //how much damage from each attack we transfer to the owner @@ -208,7 +208,7 @@ /mob/living/simple_animal/hostile/guardian/proc/Communicate(message) var/input if(!message) - input = stripped_input(src, "Please enter a message to tell your summoner.", "Guardian", "") + input = tgui_input_text(src, "Please enter a message to tell your summoner.", "Guardian") else input = message if(!input || !summoner) @@ -278,12 +278,12 @@ if(user.mind && (ischangeling(user) || user.mind.has_antag_datum(/datum/antagonist/vampire))) to_chat(user, "[ling_failure]") return - if(used == TRUE) + if(used) to_chat(user, "[used_message]") return used = TRUE // Set this BEFORE the popup to prevent people using the injector more than once, polling ghosts multiple times, and receiving multiple guardians. - var/choice = alert(user, "[confirmation_message]",, "Yes", "No") - if(choice == "No") + var/choice = tgui_alert(user, "[confirmation_message]", "Confirm", list("Yes", "No")) + if(choice != "Yes") to_chat(user, "You decide against using the [name].") used = FALSE return @@ -295,7 +295,7 @@ picked_random_type = pick(possible_guardians) guardian_type = picked_random_type else - guardian_type = input(user, "Pick the type of [mob_name]", "[mob_name] Creation") as null|anything in possible_guardians + guardian_type = tgui_input_list(user, "Pick the type of [mob_name]", "[mob_name] Creation", possible_guardians) if(!guardian_type) to_chat(user, "You decide against using the [name].") used = FALSE diff --git a/code/game/gamemodes/miniantags/guardian/host_actions.dm b/code/game/gamemodes/miniantags/guardian/host_actions.dm index a6df9937431d..8a622789e347 100644 --- a/code/game/gamemodes/miniantags/guardian/host_actions.dm +++ b/code/game/gamemodes/miniantags/guardian/host_actions.dm @@ -27,7 +27,7 @@ button_icon_state = "communicate" /datum/action/guardian/communicate/Trigger(left_click) - var/input = stripped_input(owner, "Enter a message to tell your guardian:", "Message", "") + var/input = tgui_input_text(owner, "Enter a message to tell your guardian:", "Message") if(!input || !guardian) return @@ -76,8 +76,8 @@ to_chat(owner, "This ability is still recharging.") return - var/confirm = alert("Are you sure you want replace your guardian's player?", "Confirm", "Yes", "No") - if(confirm == "No") + var/confirm = tgui_alert(owner, "Are you sure you want replace your guardian's player?", "Confirm", list("Yes", "No")) + if(confirm != "Yes") return // Do this immediately, so the user can't spam a bunch of polls. @@ -149,12 +149,11 @@ to_chat(guardian_user, "Surveillance trap deployed!") return TRUE else - to_chat(guardian_user, "You have too many traps deployed. Delete one to place another.") - var/picked_snare = input(guardian_user, "Pick which trap to disarm", "Disarm Trap") as null|anything in guardian_user.snares + var/picked_snare = tgui_input_list(guardian_user, "You have too many snares deployed! Delete one to place another.", "Disarm Snare", guardian_user.snares) if(picked_snare) guardian_user.snares -= picked_snare qdel(picked_snare) - to_chat(src, "Snare disarmed.") + to_chat(user, "Snare disarmed.") revert_cast() /obj/effect/proc_holder/spell/choose_battlecry @@ -171,7 +170,7 @@ /obj/effect/proc_holder/spell/choose_battlecry/cast(list/targets, mob/living/user = usr) var/mob/living/simple_animal/hostile/guardian/punch/guardian_user = user - var/input = stripped_input(guardian_user, "What do you want your battlecry to be? Max length of 5 characters.", ,"", 6) + var/input = tgui_input_text(guardian_user, "What do you want your battlecry to be? Max length of 6 characters.", "Change Battlecry", guardian_user.battlecry, 6) if(!input) revert_cast() return diff --git a/code/game/gamemodes/miniantags/guardian/types/gaseous.dm b/code/game/gamemodes/miniantags/guardian/types/gaseous.dm index 221d2833f981..63b9ae2a6b6a 100644 --- a/code/game/gamemodes/miniantags/guardian/types/gaseous.dm +++ b/code/game/gamemodes/miniantags/guardian/types/gaseous.dm @@ -44,7 +44,7 @@ target_turf.air_update_turf() /mob/living/simple_animal/hostile/guardian/gaseous/ToggleMode() - var/picked_gas = input("Select a gas to expel.", "Gas Producer") as null|anything in possible_gases + var/picked_gas = tgui_input_list(src, "Select a gas to expel.", "Gas Producer", possible_gases) if(!picked_gas) moles_of_gas = null to_chat(src, "You stopped expelling gas.") diff --git a/code/game/gamemodes/miniantags/guardian/types/healer.dm b/code/game/gamemodes/miniantags/guardian/types/healer.dm index 466a448f7284..0ceeee7dadb0 100644 --- a/code/game/gamemodes/miniantags/guardian/types/healer.dm +++ b/code/game/gamemodes/miniantags/guardian/types/healer.dm @@ -132,7 +132,7 @@ if(!Adjacent(A)) to_chat(src, "You must be adjacent to your target!") return - if((A.anchored)) + if(A.anchored) to_chat(src, "Your target can not be anchored!") return to_chat(src, "You begin to warp [A]") diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index be867dcdab5b..312117880f09 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -34,7 +34,7 @@ wander = FALSE attacktext = "glomps" attack_sound = 'sound/effects/blobattack.ogg' - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) + butcher_results = list(/obj/item/food/snacks/meat/slab = 2) /// If the morph is disguised or not var/morphed = FALSE diff --git a/code/game/gamemodes/miniantags/pulsedemon/cross_shock_component.dm b/code/game/gamemodes/miniantags/pulsedemon/cross_shock_component.dm index 0934f127f5cf..1c15fdb1a820 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/cross_shock_component.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/cross_shock_component.dm @@ -40,11 +40,11 @@ if(!our_cable || !our_cable.powernet || !our_cable.powernet.available_power) return var/area/to_deduct_from = get_area(our_cable) - thing_were_gonna_shock.electrocute_act(shock_damage, src) + thing_were_gonna_shock.electrocute_act(shock_damage, source) to_deduct_from.powernet.use_active_power(energy_cost) playsound(get_turf(parent), 'sound/effects/eleczap.ogg', 30, TRUE) else - thing_were_gonna_shock.electrocute_act(shock_damage, src) + thing_were_gonna_shock.electrocute_act(shock_damage, source) playsound(get_turf(parent), 'sound/effects/eleczap.ogg', 30, TRUE) COOLDOWN_START(src, last_shock, delay_between_shocks) diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm index f5a0087f2342..155cb343461f 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm @@ -142,6 +142,7 @@ RegisterSignal(SSdcs, COMSIG_GLOB_CABLE_UPDATED, PROC_REF(cable_updated_handler)) RegisterSignal(src, COMSIG_BODY_TRANSFER_TO, PROC_REF(make_pulse_antagonist)) + RegisterSignal(src, COMSIG_ATOM_EMP_ACT, PROC_REF(handle_emp)) current_power = locate(/obj/machinery/power) in loc // in the case that both current_power and current_cable are null, the pulsedemon will die the next tick @@ -253,7 +254,6 @@ greeting.Add(mind.prepare_announce_objectives(FALSE)) to_chat(src, chat_box_red(greeting.Join("
"))) SSticker.mode.traitors |= mind - return /mob/living/simple_animal/demon/pulse_demon/proc/give_spells() AddSpell(new /obj/effect/proc_holder/spell/pulse_demon/cycle_camera) @@ -379,6 +379,7 @@ current_power = new_power current_cable = null forceMove(current_power) // we go inside the machine + RegisterSignal(current_power, COMSIG_ATOM_EMP_ACT, PROC_REF(handle_emp)) playsound(src, 'sound/effects/eleczap.ogg', 15, TRUE) do_sparks(rand(2, 4), FALSE, src) if(isapc(current_power)) @@ -388,6 +389,8 @@ INVOKE_ASYNC(src, PROC_REF(try_hijack_apc), current_power) else if(new_cable) current_cable = new_cable + if(current_power) + UnregisterSignal(current_power, COMSIG_ATOM_EMP_ACT) current_power = null update_controlling_area() if(!isturf(loc)) @@ -695,11 +698,10 @@ LAZYADD(apc_images[apc_turf], apc_image) client.images += apc_image -/mob/living/simple_animal/demon/pulse_demon/emp_act(severity) +/mob/living/simple_animal/demon/pulse_demon/proc/handle_emp(datum/source, severity) + SIGNAL_HANDLER if(emp_debounce) return - - . = ..() visible_message("[src] [pick("fizzles", "wails", "flails")] in anguish!") playsound(get_turf(src), pick(hurt_sounds), 30, TRUE) throw_alert(ALERT_CATEGORY_NOREGEN, /obj/screen/alert/pulse_noregen) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 061f5b9a786b..2ea56a6ccdf9 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -67,7 +67,7 @@ if(do_after(src, 20, 0, target = target)) //how about now if(!target.stat) to_chat(src, "They are now powerful enough to fight off your draining.") - to_chat(target, "You feel something tugging across your body before subsiding.") + to_chat(target, "You feel something tugging across your body before subsiding.") draining = FALSE return //hey, wait a minute... to_chat(src, "You begin siphoning essence from [target]'s soul.") @@ -133,7 +133,7 @@ /obj/effect/proc_holder/spell/revenant_transmit/cast(list/targets, mob/living/simple_animal/revenant/user = usr) for(var/mob/living/M in targets) spawn(0) - var/msg = stripped_input(user, "What do you wish to tell [M]?", null, "") + var/msg = tgui_input_text(user, "What do you wish to tell [M]?", "Transmit") if(!msg) cooldown_handler.revert_cast() return @@ -497,7 +497,7 @@ /mob/living/carbon/human/defile() to_chat(src, "You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].") - adjustStaminaLoss(60) + apply_damage(60, STAMINA) adjustToxLoss(5) AdjustConfused(40 SECONDS, bound_lower = 0, bound_upper = 60 SECONDS) new /obj/effect/temp_visual/revenant(loc) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 4bc83c1c492d..b4a32179dd30 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -13,6 +13,7 @@ required_players = 30 // 30 players - 5 players to be the nuke ops = 25 players remaining required_enemies = 5 recommended_enemies = 5 + single_antag_positions = list() var/const/agents_possible = 5 //If we ever need more syndicate agents. diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 0cc132b2abd8..178399588d9b 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -21,20 +21,20 @@ return declaring_war = TRUE - var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]. Are you sure you want to alert the enemy crew? You have [-round((world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", "Yes", "No") + var/are_you_sure = tgui_alert(user, "Consult your team carefully before you declare war on [station_name()]. Are you sure you want to alert the enemy crew? You have [-round((world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", list("Yes", "No")) declaring_war = FALSE if(!check_allowed(user)) return - if(are_you_sure == "No") + if(are_you_sure != "Yes") to_chat(user, "On second thought, the element of surprise isn't so bad after all.") return var/war_declaration = "[user.real_name] has declared [user.p_their()] intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them." declaring_war = TRUE - var/custom_threat = alert(user, "Do you want to customize your declaration?", "Customize?", "Yes", "No") + var/custom_threat = tgui_alert(user, "Do you want to customize your declaration?", "Customize?", list("Yes", "No")) declaring_war = FALSE if(!check_allowed(user)) @@ -42,7 +42,7 @@ if(custom_threat == "Yes") declaring_war = TRUE - war_declaration = stripped_input(user, "Insert your custom declaration", "Declaration") + war_declaration = tgui_input_text(user, "Insert your custom declaration", "Declaration") declaring_war = FALSE if(!check_allowed(user) || !war_declaration) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index f20e122a817f..8f664e7b9d63 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -277,7 +277,7 @@ GLOBAL_VAR(bomb_set) else if(!panel_open) to_chat(user, "[src] emits a buzzing noise, the panel staying locked in.") - if(panel_open == TRUE) + if(panel_open) panel_open = FALSE to_chat(user, "You screw the control panel of [src] back on.") core_stage = removal_stage @@ -335,7 +335,7 @@ GLOBAL_VAR(bomb_set) /obj/machinery/nuclearbomb/attack_ghost(mob/user as mob) if(!panel_open) - return ui_interact(user, state = GLOB.viewer_state) + return ui_interact(user) if(removal_stage != NUKE_CORE_FULLY_EXPOSED || !core) return wires.Interact(user) @@ -356,10 +356,13 @@ GLOBAL_VAR(bomb_set) core = null update_icon(UPDATE_OVERLAYS) -/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/nuclearbomb/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/nuclearbomb/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "NuclearBomb", name, 450, 300, master_ui, state) + ui = new(user, src, "NuclearBomb", name) ui.open() /obj/machinery/nuclearbomb/ui_data(mob/user) @@ -436,9 +439,9 @@ GLOBAL_VAR(bomb_set) yes_code = FALSE return // If no code set, enter new one - var/tempcode = input(usr, "Code", "Input Code", null) as num|null + var/tempcode = tgui_input_number(usr, "Code", "Input Code", max_value = 999999) if(tempcode) - code = min(max(round(tempcode), 0), 999999) + code = tempcode if(code == r_code) yes_code = TRUE code = null @@ -475,9 +478,10 @@ GLOBAL_VAR(bomb_set) switch(action) if("set_time") - var/time = input(usr, "Detonation time (seconds, min 120, max 600)", "Input Time", 120) as num|null - if(time) - timeleft = min(max(round(time), 120), 600) + var/time = tgui_input_number(usr, "Detonation time (seconds, min 120, max 600)", "Input Time", 120, 600, 120) + if(!time) + return + timeleft = time if("toggle_safety") safety = !(safety) if(safety) diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 5e478757e797..1d39085b6143 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -186,7 +186,7 @@ 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")) + switch(tgui_alert(user, "Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", list("Location", "Disk Recovery", "Other Signature"))) if("Location") setting = SETTING_LOCATION @@ -211,7 +211,7 @@ if("Other Signature") setting = SETTING_OBJECT - switch(alert("Search for item signature or DNA fragment?" , "Signature Mode Select" , "Item" , "DNA")) + switch(tgui_alert(user, "Search for item signature or DNA fragment?", "Signature Mode Select", list("Item", "DNA"))) if("Item") var/list/item_names[0] var/list/item_paths[0] diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 4757f6747917..d340f8d8cadc 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -558,20 +558,25 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) explanation_text = "Free Objective." /datum/objective/steal/proc/select_target() - var/list/possible_items_all = GLOB.potential_theft_objectives+"custom" + var/list/possible_items_all = GLOB.potential_theft_objectives + "custom" var/new_target = input("Select target:", "Objective target", null) as null|anything in possible_items_all - if(!new_target) return + if(!new_target) + return + if(new_target == "custom") - var/datum/theft_objective/O=new - O.typepath = input("Select type:","Type") as null|anything in typesof(/obj/item) - if(!O.typepath) return - var/tmp_obj = new O.typepath - var/custom_name = tmp_obj:name - qdel(tmp_obj) - O.name = sanitize(copytext_char(input("Enter target name:", "Objective target", custom_name) as text|null,1,MAX_NAME_LEN)) // SS220 EDIT - ORIGINAL: copytext - if(!O.name) return - steal_target = O - explanation_text = "Steal [O.name]." + var/obj/item/steal_target_path = input("Select type:","Type") as null|anything in typesof(/obj/item) + if(!steal_target_path) + return + + var/theft_objective_name = sanitize(copytext_char(input("Enter target name:", "Objective target", initial(steal_target_path.name)) as text|null, 1, MAX_NAME_LEN)) // SS220 EDIT - ORIGINAL: copytext + if(!theft_objective_name) + return + + var/datum/theft_objective/target_theft_objective = new + target_theft_objective.typepath = steal_target_path + target_theft_objective.name = theft_objective_name + steal_target = target_theft_objective + explanation_text = "Steal [theft_objective_name]." else steal_target = new new_target update_explanation_text() @@ -597,23 +602,46 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) return FALSE /datum/objective/steal/proc/give_kit(obj/item/item_path) - var/I = new item_path - var/list/slots = list( + var/list/datum/mind/objective_owners = get_owners() + if(!length(objective_owners)) + return + + var/obj/item/item_to_give = new item_path + var/static/list/slots = list( "backpack" = SLOT_HUD_IN_BACKPACK, "left pocket" = SLOT_HUD_LEFT_STORE, "right pocket" = SLOT_HUD_RIGHT_STORE, "left hand" = SLOT_HUD_LEFT_HAND, "right hand" = SLOT_HUD_RIGHT_HAND, ) - for(var/datum/mind/M in get_owners()) - var/mob/living/carbon/human/H = M.current - var/where = H.equip_in_one_of_slots(I, slots) - if(where) - to_chat(H, "

In your [where] is a box containing items and instructions to help you with your steal objective.
") - else - to_chat(H, "Unfortunately, you weren't able to get a stealing kit. This is very bad and you should adminhelp immediately (press F1).") - message_admins("[ADMIN_LOOKUPFLW(H)] Failed to spawn with their [item_path] theft kit.") - qdel(I) + + for(var/datum/mind/kit_receiver_mind as anything in shuffle(objective_owners)) + var/mob/living/carbon/human/kit_receiver = kit_receiver_mind.current + if(!kit_receiver) + continue + + var/where = kit_receiver.equip_in_one_of_slots(item_to_give, slots) + if(!where) + continue + + to_chat(kit_receiver, "

In your [where] is a box containing items and instructions to help you with your steal objective.
") + for(var/datum/mind/objective_owner as anything in objective_owners) + if(kit_receiver_mind == objective_owner || !objective_owner.current) + continue + + to_chat(objective_owner.current, "

[kit_receiver] has received a box containing items and instructions to help you with your steal objective.

") + + return + + qdel(item_to_give) + + for(var/datum/mind/objective_owner as anything in objective_owners) + var/mob/living/carbon/human/failed_receiver = objective_owner.current + if(!failed_receiver) + continue + + to_chat(failed_receiver, "Unfortunately, you weren't able to get a stealing kit. This is very bad and you should adminhelp immediately (press F1).") + message_admins("[ADMIN_LOOKUPFLW(failed_receiver)] Failed to spawn with their [item_path] theft kit.") /datum/objective/absorb diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 549f17c82a3d..94d6590b82a3 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -194,7 +194,7 @@ for(var/datum/mind/head in heads) var/target = (head in targets) if(target) - text += "Target" + text += "Target" text += printplayer(head, 1) text += "
" return text.Join("") diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 39bfff317412..93efa0cb6b3c 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -150,6 +150,12 @@ protected_jobs = list("Quartermaster") job_possession = FALSE +/datum/theft_objective/engraved_dusters + name = "the quartermaster's engraved knuckledusters" + typepath = /obj/item/melee/knuckleduster/nanotrasen + protected_jobs = list("Quartermaster") + location_override = "the Quartermaster's Cargo Office" + /datum/theft_objective/number var/min=0 var/max=0 diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index bc74e2c07754..bf3eadd6551f 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -10,10 +10,13 @@ w_class = WEIGHT_CLASS_TINY var/used = FALSE -/obj/item/contract/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/contract/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/contract/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "WizardApprenticeContract", name, 400, 600, master_ui, state) + ui = new(user, src, "WizardApprenticeContract", name) ui.open() /obj/item/contract/ui_data(mob/user) @@ -73,7 +76,7 @@ return if(used) - to_chat(user, " You've already summoned an apprentice or you are in process of summoning one. ") + to_chat(user, "You've already summoned an apprentice or you are in process of summoning one.") return ui_interact(user) @@ -123,12 +126,12 @@ M.mind.AddSpell(new /obj/effect/proc_holder/spell/mind_transfer(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe/knock(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball/toolbox(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/summonitem(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/disguise_self(null)) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), SLOT_HUD_SHOES) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), SLOT_HUD_WEAR_MASK) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), SLOT_HUD_GLOVES) M.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(M), SLOT_HUD_BELT) - to_chat(M, "Your service has not gone unrewarded. Under the mentorship of [H.real_name], you've mastered stealthy, robeless spells. You can now cast Mindswap, Knock, Homing Toolbox, Forcewall, and Instant Summons without the need for wizard robes.") + to_chat(M, "Your service has not gone unrewarded. Under the mentorship of [H.real_name], you've mastered stealthy, robeless spells. You can now cast Mindswap, Knock, Homing Toolbox, and Disguise Self without the need for wizard robes.") if("honk") M.mind.AddSpell(new /obj/effect/proc_holder/spell/touch/banana/apprentice(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/ethereal_jaunt(null)) @@ -290,12 +293,9 @@ return in_use = TRUE ADD_TRAIT(user, SCRYING, SCRYING_ORB) - user.add_atom_colour(COLOR_BLUE, ADMIN_COLOUR_PRIORITY) // stolen spirit rune code user.visible_message("[user] stares into [src], [user.p_their()] eyes glazing over.", " You stare into [src], you can see the entire universe!") - ghost = user.ghostize(TRUE) - ghost.name = "Magic Spirit of [ghost.name]" - ghost.color = COLOR_BLUE + ghost = user.ghostize(TRUE, COLOR_BLUE, "Magic Spirit of [user.name]") while(!QDELETED(user)) if(user.key || QDELETED(src)) user.visible_message("[user] blinks, returning to the world around [user.p_them()].", @@ -319,6 +319,7 @@ GLOBAL_LIST_EMPTY(multiverse) /obj/item/multisword name = "multiverse sword" desc = "A weapon capable of conquering the universe and beyond. Activate it to summon copies of yourself from others dimensions to fight by your side." + icon = 'icons/obj/energy_melee.dmi' lefthand_file = 'icons/mob/inhands/weapons_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons_righthand.dmi' icon_state = "energy_katana" @@ -704,6 +705,7 @@ GLOBAL_LIST_EMPTY(multiverse) /obj/item/multisword/pike //If We are to be used and spent, let it be for a noble purpose. name = "phantom pike" desc = "A fishing pike that appears to be imbued with a peculiar energy." + icon = 'icons/obj/items.dmi' icon_state = "harpoon" item_state = "harpoon" cooldown_between_uses = 200 //Half the time @@ -877,12 +879,12 @@ GLOBAL_LIST_EMPTY(multiverse) heal_burn = 25 heal_oxy = 25 -/obj/item/reagent_containers/food/drinks/everfull +/obj/item/reagent_containers/drinks/everfull name = "everfull mug" desc = "An enchanted mug which can be filled with any of various liquids on command." icon_state = "evermug" -/obj/item/reagent_containers/food/drinks/everfull/attack_self(mob/user) +/obj/item/reagent_containers/drinks/everfull/attack_self(mob/user) var/static/list/options = list("Omnizine" = image(icon = 'icons/obj/storage.dmi', icon_state = "firstaid"), "Ale" = image(icon = 'icons/obj/drinks.dmi', icon_state = "alebottle"), "Wine" = image(icon = 'icons/obj/drinks.dmi', icon_state = "wineglass"), @@ -908,7 +910,7 @@ GLOBAL_LIST_EMPTY(multiverse) to_chat(user, "The [name] fills to brimming with [options_to_descriptions[choice]].") magic_fill(options_to_reagent[choice]) -/obj/item/reagent_containers/food/drinks/everfull/proc/magic_fill(reagent_choice) +/obj/item/reagent_containers/drinks/everfull/proc/magic_fill(reagent_choice) reagents.clear_reagents() reagents.add_reagent(reagent_choice, volume) diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index 434059436730..e710e0241471 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -127,7 +127,7 @@ if(harry) var/mob/living/carbon/human/new_character = makeBody(harry) new_character.mind.make_Wizard() // This puts them at the wizard spawn, worry not - new_character.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/mugwort(harry), SLOT_HUD_IN_BACKPACK) + new_character.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/mugwort(harry), SLOT_HUD_IN_BACKPACK) // The first wiznerd can get their mugwort from the wizard's den, new ones will also need mugwort! mages_made++ dust_if_respawnable(harry) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index bb4bedd90153..ac866c0a4f3e 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -41,7 +41,22 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/projectile/revolver/golden, /obj/item/gun/projectile/automatic/sniper_rifle, /obj/item/gun/medbeam, - /obj/item/gun/energy/laser/scatter)) + /obj/item/gun/energy/laser/scatter, + /obj/item/gun/projectile/automatic/c20r/toy/riot, + /obj/item/gun/projectile/shotgun/automatic/dual_tube, + /obj/item/gun/energy/kinetic_accelerator/experimental, // even with atmos, this thing can get scary + /obj/item/gun/energy/emitter, + /obj/item/gun/energy/spikethrower, + /obj/item/gun/energy/bsg/prebuilt, + /obj/item/gun/energy/xray, + /obj/item/gun/energy/plasma_pistol, + /obj/item/gun/projectile/automatic/pistol/APS, // whyyy is this capitalized + /obj/item/gun/projectile/revolver/overgrown, + /obj/item/gun/energy/gun/blueshield/pdw9, + /obj/item/gun/energy/disabler/silencer, + /obj/item/gun/energy/lwap, + /obj/item/gun/energy/arc_revolver, + /obj/item/gun/projectile/automatic/ak814)) //if you add anything that isn't covered by the typepaths below, add it to summon_magic_objective_types GLOBAL_LIST_INIT(summoned_magic, list( @@ -55,21 +70,18 @@ GLOBAL_LIST_INIT(summoned_magic, list( /obj/item/spellbook/oneuse/charge, /obj/item/spellbook/oneuse/summonitem, /obj/item/gun/magic/wand, - /obj/item/gun/magic/wand/death, /obj/item/gun/magic/wand/resurrection, - /obj/item/gun/magic/wand/polymorph, /obj/item/gun/magic/wand/teleport, /obj/item/gun/magic/wand/door, /obj/item/gun/magic/wand/fireball, /obj/item/gun/magic/staff/healing, /obj/item/gun/magic/staff/door, /obj/item/scrying, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, + /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/immortality_talisman, /obj/item/melee/ghost_sword)) GLOBAL_LIST_INIT(summoned_special_magic, list( - /obj/item/gun/magic/staff/change, /obj/item/gun/magic/staff/animate, /obj/item/storage/belt/wands/full, /obj/item/contract, @@ -81,7 +93,7 @@ GLOBAL_LIST_INIT(summoned_special_magic, list( GLOBAL_LIST_INIT(summoned_magic_objectives, list( /obj/item/contract, /obj/item/blood_contract, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, + /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/gun/magic, /obj/item/immortality_talisman, /obj/item/melee/ghost_sword, diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index ab25da432f7b..74b672babc58 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -46,7 +46,7 @@ /obj/item/soulstone/proc/was_used() if(!reusable) spent = TRUE - name = "dull [name]" + name = "dull [initial(name)]" desc = "A fragment of the legendary treasure known simply as \ the 'Soul Stone'. The shard lies still, dull and lifeless; \ whatever spark it once held long extinguished." @@ -199,7 +199,7 @@ and the memories of your time as their servant with it.") 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]. ") + 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 diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index a0849e4c800c..a391a35c33b1 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -298,6 +298,12 @@ category = "Assistance" cost = 1 +/datum/spellbook_entry/disguiseself + name = "Disguise Self" + spell_type = /obj/effect/proc_holder/spell/disguise_self + category = "Assistance" + cost = 1 + /datum/spellbook_entry/noclothes name = "Remove Clothes Requirement" spell_type = /obj/effect/proc_holder/spell/noclothes @@ -391,7 +397,7 @@ var/item_path = null /datum/spellbook_entry/item/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) - if(spawn_on_floor == FALSE) + if(!spawn_on_floor) user.put_in_hands(new item_path) else new item_path(user.loc) @@ -469,7 +475,7 @@ /datum/spellbook_entry/item/everfull_mug name = "Everfull Mug" desc = "A magical mug that can be filled with omnizine at will, though beware of addiction! It can also produce alchohol and other less useful substances." - item_path = /obj/item/reagent_containers/food/drinks/everfull + item_path = /obj/item/reagent_containers/drinks/everfull cost = 1 category = "Artefacts" @@ -550,7 +556,7 @@ /datum/spellbook_entry/item/staffchaos name = "Staff of Chaos" - desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." + desc = "A curious staff firing bolts of chaotic energy. Any life struck will be the victim of a random effect, usually harming them. No effect on dead targets." item_path = /obj/item/gun/magic/staff/chaos category = "Staves" @@ -649,14 +655,14 @@ /datum/spellbook_entry/loadout/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) if(destroy_spellbook) - var/response = alert(user, "The [src] loadout cannot be refunded once bought. Are you sure this is what you want?", "No refunds!", "No", "Yes") - if(response == "No") + var/response = tgui_alert(user, "The [src] loadout cannot be refunded once bought. Are you sure this is what you want?", "No refunds!", list("No", "Yes")) + if(response != "Yes") return FALSE to_chat(user, "[book] crumbles to ashes as you acquire its knowledge.") qdel(book) else if(items_path.len) - var/response = alert(user, "The [src] loadout contains items that will not be refundable if bought. Are you sure this is what you want?", "No refunds!", "No", "Yes") - if(response == "No") + var/response = tgui_alert(user, "The [src] loadout contains items that will not be refundable if bought. Are you sure this is what you want?", "No refunds!", list("No", "Yes")) + if(response != "Yes") return FALSE if(items_path.len) var/obj/item/storage/box/wizard/B = new(src) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index db77680783e3..0d65d3a13570 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -9,6 +9,7 @@ required_players = 20 required_enemies = 1 recommended_enemies = 1 + single_antag_positions = list() var/use_huds = TRUE var/finished = FALSE diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 41701ab29314..edc60bdef29b 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -1,8 +1,3 @@ -/obj/var/list/req_access = null -/obj/var/req_access_txt = "0" -/obj/var/list/req_one_access = null -/obj/var/req_one_access_txt = "0" - //returns 1 if this mob has sufficient access to use this object /obj/proc/allowed(mob/M) //check if we don't require any access at all @@ -128,7 +123,7 @@ /proc/get_all_accesses() return list(ACCESS_MINISAT, ACCESS_AI_UPLOAD, ACCESS_ARMORY, ACCESS_ATMOSPHERICS, ACCESS_BAR, ACCESS_SEC_DOORS, ACCESS_BLUESHIELD, - ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_CHAPEL_OFFICE, ACCESS_CE, ACCESS_CHEMISTRY, ACCESS_CLOWN, ACCESS_CMO, + ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_CARGO, ACCESS_CARGO_BAY, ACCESS_SUPPLY_SHUTTLE, ACCESS_MAILSORTING, ACCESS_CHAPEL_OFFICE, ACCESS_CE, ACCESS_CHEMISTRY, ACCESS_CLOWN, ACCESS_CMO, ACCESS_COURT, ACCESS_CONSTRUCTION, ACCESS_CREMATORIUM, ACCESS_JANITOR, ACCESS_ENGINE, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_FORENSICS_LOCKERS, ACCESS_GENETICS, ACCESS_EXPEDITION, ACCESS_BRIG, ACCESS_HOP, ACCESS_HOS, ACCESS_HYDROPONICS, ACCESS_CHANGE_IDS, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN, ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAGISTRATE, ACCESS_MAINT_TUNNELS, ACCESS_HEADS_VAULT, ACCESS_MEDICAL, ACCESS_MIME, @@ -144,7 +139,7 @@ return list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER, ACCESS_SYNDICATE_COMMAND) /proc/get_all_misc_access() - return list(ACCESS_SALVAGE_CAPTAIN, ACCESS_TRADE_SOL, ACCESS_CRATE_CASH, ACCESS_AWAY01) + return list(ACCESS_TRADE_SOL, ACCESS_CRATE_CASH, ACCESS_AWAY01) /proc/get_absolutely_all_accesses() return (get_all_accesses() | get_all_centcom_access() | get_all_syndicate_access() | get_all_misc_access()) @@ -164,7 +159,7 @@ if(REGION_ENGINEERING) //engineering and maintenance return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_MINISAT, ACCESS_CE) if(REGION_SUPPLY) //supply - return list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_QM, ACCESS_HEADS_VAULT) + return list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_CARGO_BAY, ACCESS_SUPPLY_SHUTTLE, ACCESS_QM, ACCESS_HEADS_VAULT) if(REGION_COMMAND) //command return list(ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_TCOMSAT, ACCESS_EXPEDITION, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_HEADS_VAULT, ACCESS_BLUESHIELD, ACCESS_NTREP, ACCESS_HOP, ACCESS_CAPTAIN) if(REGION_CENTCOMM) //because why the heck not diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm index ea70b19ebb07..4f4819a29dde 100644 --- a/code/game/jobs/job/assistant.dm +++ b/code/game/jobs/job/assistant.dm @@ -8,7 +8,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" access = list() //See /datum/job/assistant/get_access() - minimal_access = list() //See /datum/job/assistant/get_access() alt_titles = list("Off-Duty", "Retired", "Intern") outfit = /datum/outfit/job/assistant diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index 04ddbe4d40d4..7800f4b68a79 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -9,7 +9,6 @@ supervisors = "the admins" selection_color = "#ffdddd" access = list() - minimal_access = list() admin_only = TRUE outfit = /datum/outfit/job/ntnavyofficer @@ -58,7 +57,6 @@ supervisors = "the admins" selection_color = "#ffdddd" access = list() - minimal_access = list() admin_only = TRUE spawn_ert = 1 outfit = /datum/outfit/job/ntspecops diff --git a/code/game/jobs/job/engineering_jobs.dm b/code/game/jobs/job/engineering_jobs.dm index 030e3f2d2a86..5aff1dc14a5b 100644 --- a/code/game/jobs/job/engineering_jobs.dm +++ b/code/game/jobs/job/engineering_jobs.dm @@ -14,10 +14,6 @@ ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, - ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, - ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, - ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM) minimal_player_age = 21 exp_map = list(EXP_TYPE_ENGINEERING = 1200) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) @@ -58,8 +54,7 @@ supervisors = "the chief engineer" department_head = list("Chief Engineer") selection_color = "#fff5cc" - 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) + 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") minimal_player_age = 7 exp_map = list(EXP_TYPE_CREW = 300) @@ -95,8 +90,7 @@ supervisors = "the chief engineer" department_head = list("Chief Engineer") selection_color = "#fff5cc" - 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_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE) + 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") minimal_player_age = 7 exp_map = list(EXP_TYPE_CREW = 300) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 4b997b66c5e7..d30d3479d9ad 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -3,9 +3,8 @@ //The name of the job var/title = "NOPE" - //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access - var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population) - var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!) + /// Job access. A list of constants from access_defines.dm. + var/list/access = list() ///Job Bitflag, used for Database entries - DO NOT JUST EDIT THESE var/flag = 0 @@ -73,10 +72,9 @@ var/job_banned_gamemode = FALSE //Only override this proc -/datum/job/proc/after_spawn(mob/living/carbon/human/H) +/datum/job/proc/after_spawn(mob/living/carbon/human/H, joined_late = FALSE) // SS220 EDIT - jobs - prisoner spawn SEND_GLOBAL_SIGNAL(COMSIG_GLOB_JOB_AFTER_SPAWN, src, H) - /datum/job/proc/announce(mob/living/carbon/human/H) /datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE) @@ -94,10 +92,7 @@ announce(H) /datum/job/proc/get_access() - if(GLOB.configuration.jobs.jobs_have_minimal_access) - return minimal_access.Copy() - else - return access.Copy() + return access.Copy() //If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 /datum/job/proc/player_old_enough(client/C) diff --git a/code/game/jobs/job/medical_jobs.dm b/code/game/jobs/job/medical_jobs.dm index d002d0d56518..d623a4126edc 100644 --- a/code/game/jobs/job/medical_jobs.dm +++ b/code/game/jobs/job/medical_jobs.dm @@ -10,12 +10,24 @@ selection_color = "#ffddf0" req_admin_notify = 1 department_account_access = TRUE - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_HEADS, - ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_PSYCHIATRIST, ACCESS_PARAMEDIC, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_EVA, ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_HEADS, - ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_PSYCHIATRIST, ACCESS_MAINT_TUNNELS, ACCESS_PARAMEDIC, ACCESS_MINERAL_STOREROOM) + access = list( + ACCESS_CHEMISTRY, + ACCESS_CMO, + ACCESS_EVA, + ACCESS_GENETICS, + ACCESS_HEADS, + ACCESS_KEYCARD_AUTH, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_MINERAL_STOREROOM, + ACCESS_MORGUE, + ACCESS_PARAMEDIC, + ACCESS_PSYCHIATRIST, + ACCESS_RC_ANNOUNCE, + ACCESS_SEC_DOORS, + ACCESS_SURGERY, + ACCESS_VIROLOGY + ) minimal_player_age = 21 exp_map = list(EXP_TYPE_MEDICAL = 1200) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) @@ -52,8 +64,7 @@ supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") selection_color = "#ffeef0" - 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, ACCESS_MAINT_TUNNELS) + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_MAINT_TUNNELS) alt_titles = list("Surgeon","Nurse") minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) @@ -88,8 +99,7 @@ supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") selection_color = "#ffeef0" - 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_MAINT_TUNNELS) + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS) minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/coroner @@ -150,8 +160,7 @@ supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") selection_color = "#ffeef0" - 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_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + access = list(ACCESS_MEDICAL, ACCESS_CHEMISTRY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) alt_titles = list("Pharmacist","Pharmacologist") minimal_player_age = 7 exp_map = list(EXP_TYPE_CREW = 300) @@ -183,8 +192,7 @@ supervisors = "the chief medical officer and the research director" department_head = list("Chief Medical Officer", "Research Director") selection_color = "#ffeef0" - 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, ACCESS_MAINT_TUNNELS) + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_RESEARCH, ACCESS_MAINT_TUNNELS) minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/geneticist @@ -216,8 +224,7 @@ supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") selection_color = "#ffeef0" - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS) - minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) alt_titles = list("Pathologist","Microbiologist") minimal_player_age = 7 exp_map = list(EXP_TYPE_CREW = 300) @@ -250,8 +257,7 @@ supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") selection_color = "#ffeef0" - access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_PSYCHIATRIST) - minimal_access = list(ACCESS_MEDICAL, ACCESS_PSYCHIATRIST, ACCESS_MAINT_TUNNELS) + access = list(ACCESS_MEDICAL, ACCESS_PSYCHIATRIST, ACCESS_MAINT_TUNNELS) alt_titles = list("Psychologist","Therapist") outfit = /datum/outfit/job/psychiatrist @@ -288,8 +294,20 @@ supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") selection_color = "#ffeef0" - access = list(ACCESS_PARAMEDIC, ACCESS_MEDICAL, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_EVA, ACCESS_MORGUE, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MAILSORTING) - minimal_access=list(ACCESS_PARAMEDIC, ACCESS_MEDICAL, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_EVA, ACCESS_MORGUE, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MAILSORTING) + access = list( + ACCESS_CARGO, + ACCESS_EVA, + ACCESS_EXTERNAL_AIRLOCKS, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINING_STATION, + ACCESS_MINING, + ACCESS_MINT, + ACCESS_MORGUE, + ACCESS_PARAMEDIC + ) minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) outfit = /datum/outfit/job/paramedic diff --git a/code/game/jobs/job/science_jobs.dm b/code/game/jobs/job/science_jobs.dm index ae8330fce9d5..8168456ae837 100644 --- a/code/game/jobs/job/science_jobs.dm +++ b/code/game/jobs/job/science_jobs.dm @@ -10,14 +10,31 @@ selection_color = "#ffddff" req_admin_notify = 1 department_account_access = TRUE - access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, - ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, - ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, - ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_EXPEDITION, ACCESS_XENOARCH, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM, ACCESS_NETWORK) - minimal_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, - ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, - ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_EXPEDITION, ACCESS_XENOARCH, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM, ACCESS_NETWORK) + access = list( + ACCESS_AI_UPLOAD, + ACCESS_EVA, + ACCESS_EXPEDITION, + ACCESS_GENETICS, + ACCESS_HEADS, + ACCESS_KEYCARD_AUTH, + ACCESS_MAINT_TUNNELS, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINISAT, + ACCESS_MORGUE, + ACCESS_NETWORK, + ACCESS_RC_ANNOUNCE, + ACCESS_RD, + ACCESS_RESEARCH, + ACCESS_ROBOTICS, + ACCESS_SEC_DOORS, + ACCESS_TCOMSAT, + ACCESS_TECH_STORAGE, + ACCESS_TELEPORTER, + ACCESS_TOX_STORAGE, + ACCESS_TOX, + ACCESS_XENOARCH, + ACCESS_XENOBIOLOGY + ) minimal_player_age = 21 blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) exp_map = list(EXP_TYPE_SCIENCE = 1200) @@ -59,8 +76,15 @@ supervisors = "the research director" department_head = list("Research Director") selection_color = "#ffeeff" - 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_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) + access = list( + ACCESS_MAINT_TUNNELS, + ACCESS_MINERAL_STOREROOM, + ACCESS_RESEARCH, + ACCESS_TOX_STORAGE, + ACCESS_TOX, + ACCESS_XENOARCH, + ACCESS_XENOBIOLOGY + ) alt_titles = list("Xenoarcheologist", "Anomalist", "Plasma Researcher", "Xenobiologist", "Chemical Researcher") minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 300) @@ -98,8 +122,14 @@ supervisors = "the research director" department_head = list("Research Director") selection_color = "#ffeeff" - 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_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) //As a job that handles so many corpses, it makes sense for them to have morgue access. + access = list( + ACCESS_MAINT_TUNNELS, + ACCESS_MINERAL_STOREROOM, + ACCESS_MORGUE, // As a job that handles so many corpses, it makes sense for them to have morgue access. + ACCESS_RESEARCH, + ACCESS_ROBOTICS, + ACCESS_TECH_STORAGE + ) alt_titles = list("Biomechanical Engineer","Mechatronic Engineer") minimal_player_age = 3 exp_map = list(EXP_TYPE_CREW = 180) diff --git a/code/game/jobs/job/security_jobs.dm b/code/game/jobs/job/security_jobs.dm index 0647ae0a5a5a..5b9db8adc209 100644 --- a/code/game/jobs/job/security_jobs.dm +++ b/code/game/jobs/job/security_jobs.dm @@ -10,14 +10,33 @@ selection_color = "#ffdddd" req_admin_notify = 1 department_account_access = TRUE - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, - ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, - ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, - ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS) - minimal_access = list(ACCESS_EVA, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, - ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, - ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, - ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS) + access = list( + ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_ARMORY, + ACCESS_BRIG, + ACCESS_CARGO_BAY, + ACCESS_CARGO, + ACCESS_CONSTRUCTION, + ACCESS_COURT, + ACCESS_ENGINE, + ACCESS_EVA, + ACCESS_EXPEDITION, + ACCESS_FORENSICS_LOCKERS, + ACCESS_HEADS, + ACCESS_HOS, + ACCESS_KEYCARD_AUTH, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_MINING, + ACCESS_MORGUE, + ACCESS_RC_ANNOUNCE, + ACCESS_RESEARCH, + ACCESS_SEC_DOORS, + ACCESS_SECURITY, + ACCESS_SUPPLY_SHUTTLE, + ACCESS_WEAPONS + ) minimal_player_age = 21 exp_map = list(EXP_TYPE_SECURITY = 1200) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) @@ -62,8 +81,7 @@ supervisors = "the head of security" department_head = list("Head of Security") selection_color = "#ffeeee" - 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) + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) minimal_player_age = 21 exp_map = list(EXP_TYPE_SECURITY = 600) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) @@ -109,7 +127,6 @@ selection_color = "#ffeeee" alt_titles = list("Forensic Technician") access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_WEAPONS) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_WEAPONS) alt_titles = list("Forensic Technician") minimal_player_age = 14 exp_map = list(EXP_TYPE_CREW = 600) @@ -167,8 +184,7 @@ supervisors = "the head of security" department_head = list("Head of Security") selection_color = "#ffeeee" - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) minimal_player_age = 14 exp_map = list(EXP_TYPE_CREW = 600) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index c7d7891df7c6..9f9084676cbc 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -10,8 +10,7 @@ req_admin_notify = 1 job_department_flags = DEP_FLAG_COMMAND department_account_access = TRUE - access = list() //See get_access() - minimal_access = list() //See get_access() + access = list() //See get_access() minimal_player_age = 30 exp_map = list(EXP_TYPE_COMMAND = 1200) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) @@ -70,18 +69,42 @@ minimal_player_age = 21 department_account_access = TRUE exp_map = list(EXP_TYPE_SERVICE = 1200) - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_HEADS_VAULT, ACCESS_CARGO, - ACCESS_CLOWN, ACCESS_MIME, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_HEADS_VAULT, ACCESS_CARGO, - ACCESS_CLOWN, ACCESS_MIME, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + access = list( + ACCESS_AI_UPLOAD, + ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_BAR, + ACCESS_BRIG, + ACCESS_CARGO, + ACCESS_CHANGE_IDS, + ACCESS_CHAPEL_OFFICE, + ACCESS_CLOWN, + ACCESS_CONSTRUCTION, + ACCESS_COURT, + ACCESS_CREMATORIUM, + ACCESS_ENGINE, + ACCESS_EVA, + ACCESS_EXPEDITION, + ACCESS_HEADS_VAULT, + ACCESS_HEADS, + ACCESS_HOP, + ACCESS_HYDROPONICS, + ACCESS_JANITOR, + ACCESS_KEYCARD_AUTH, + ACCESS_KITCHEN, + ACCESS_LAWYER, + ACCESS_LIBRARY, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_MIME, + ACCESS_MINERAL_STOREROOM, + ACCESS_MORGUE, + ACCESS_RC_ANNOUNCE, + ACCESS_RESEARCH, + ACCESS_SEC_DOORS, + ACCESS_SECURITY, + ACCESS_THEATRE, + ACCESS_WEAPONS + ) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY , DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/hop important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Service), basic job duties, and act professionally (roleplay)." @@ -119,18 +142,45 @@ transfer_allowed = FALSE minimal_player_age = 21 exp_map = list(EXP_TYPE_COMMAND = 3000) // 50 hours baby - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, - ACCESS_CLOWN, ACCESS_MIME, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_NTREP) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, - ACCESS_CLOWN, ACCESS_MIME, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_NTREP) + access = list( + ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_BAR, + ACCESS_BRIG, + ACCESS_CARGO_BAY, + ACCESS_CARGO_BOT, + ACCESS_CARGO, + ACCESS_CHAPEL_OFFICE, + ACCESS_CLOWN, + ACCESS_CONSTRUCTION, + ACCESS_COURT, + ACCESS_CREMATORIUM, + ACCESS_ENGINE, + ACCESS_EVA, + ACCESS_EXPEDITION, + ACCESS_HEADS_VAULT, + ACCESS_HEADS, + ACCESS_HYDROPONICS, + ACCESS_JANITOR, + ACCESS_KEYCARD_AUTH, + ACCESS_KITCHEN, + ACCESS_LAWYER, + ACCESS_LIBRARY, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_MIME, + ACCESS_MINING_STATION, + ACCESS_MINING, + ACCESS_MORGUE, + ACCESS_NTREP, + ACCESS_RC_ANNOUNCE, + ACCESS_RESEARCH, + ACCESS_SEC_DOORS, + ACCESS_SECURITY, + ACCESS_SUPPLY_SHUTTLE, + ACCESS_THEATRE, + ACCESS_WEAPONS + ) blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/nanotrasenrep important_information = "This role requires you to advise the Command team about Standard Operating Procedure, Chain of Command, and report to Central Command about various matters. You are required to act in a manner befitting someone representing Nanotrasen." @@ -167,14 +217,22 @@ transfer_allowed = FALSE minimal_player_age = 21 exp_map = list(EXP_TYPE_COMMAND = 3000) // 50 hours baby - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, - ACCESS_CLOWN, ACCESS_MIME, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_BLUESHIELD) - minimal_access = list(ACCESS_SEC_DOORS, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_MAINT_TUNNELS, ACCESS_RESEARCH, - ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_HEADS, ACCESS_BLUESHIELD, ACCESS_WEAPONS, ACCESS_CARGO, ACCESS_MINING) + access = list( + ACCESS_BLUESHIELD, + ACCESS_CARGO, + ACCESS_CONSTRUCTION, + ACCESS_ENGINE, + ACCESS_HEADS, + ACCESS_KEYCARD_AUTH, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_MINING, + ACCESS_RC_ANNOUNCE, + ACCESS_RESEARCH, + ACCESS_SEC_DOORS, + ACCESS_WEAPONS + ) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) missing_limbs_allowed = FALSE outfit = /datum/outfit/job/blueshield @@ -215,13 +273,17 @@ transfer_allowed = FALSE minimal_player_age = 30 exp_map = list(EXP_TYPE_SECURITY = 6000) // 100 hours baby - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, - ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_EVA, ACCESS_HEADS, - ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, - ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, - ACCESS_CLOWN, ACCESS_MIME, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_MAGISTRATE) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_LAWYER, ACCESS_MAGISTRATE, ACCESS_HEADS, ACCESS_RC_ANNOUNCE) + access = list( + ACCESS_BRIG, + ACCESS_COURT, + ACCESS_HEADS, + ACCESS_LAWYER, + ACCESS_MAGISTRATE, + ACCESS_MAINT_TUNNELS, + ACCESS_RC_ANNOUNCE, + ACCESS_SEC_DOORS, + ACCESS_SECURITY + ) blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP) outfit = /datum/outfit/job/judge important_information = "This role requires you to oversee legal matters and make important decisions about sentencing. You are required to have an extensive knowledge of Space Law and Security SOP and only operate within, not outside, the boundaries of the law." @@ -259,8 +321,16 @@ supervisors = "the magistrate" department_head = list("Captain") selection_color = "#ddddff" - 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) + access = list( + ACCESS_CONSTRUCTION, + ACCESS_COURT, + ACCESS_LAWYER, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_RESEARCH, + ACCESS_SEC_DOORS + ) alt_titles = list("Human Resources Agent") minimal_player_age = 30 exp_map = list(EXP_TYPE_CREW = 600) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 578d490c4126..7608f59fce04 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -10,8 +10,24 @@ department_head = list("Captain") department_account_access = TRUE selection_color = "#e2c59d" - access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_HEADS_VAULT) - 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, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_HEADS_VAULT) + access = list( + ACCESS_CARGO_BAY, + ACCESS_CARGO_BOT, + ACCESS_CARGO, + ACCESS_HEADS_VAULT, + ACCESS_HEADS, + ACCESS_KEYCARD_AUTH, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINING_STATION, + ACCESS_MINING, + ACCESS_MINT, + ACCESS_QM, + ACCESS_RC_ANNOUNCE, + ACCESS_SEC_DOORS, + ACCESS_SUPPLY_SHUTTLE, + ) blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) outfit = /datum/outfit/job/qm important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Supply), basic job duties, and act professionally (roleplay)." @@ -46,8 +62,14 @@ supervisors = "the quartermaster" department_head = list("Quartermaster") selection_color = "#eeddbe" - access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) + access = list( + ACCESS_CARGO_BAY, + ACCESS_CARGO, + ACCESS_MAILSORTING, + ACCESS_MAINT_TUNNELS, + ACCESS_MINERAL_STOREROOM, + ACCESS_SUPPLY_SHUTTLE, + ) alt_titles = list("Mail Carrier", "Courier") outfit = /datum/outfit/job/cargo_tech @@ -74,8 +96,13 @@ supervisors = "the quartermaster" department_head = list("Quartermaster") selection_color = "#eeddbe" - access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, 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) + access = list( + ACCESS_MAINT_TUNNELS, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINING_STATION, + ACCESS_MINING, + ACCESS_MINT, + ) alt_titles = list("Spelunker") outfit = /datum/outfit/job/mining @@ -145,8 +172,7 @@ 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_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + access = list(ACCESS_BAR, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) outfit = /datum/outfit/job/bartender /datum/outfit/job/bartender @@ -174,9 +200,9 @@ singlemutcheck(H, GLOB.soberblock, MUTCHK_FORCED) H.dna.default_blocks.Add(GLOB.soberblock) H.check_mutations = 1 - ADD_TRAIT(H, TRAIT_TABLE_LEAP, ROUNDSTART_TRAIT) var/datum/martial_art/judo/under_siege/bouncer_delight = new bouncer_delight.teach(H) + ADD_TRAIT(H.mind, TRAIT_TABLE_LEAP, ROUNDSTART_TRAIT) /datum/job/chef @@ -189,8 +215,7 @@ 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, ACCESS_MAINT_TUNNELS) + access = list(ACCESS_KITCHEN, ACCESS_MAINT_TUNNELS) alt_titles = list("Cook","Culinary Artist","Butcher") outfit = /datum/outfit/job/chef @@ -217,7 +242,7 @@ return var/datum/martial_art/cqc/under_siege/justacook = new justacook.teach(H) - ADD_TRAIT(H, TRAIT_TABLE_LEAP, ROUNDSTART_TRAIT) + ADD_TRAIT(H.mind, TRAIT_TABLE_LEAP, ROUNDSTART_TRAIT) /datum/job/hydro @@ -230,8 +255,7 @@ 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, ACCESS_MAINT_TUNNELS) + access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS) alt_titles = list("Hydroponicist", "Botanical Researcher") outfit = /datum/outfit/job/hydro @@ -266,7 +290,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" access = list(ACCESS_CLOWN, ACCESS_THEATRE, ACCESS_MAINT_TUNNELS) - minimal_access = list(ACCESS_CLOWN, ACCESS_THEATRE, ACCESS_MAINT_TUNNELS) outfit = /datum/outfit/job/clown /datum/outfit/job/clown @@ -281,12 +304,12 @@ id = /obj/item/card/id/clown pda = /obj/item/pda/clown backpack_contents = list( - /obj/item/reagent_containers/food/snacks/grown/banana = 1, + /obj/item/food/snacks/grown/banana = 1, /obj/item/stamp/clown = 1, /obj/item/toy/crayon/rainbow = 1, /obj/item/storage/fancy/crayons = 1, /obj/item/reagent_containers/spray/waterflower = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana = 1, /obj/item/instrument/bikehorn = 1 ) @@ -358,7 +381,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" access = list(ACCESS_MIME, ACCESS_THEATRE, ACCESS_MAINT_TUNNELS) - minimal_access = list(ACCESS_MIME, ACCESS_THEATRE, ACCESS_MAINT_TUNNELS) outfit = /datum/outfit/job/mime /datum/outfit/job/mime @@ -377,7 +399,7 @@ pda = /obj/item/pda/mime backpack_contents = list( /obj/item/toy/crayon/mime = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofnothing = 1, /obj/item/cane = 1 ) @@ -414,7 +436,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS) - minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS) alt_titles = list("Custodial Technician") outfit = /datum/outfit/job/janitor @@ -442,7 +463,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) - minimal_access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) alt_titles = list("Journalist") outfit = /datum/outfit/job/librarian @@ -481,7 +501,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" access = list(ACCESS_MAINT_TUNNELS, ACCESS_EXPEDITION, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS) - minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_EXPEDITION, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS) outfit = /datum/outfit/job/explorer /datum/outfit/job/explorer diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm index 8dfafc345cbb..514e85bdc67b 100644 --- a/code/game/jobs/job/support_chaplain.dm +++ b/code/game/jobs/job/support_chaplain.dm @@ -10,7 +10,6 @@ department_head = list("Head of Personnel") selection_color = "#dddddd" 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) outfit = /datum/outfit/job/chaplain /datum/outfit/job/chaplain diff --git a/code/game/jobs/job/syndicate_jobs.dm b/code/game/jobs/job/syndicate_jobs.dm index 0ca792114b7e..089a5b26e4bf 100644 --- a/code/game/jobs/job/syndicate_jobs.dm +++ b/code/game/jobs/job/syndicate_jobs.dm @@ -7,7 +7,6 @@ supervisors = "the admins" selection_color = "#ff0000" access = list() - minimal_access = list() admin_only = TRUE syndicate_command = 1 outfit = /datum/outfit/job/syndicateofficer diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index ae628528e58b..a4539f7494da 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -51,7 +51,8 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( set name = "Check Player Playtime" if(!check_rights(R_ADMIN|R_MOD|R_MENTOR)) return - var/msg = "Playtime Report" + var/list/msg = list() + msg += "Playtime Report" var/datum/job/theirjob var/jtext msg += "" @@ -80,7 +81,7 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( msg += "" msg += "
PlayerJobCrew
" - src << browse(msg, "window=Player_playtime_check") + src << browse(msg.Join(""), "window=Player_playtime_check") /datum/admins/proc/cmd_mentor_show_exp_panel(client/C) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index d3e46ed83290..f5ef17c1d15a 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -98,10 +98,10 @@ ui_interact(user) -/obj/machinery/pdapainter/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/pdapainter/ui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PdaPainter", "PDA Painter", 510, 510) + ui = new(user, src, "PdaPainter", "PDA Painter") ui.open() /obj/machinery/pdapainter/ui_data(mob/user) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 452deb3105d8..7a4ae26d9cc4 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -157,10 +157,13 @@ ui_interact(user) -/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/sleeper/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/sleeper/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Sleeper", "Sleeper", 550, 775) + ui = new(user, src, "Sleeper", "Sleeper") ui.open() /obj/machinery/sleeper/ui_data(mob/user) @@ -499,6 +502,7 @@ add_fingerprint(user) if(user.pulling == L) user.stop_pulling() + QDEL_LIST_CONTENTS(L.grabbed_by) SStgui.update_uis(src) /obj/machinery/sleeper/proc/permitted_check(atom/movable/O, mob/user) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index cf281ed1577b..509349e1e60e 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -10,6 +10,8 @@ active_power_consumption = 2500 light_color = "#00FF00" var/mob/living/carbon/human/occupant + ///What is the level of the stock parts in the body scanner. A scan_level of one detects organs of stealth_level 1 or below, while a scan level of 4 would detect 4 or below. + var/scan_level = 1 var/known_implants = list(/obj/item/bio_chip/chem, /obj/item/bio_chip/death_alarm, /obj/item/bio_chip/mindshield, /obj/item/bio_chip/tracking, /obj/item/bio_chip/health) /obj/machinery/bodyscanner/examine(mob/user) @@ -52,6 +54,10 @@ component_parts += new /obj/item/stack/cable_coil(null, 2) RefreshParts() +/obj/machinery/bodyscanner/RefreshParts() + for(var/obj/item/stock_parts/scanning_module/S in component_parts) + scan_level = S.rating + /obj/machinery/bodyscanner/update_icon_state() if(occupant) icon_state = "bodyscanner" @@ -142,6 +148,7 @@ else visible_message("[user] puts [H] into the body scanner.") + QDEL_LIST_CONTENTS(H.grabbed_by) H.forceMove(src) occupant = H playsound(src, 'sound/machines/podclose.ogg', 5) @@ -218,10 +225,13 @@ new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH! qdel(src) -/obj/machinery/bodyscanner/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/bodyscanner/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/bodyscanner/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BodyScanner", "Body Scanner", 690, 600) + ui = new(user, src, "BodyScanner", "Body Scanner") ui.open() /obj/machinery/bodyscanner/ui_data(mob/user) @@ -329,6 +339,8 @@ var/intOrganData[0] for(var/obj/item/organ/internal/I in occupant.internal_organs) + if(I.stealth_level > scan_level) + continue var/organData[0] organData["name"] = I.name organData["desc"] = I.desc @@ -506,12 +518,14 @@ dat += "Injuries" dat += "" - for(var/obj/item/organ/internal/i in occupant.internal_organs) + for(var/obj/item/organ/internal/I in occupant.internal_organs) + if(I.stealth_level > scan_level) + continue var/list/ailments = list() - if(i.status & ORGAN_DEAD) + if(I.status & ORGAN_DEAD) ailments |= "Dead" - switch(i.germ_level) + switch(I.germ_level) if(1 to INFECTION_LEVEL_ONE + 200) ailments |= "Mild Infection" if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300) @@ -527,8 +541,8 @@ if(INFECTION_LEVEL_TWO + 400 to INFINITY) ailments |= "Septic" dat += "" - dat += "[i.name]" - dat += "[i.damage]" + dat += "[I.name]" + dat += "[I.damage]" dat += "[jointext(ailments, "
")]" dat += "" dat += "" diff --git a/code/game/machinery/airlock_control/airlock_controllers.dm b/code/game/machinery/airlock_control/airlock_controllers.dm index 4d7a59cf4d14..1a229fb80731 100644 --- a/code/game/machinery/airlock_control/airlock_controllers.dm +++ b/code/game/machinery/airlock_control/airlock_controllers.dm @@ -105,7 +105,7 @@ add_fingerprint(usr) if(!allowed(usr)) - to_chat(usr, "Access denied") + to_chat(usr, "Access denied.") return TRUE switch(action) @@ -345,10 +345,13 @@ send an additional command to open the door again. else icon_state = "access_control_off" -/obj/machinery/airlock_controller/access_controller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/airlock_controller/access_controller/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/airlock_controller/access_controller/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AirlockAccessController", name, 470, 290, master_ui, state) + ui = new(user, src, "AirlockAccessController", name) ui.open() /obj/machinery/airlock_controller/access_controller/ui_data(mob/user) @@ -378,10 +381,13 @@ send an additional command to open the door again. stack_trace("[src] at [x],[y],[z] didnt setup any vents! Please double check the IDs!") -/obj/machinery/airlock_controller/air_cycler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/airlock_controller/air_cycler/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/airlock_controller/air_cycler/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ExternalAirlockController", name, 470, 290, master_ui, state) + ui = new(user, src, "ExternalAirlockController", name) ui.open() /obj/machinery/airlock_controller/air_cycler/ui_data(mob/user) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 9b342c5ba041..252aca6b6dc5 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -98,10 +98,13 @@ else if(!disabled) ui_interact(user) -/obj/machinery/autolathe/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/autolathe/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/autolathe/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Autolathe", name, 750, 700, master_ui, state) + ui = new(user, src, "Autolathe", name) ui.open() @@ -191,10 +194,10 @@ return var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/coeff = get_coeff(design_last_ordered) - if(design_last_ordered.materials["$metal"] / coeff > materials.amount(MAT_METAL)) + if(design_last_ordered.materials[MAT_METAL] / coeff > materials.amount(MAT_METAL)) to_chat(usr, "Invalid design (not enough metal)") return - if(design_last_ordered.materials["$glass"] / coeff > materials.amount(MAT_GLASS)) + if(design_last_ordered.materials[MAT_GLASS] / coeff > materials.amount(MAT_GLASS)) to_chat(usr, "Invalid design (not enough glass)") return if(!hacked && ("hacked" in design_last_ordered.category)) @@ -220,7 +223,7 @@ busy = FALSE /obj/machinery/autolathe/ui_status(mob/user, datum/ui_state/state) - . = disabled ? STATUS_DISABLED : STATUS_INTERACTIVE + . = disabled ? UI_DISABLED : UI_INTERACTIVE return min(..(), .) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 04c9377fa7bc..54350fd29a27 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -126,7 +126,7 @@ var/msg2 = "The camera already has that upgrade!" if(istype(I, /obj/item/stack/sheet/mineral/plasma) && panel_open) - if(!user.drop_item()) + if(!user.canUnEquip(I, FALSE)) to_chat(user, "[I] is stuck to your hand!") return if(!isEmpProof()) @@ -137,7 +137,7 @@ else to_chat(user, "[msg2]") else if(istype(I, /obj/item/assembly/prox_sensor) && panel_open) - if(!user.drop_item()) + if(!user.canUnEquip(I, FALSE)) to_chat(user, "[I] is stuck to your hand!") return if(!isMotion()) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 64e885501216..eff8932848bf 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -113,7 +113,7 @@ if(direct != "LEAVE IT") C.dir = text2dir(direct) if(i != 0) - var/confirm = alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", "Yes", "No") + var/confirm = tgui_alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", list("Yes", "No")) if(confirm == "Yes") break diff --git a/code/game/machinery/clonepod.dm b/code/game/machinery/clonepod.dm index 1a1eaa0e5ba2..36abc726d47f 100644 --- a/code/game/machinery/clonepod.dm +++ b/code/game/machinery/clonepod.dm @@ -10,12 +10,12 @@ // Not a comprehensive list: Further PRs should add appropriate items here. // Meat as usual, monstermeat covers goliath, xeno, spider, bear meat GLOBAL_LIST_INIT(cloner_biomass_items, list(\ -/obj/item/reagent_containers/food/snacks/meat,\ -/obj/item/reagent_containers/food/snacks/monstermeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/tofurkey)) +/obj/item/food/snacks/meat,\ +/obj/item/food/snacks/monstermeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/tofurkey)) #define MINIMUM_HEAL_LEVEL 40 #define CLONE_INITIAL_DAMAGE 190 @@ -427,6 +427,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ /obj/machinery/clonepod/emag_act(user) malfunction() + return TRUE /obj/machinery/clonepod/cmag_act(mob/user) if(HAS_TRAIT(src, TRAIT_CMAGGED)) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index b20a4969e1de..ee5b97757595 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -143,10 +143,13 @@ return FALSE return TRUE -/obj/machinery/computer/HolodeckControl/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/HolodeckControl/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/HolodeckControl/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Holodeck", name, 400, 500, master_ui, state) + ui = new(user, src, "Holodeck", name) ui.autoupdate = TRUE ui.open() @@ -198,6 +201,7 @@ to_chat(user, "You vastly increase projector power and override the safety and security protocols.") to_chat(user, "Warning! Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator.") log_game("[key_name(user)] emagged the Holodeck Control Computer") + return TRUE /obj/machinery/computer/HolodeckControl/emp_act(severity) emergency_shutdown() diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 79fd1330e8ac..89704896dc41 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -59,10 +59,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/operating/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/operating/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "OperatingComputer", "Patient Monitor", 650, 455, master_ui, state) + ui = new(user, src, "OperatingComputer", "Patient Monitor") ui.open() /obj/machinery/computer/operating/ui_data(mob/user) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index f7aad9e1845f..d72467b78479 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -168,7 +168,7 @@ log_game("[key_name(usr)] has completed an AI core in [R]: [COORD(loc)].") to_chat(user, "You connect the monitor.") if(!brain) - var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes" + var/open_for_latejoin = tgui_alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", list("Yes", "No")) == "Yes" var/obj/structure/AIcore/deactivated/D = new(loc) if(open_for_latejoin) GLOB.empty_playable_ai_cores += D @@ -299,7 +299,7 @@ That prevents a few funky behaviors. /atom/proc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) if(istype(card)) if(card.flush) - to_chat(user, "ERROR: AI flush is in progress, cannot execute transfer protocol.") + to_chat(user, "ERROR: AI flush is in progress, cannot execute transfer protocol.") return 0 return 1 diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index eae21415780b..0e3e32c3de84 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -28,10 +28,13 @@ /obj/machinery/computer/aifixer/attack_hand(mob/user as mob) ui_interact(user) -/obj/machinery/computer/aifixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/aifixer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/aifixer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AIFixer", name, 550, 500, master_ui, state) + ui = new(user, src, "AIFixer", name) ui.open() /obj/machinery/computer/aifixer/ui_data(mob/user) @@ -132,9 +135,9 @@ occupant = null update_icon(UPDATE_OVERLAYS) else if(active) - to_chat(user, "ERROR: Reconstruction in progress.") + to_chat(user, "ERROR: Reconstruction in progress.") else if(!occupant) - to_chat(user, "ERROR: Unable to locate artificial intelligence.") + to_chat(user, "ERROR: Unable to locate artificial intelligence.") /obj/machinery/computer/aifixer/Destroy() if(occupant) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 70d9b710d2a2..1c127fe212cc 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -101,7 +101,6 @@ //onclose(user, "arcade") var/datum/browser/popup = new(user, "arcade", "Space Villain 2000") popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -259,6 +258,7 @@ add_hiddenprint(user) updateUsrDialog() + return TRUE // *** THE ORION TRAIL ** // @@ -411,7 +411,6 @@ dat += "

Close

" var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -969,6 +968,7 @@ add_hiddenprint(user) newgame() emagged = TRUE + return TRUE /mob/living/simple_animal/hostile/syndicate/ranged/orion name = "spaceport security" diff --git a/code/game/machinery/computer/arcade_games/recruiter.dm b/code/game/machinery/computer/arcade_games/recruiter.dm index cdfd12c76ae8..5e64517a629b 100644 --- a/code/game/machinery/computer/arcade_games/recruiter.dm +++ b/code/game/machinery/computer/arcade_games/recruiter.dm @@ -55,7 +55,7 @@ "Spent 2 years as a freelance journalist", "Known as a hero for keeping stations clean during attacks", "Worked as a bureaucrat for SolGov", "Worked in Donk Corporation's R&D department", "Did work for USSP as an translator", "Took care of Toxins, Xenobiology, Robotics and R&D as a single worker in the Research department", - "Served for 4 years as a soldier of the Prospero Order", "Traveled through various systems as an businessman", + "Served for 4 years as a soldier of the Prospero Order", "Traveled through various systems as a businessman", "Worked as a waiter for one year", "Has previous experience as a cameraman", "Spent years of their life being a janitor at Clown College", "Was given numerous good reviews for delivering cargo requests on time", "Helped old people cross the holostreet", "Has proven ability to read", "Served 4 years in NT navy", @@ -190,10 +190,13 @@ emagged = FALSE prizevend(50) -/obj/machinery/computer/arcade/recruiter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/arcade/recruiter/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/arcade/recruiter/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "NTRecruiter", name, 400, 480) + ui = new(user, src, "NTRecruiter", name) ui.open() /obj/machinery/computer/arcade/recruiter/ui_data(mob/user) @@ -309,6 +312,7 @@ desc = "The advanced version of Nanotrasen's recruiting simulator, used to train the highest echelon of Nanotrasen recruiters. Has double the application count, and supposedly includes some routines to weed out the less skilled." total_curriculums = 14 emagged = TRUE + return TRUE #undef PROB_CANDIDATE_ERRORS #undef PROB_UNIQUE_CANDIDATE diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index c7cbecb247c6..93435e09ba4a 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -2,8 +2,6 @@ name = "atmospheric alert computer" desc = "Used to access the station's atmospheric sensors." circuit = /obj/item/circuitboard/atmos_alert - var/ui_x = 350 - var/ui_y = 300 icon_keyboard = "atmos_key" icon_screen = "alert:0" light_color = LIGHT_COLOR_CYAN @@ -42,10 +40,13 @@ /obj/machinery/computer/atmos_alert/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/atmos_alert/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/atmos_alert/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosAlertConsole", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, "AtmosAlertConsole", name) ui.open() /obj/machinery/computer/atmos_alert/ui_data(mob/user) diff --git a/code/game/machinery/computer/atmos_controllers.dm b/code/game/machinery/computer/atmos_controllers.dm index 849ae9facf27..56926511eb10 100644 --- a/code/game/machinery/computer/atmos_controllers.dm +++ b/code/game/machinery/computer/atmos_controllers.dm @@ -145,15 +145,18 @@ GLOBAL_LIST_EMPTY(gas_sensors) /obj/machinery/computer/general_air_control/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/general_air_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/general_air_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/general_air_control/ui_interact(mob/user, datum/tgui/ui = null) if(!isprocessing) START_PROCESSING(SSmachines, src) refresh_all() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) // We can use the same template here for sensors and for tanks with inlets/outlets with TGUI memes - ui = new(user, src, ui_key, "AtmosTankControl", name, 400, 400, master_ui, state) + ui = new(user, src, "AtmosTankControl", name) ui.open() /obj/machinery/computer/general_air_control/ui_data(mob/user) @@ -170,8 +173,8 @@ GLOBAL_LIST_EMPTY(gas_sensors) // This is its own proc so it can be modified in child types /obj/machinery/computer/general_air_control/proc/configure_sensors(mob/living/user, obj/item/multitool/M) - var/choice = alert(user, "Would you like to add or remove a sensor/meter", "Configuration", "Add", "Remove", "Cancel") - if((choice == "Cancel") || !Adjacent(user)) + var/choice = tgui_alert(user, "Would you like to add or remove a sensor/meter", "Configuration", list("Add", "Remove", "Cancel")) + if(!choice || (choice == "Cancel") || !Adjacent(user)) return switch(choice) @@ -195,7 +198,7 @@ GLOBAL_LIST_EMPTY(gas_sensors) if(!to_remove) return - var/confirm = alert(user, "Are you sure you want to remove the sensor/meter '[to_remove]'?", "Warning", "Yes", "No") + var/confirm = tgui_alert(user, "Are you sure you want to remove the sensor/meter '[to_remove]'?", "Warning", list("Yes", "No")) if((confirm != "Yes") || !Adjacent(user)) return @@ -274,10 +277,11 @@ GLOBAL_LIST_EMPTY(gas_sensors) /obj/machinery/computer/general_air_control/process() // We only care about refreshing if people are looking at us - if(SStgui.get_open_ui_count(src) < 1) - return PROCESS_KILL + if(src in SStgui.open_uis_by_src) + refresh_all() + return - refresh_all() + return PROCESS_KILL /obj/machinery/computer/general_air_control/large_tank_control circuit = /obj/item/circuitboard/large_tank_control @@ -334,7 +338,7 @@ GLOBAL_LIST_EMPTY(gas_sensors) if(!ismultitool(I)) // Should never happen return - var/choice = input(user, "Configure what", "Configuration") in list("Inlet", "Outlet", "Sensors", "Cancel") + var/choice = tgui_input_list(user, "Configure what", "Configuration", list("Inlet", "Outlet", "Sensors", "Cancel")) if((!choice) || (choice == "Cancel") || !Adjacent(user)) return @@ -349,8 +353,8 @@ GLOBAL_LIST_EMPTY(gas_sensors) return TRUE /obj/machinery/computer/general_air_control/large_tank_control/proc/configure_inlet(mob/living/user, obj/item/multitool/M) - var/choice = alert(user, "Would you like to add/replace the existing inlet or clear it?", "Configuration", "Add/Replace", "Clear", "Cancel") - if((choice == "Cancel") || !Adjacent(user)) + var/choice = tgui_alert(user, "Would you like to add/replace the existing inlet or clear it?", "Configuration", list("Add/Replace", "Clear", "Cancel")) + if(!choice || (choice == "Cancel") || !Adjacent(user)) return switch(choice) @@ -385,8 +389,8 @@ GLOBAL_LIST_EMPTY(gas_sensors) /obj/machinery/computer/general_air_control/large_tank_control/proc/configure_outlet(mob/living/user, obj/item/multitool/M) - var/choice = alert(user, "Would you like to add/replace the existing outlet or clear it?", "Configuration", "Add/Replace", "Clear", "Cancel") - if((choice == "Cancel") || !Adjacent(user)) + var/choice = tgui_alert(user, "Would you like to add/replace the existing outlet or clear it?", "Configuration", list("Add/Replace", "Clear", "Cancel")) + if(!choice || (choice == "Cancel") || !Adjacent(user)) return switch(choice) @@ -516,5 +520,8 @@ GLOBAL_LIST_EMPTY(gas_sensors) return ui_interact(user) -/obj/machinery/computer/atmoscontrol/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) - atmos_control.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/atmoscontrol/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/atmoscontrol/ui_interact(mob/user, datum/tgui/ui = null) + atmos_control.ui_interact(user, ui) diff --git a/code/game/machinery/computer/brigcells.dm b/code/game/machinery/computer/brigcells.dm index 27001c5f8b7f..07a84e492f0d 100644 --- a/code/game/machinery/computer/brigcells.dm +++ b/code/game/machinery/computer/brigcells.dm @@ -22,10 +22,13 @@ return ui_interact(user) -/obj/machinery/computer/brigcells/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/brigcells/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/brigcells/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BrigCells", "Brig Cell Management", 1000, 400, master_ui, state) + ui = new(user, src, "BrigCells", "Brig Cell Management") ui.open() /obj/machinery/computer/brigcells/ui_data(mob/user) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index f799538d9c0d..12da6be70a59 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -174,6 +174,11 @@ build_path = /obj/machinery/computer/borgupload origin_tech = "programming=4;engineering=4" +/obj/item/circuitboard/nonfunctional + board_name = "destroyed" + desc = "The board is barely recognizable. Its original function is a mystery." + icon_state = "command_broken" + /obj/item/circuitboard/med_data board_name = "Medical Records" icon_state = "medical" @@ -516,8 +521,8 @@ catastasis = "STANDARD" opposite_catastasis = "BROAD" - var/choice = alert("Current receiver spectrum is set to: [catastasis]", "Multitool-Circuitboard interface", "Switch to [opposite_catastasis]", "Cancel") - if(choice == "Cancel") + var/choice = tgui_alert(user, "Current receiver spectrum is set to: [catastasis]", "Multitool-Circuitboard interface", list("Switch to [opposite_catastasis]", "Cancel")) + if(!choice || choice == "Cancel") return contraband_enabled = !contraband_enabled @@ -547,7 +552,7 @@ format_board_name() to_chat(user, "Access protocols set to [console_choice].") else - to_chat(user, "Access Denied") + to_chat(user, "Access Denied.") return return ..() diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index 2bae6d59a0ca..18cf4997b358 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -55,9 +55,12 @@ qdel(cam_background) return ..() -/obj/machinery/computer/security/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) +/obj/machinery/computer/security/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui = null) // Update UI - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) // Show static if can't use the camera if(!active_camera?.can_use()) show_camera_static() @@ -79,7 +82,7 @@ user.client.register_map_obj(plane) user.client.register_map_obj(cam_background) // Open UI - ui = new(user, src, ui_key, "CameraConsole", name, 870, 708, master_ui, state) + ui = new(user, src, "CameraConsole", name) ui.open() /obj/machinery/computer/security/ui_close(mob/user) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index a29242b6a080..e8afc444401b 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -21,6 +21,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/mode = 0 var/target_dept = 0 //Which department this computer has access to. 0=all departments var/obj/item/radio/Radio + var/reset_timer //Cooldown for closing positions in seconds //if set to -1: No cooldown... probably a bad idea @@ -137,6 +138,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) scan.forceMove(get_turf(src)) scan = null playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + SStgui.update_uis(src) return else if(modify) to_chat(user, "You remove \the [modify] from \the [src].") @@ -146,6 +148,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) modify.forceMove(get_turf(src)) modify = null playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + SStgui.update_uis(src) else to_chat(user, "There is nothing to remove from the console.") @@ -307,10 +310,24 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) ui_interact(user) -/obj/machinery/computer/card/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/card/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/card/proc/change_ui_autoupdate(value, mob/user) + var/datum/tgui/ui = SStgui.try_update_ui(user, src) + reset_timer = null + if(ui) + ui.set_autoupdate(value) + +/obj/machinery/computer/card/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CardComputer", name, 800, 800, master_ui, state) + ui = new(user, src, "CardComputer", name) + var/delta = (world.time / 10) - GLOB.time_last_changed_position + if(change_position_cooldown < delta && !reset_timer) + ui.set_autoupdate(FALSE) + else + reset_timer = addtimer(CALLBACK(src, PROC_REF(change_ui_autoupdate), FALSE, user), delta SECONDS) ui.open() /obj/machinery/computer/card/ui_data(mob/user) @@ -541,8 +558,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Demoted", scan.registered_name, reason) modify.lastlog = "[station_time_timestamp()]: DEMOTED by \"[scan.registered_name]\" ([scan.assignment]) from \"[jobnamedata]\" for: \"[reason]\"." SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] ([scan.assignment]) has demoted \"[modify.registered_name]\" ([jobnamedata]) for \"[reason]\".") + SSjobs.slot_job_transfer(modify.rank, "Assistant") modify.access = access - modify.rank = "Assistant" modify.assignment = "Demoted" modify.icon_state = "id" regenerate_id_name() @@ -564,6 +581,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name, reason) modify.lastlog = "[station_time_timestamp()]: TERMINATED by \"[scan.registered_name]\" ([scan.assignment]) from \"[jobnamedata]\" for: \"[reason]\"." SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] ([scan.assignment]) has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".") + var/datum/job/job = SSjobs.GetJob(modify.rank) + if(modify.assignment != "Demoted" && !(job.title in GLOB.command_positions)) + job.current_positions-- modify.assignment = "Terminated" modify.access = list() regenerate_id_name() @@ -579,6 +599,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return FALSE if(opened_positions[edit_job_target] >= 0) GLOB.time_last_changed_position = world.time / 10 + change_ui_autoupdate(TRUE, usr) + reset_timer = addtimer(CALLBACK(src, PROC_REF(change_ui_autoupdate), FALSE, usr), GLOB.time_last_changed_position SECONDS) + j.total_positions++ opened_positions[edit_job_target]++ log_game("[key_name(usr)] ([scan.assignment]) has opened a job slot for job \"[j.title]\".") @@ -596,6 +619,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) //Allow instant closing without cooldown if a position has been opened before if(opened_positions[edit_job_target] <= 0) GLOB.time_last_changed_position = world.time / 10 + change_ui_autoupdate(TRUE, usr) + reset_timer = addtimer(CALLBACK(src, PROC_REF(change_ui_autoupdate), FALSE, usr), (GLOB.time_last_changed_position + 1) SECONDS) j.total_positions-- opened_positions[edit_job_target]-- log_game("[key_name(usr)] ([scan.assignment]) has closed a job slot for job \"[j.title]\".") @@ -650,10 +675,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) regenerate_id_name() return if("account") // card account number - var/account_num = input(usr, "Account Number", "Input Number", null) as num|null - if(!scan || !modify) + var/account_num = tgui_input_number(usr, "Account Number", "Input Number", modify.associated_account_number, 9999999, 1000000) + if(!scan || !modify || !account_num) return FALSE - modify.associated_account_number = clamp(round(account_num), 1000000, 9999999) //force a 7 digit number + modify.associated_account_number = account_num //for future reference, you should never be able to modify the money account datum through the card computer return if("skin") diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 35cd02c66764..b2f97024b389 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -110,18 +110,23 @@ updatemodules() ui_interact(user) -/obj/machinery/computer/cloning/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) +/obj/machinery/computer/cloning/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/cloning/ui_interact(mob/user, datum/tgui/ui = null) if(stat & (NOPOWER|BROKEN)) return - var/datum/asset/cloning/assets = get_asset_datum(/datum/asset/cloning) - assets.send(user) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CloningConsole", "Cloning Console", 640, 520) + ui = new(user, src, "CloningConsole", "Cloning Console") ui.open() +/obj/machinery/computer/cloning/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/cloning) + ) + /obj/machinery/computer/cloning/ui_data(mob/user) var/data[0] data["menu"] = src.menu diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index b8c74da94708..de0dcd92ef31 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -186,7 +186,7 @@ if(isAI(ui.user) || isrobot(ui.user)) to_chat(ui.user, "Firewalls prevent you from recalling the shuttle.") return - var/response = alert("Are you sure you wish to recall the shuttle?", "Confirm", "Yes", "No") + var/response = tgui_alert(usr, "Are you sure you wish to recall the shuttle?", "Confirm", list("Yes", "No")) if(response == "Yes") cancel_call_proc(ui.user) if(SSshuttle.emergency.timer) @@ -246,7 +246,7 @@ if(centcomm_message_cooldown > world.time) to_chat(ui.user, "Arrays recycling. Please stand by.") return - var/input = stripped_input(ui.user, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") + var/input = tgui_input_text(ui.user, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.") if(!input || ..() || !(is_authenticated(ui.user) >= COMM_AUTHENTICATION_CAPT)) return if(length(input) < COMM_CCMSGLEN_MINIMUM) @@ -264,7 +264,7 @@ if(centcomm_message_cooldown > world.time) to_chat(ui.user, "Arrays recycling. Please stand by.") return - var/input = stripped_input(ui.user, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") + var/input = tgui_input_text(ui.user, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "CentComm Message") if(!input || ..() || !(is_authenticated(ui.user) >= COMM_AUTHENTICATION_CAPT)) return if(length(input) < COMM_CCMSGLEN_MINIMUM) @@ -283,7 +283,7 @@ if(centcomm_message_cooldown > world.time) to_chat(ui.user, "Arrays recycling. Please stand by.") return - var/input = stripped_input(ui.user, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") + var/input = tgui_input_text(ui.user, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send Message") if(!input || ..() || !(is_authenticated(ui.user) >= COMM_AUTHENTICATION_CAPT)) return if(length(input) < COMM_CCMSGLEN_MINIMUM) @@ -401,6 +401,7 @@ emagged = TRUE to_chat(user, "You scramble the communication routing circuits!") SStgui.update_uis(src) + return TRUE /obj/machinery/computer/communications/attack_ai(mob/user as mob) return src.attack_hand(user) @@ -418,10 +419,13 @@ ui_interact(user) -/obj/machinery/computer/communications/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/communications/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/communications/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CommunicationsComputer", name, 500, 600, master_ui, state) + ui = new(user, src, "CommunicationsComputer", name) ui.open() /obj/machinery/computer/communications/ui_data(mob/user) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index e16579faae95..5bfa0113ad48 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -183,3 +183,9 @@ take_damage(damage, BRUTE) self_hurt = TRUE return ..() + +/obj/machinery/computer/nonfunctional + name = "broken computer" + desc = "A computer long since rendered non-functional due to lack of maintenance. \ + It is spitting out error messages." + circuit = /obj/item/circuitboard/nonfunctional diff --git a/code/game/machinery/computer/crew_monitoring.dm b/code/game/machinery/computer/crew_monitoring.dm index e10afe9d7ca5..17f19ffa65cb 100644 --- a/code/game/machinery/computer/crew_monitoring.dm +++ b/code/game/machinery/computer/crew_monitoring.dm @@ -26,8 +26,11 @@ return ui_interact(user) -/obj/machinery/computer/crew/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) - crew_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/crew/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/crew/ui_interact(mob/user, datum/tgui/ui = null) + crew_monitor.ui_interact(user, ui) /obj/machinery/computer/crew/interact(mob/user) crew_monitor.ui_interact(user) diff --git a/code/game/machinery/computer/depot_consoles.dm b/code/game/machinery/computer/depot_consoles.dm index 6c5f0916bb93..28f98cba1629 100644 --- a/code/game/machinery/computer/depot_consoles.dm +++ b/code/game/machinery/computer/depot_consoles.dm @@ -72,10 +72,13 @@ /obj/machinery/computer/syndicate_depot/proc/disable_special_functions() return -/obj/machinery/computer/syndicate_depot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/syndicate_depot/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/syndicate_depot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SyndicateComputerSimple", name, window_width, window_height, master_ui, state) + ui = new(user, src, "SyndicateComputerSimple", name) ui.open() /obj/machinery/computer/syndicate_depot/ui_data(mob/user) @@ -330,7 +333,7 @@ to_chat(user, "[src] has already been used to transmit a message to the Syndicate.") return message_sent = TRUE - var/input = stripped_input(user, "Please choose a message to transmit to Syndicate HQ via quantum entanglement. Transmission does not guarantee a response. This function may only be used ONCE.", "To abort, send an empty message.", "") + var/input = tgui_input_text(user, "Please choose a message to transmit to Syndicate HQ via quantum entanglement. Transmission does not guarantee a response. This function may only be used ONCE.", "Send Message") if(!input) message_sent = FALSE return @@ -448,8 +451,8 @@ else areaindex[tmpname] = 1 L[tmpname] = R - var/desc = input("Please select a location to lock in.", "Syndicate Teleporter") in L - return(L[desc]) + var/desc = tgui_input_list(usr, "Please select a location to lock in.", "Syndicate Teleporter", L) + return L[desc] /obj/machinery/computer/syndicate_depot/teleporter/proc/update_portal() if(portal_enabled && !myportal) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 1d576eb7d272..39e01428a41e 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -26,6 +26,7 @@ playsound(loc, 'sound/effects/sparks4.ogg', 50, TRUE) do_sparks(5, TRUE, src) circuit = /obj/item/circuitboard/aiupload_broken + return TRUE /obj/machinery/computer/aiupload/attackby(obj/item/O, mob/user, params) if(!istype(O, /obj/item/aiModule)) @@ -98,24 +99,23 @@ borg.cmd_show_laws() borg.throw_alert("newlaw", /obj/screen/alert/newlaw) -/obj/machinery/computer/aiupload/attack_hand(mob/user as mob) - if(src.stat & NOPOWER) - to_chat(usr, "The upload computer has no power!") +/obj/machinery/computer/aiupload/attack_hand(mob/user) + if(stat & NOPOWER) + to_chat(user, "The upload computer has no power!") return - if(src.stat & BROKEN) - to_chat(usr, "The upload computer is broken!") + if(stat & BROKEN) + to_chat(user, "The upload computer is broken!") return - src.current = select_active_ai(user) + current = select_active_ai(user) - if(!src.current) - to_chat(usr, "No active AIs detected.") - else - to_chat(usr, "[src.current.name] selected for law changes.") - return + if(!current) + to_chat(user, "No active AIs detected.") + return + to_chat(user, "[current.name] selected for law changes.") -/obj/machinery/computer/aiupload/attack_ghost(user as mob) - return 1 +/obj/machinery/computer/aiupload/attack_ghost(user) + return TRUE #undef AIUPLOAD_EMAG_COOLDOWN @@ -128,11 +128,10 @@ circuit = /obj/item/circuitboard/borgupload var/mob/living/silicon/robot/current = null - -/obj/machinery/computer/borgupload/attackby(obj/item/aiModule/module as obj, mob/user as mob, params) +/obj/machinery/computer/borgupload/attackby(obj/item/aiModule/module, mob/user, params) if(istype(module, /obj/item/aiModule)) if(!current)//no borg selected - to_chat(user, "No borg selected. Please chose a target before proceeding with upload.") + to_chat(user, "No borg selected. Please chose a target before proceeding with upload.") return var/turf/T = get_turf(current) if(!atoms_share_level(T, src)) @@ -143,21 +142,20 @@ return ..() -/obj/machinery/computer/borgupload/attack_hand(mob/user as mob) - if(src.stat & NOPOWER) - to_chat(usr, "The upload computer has no power!") +/obj/machinery/computer/borgupload/attack_hand(mob/user) + if(stat & NOPOWER) + to_chat(user, "The upload computer has no power!") return - if(src.stat & BROKEN) - to_chat(usr, "The upload computer is broken!") + if(stat & BROKEN) + to_chat(user, "The upload computer is broken!") return - src.current = freeborg() + current = freeborg(user) - if(!src.current) - to_chat(usr, "No free cyborgs detected.") - else - to_chat(usr, "[src.current.name] selected for law changes.") - return + if(!current) + to_chat(user, "No free cyborgs detected.") + return + to_chat(user, "[current.name] selected for law changes.") -/obj/machinery/computer/borgupload/attack_ghost(user as mob) - return 1 +/obj/machinery/computer/borgupload/attack_ghost(user) + return TRUE diff --git a/code/game/machinery/computer/medical_records.dm b/code/game/machinery/computer/medical_records.dm index fe4bd70aeba1..521925639715 100644 --- a/code/game/machinery/computer/medical_records.dm +++ b/code/game/machinery/computer/medical_records.dm @@ -75,10 +75,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/med_data/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/med_data/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/med_data/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MedicalRecords", "Medical Records", 800, 800, master_ui, state) + ui = new(user, src, "MedicalRecords", "Medical Records") ui.open() ui.set_autoupdate(FALSE) diff --git a/code/game/machinery/computer/message_monitor.dm b/code/game/machinery/computer/message_monitor.dm index 8e1dbc43a61a..afcce4b64eb2 100644 --- a/code/game/machinery/computer/message_monitor.dm +++ b/code/game/machinery/computer/message_monitor.dm @@ -1,9 +1,4 @@ - // Allows you to monitor messages that passes the server. - - - - /obj/machinery/computer/message_monitor name = "message monitoring console" desc = "Used to monitor the crew's messages that are sent via PDA. It can also be used to view Request Console messages." @@ -78,6 +73,7 @@ UnmagConsole() update_icon() message = rebootmsg + return TRUE else to_chat(user, "A no server error appears on the screen.") @@ -298,10 +294,10 @@ if(auth) linkedServer.active = !linkedServer.active //Find a server if(href_list["find"]) - if(GLOB.message_servers && GLOB.message_servers.len > 1) - src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in GLOB.message_servers + if(GLOB.message_servers && length(GLOB.message_servers) > 1) + linkedServer = input(usr, "Please select a server.", "Select a server.", GLOB.message_servers) message = "NOTICE: Server selected." - else if(GLOB.message_servers && GLOB.message_servers.len > 0) + else if(GLOB.message_servers && length(GLOB.message_servers) > 0) linkedServer = GLOB.message_servers[1] message = "NOTICE: Only Single Server Detected - Server selected." else @@ -414,7 +410,7 @@ continue sendPDAs += P if(GLOB.PDAs && GLOB.PDAs.len > 0) - customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortAtom(sendPDAs) + customrecepient = tgui_input_list(usr, "Select a PDA from the list.", items = sortAtom(sendPDAs)) else customrecepient = null diff --git a/code/game/machinery/computer/power_monitor_console.dm b/code/game/machinery/computer/power_monitor_console.dm index a348027cef69..1d9d6be8cf5c 100644 --- a/code/game/machinery/computer/power_monitor_console.dm +++ b/code/game/machinery/computer/power_monitor_console.dm @@ -70,8 +70,11 @@ powernet = find_powernet() ui_interact(user) -/obj/machinery/computer/monitor/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) - power_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/monitor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/monitor/ui_interact(mob/user, datum/tgui/ui = null) + power_monitor.ui_interact(user, ui) /obj/machinery/computer/monitor/interact(mob/user) power_monitor.ui_interact(user) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 873da0f43d79..10cb16d32ab4 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -55,10 +55,13 @@ return FALSE return TRUE -/obj/machinery/computer/prisoner/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/prisoner/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/prisoner/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PrisonerImplantManager", name, 500, 500, master_ui, state) + ui = new(user, src, "PrisonerImplantManager", name) ui.open() /obj/machinery/computer/prisoner/ui_data(mob/user) diff --git a/code/game/machinery/computer/robot_control.dm b/code/game/machinery/computer/robot_control.dm index f92e17490e6e..63adce49228d 100644 --- a/code/game/machinery/computer/robot_control.dm +++ b/code/game/machinery/computer/robot_control.dm @@ -131,10 +131,13 @@ return FALSE return TRUE -/obj/machinery/computer/robotics/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/robotics/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/robotics/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RoboticsControlConsole", name, 500, 460, master_ui, state) + ui = new(user, src, "RoboticsControlConsole", name) ui.open() /obj/machinery/computer/robotics/ui_data(mob/user) @@ -246,7 +249,7 @@ var/mob/living/silicon/robot/R = locateUID(params["uid"]) if(!can_hack(usr, R)) return - var/choice = input("Really hack [R.name]? This cannot be undone.") in list("Yes", "No") + var/choice = alert(usr, "Really hack [R.name]? This cannot be undone.", "Do you want to hack this borg?", "Yes", "No") if(choice != "Yes") return log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!") diff --git a/code/game/machinery/computer/security_records.dm b/code/game/machinery/computer/security_records.dm index 4a5b30a9ef1c..c983a2212194 100644 --- a/code/game/machinery/computer/security_records.dm +++ b/code/game/machinery/computer/security_records.dm @@ -71,10 +71,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/secure_data/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/secure_data/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/secure_data/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SecurityRecords", name, 800, 800) + ui = new(user, src, "SecurityRecords", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/code/game/machinery/computer/sm_monitor.dm b/code/game/machinery/computer/sm_monitor.dm index 4c5e1171af58..443443dabd14 100644 --- a/code/game/machinery/computer/sm_monitor.dm +++ b/code/game/machinery/computer/sm_monitor.dm @@ -25,10 +25,13 @@ return ui_interact(user) -/obj/machinery/computer/sm_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/sm_monitor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/sm_monitor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SupermatterMonitor", name, 600, 350, master_ui, state) + ui = new(user, src, "SupermatterMonitor", name) ui.open() /obj/machinery/computer/sm_monitor/ui_data(mob/user) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 4b94acf7e210..70eca5d39826 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -6,8 +6,6 @@ icon_screen = "alert:0" light_color = LIGHT_COLOR_CYAN circuit = /obj/item/circuitboard/stationalert_engineering - var/ui_x = 325 - var/ui_y = 500 var/list/alarms_listend_for = list("Fire", "Atmosphere", "Power") /obj/machinery/computer/station_alert/Initialize(mapload) @@ -28,10 +26,13 @@ return ui_interact(user) -/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/station_alert/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/station_alert/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "StationAlertConsole", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, "StationAlertConsole", name) ui.open() /obj/machinery/computer/station_alert/ui_data(mob/user) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 8b9419c0da0f..02bc0b34b199 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -58,10 +58,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/cryopod/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/cryopod/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/cryopod/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CryopodConsole", name, 400, 480) + ui = new(user, src, "CryopodConsole", name) ui.open() /obj/machinery/computer/cryopod/ui_data(mob/user) @@ -155,9 +158,10 @@ playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1) return visible_message("The console sparks, and some items fall out!") - do_sparks(5, 1, src) + do_sparks(5, TRUE, src) for(var/obj/item/I in objective_items) dispense_item(I) + return TRUE /obj/item/circuitboard/cryopodcontrol board_name = "Cryogenic Oversight Console" @@ -388,13 +392,13 @@ if(GLOB.PDA_Manifest.len) GLOB.PDA_Manifest.Cut() for(var/datum/data/record/R in GLOB.data_core.medical) - if((R.fields["name"] == occupant.real_name)) + if(R.fields["name"] == occupant.real_name) qdel(R) for(var/datum/data/record/T in GLOB.data_core.security) - if((T.fields["name"] == occupant.real_name)) + if(T.fields["name"] == occupant.real_name) qdel(T) for(var/datum/data/record/G in GLOB.data_core.general) - if((G.fields["name"] == occupant.real_name)) + if(G.fields["name"] == occupant.real_name) announce_rank = G.fields["rank"] qdel(G) @@ -445,7 +449,6 @@ /obj/machinery/cryopod/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/grab)) var/obj/item/grab/G = I @@ -468,8 +471,9 @@ return if(M.client) - if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes") - if(!M || !G || !G.affecting) return + if(tgui_alert(M, "Would you like to enter long-term storage?", "Cryosleep", list("Yes", "No")) == "Yes") + if(!M || !G || !G.affecting) + return willing = willing_time_divisor else willing = 1 @@ -543,8 +547,9 @@ 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(tgui_alert(L, "Would you like to enter cryosleep?", "Cryosleep", list("Yes", "No")) == "Yes") + if(!L) + return willing = willing_time_divisor else willing = 1 @@ -571,6 +576,7 @@ return if(!E) return + QDEL_LIST_CONTENTS(E.grabbed_by) E.forceMove(src) time_till_despawn = initial(time_till_despawn) / willing_factor icon_state = occupied_icon_state diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 7ed9245996a8..31d20c71ea33 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -19,6 +19,8 @@ new /datum/track("Engineering's Ultimate High-Energy Hustle", 'sound/misc/boogie2.ogg', 1770, 5), ) var/datum/track/selection = null + /// If set to FALSE, the dance4 proc that rests the dancer will be replaced by dance2. + var/restdancing = TRUE /datum/track var/song_name = "generic" @@ -131,12 +133,7 @@ to_chat(usr, "Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].") playsound(src, 'sound/misc/compiler-failure.ogg', 50, 1) return - active = TRUE - update_icon() - set_light(1, LIGHTING_MINIMUM_POWER) //for emmisive appearance - dance_setup() - START_PROCESSING(SSobj, src) - lights_spin() + breakitdown() updateUsrDialog() else if(active) stop = 0 @@ -149,7 +146,7 @@ var/list/available = list() for(var/datum/track/S in songs) available[S.song_name] = S - var/selected = input(usr, "Choose your song", "Track:") as null|anything in available + var/selected = tgui_input_list(usr, "Select a new track", "Track:", available) if(QDELETED(src) || !selected || !istype(available[selected], /datum/track)) return selection = available[selected] @@ -171,6 +168,17 @@ if("harm") deejay('sound/AI/harmalarm.ogg') +/** + * Starts the dance machine. + */ +/obj/machinery/disco/proc/breakitdown() + active = TRUE + update_icon() + set_light(1, LIGHTING_MINIMUM_POWER) + dance_setup() + START_PROCESSING(SSobj, src) + lights_spin() + /obj/machinery/disco/proc/deejay(S) if(QDELETED(src) || !active || charge < 5) to_chat(usr, "The device is not able to play more DJ sounds at this time.") @@ -340,7 +348,10 @@ if(2 to 3) dance3(M) if(4 to 6) - dance4(M) + if(restdancing) + dance4(M) + else + dance2(M) if(7 to 9) dance5(M) @@ -504,3 +515,12 @@ /obj/machinery/disco/immobile/wrench_act() return FALSE + +/obj/machinery/disco/chaos_staff + restdancing = FALSE + anchored = TRUE + +/obj/machinery/disco/chaos_staff/Initialize(mapload) + . = ..() + selection = pick(songs) + INVOKE_ASYNC(src, PROC_REF(breakitdown)) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 259bd3394d80..259afbac3946 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -275,6 +275,7 @@ icon_state = "dropwall" item_state = "grenade" mode = AUTO + var/generator_type = /obj/structure/dropwall_generator var/uptime = DROPWALL_UPTIME /// If this is true we do not arm again, due to the sleep var/deployed = FALSE @@ -310,7 +311,7 @@ return if(mode == AUTO) mode = angle2dir_cardinal(get_angle(armer, get_turf(src))) - new /obj/structure/dropwall_generator(get_turf(loc), mode, uptime) + new generator_type(get_turf(loc), mode, uptime) deployed = TRUE armer = null qdel(src) @@ -326,6 +327,8 @@ var/protected = FALSE ///The core shield that protects the generator var/obj/structure/barricade/dropwall/core_shield = null + /// The type of dropwall + var/barricade_type = /obj/structure/barricade/dropwall /obj/structure/dropwall_generator/Initialize(mapload, direction, uptime) . = ..() @@ -343,18 +346,18 @@ addtimer(CALLBACK(src, PROC_REF(power_out)), uptime) timer_overlay_proc(uptime/10) - connected_shields += new /obj/structure/barricade/dropwall(get_turf(loc), src, TRUE, direction) + connected_shields += new barricade_type(get_turf(loc), src, TRUE, direction) core_shield = connected_shields[1] var/dir_left = turn(direction, -90) var/dir_right = turn(direction, 90) var/target_turf = get_step(src, dir_left) if(!is_blocked_turf(target_turf)) - connected_shields += new /obj/structure/barricade/dropwall(target_turf, src, FALSE, direction, dir_left) + connected_shields += new barricade_type(target_turf, src, FALSE, direction, dir_left) var/target_turf2 = get_step(src, dir_right) if(!is_blocked_turf(target_turf2)) - connected_shields += new /obj/structure/barricade/dropwall(target_turf2, src, FALSE, direction, dir_right) + connected_shields += new barricade_type(target_turf2, src, FALSE, direction, dir_right) /obj/structure/dropwall_generator/attacked_by(obj/item/I, mob/living/user) //No, you can not just go up to the generator and whack it. Central shield needs to go down first. @@ -414,6 +417,33 @@ for(var/I in 1 to 5) new /obj/item/grenade/barrier/dropwall(src) +/obj/item/grenade/barrier/dropwall/firewall + name = "firewall shield generator" + generator_type = /obj/structure/dropwall_generator/firewall + +/obj/structure/dropwall_generator/firewall + name = "deployed firewall shield generator" + barricade_type = /obj/structure/barricade/dropwall/firewall + +/obj/structure/barricade/dropwall/firewall + +/obj/structure/barricade/dropwall/firewall/Initialize(mapload, owner, core, dir_1, dir_2) + . = ..() + var/target_matrix = list( + 2, 0, 0, 0, + 0, 1, 0, 0, + 2, 0, 0, 0, + 0, 0, 0, 1 + ) + color = target_matrix + +/obj/structure/barricade/dropwall/firewall/Crossed(atom/movable/AM, oldloc) + . = ..() + if(!istype(AM, /obj/item/projectile)) + return + var/obj/item/projectile/P = AM + P.immolate ++ + /obj/item/grenade/turret name = "Pop-Up Turret grenade" desc = "Inflates into a Pop-Up turret, shoots everyone on sight who wasn't the primer." diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 8e43922363a4..0a35e1e34b73 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -14,7 +14,7 @@ /obj/item/trash/plate, /obj/item/trash/tray, /obj/item/trash/snack_bowl, - /obj/item/reagent_containers/food/drinks/drinkingglass, + /obj/item/reagent_containers/drinks/drinkingglass, /obj/item/kitchen/utensil/fork, /obj/item/shard, /obj/item/broken_bottle) diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index ceb562404f3f..732fd2242779 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -46,6 +46,7 @@ req_access = list() req_one_access = list() playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return TRUE /obj/machinery/door_control/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 2799378e89d7..40871567267e 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -674,10 +674,13 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) /obj/machinery/door/airlock/attack_ai(mob/user) ui_interact(user) -/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/door/airlock/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/door/airlock/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AiAirlock", name, 600, 400, master_ui, state) + ui = new(user, src, "AiAirlock", name) ui.open() @@ -1373,8 +1376,12 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) return 1 /obj/machinery/door/airlock/CanPathfindPass(obj/item/card/id/ID, to_dir, atom/movable/caller, no_id = FALSE) -//Airlock is passable if it is open (!density), bot has access, and is not bolted or welded shut) - return !density || (check_access(ID) && !locked && !welded && arePowerSystemsOn() && !no_id) + if(!density) + return TRUE + if(caller?.checkpass(PASSDOOR) && !locked) + return TRUE + //Airlock is passable if it is open (!density), bot has access, and is not bolted or welded shut) + return check_access(ID) && !locked && !welded && arePowerSystemsOn() && !no_id /obj/machinery/door/airlock/emag_act(mob/user) if(!operating && density && arePowerSystemsOn() && !emagged) @@ -1388,7 +1395,7 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) if(!open()) update_icon(AIRLOCK_CLOSED, 1) emagged = TRUE - return 1 + return TRUE /obj/machinery/door/airlock/cmag_act(mob/user) if(operating || HAS_TRAIT(src, TRAIT_CMAGGED) || !density || !arePowerSystemsOn()) @@ -1501,7 +1508,7 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) safe = TRUE /obj/machinery/door/airlock/obj_break(damage_flag) - if(!(flags & BROKEN) && !(flags & NODECONSTRUCT)) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) stat |= BROKEN if(!panel_open) panel_open = TRUE @@ -1701,6 +1708,26 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) if(exposed_temperature > (T0C + heat_resistance)) take_damage(round(exposed_volume / 100), BURN, 0, 0) +/obj/machinery/door/airlock/wrench_act(mob/living/user, obj/item/tool) + if(!istype(tool, /obj/item/wrench/bolter)) + return + if(!locked) + return TRUE + if(!panel_open) + to_chat(user, "You do not have access to [src]'s bolts, open the panel first!") + return TRUE + if(security_level != AIRLOCK_SECURITY_NONE) + to_chat(user, "You do not have access to [src]'s bolts, remove the reinforcements first!") + return TRUE + + user.visible_message("[user] has stuck a wrench into [src] and is struggling to raise the bolts!", "You struggle to raise the bolts of [src].") + if(!do_after(user, 5 SECONDS, target = src)) + return TRUE + locked = FALSE + playsound(src, boltUp, 30, FALSE, 3) + update_icon() + return TRUE // Prevents you hitting the door if you're on harm intent, and you do the unbolt do_after. + #undef AIRLOCK_CLOSED #undef AIRLOCK_CLOSING #undef AIRLOCK_OPEN diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 1966c339ea8e..070c29e377dc 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -40,10 +40,13 @@ // tgui\packages\tgui\interfaces\AirlockElectronics.js -/obj/item/airlock_electronics/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/airlock_electronics/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/airlock_electronics/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AirlockElectronics", name, 450, 575, master_ui, state) + ui = new(user, src, "AirlockElectronics", name) ui.open() /obj/item/airlock_electronics/ui_data(mob/user) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4420697fcfb2..6dc19a744a75 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -295,10 +295,13 @@ return ui_interact(user) -/obj/machinery/door_timer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/door_timer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/door_timer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BrigTimer", name, 500, 450, master_ui, state) + ui = new(user, src, "BrigTimer", name) ui.open() /obj/machinery/door_timer/ui_static_data(mob/user) @@ -342,7 +345,7 @@ if(params["prisoner_name"]) prisoner_name = params["prisoner_name"] else - prisoner_name = input("Prisoner Name:", name, prisoner_name) as text|null + prisoner_name = tgui_input_text(usr, "Prisoner Name:", name, prisoner_name, MAX_NAME_LEN, encode = FALSE) if(prisoner_name) var/datum/data/record/R = find_security_record("name", prisoner_name) if(istype(R)) @@ -350,10 +353,9 @@ else prisoner_hasrecord = FALSE if("prisoner_charge") - prisoner_charge = input("Prisoner Charge:", name, prisoner_charge) as text|null + prisoner_charge = tgui_input_text(usr, "Prisoner Charge:", name, prisoner_charge, encode = FALSE) if("prisoner_time") - prisoner_time = input("Prisoner Time (in minutes):", name, prisoner_time) as num|null - prisoner_time = min(max(round(prisoner_time), 0), 60) + prisoner_time = tgui_input_number(usr, "Prisoner Time (in minutes):", name, prisoner_time, 60) if("start") if(!prisoner_name || !prisoner_charge || !prisoner_time) return FALSE @@ -368,7 +370,7 @@ update_icon(UPDATE_ICON_STATE) if("restart_timer") if(timing) - var/reset_reason = sanitize(copytext_char(input(usr, "Reason for resetting timer:", name, "") as text|null, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + var/reset_reason = tgui_input_text(usr, "Reason for resetting timer:", name) if(!reset_reason) to_chat(usr, "Cancelled reset: reason field is required.") return FALSE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fae088cfd08b..2ff095788cb1 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -502,3 +502,12 @@ /obj/machinery/door/zap_act(power, zap_flags) zap_flags &= ~ZAP_OBJ_DAMAGE . = ..() + +/obj/machinery/door/CanPathfindPass(obj/item/card/id/ID, to_dir, atom/movable/caller, no_id) + if(QDELETED(caller)) + return ..() + if(caller.checkpass(PASSDOOR) && !locked) + return TRUE + if(caller.checkpass(PASSGLASS)) + return !opacity + return ..() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 9ac2e19b2abd..9c197f7d5d7c 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -290,7 +290,7 @@ sleep(6) operating = NONE open(2) - return 1 + return TRUE /obj/machinery/door/window/cmag_act(mob/user, obj/weapon) if(operating || !density || HAS_TRAIT(src, TRAIT_CMAGGED)) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 21117233e45f..bce1e147caeb 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -163,10 +163,13 @@ GLOBAL_LIST_EMPTY(doppler_arrays) else stat |= NOPOWER -/obj/machinery/doppler_array/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/doppler_array/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/doppler_array/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TachyonArray", name, 500, 600, master_ui, state) + ui = new(user, src, "TachyonArray", name) ui.open() /obj/machinery/doppler_array/ui_data(mob/user) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 5c25a0695fe5..e4dfa178770f 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -103,7 +103,8 @@ FIRE ALARM if(user) user.visible_message("Sparks fly out of [src]!", "You emag [src], disabling its thermal sensors.") - playsound(loc, 'sound/effects/sparks4.ogg', 50, 1) + playsound(loc, 'sound/effects/sparks4.ogg', 50, TRUE) + return TRUE /obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume) ..() diff --git a/code/game/machinery/gameboard.dm b/code/game/machinery/gameboard.dm index be18b9219951..e0b8bb349418 100644 --- a/code/game/machinery/gameboard.dm +++ b/code/game/machinery/gameboard.dm @@ -50,18 +50,17 @@ if(.) return - var/dat - dat = replacetext(file2text('html/chess.html'), "\[hsrc]", UID()) - var/datum/asset/simple/chess/assets = get_asset_datum(/datum/asset/simple/chess) - assets.send(user) + var/datum/asset/chess_asset = get_asset_datum(/datum/asset/group/chess) + chess_asset.send(user) + var/dat = replacetext(file2text('html/chess.html'), "\[hsrc]", UID()) var/datum/browser/popup = new(user, "SpessChess", name, 500, 800, src) popup.set_content(dat) - popup.add_stylesheet("chess.css", 'html/browser/chess.css') - popup.add_script("garbochess.js", 'html/browser/garbochess.js') - //popup.add_script("boardui.js", 'html/browser/boardui.js') - popup.add_script("jquery-1.8.2.min.js", 'html/browser/jquery-1.8.2.min.js') - popup.add_script("jquery-ui-1.8.24.custom.min.js", 'html/browser/jquery-ui-1.8.24.custom.min.js') + popup.add_stylesheet("chess", 'html/browser/chess.css') + popup.add_script("boardui", 'html/browser/boardui.js') + popup.add_script("garbochess", 'html/browser/garbochess.js') + popup.add_script("jquery-1.8.2.min", 'html/browser/jquery-1.8.2.min.js') + popup.add_script("jquery-ui-1.8.24.custom.min", 'html/browser/jquery-ui-1.8.24.custom.min.js') popup.set_window_options("titlebar=0") popup.open() user.set_machine(src) @@ -72,7 +71,6 @@ if(user.client && user.machine == src) // I will look for you, user.unset_machine() // I will find you, user << browse(null, "window=SpessChess") // And I will kill you. - return /obj/machinery/gameboard/Topic(href, list/href_list) . = ..() diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm index 2c236909a641..278e53b80994 100644 --- a/code/game/machinery/guestpass.dm +++ b/code/game/machinery/guestpass.dm @@ -80,12 +80,14 @@ return ui_interact(user) -/obj/machinery/computer/guestpass/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/guestpass/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/guestpass/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GuestPass", name, 500, 850, master_ui, state) + ui = new(user, src, "GuestPass", name) ui.open() - ui.set_autoupdate(FALSE) /obj/machinery/computer/guestpass/ui_data(mob/user) var/list/data = list() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index cb6bba8b720c..e433c7f17d41 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -193,7 +193,6 @@ GLOBAL_LIST_EMPTY(holopads) var/area/area = get_area(src) var/datum/browser/popup = new(user, "holopad", "[area] holopad", 400, 300) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() /obj/machinery/hologram/holopad/Topic(href, href_list) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 87dc65a5e47b..4b485350dcb0 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -25,7 +25,7 @@ pixel_x = -25 dir = WEST - update_icon(UPDATE_ICON_STATE) + update_icon(UPDATE_ICON_STATE|UPDATE_OVERLAYS) /obj/machinery/light_switch/update_icon_state() if(stat & NOPOWER) @@ -40,6 +40,7 @@ if(stat & NOPOWER) return + . += "light[get_area(src).lightswitch]" underlays += emissive_appearance(icon, "light_lightmask") /obj/machinery/light_switch/examine(mob/user) @@ -52,7 +53,7 @@ /obj/machinery/light_switch/attack_hand(mob/user) playsound(src, 'sound/machines/lightswitch.ogg', 10, TRUE) - update_icon(UPDATE_ICON_STATE) + update_icon(UPDATE_ICON_STATE|UPDATE_OVERLAYS) var/area/A = get_area(src) @@ -60,7 +61,7 @@ A.update_icon(UPDATE_ICON_STATE) for(var/obj/machinery/light_switch/L in A) - L.update_icon(UPDATE_ICON_STATE) + L.update_icon(UPDATE_ICON_STATE|UPDATE_OVERLAYS) machine_powernet.power_change() @@ -70,7 +71,7 @@ if(stat & NOPOWER) set_light(0) else - set_light(1, LIGHTING_MINIMUM_POWER) + set_light(1, 0.5) update_icon(UPDATE_ICON_STATE|UPDATE_OVERLAYS) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 69ec66f91eaf..e97ceb0bad61 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -189,13 +189,13 @@ /obj/machinery/ui_status(mob/user, datum/ui_state/state) if(!interact_offline && (stat & (NOPOWER|BROKEN))) - return STATUS_CLOSE + return UI_CLOSE return ..() /obj/machinery/ui_status(mob/user, datum/ui_state/state) if(!interact_offline && (stat & (NOPOWER|BROKEN))) - return STATUS_CLOSE + return UI_CLOSE return ..() @@ -222,6 +222,25 @@ return attack_hand(user) /obj/machinery/attack_hand(mob/user as mob) + if(try_attack_hand(user)) + return TRUE + + add_fingerprint(user) + + return ..() + +/** + * Preprocess machinery interaction. + * + * If overriding and extending interaction limitations, better call this with ..() + * unless you really know what you are doing. + * + * Returns TRUE when interaction is done due to different limitations and nothing should be done next. + * Returns FALSE when interaction can be continued. + * Arguments: + * * user - the mob interacting with this machinery + */ +/obj/machinery/proc/try_attack_hand(mob/user) if(user.incapacitated()) return TRUE @@ -245,9 +264,7 @@ if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT)) return TRUE - add_fingerprint(user) - - return ..() + return FALSE /obj/machinery/proc/is_operational() return !(stat & (NOPOWER|BROKEN|MAINT)) @@ -362,7 +379,7 @@ /obj/machinery/proc/exchange_parts(mob/user, obj/item/storage/part_replacer/W) var/shouldplaysound = 0 - if((flags & NODECONSTRUCT)) + if(flags & NODECONSTRUCT) return FALSE if(istype(W) && component_parts) if(panel_open || W.works_from_distance) diff --git a/code/game/machinery/magnetic_module.dm b/code/game/machinery/magnetic_module.dm index 88a78dcfeea7..87442eac7123 100644 --- a/code/game/machinery/magnetic_module.dm +++ b/code/game/machinery/magnetic_module.dm @@ -237,10 +237,13 @@ if(magnets.len == 0 && autolink) link_magnets() -/obj/machinery/magnetic_controller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/magnetic_controller/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/magnetic_controller/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MagnetController", name, 400, 600) + ui = new(user, src, "MagnetController", name) ui.open() /obj/machinery/magnetic_controller/attack_ai(mob/user as mob) diff --git a/code/game/machinery/merch_vendor.dm b/code/game/machinery/merch_vendor.dm index fcbc117094ae..a6519cb7cf87 100644 --- a/code/game/machinery/merch_vendor.dm +++ b/code/game/machinery/merch_vendor.dm @@ -19,6 +19,9 @@ /obj/machinery/economy/merch/attack_hand(mob/user) ui_interact(user) +/obj/machinery/economy/merch/attack_ghost(mob/user) + ui_interact(user) + /obj/machinery/economy/merch/Initialize(mapload) . = ..() component_parts = list() @@ -74,10 +77,13 @@ user.put_in_hands(D) SSeconomy.total_vendor_transactions++ -/obj/machinery/economy/merch/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/merch/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/merch/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MerchVendor", name, 450, 500, master_ui, state) + ui = new(user, src, "MerchVendor", name) ui.open() /obj/machinery/economy/merch/ui_data(mob/user) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index b53cf03f3766..f1dbc7792f1b 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -162,7 +162,7 @@ Transponder Codes:
    "} usr.set_machine(src) if(href_list["locedit"]) - var/newloc = copytext(sanitize(input("Enter New Location", "Navigation Beacon", location) as text|null),1,MAX_MESSAGE_LEN) + var/newloc = tgui_input_text(usr, "Enter New Location", "Navigation Beacon", location) if(newloc) location = newloc updateDialog() @@ -170,12 +170,12 @@ Transponder Codes:
      "} else if(href_list["edit"]) var/codekey = href_list["code"] - var/newkey = stripped_input(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey) + var/newkey = tgui_input_text(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey) if(!newkey) return var/codeval = codes[codekey] - var/newval = stripped_input(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval) + var/newval = tgui_input_text(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval) if(!newval) newval = codekey return @@ -192,11 +192,11 @@ Transponder Codes:
        "} else if(href_list["add"]) - var/newkey = stripped_input(usr, "Enter New Transponder Code Key", "Navigation Beacon") + var/newkey = tgui_input_text(usr, "Enter New Transponder Code Key", "Navigation Beacon") if(!newkey) return - var/newval = stripped_input(usr, "Enter New Transponder Code Value", "Navigation Beacon") + var/newval = tgui_input_text(usr, "Enter New Transponder Code Value", "Navigation Beacon") if(!newval) newval = "1" return diff --git a/code/game/machinery/pipe/pipe_construction.dm b/code/game/machinery/pipe/pipe_construction.dm index e904a75a357f..ff8de1af847a 100644 --- a/code/game/machinery/pipe/pipe_construction.dm +++ b/code/game/machinery/pipe/pipe_construction.dm @@ -34,9 +34,6 @@ else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging)) pipe_type = PIPE_HE_STRAIGHT + is_bent - else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/insulated)) - pipe_type = PIPE_INSULATED_STRAIGHT + is_bent - else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/supply)) pipe_type = PIPE_SUPPLY_STRAIGHT + is_bent connect_types = list(CONNECT_TYPE_SUPPLY) @@ -208,7 +205,6 @@ return pipe_type in list( \ PIPE_SIMPLE_BENT, \ PIPE_HE_BENT, \ - PIPE_INSULATED_BENT, \ PIPE_SUPPLY_BENT, \ PIPE_SCRUBBERS_BENT) @@ -241,7 +237,7 @@ if(is_bent_pipe() && (dir in GLOB.cardinal)) dir = dir | turn(dir, 90) - else if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) + else if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) if(dir == 2) dir = 1 @@ -265,12 +261,12 @@ var/acw = turn(direct, 90) switch(pipe_type) - if(PIPE_SIMPLE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_JUNCTION,\ + if(PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_JUNCTION,\ PIPE_PUMP, PIPE_VOLUME_PUMP, PIPE_PASSIVE_GATE, PIPE_MVALVE, PIPE_DVALVE, PIPE_DP_VENT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL) return dir|flip - if(PIPE_SIMPLE_BENT, PIPE_INSULATED_BENT, PIPE_HE_BENT, PIPE_SUPPLY_BENT, PIPE_SCRUBBERS_BENT) + if(PIPE_SIMPLE_BENT, PIPE_HE_BENT, PIPE_SUPPLY_BENT, PIPE_SCRUBBERS_BENT) return dir //dir|acw if(PIPE_CONNECTOR, PIPE_HEAT_EXCHANGE, PIPE_INJECTOR) @@ -332,7 +328,7 @@ //Helper to clean up dir /obj/item/pipe/proc/fixdir() - if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) + if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) if(dir == 2) dir = 1 @@ -482,10 +478,6 @@ S.on_construction(dir, pipe_dir, color) - if(PIPE_INSULATED_STRAIGHT, PIPE_INSULATED_BENT) - var/obj/machinery/atmospherics/pipe/simple/insulated/P = new(loc) - P.on_construction(dir, pipe_dir, color) - if(PIPE_CAP) var/obj/machinery/atmospherics/pipe/cap/C = new(loc) C.on_construction(dir, pipe_dir, color) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index d3e0865feb44..13e71b0d39c6 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -66,6 +66,7 @@ to_chat(user, "You disable \the [src]'s temperature safeguards.")//Inform the mob of what emagging does. emagged = TRUE //Set the emag var to true. + return TRUE /obj/machinery/poolcontroller/multitool_act(mob/user, obj/item/I) . = TRUE @@ -161,10 +162,13 @@ linkedmist.Cut() -/obj/machinery/poolcontroller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/poolcontroller/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/poolcontroller/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PoolController", "Pool Controller Interface", 520, 410) + ui = new(user, src, "PoolController", "Pool Controller Interface") ui.open() /obj/machinery/poolcontroller/proc/temp_to_str(temp) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 2739d7fe6f93..d333d8b523d2 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -211,16 +211,19 @@ GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/attack_hand(mob/user) ui_interact(user) -/obj/machinery/porta_turret/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/porta_turret/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/porta_turret/ui_interact(mob/user, datum/tgui/ui = null) if(HasController()) to_chat(user, "[src] can only be controlled using the assigned turret controller.") return if(!anchored) to_chat(user, "[src] has to be secured first!") return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortableTurret", name, 500, access_is_configurable() ? 800 : 400) + ui = new(user, src, "PortableTurret", name) ui.open() /obj/machinery/porta_turret/ui_data(mob/user) @@ -433,6 +436,7 @@ GLOBAL_LIST_EMPTY(turret_icons) enabled = FALSE //turns off the turret temporarily sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit enabled = TRUE //turns it back on. The cover pop_up() pop_down() are automatically called in process(), no need to define it here + return TRUE /obj/machinery/porta_turret/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration_flat = 0, armour_penetration_percentage = 0) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 6d9740b90d17..9ac05ebf036e 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -230,6 +230,7 @@ return target.stop_pulling() + QDEL_LIST_CONTENTS(target.grabbed_by) target.forceMove(src) occupant = target diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index c189c6cccf5d..21e658cf8060 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -93,6 +93,7 @@ update_icon(UPDATE_ICON_STATE) playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(user, "You use the cryptographic sequencer on [src].") + return TRUE /obj/machinery/recycler/update_icon_state() var/is_powered = !(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index eee369468a3e..0f78731f5d3f 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -65,6 +65,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) var/print_cooldown = 0 //cooldown on shipping label printer, stores the in-game time of when the printer will next be ready var/obj/item/radio/Radio var/radiochannel = "" + var/reminder_timer_id = TIMER_ID_NULL /obj/machinery/requests_console/power_change() if(!..()) @@ -137,10 +138,13 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) ui_interact(user) -/obj/machinery/requests_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/requests_console/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/requests_console/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RequestConsole", "[department] Request Console", 520, 410, master_ui, state) + ui = new(user, src, "RequestConsole", "[department] Request Console") ui.open() /obj/machinery/requests_console/ui_data(mob/user) @@ -182,7 +186,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) if(reject_bad_text(params["write"])) recipient = params["write"] //write contains the string of the receiving department's name - var/new_message = sanitize(input("Write your message:", "Awaiting Input", "")) + var/new_message = tgui_input_text(usr, "Write your message:", "Awaiting Input", encode = FALSE) if(new_message) message = new_message screen = RCS_MESSAUTH @@ -197,7 +201,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) reset_message(TRUE) if("writeAnnouncement") - var/new_message = input("Write your message:", "Awaiting Input", message) as message|null + var/new_message = tgui_input_text(usr, "Write your message:", "Awaiting Input", message, multiline = TRUE, encode = FALSE) if(new_message) message = new_message else @@ -240,7 +244,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) else if(recipient in SUPPLY_ROLES) radiochannel = "Supply" message_log.Add(list(list("Message sent to [recipient] at [station_time_timestamp()]", "[message]"))) - Radio.autosay("Alert; a new requests console message received for [recipient] from [department]", null, "[radiochannel]") + Radio.autosay("Alert; a new message has been received from [department]", "[recipient] Requests Console", "[radiochannel]") else atom_say("No server detected!") @@ -256,6 +260,9 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) Console.newmessagepriority = RQ_NONEW_MESSAGES Console.update_icon(UPDATE_OVERLAYS) Console.set_light(1) + if(reminder_timer_id != TIMER_ID_NULL) + deltimer(reminder_timer_id) + reminder_timer_id = TIMER_ID_NULL if(tempScreen == RCS_MAINMENU) reset_message() screen = tempScreen @@ -329,29 +336,43 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) if(mainmenu) screen = RCS_MAINMENU -/obj/machinery/requests_console/proc/createMessage(source, title, message, priority) +/obj/machinery/requests_console/proc/createMessage(source, title, message, priority, forced = FALSE) var/linkedSender + if(inoperable() && !forced) + message_log.Add(list(list("Message lost due to console failure. Please contact [station_name()]'s system administrator or AI for technical assistance."))) + return if(istype(source, /obj/machinery/requests_console)) var/obj/machinery/requests_console/sender = source linkedSender = sender.department else - capitalize(source) linkedSender = source - capitalize(title) if(newmessagepriority < priority) newmessagepriority = priority update_icon(UPDATE_ICON_STATE | UPDATE_OVERLAYS) if(!silent) playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE) atom_say(title) + if(reminder_timer_id == TIMER_ID_NULL) + reminder_timer_id = addtimer(CALLBACK(src, PROC_REF(remind_unread_messages)), 5 MINUTES, TIMER_STOPPABLE | TIMER_LOOP) switch(priority) if(RQ_HIGHPRIORITY) // High - message_log.Add(list(list("High Priority - From: [linkedSender]") + message)) // List in a list for passing into TGUI + message_log.Add(list(list("High Priority - From: [linkedSender]", message))) // List in a list for passing into TGUI else // Normal - message_log.Add(list(list("From: [linkedSender]") + message)) // List in a list for passing into TGUI + message_log.Add(list(list("From: [linkedSender]", message))) // List in a list for passing into TGUI set_light(2) +/obj/machinery/requests_console/proc/remind_unread_messages() + if(reminder_timer_id == TIMER_ID_NULL) + return + + if(newmessagepriority == RQ_NONEW_MESSAGES) + deltimer(reminder_timer_id) + reminder_timer_id = TIMER_ID_NULL + return + + atom_say("Unread message(s) available.") + /obj/machinery/requests_console/proc/print_label(tag_name, tag_index) var/obj/item/shippingPackage/sp = new /obj/item/shippingPackage(get_turf(src)) sp.sortTag = tag_index diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index ad1cec2177bf..dda3f5cef56b 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -38,10 +38,13 @@ UnregisterSignal(user_account, COMSIG_PARENT_QDELETING) user_account = null -/obj/machinery/economy/slot_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/slot_machine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/slot_machine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SlotMachine", name, 350, 200, master_ui, state) + ui = new(user, src, "SlotMachine", name) ui.open() /obj/machinery/economy/slot_machine/ui_data(mob/user) @@ -143,6 +146,7 @@ emagged = TRUE to_chat(user, "You engage the reverse-gripping mechanism on the machine's handle.") log_game("[key_name(user)] emagged [src]") + return TRUE /// The spinning and throwing away is handled here, with a possible call to winning /obj/machinery/economy/slot_machine/proc/emagged_spinning(mob/living/user) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 7a4bfc6a26f4..73b05491d0cf 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -57,9 +57,9 @@ board_type = /obj/item/circuitboard/suit_storage_unit/industrial /obj/machinery/suit_storage_unit/standard_unit - suit_type = /obj/item/clothing/suit/space/eva - helmet_type = /obj/item/clothing/head/helmet/space/eva - mask_type = /obj/item/clothing/mask/breath + suit_type = /obj/item/clothing/suit/space/eva + helmet_type = /obj/item/clothing/head/helmet/space/eva + mask_type = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/standard_unit/secure secure = TRUE //start with ID lock enabled @@ -67,10 +67,10 @@ /obj/machinery/suit_storage_unit/captain name = "captain's suit storage unit" desc = "An U-Stor-It Storage unit designed to accommodate all kinds of space suits. Its on-board equipment also allows the user to decontaminate the contents through a UV-ray purging cycle. There's a warning label dangling from the control pad, reading \"STRICTLY NO BIOLOGICALS IN THE CONFINES OF THE UNIT\". This one looks kind of fancy." - helmet_type = /obj/item/clothing/head/helmet/space/capspace //Looks like they couldn't handle the Neutron Style - mask_type = /obj/item/clothing/mask/gas + helmet_type = /obj/item/clothing/head/helmet/space/capspace //Looks like they couldn't handle the Neutron Style + mask_type = /obj/item/clothing/mask/gas suit_type = /obj/item/mod/control/pre_equipped/magnate - req_access = list(ACCESS_CAPTAIN) + req_access = list(ACCESS_CAPTAIN) /obj/machinery/suit_storage_unit/captain/secure secure = TRUE @@ -79,10 +79,10 @@ name = "engineering suit storage unit" icon_state = "industrial" base_icon_state = "industrial" - mask_type = /obj/item/clothing/mask/breath + mask_type = /obj/item/clothing/mask/breath boots_type = /obj/item/clothing/shoes/magboots suit_type = /obj/item/mod/control/pre_equipped/engineering - req_access = list(ACCESS_ENGINE_EQUIP) + req_access = list(ACCESS_ENGINE_EQUIP) board_type = /obj/item/circuitboard/suit_storage_unit/industrial /obj/machinery/suit_storage_unit/engine/secure @@ -92,10 +92,10 @@ name = "chief engineer's suit storage unit" icon_state = "industrial" base_icon_state = "industrial" - mask_type = /obj/item/clothing/mask/gas + mask_type = /obj/item/clothing/mask/gas boots_type = /obj/item/clothing/shoes/magboots/advance suit_type = /obj/item/mod/control/pre_equipped/advanced - req_access = list(ACCESS_CE) + req_access = list(ACCESS_CE) board_type = /obj/item/circuitboard/suit_storage_unit/industrial /obj/machinery/suit_storage_unit/ce/secure @@ -104,8 +104,8 @@ /obj/machinery/suit_storage_unit/rd name = "research director's suit storage unit" suit_type = /obj/item/mod/control/pre_equipped/research - mask_type = /obj/item/clothing/mask/gas - req_access = list(ACCESS_RD) + mask_type = /obj/item/clothing/mask/gas + req_access = list(ACCESS_RD) /obj/machinery/suit_storage_unit/rd/secure secure = TRUE @@ -121,9 +121,9 @@ /obj/machinery/suit_storage_unit/security name = "security suit storage unit" - mask_type = /obj/item/clothing/mask/gas/sechailer + mask_type = /obj/item/clothing/mask/gas/sechailer suit_type = /obj/item/mod/control/pre_equipped/security - req_access = list(ACCESS_SECURITY) + req_access = list(ACCESS_SECURITY) /obj/machinery/suit_storage_unit/security/secure secure = TRUE @@ -139,7 +139,7 @@ /obj/machinery/suit_storage_unit/gamma name = "gamma shielded suit storage unit" - suit_type = /obj/item/clothing/suit/space/hardsuit/shielded/gamma + suit_type = /obj/item/mod/control/pre_equipped/safeguard/gamma mask_type = /obj/item/clothing/mask/gas/sechailer/swat req_access = list(ACCESS_SECURITY) @@ -148,19 +148,19 @@ /obj/machinery/suit_storage_unit/atmos name = "atmospherics suit storage unit" - mask_type = /obj/item/clothing/mask/gas + mask_type = /obj/item/clothing/mask/gas boots_type = /obj/item/clothing/shoes/magboots/atmos suit_type = /obj/item/mod/control/pre_equipped/atmospheric - req_access = list(ACCESS_ATMOSPHERICS) + req_access = list(ACCESS_ATMOSPHERICS) /obj/machinery/suit_storage_unit/atmos/secure secure = TRUE /obj/machinery/suit_storage_unit/mining name = "mining suit storage unit" - mask_type = /obj/item/clothing/mask/breath + mask_type = /obj/item/clothing/mask/breath suit_type = /obj/item/mod/control/pre_equipped/mining/asteroid - req_access = list(ACCESS_MINING_STATION) + req_access = list(ACCESS_MINING_STATION) /obj/machinery/suit_storage_unit/mining/secure secure = TRUE @@ -173,22 +173,26 @@ req_access = list(ACCESS_MINING_STATION) /obj/machinery/suit_storage_unit/cmo - mask_type = /obj/item/clothing/mask/breath + name = "chief medical officer's suit storage unit" + mask_type = /obj/item/clothing/mask/breath suit_type = /obj/item/mod/control/pre_equipped/medical - req_access = list(ACCESS_CMO) + req_access = list(ACCESS_CMO) /obj/machinery/suit_storage_unit/cmo/secure secure = TRUE //version of the SSU for medbay secondary storage. Includes magboots. //no it doesn't, it aint have shit for magboots -/obj/machinery/suit_storage_unit/cmo/secure/sec_storage +/obj/machinery/suit_storage_unit/cmo/sec_storage name = "medical suit storage unit" mask_type = /obj/item/clothing/mask/gas +/obj/machinery/suit_storage_unit/cmo/sec_storage/secure + secure = TRUE + /obj/machinery/suit_storage_unit/clown name = "clown suit storage unit" suit_type = /obj/item/clothing/suit/space/eva/clown - helmet_type = /obj/item/clothing/head/helmet/space/eva/clown + helmet_type = /obj/item/clothing/head/helmet/space/eva/clown req_access = list(ACCESS_CLOWN) /obj/machinery/suit_storage_unit/clown/secure @@ -197,7 +201,7 @@ /obj/machinery/suit_storage_unit/mime name = "mime suit storage unit" suit_type = /obj/item/clothing/suit/space/eva/mime - helmet_type = /obj/item/clothing/head/helmet/space/eva/mime + helmet_type = /obj/item/clothing/head/helmet/space/eva/mime req_access = list(ACCESS_MIME) /obj/machinery/suit_storage_unit/mime/secure @@ -205,8 +209,8 @@ /obj/machinery/suit_storage_unit/syndicate name = "syndicate suit storage unit" - mask_type = /obj/item/clothing/mask/gas/syndicate - storage_type = /obj/item/mod/control/pre_equipped/nuclear + mask_type = /obj/item/clothing/mask/gas/syndicate + suit_type = /obj/item/mod/control/pre_equipped/nuclear req_access = list(ACCESS_SYNDICATE) safeties = FALSE //in a syndicate base, everything can be used as a murder weapon at a moment's notice. @@ -215,17 +219,17 @@ //telecoms NASA SSU. Suits themselves are assigned in Initialize /obj/machinery/suit_storage_unit/telecoms - mask_type = /obj/item/clothing/mask/breath + mask_type = /obj/item/clothing/mask/breath storage_type = /obj/item/tank/jetpack/void - req_access = list(ACCESS_TCOMSAT) + req_access = list(ACCESS_TCOMSAT) /obj/machinery/suit_storage_unit/telecoms/secure secure = TRUE /obj/machinery/suit_storage_unit/radsuit name = "radiation suit storage unit" - suit_type = /obj/item/clothing/suit/radiation - helmet_type = /obj/item/clothing/head/radiation + suit_type = /obj/item/clothing/suit/radiation + helmet_type = /obj/item/clothing/head/radiation storage_type = /obj/item/geiger_counter //copied from /obj/effect/nasavoidsuitspawner @@ -337,10 +341,13 @@ return if(panel_open) if(istype(I, /obj/item/crowbar)) + if(occupant || helmet || suit || storage || boots) + to_chat(user, "There are contents that prevent you from deconstructing [src]!") + return if(locked) to_chat(user, "The security system prevents you from deconstructing [src]!") return - dump_contents() + dump_contents() // probably still a good idea for just incase? default_deconstruction_crowbar(user, I) return wires.Interact(user) @@ -442,15 +449,18 @@ return TRUE /obj/machinery/suit_storage_unit/proc/put_in(mob/user, mob/living/target) - if(do_mob(user, target, 30)) - if(occupant || helmet || suit || storage) - return - if(target == user) - user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]!", "You slip into [src]'s cramped space and shut its door.") - else - target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!") - close_machine(target) - add_fingerprint(user) + if(!do_mob(user, target, 30)) + return + if(occupant || helmet || suit || storage) + return + if(target == user) + user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]!", "You slip into [src]'s cramped space and shut its door.") + else + target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!") + close_machine(target) + if(occupant == target) + QDEL_LIST_CONTENTS(target.grabbed_by) + add_fingerprint(user) /obj/machinery/suit_storage_unit/proc/cook() if(uv_cycles) @@ -595,10 +605,16 @@ wires.Interact(user) ui_interact(user) -/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/suit_storage_unit/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/suit_storage_unit/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/suit_storage_unit/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SuitStorage", name, 402, 268, master_ui, state) + ui = new(user, src, "SuitStorage", name) ui.set_autoupdate(FALSE) ui.open() @@ -742,3 +758,20 @@ /obj/machinery/suit_storage_unit/proc/check_electrified_callback() if(!wires.is_cut(WIRE_ELECTRIFY)) shocked = FALSE + +/obj/machinery/suit_storage_unit/emag_act(mob/user) + if(uv) + to_chat(user, "[src] is currently undergoing a disinfection cycle, it wont open.") + return + playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + to_chat(user, "You short out [src]'s internal circuitry, causing its safeties to fail, and dumping its contents.") + open_machine() + dump_contents() + eject_occupant() + update_icon(UPDATE_OVERLAYS) + locked = FALSE + if(safeties) + togglesafeties(FALSE) + if(!uv_super) + toggleUV(TRUE) + secure = FALSE diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 6dc6c55a0393..54ca83df7328 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -250,7 +250,7 @@ if(can_interact(user)) //No running off and setting bombs from across the station timer_set = clamp(new_timer, minimum_timer, maximum_timer) loc.visible_message("[bicon(src)] timer set for [timer_set] seconds.") - if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && can_interact(user)) + if(tgui_alert(user, "Would you like to start the countdown now?", "Countdown", list("Yes", "No")) == "Yes" && can_interact(user)) if(defused || active) if(defused) loc.visible_message("[bicon(src)] Device error: User intervention required.") @@ -399,7 +399,7 @@ qdel(src) /obj/item/bombcore/badmin/summon - var/summon_path = /obj/item/reagent_containers/food/snacks/cookie + var/summon_path = /obj/item/food/snacks/cookie var/amt_summon = 1 /obj/item/bombcore/badmin/summon/detonate() diff --git a/code/game/machinery/tcomms/nttc.dm b/code/game/machinery/tcomms/nttc.dm index e73cbd943e16..da5178641b9f 100644 --- a/code/game/machinery/tcomms/nttc.dm +++ b/code/game/machinery/tcomms/nttc.dm @@ -272,25 +272,24 @@ job = "ERT" if(toggle_job_color) switch(job_indicator_type) - // These must have trailing spaces. No exceptions. if(JOB_STYLE_1) - new_name = "[tcm.sender_name] ([job]) " + new_name = "[tcm.sender_name] ([job])" if(JOB_STYLE_2) - new_name = "[tcm.sender_name] - [job] " + new_name = "[tcm.sender_name] - [job]" if(JOB_STYLE_3) - new_name = "\[[job]\] [tcm.sender_name] " + new_name = "\[[job]\] [tcm.sender_name]" if(JOB_STYLE_4) - new_name = "([job]) [tcm.sender_name] " + new_name = "([job]) [tcm.sender_name]" else switch(job_indicator_type) if(JOB_STYLE_1) - new_name = "[tcm.sender_name] ([job]) " + new_name = "[tcm.sender_name] ([job])" if(JOB_STYLE_2) - new_name = "[tcm.sender_name] - [job] " + new_name = "[tcm.sender_name] - [job]" if(JOB_STYLE_3) - new_name = "\[[job]\] [tcm.sender_name] " + new_name = "\[[job]\] [tcm.sender_name]" if(JOB_STYLE_4) - new_name = "([job]) [tcm.sender_name] " + new_name = "([job]) [tcm.sender_name]" // Only change the name if they have a job tag set, otherwise everyone becomes unknown, and thats bad if(new_name != "") diff --git a/code/game/machinery/tcomms/relay.dm b/code/game/machinery/tcomms/relay.dm index b13e7bc86ce4..8715ce2cebe6 100644 --- a/code/game/machinery/tcomms/relay.dm +++ b/code/game/machinery/tcomms/relay.dm @@ -139,10 +139,13 @@ // UI STUFF // ////////////// -/obj/machinery/tcomms/relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/tcomms/relay/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/tcomms/relay/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TcommsRelay", name, 600, 400, master_ui, state) + ui = new(user, src, "TcommsRelay", name) ui.open() /obj/machinery/tcomms/relay/ui_data(mob/user) @@ -202,7 +205,7 @@ if("unlink") if(!linked) return - var/choice = alert(usr, "Are you SURE you want to unlink this relay?\nYou wont be able to re-link without the core password", "Unlink","Yes","No") + var/choice = tgui_alert(usr, "Are you SURE you want to unlink this relay?\nYou wont be able to re-link without the core password", "Unlink", list("Yes", "No")) if(choice == "Yes") log_action(usr, "Unlinked [network_id] from [linked_core.network_id]") Reset() diff --git a/code/game/machinery/tcomms/tcomms_core.dm b/code/game/machinery/tcomms/tcomms_core.dm index a4b85d853382..e3db26cdea5d 100644 --- a/code/game/machinery/tcomms/tcomms_core.dm +++ b/code/game/machinery/tcomms/tcomms_core.dm @@ -175,14 +175,17 @@ // UI STUFF // ////////////// -/obj/machinery/tcomms/core/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) +/obj/machinery/tcomms/core/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/tcomms/core/ui_interact(mob/user, datum/tgui/ui = null) // This needs to happen here because of how late the language datum initializes. I dont like it if(length(nttc.valid_languages) == 1) nttc.update_languages() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TcommsCore", name, 900, 600, master_ui, state) + ui = new(user, src, "TcommsCore", name) ui.open() /obj/machinery/tcomms/core/ui_data(mob/user) @@ -282,7 +285,9 @@ // Imports and exports if("import") - var/json = input(usr, "Provide configuration JSON below.", "Load Config", nttc.nttc_serialize()) as message + var/json = tgui_input_text(usr, "Provide configuration JSON below.", "Load Config", nttc.nttc_serialize(), multiline = TRUE, encode = FALSE) + if(!json) + return if(nttc.nttc_deserialize(json, usr.ckey)) log_action(usr, "has uploaded a NTTC JSON configuration: [ADMIN_SHOWDETAILS("Show", json)]", TRUE) @@ -291,7 +296,9 @@ // Set network ID if("network_id") - var/new_id = input(usr, "Please enter a new network ID", "Network ID", network_id) + var/new_id = tgui_input_text(usr, "Please enter a new network ID", "Network ID", network_id) + if(!new_id) + return log_action(usr, "renamed core with ID [network_id] to [new_id]") to_chat(usr, "Device ID changed from [network_id] to [new_id].") network_id = new_id @@ -299,7 +306,7 @@ if("unlink") var/obj/machinery/tcomms/relay/R = locate(params["addr"]) if(istype(R, /obj/machinery/tcomms/relay)) - var/confirm = alert("Are you sure you want to unlink this relay?\nID: [R.network_id]\nADDR: \ref[R]", "Relay Unlink", "Yes", "No") + var/confirm = tgui_alert(usr, "Are you sure you want to unlink this relay?\nID: [R.network_id]\nADDR: \ref[R]", "Relay Unlink", list("Yes", "No")) if(confirm == "Yes") log_action(usr, "has unlinked tcomms relay with ID [R.network_id] from tcomms core with ID [network_id]", TRUE) R.Reset() @@ -307,15 +314,17 @@ to_chat(usr, "ERROR: Relay not found. Please file an issue report.") if("change_password") - var/new_password = input(usr, "Please enter a new password","New Password", link_password) + var/new_password = tgui_input_text(usr, "Please enter a new password", "New Password", link_password) + if(!new_password) + return log_action(usr, "has changed the password on core with ID [network_id] from [link_password] to [new_password]") to_chat(usr, "Successfully changed password from [link_password] to [new_password].") link_password = new_password if("add_filter") // This is a stripped input because I did NOT come this far for this system to be abused by HTML injection - var/name_to_add = html_decode(stripped_input(usr, "Enter a name to add to the filtering list", "Name Entry")) - if(name_to_add == "") + var/name_to_add = tgui_input_text(usr, "Enter a name to add to the filtering list", "Name Entry") + if(!name_to_add) return if(name_to_add in nttc.filtering) to_chat(usr, "ERROR: User already in filtering list.") @@ -329,7 +338,7 @@ if(!(name_to_remove in nttc.filtering)) to_chat(usr, "ERROR: Name does not exist in filter list. Please file an issue report.") else - var/confirm = alert(usr, "Are you sure you want to remove [name_to_remove] from the filtering list?", "Confirm Removal", "Yes", "No") + var/confirm = tgui_alert(usr, "Are you sure you want to remove [name_to_remove] from the filtering list?", "Confirm Removal", list("Yes", "No")) if(confirm == "Yes") nttc.filtering -= name_to_remove log_action(usr, "has removed [name_to_remove] from the NTTC filter list on core with ID [network_id]", TRUE) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index ad5f3a59b41b..d29651d6385e 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -61,6 +61,7 @@ if(!emagged) emagged = TRUE to_chat(user, "The teleporter can now lock on to Syndicate beacons!") + return TRUE else ui_interact(user) @@ -71,12 +72,15 @@ ui_interact(user) -/obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/teleporter/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/teleporter/ui_interact(mob/user, datum/tgui/ui = null) if(stat & (NOPOWER|BROKEN)) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Teleporter", "Teleporter Console", 380, 260) + ui = new(user, src, "Teleporter", "Teleporter Console") ui.open() /obj/machinery/computer/teleporter/ui_data(mob/user) @@ -303,9 +307,10 @@ /obj/machinery/teleport name = "teleport" - icon = 'icons/obj/stationobjs.dmi' density = TRUE anchored = TRUE + ///Used by the teleporter hub and permament teleporter to track how many teleports have been done this cycle. + var/teleports_this_cycle = 0 /** Internal helper function @@ -359,6 +364,9 @@ component_parts += new /obj/item/stock_parts/matter_bin/super(null) RefreshParts() +/obj/machinery/teleport/hub/process() + teleports_this_cycle = 0 + /obj/machinery/teleport/hub/Destroy() if(power_station) power_station.teleporter_hub = null @@ -414,6 +422,8 @@ var/obj/machinery/computer/teleporter/com = power_station.teleporter_console if(!com) return + if(MAX_ALLOWED_TELEPORTS_PER_PROCESS <= teleports_this_cycle) + return if(!com.target) visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") return @@ -428,6 +438,7 @@ . = do_teleport(M, com.target, bypass_area_flag = com.area_bypass) if(accurate < 3) calibrated = FALSE + teleports_this_cycle++ /obj/machinery/teleport/hub/update_icon_state() if(panel_open) @@ -468,6 +479,9 @@ . = ..() update_lighting() +/obj/machinery/teleport/perma/process() + teleports_this_cycle = 0 + /obj/machinery/teleport/perma/RefreshParts() for(var/obj/item/circuitboard/teleporter_perma/C in component_parts) target = C.target @@ -484,9 +498,10 @@ to_chat(AM, "You can't use this here.") return - if(target && !recalibrating && !panel_open && !blockAI(AM)) + if(target && !recalibrating && !panel_open && !blockAI(AM) && (teleports_this_cycle <= MAX_ALLOWED_TELEPORTS_PER_PROCESS)) do_teleport(AM, target) use_power(5000) + teleports_this_cycle++ if(tele_delay) recalibrating = TRUE update_icon(UPDATE_ICON_STATE | UPDATE_OVERLAYS) diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 0aec21cfcc4c..276f8cc1bdfc 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -130,7 +130,7 @@ emagged = TRUE locked = FALSE ailock = FALSE - return + return TRUE /obj/machinery/turretid/attack_ai(mob/user as mob) ui_interact(user) @@ -141,10 +141,13 @@ /obj/machinery/turretid/attack_hand(mob/user as mob) ui_interact(user) -/obj/machinery/turretid/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/turretid/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/turretid/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortableTurret", name, 500, 400) + ui = new(user, src, "PortableTurret", name) ui.open() /obj/machinery/turretid/ui_data(mob/user) diff --git a/code/game/machinery/vendors/contraband_vendors.dm b/code/game/machinery/vendors/contraband_vendors.dm index be658bffa8e8..3fc5db5bb5e3 100644 --- a/code/game/machinery/vendors/contraband_vendors.dm +++ b/code/game/machinery/vendors/contraband_vendors.dm @@ -68,10 +68,10 @@ icon_off = "nutri" icon_panel = "thin_vendor" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/chips = 6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/syndicake = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6) + products = list(/obj/item/food/snacks/chips = 6, + /obj/item/food/snacks/sosjerky = 6, + /obj/item/food/snacks/syndicake = 6, + /obj/item/food/snacks/cheesiehonkers = 6) /obj/machinery/economy/vending/hydroseeds/syndicate_druglab products = list(/obj/item/seeds/ambrosia/deus = 2, diff --git a/code/game/machinery/vendors/departmental_vendors.dm b/code/game/machinery/vendors/departmental_vendors.dm index 15dc44926ef7..2c9548025d35 100644 --- a/code/game/machinery/vendors/departmental_vendors.dm +++ b/code/game/machinery/vendors/departmental_vendors.dm @@ -100,13 +100,13 @@ /obj/item/kitchen/knife = 3, /obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/sushimat = 3, - /obj/item/reagent_containers/food/drinks/drinkingglass = 8, + /obj/item/reagent_containers/drinks/drinkingglass = 8, /obj/item/clothing/suit/chef/classic = 2, /obj/item/storage/belt/chef = 2, - /obj/item/reagent_containers/food/condiment/pack/ketchup = 5, - /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, - /obj/item/reagent_containers/food/condiment/saltshaker =5, - /obj/item/reagent_containers/food/condiment/peppermill =5, + /obj/item/reagent_containers/condiment/pack/ketchup = 5, + /obj/item/reagent_containers/condiment/pack/hotsauce = 5, + /obj/item/reagent_containers/condiment/saltshaker =5, + /obj/item/reagent_containers/condiment/peppermill =5, /obj/item/whetstone = 2, /obj/item/mixing_bowl = 10, /obj/item/kitchen/mould/bear = 1, @@ -280,7 +280,8 @@ contraband = list(/obj/item/reagent_containers/syringe/insulin = 4, /obj/item/reagent_containers/glass/bottle/sulfonal = 1, - /obj/item/reagent_containers/glass/bottle/pancuronium = 1) + /obj/item/reagent_containers/glass/bottle/pancuronium = 1, + /obj/item/food/snacks/candy/sucker = 2) armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, RAD = 0, FIRE = 100, ACID = 70) resistance_flags = FIRE_PROOF @@ -328,7 +329,7 @@ /obj/item/grenade/flashbang = 4, /obj/item/flash = 5, /obj/item/reagent_containers/spray/pepper = 5, - /obj/item/reagent_containers/food/snacks/donut = 12, + /obj/item/food/snacks/donut = 12, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, /obj/item/restraints/legcuffs/bola/energy = 7, @@ -340,5 +341,5 @@ /obj/item/hailer = 5) refill_canister = /obj/item/vending_refill/security - prices = list(/obj/item/reagent_containers/food/snacks/donut = 40, + prices = list(/obj/item/food/snacks/donut = 40, /obj/item/storage/fancy/donut_box = 200) //Bulk discount diff --git a/code/game/machinery/vendors/generic_vendors.dm b/code/game/machinery/vendors/generic_vendors.dm index 31b700b6a92b..315acbe9555b 100644 --- a/code/game/machinery/vendors/generic_vendors.dm +++ b/code/game/machinery/vendors/generic_vendors.dm @@ -41,32 +41,32 @@ icon_panel = "smartfridge" icon_broken = "smartfridge" category = VENDOR_TYPE_DRINK - products = list(/obj/item/reagent_containers/food/drinks/bottle/gin = 5, - /obj/item/reagent_containers/food/drinks/bottle/whiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/tequila = 5, - /obj/item/reagent_containers/food/drinks/bottle/vodka = 5, - /obj/item/reagent_containers/food/drinks/bottle/vermouth = 5, - /obj/item/reagent_containers/food/drinks/bottle/rum = 5, - /obj/item/reagent_containers/food/drinks/bottle/wine = 5, - /obj/item/reagent_containers/food/drinks/bag/goonbag = 3, - /obj/item/reagent_containers/food/drinks/bottle/cognac = 5, - /obj/item/reagent_containers/food/drinks/bottle/kahlua = 5, - /obj/item/reagent_containers/food/drinks/cans/beer = 6, - /obj/item/reagent_containers/food/drinks/cans/ale = 6, - /obj/item/reagent_containers/food/drinks/cans/synthanol = 15, - /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, - /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, - /obj/item/reagent_containers/food/drinks/bottle/limejuice = 4, - /obj/item/reagent_containers/food/drinks/bottle/cream = 4, - /obj/item/reagent_containers/food/drinks/cans/tonic = 8, - /obj/item/reagent_containers/food/drinks/cans/cola = 8, - /obj/item/reagent_containers/food/drinks/cans/sodawater = 15, - /obj/item/reagent_containers/food/drinks/drinkingglass = 30, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 30, - /obj/item/reagent_containers/food/drinks/ice = 9) - - contraband = list(/obj/item/reagent_containers/food/drinks/tea = 10, - /obj/item/reagent_containers/food/drinks/bottle/fernet = 5) + products = list(/obj/item/reagent_containers/drinks/bottle/gin = 5, + /obj/item/reagent_containers/drinks/bottle/whiskey = 5, + /obj/item/reagent_containers/drinks/bottle/tequila = 5, + /obj/item/reagent_containers/drinks/bottle/vodka = 5, + /obj/item/reagent_containers/drinks/bottle/vermouth = 5, + /obj/item/reagent_containers/drinks/bottle/rum = 5, + /obj/item/reagent_containers/drinks/bottle/wine = 5, + /obj/item/reagent_containers/drinks/bag/goonbag = 3, + /obj/item/reagent_containers/drinks/bottle/cognac = 5, + /obj/item/reagent_containers/drinks/bottle/kahlua = 5, + /obj/item/reagent_containers/drinks/cans/beer = 6, + /obj/item/reagent_containers/drinks/cans/ale = 6, + /obj/item/reagent_containers/drinks/cans/synthanol = 15, + /obj/item/reagent_containers/drinks/bottle/orangejuice = 4, + /obj/item/reagent_containers/drinks/bottle/tomatojuice = 4, + /obj/item/reagent_containers/drinks/bottle/limejuice = 4, + /obj/item/reagent_containers/drinks/bottle/cream = 4, + /obj/item/reagent_containers/drinks/cans/tonic = 8, + /obj/item/reagent_containers/drinks/cans/cola = 8, + /obj/item/reagent_containers/drinks/cans/sodawater = 15, + /obj/item/reagent_containers/drinks/drinkingglass = 30, + /obj/item/reagent_containers/drinks/drinkingglass/shotglass = 30, + /obj/item/reagent_containers/drinks/ice = 9) + + contraband = list(/obj/item/reagent_containers/drinks/tea = 10, + /obj/item/reagent_containers/drinks/bottle/fernet = 5) vend_delay = 15 slogan_list = list("I hope nobody asks me for a bloody cup o' tea...", @@ -120,25 +120,25 @@ item_slot = TRUE vend_delay = 34 category = VENDOR_TYPE_DRINK - products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, - /obj/item/reagent_containers/food/drinks/tea = 25, - /obj/item/reagent_containers/food/drinks/h_chocolate = 25, - /obj/item/reagent_containers/food/drinks/chocolate = 10, - /obj/item/reagent_containers/food/drinks/chicken_soup = 10, - /obj/item/reagent_containers/food/drinks/weightloss = 10, - /obj/item/reagent_containers/food/drinks/mug = 15, - /obj/item/reagent_containers/food/drinks/mug/novelty = 5) - - contraband = list(/obj/item/reagent_containers/food/drinks/ice = 10) - - prices = list(/obj/item/reagent_containers/food/drinks/coffee = 80, - /obj/item/reagent_containers/food/drinks/tea = 80, - /obj/item/reagent_containers/food/drinks/h_chocolate = 64, - /obj/item/reagent_containers/food/drinks/chocolate = 120, - /obj/item/reagent_containers/food/drinks/chicken_soup = 100, - /obj/item/reagent_containers/food/drinks/weightloss = 50, - /obj/item/reagent_containers/food/drinks/mug = 75, - /obj/item/reagent_containers/food/drinks/mug/novelty = 100) + products = list(/obj/item/reagent_containers/drinks/coffee = 25, + /obj/item/reagent_containers/drinks/tea = 25, + /obj/item/reagent_containers/drinks/h_chocolate = 25, + /obj/item/reagent_containers/drinks/chocolate = 10, + /obj/item/reagent_containers/drinks/chicken_soup = 10, + /obj/item/reagent_containers/drinks/weightloss = 10, + /obj/item/reagent_containers/drinks/mug = 15, + /obj/item/reagent_containers/drinks/mug/novelty = 5) + + contraband = list(/obj/item/reagent_containers/drinks/ice = 10) + + prices = list(/obj/item/reagent_containers/drinks/coffee = 80, + /obj/item/reagent_containers/drinks/tea = 80, + /obj/item/reagent_containers/drinks/h_chocolate = 64, + /obj/item/reagent_containers/drinks/chocolate = 120, + /obj/item/reagent_containers/drinks/chicken_soup = 100, + /obj/item/reagent_containers/drinks/weightloss = 50, + /obj/item/reagent_containers/drinks/mug = 75, + /obj/item/reagent_containers/drinks/mug/novelty = 100) refill_canister = /obj/item/vending_refill/coffee @@ -146,7 +146,7 @@ prices = list() /obj/machinery/economy/vending/coffee/item_slot_check(mob/user, obj/item/I) - if(!(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks))) + if(!(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks))) return FALSE if(!..()) return FALSE @@ -158,9 +158,9 @@ /obj/machinery/economy/vending/coffee/do_vend(datum/data/vending_product/R, mob/user) if(..()) return - var/obj/item/reagent_containers/food/drinks/vended = new R.product_path() + var/obj/item/reagent_containers/drinks/vended = new R.product_path() - if(istype(vended, /obj/item/reagent_containers/food/drinks/mug)) + if(istype(vended, /obj/item/reagent_containers/drinks/mug)) var/put_on_turf = TRUE if(user && iscarbon(user) && user.Adjacent(src)) if(user.put_in_hands(vended)) @@ -862,12 +862,12 @@ icon_off = "nutri" icon_panel = "thin_vendor" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/tofu = 24, - /obj/item/reagent_containers/food/drinks/ice = 12, - /obj/item/reagent_containers/food/snacks/candy/candy_corn = 6) + products = list(/obj/item/food/snacks/tofu = 24, + /obj/item/reagent_containers/drinks/ice = 12, + /obj/item/food/snacks/candy/candy_corn = 6) contraband = list(/obj/item/kitchen/knife = 6, - /obj/item/reagent_containers/food/drinks/coffee = 12, + /obj/item/reagent_containers/drinks/coffee = 12, /obj/item/tank/internals/emergency_oxygen = 6, /obj/item/clothing/mask/breath = 6) @@ -885,9 +885,9 @@ "We are simple people, for this is all we eat.", "If there is a person, there is a problem. If there is no person, then there is no problem.") - products = list(/obj/item/reagent_containers/food/drinks/cans/sodawater = 10) + products = list(/obj/item/reagent_containers/drinks/cans/sodawater = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/cola = 7) + contraband = list(/obj/item/reagent_containers/drinks/cans/cola = 7) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/sovietsoda @@ -914,32 +914,32 @@ icon_off = "nutri" icon_panel = "thin_vendor" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 6, - /obj/item/reagent_containers/food/drinks/dry_ramen = 6, - /obj/item/reagent_containers/food/snacks/chips = 6, - /obj/item/reagent_containers/food/snacks/twimsts = 6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/no_raisin = 6, - /obj/item/reagent_containers/food/snacks/pistachios = 6, - /obj/item/reagent_containers/food/snacks/spacetwinkie = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6, - /obj/item/reagent_containers/food/snacks/tastybread = 6, - /obj/item/reagent_containers/food/snacks/stroopwafel = 2) - - contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) - - prices = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 64, - /obj/item/reagent_containers/food/drinks/dry_ramen = 32, - /obj/item/reagent_containers/food/snacks/chips = 64, - /obj/item/reagent_containers/food/snacks/twimsts = 64, - /obj/item/reagent_containers/food/snacks/sosjerky = 64, - /obj/item/reagent_containers/food/snacks/no_raisin = 80, - /obj/item/reagent_containers/food/snacks/pistachios = 80, - /obj/item/reagent_containers/food/snacks/spacetwinkie = 64, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 64, - /obj/item/reagent_containers/food/snacks/tastybread = 80, - /obj/item/reagent_containers/food/snacks/stroopwafel = 100, - /obj/item/reagent_containers/food/snacks/syndicake = 175) //syndicakes are genuinely kind of powerful + products = list(/obj/item/food/snacks/candy/candybar = 6, + /obj/item/reagent_containers/drinks/dry_ramen = 6, + /obj/item/food/snacks/chips = 6, + /obj/item/food/snacks/twimsts = 6, + /obj/item/food/snacks/sosjerky = 6, + /obj/item/food/snacks/no_raisin = 6, + /obj/item/food/snacks/pistachios = 6, + /obj/item/food/snacks/spacetwinkie = 6, + /obj/item/food/snacks/cheesiehonkers = 6, + /obj/item/food/snacks/tastybread = 6, + /obj/item/food/snacks/stroopwafel = 2) + + contraband = list(/obj/item/food/snacks/syndicake = 6) + + prices = list(/obj/item/food/snacks/candy/candybar = 64, + /obj/item/reagent_containers/drinks/dry_ramen = 32, + /obj/item/food/snacks/chips = 64, + /obj/item/food/snacks/twimsts = 64, + /obj/item/food/snacks/sosjerky = 64, + /obj/item/food/snacks/no_raisin = 80, + /obj/item/food/snacks/pistachios = 80, + /obj/item/food/snacks/spacetwinkie = 64, + /obj/item/food/snacks/cheesiehonkers = 64, + /obj/item/food/snacks/tastybread = 80, + /obj/item/food/snacks/stroopwafel = 100, + /obj/item/food/snacks/syndicake = 175) //syndicakes are genuinely kind of powerful refill_canister = /obj/item/vending_refill/snack @@ -957,19 +957,19 @@ icon_state = "chang" icon_lightmask = "chang" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/chinese/chowmein = 6, - /obj/item/reagent_containers/food/snacks/chinese/tao = 6, - /obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball = 6, - /obj/item/reagent_containers/food/snacks/chinese/newdles = 6, - /obj/item/reagent_containers/food/snacks/chinese/rice = 6, - /obj/item/reagent_containers/food/snacks/fortunecookie = 6) - - prices = list(/obj/item/reagent_containers/food/snacks/chinese/chowmein = 125, - /obj/item/reagent_containers/food/snacks/chinese/tao = 125, - /obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball = 125, - /obj/item/reagent_containers/food/snacks/chinese/newdles = 100, - /obj/item/reagent_containers/food/snacks/chinese/rice = 100, - /obj/item/reagent_containers/food/snacks/fortunecookie = 50) + products = list(/obj/item/food/snacks/chinese/chowmein = 6, + /obj/item/food/snacks/chinese/tao = 6, + /obj/item/food/snacks/chinese/sweetsourchickenball = 6, + /obj/item/food/snacks/chinese/newdles = 6, + /obj/item/food/snacks/chinese/rice = 6, + /obj/item/food/snacks/fortunecookie = 6) + + prices = list(/obj/item/food/snacks/chinese/chowmein = 125, + /obj/item/food/snacks/chinese/tao = 125, + /obj/item/food/snacks/chinese/sweetsourchickenball = 125, + /obj/item/food/snacks/chinese/newdles = 100, + /obj/item/food/snacks/chinese/rice = 100, + /obj/item/food/snacks/fortunecookie = 50) refill_canister = /obj/item/vending_refill/chinese @@ -992,22 +992,22 @@ "The best drinks in space.") category = VENDOR_TYPE_DRINK - 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, + products = list(/obj/item/reagent_containers/drinks/cans/cola = 10, + /obj/item/reagent_containers/drinks/cans/space_mountain_wind = 10, + /obj/item/reagent_containers/drinks/cans/dr_gibb = 10, + /obj/item/reagent_containers/drinks/cans/starkist = 10, + /obj/item/reagent_containers/drinks/cans/space_up = 10, + /obj/item/reagent_containers/drinks/cans/grape_juice = 10, /obj/item/reagent_containers/glass/beaker/waterbottle = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5) + contraband = list(/obj/item/reagent_containers/drinks/cans/thirteenloko = 5) - prices = list(/obj/item/reagent_containers/food/drinks/cans/cola = 45, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 50, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 50, - /obj/item/reagent_containers/food/drinks/cans/starkist = 50, - /obj/item/reagent_containers/food/drinks/cans/space_up = 50, - /obj/item/reagent_containers/food/drinks/cans/grape_juice = 50, + prices = list(/obj/item/reagent_containers/drinks/cans/cola = 45, + /obj/item/reagent_containers/drinks/cans/space_mountain_wind = 50, + /obj/item/reagent_containers/drinks/cans/dr_gibb = 50, + /obj/item/reagent_containers/drinks/cans/starkist = 50, + /obj/item/reagent_containers/drinks/cans/space_up = 50, + /obj/item/reagent_containers/drinks/cans/grape_juice = 50, /obj/item/reagent_containers/glass/beaker/waterbottle = 20) refill_canister = /obj/item/vending_refill/cola diff --git a/code/game/machinery/vendors/vending.dm b/code/game/machinery/vendors/vending.dm index 813208452d3c..1faeb0eff3e6 100644 --- a/code/game/machinery/vendors/vending.dm +++ b/code/game/machinery/vendors/vending.dm @@ -552,6 +552,7 @@ /obj/machinery/economy/vending/emag_act(mob/user) emagged = TRUE to_chat(user, "You short out the product lock on [src]") + return TRUE /obj/machinery/economy/vending/ex_act(severity) . = ..() @@ -589,13 +590,13 @@ ui_interact(user) wires.Interact(user) -/obj/machinery/economy/vending/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/vending/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/vending/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - var/estimated_height = 100 + min(length(product_records) * 34, 500) - if(length(prices) > 0) - estimated_height += 100 // to account for the "current user" interface - ui = new(user, src, ui_key, "Vending", name, 470, estimated_height, master_ui, state) + ui = new(user, src, "Vending", name) ui.open() /obj/machinery/economy/vending/ui_data(mob/user) diff --git a/code/game/machinery/vendors/wardrobe_vendors.dm b/code/game/machinery/vendors/wardrobe_vendors.dm index 67530ab7458f..c6c9ebda4a58 100644 --- a/code/game/machinery/vendors/wardrobe_vendors.dm +++ b/code/game/machinery/vendors/wardrobe_vendors.dm @@ -112,7 +112,7 @@ /obj/item/clothing/head/fedora/whitefedora = 1, /obj/item/clothing/gloves/color/black = 2, /obj/item/clothing/gloves/color/latex = 2, - /obj/item/reagent_containers/food/drinks/flask/detflask = 2, + /obj/item/reagent_containers/drinks/flask/detflask = 2, /obj/item/storage/fancy/cigarettes/dromedaryco = 5) prices = list(/obj/item/clothing/under/rank/security/detective = 50, @@ -134,7 +134,7 @@ /obj/item/clothing/head/fedora/whitefedora = 20, /obj/item/clothing/gloves/color/black = 20, /obj/item/clothing/gloves/color/latex = 20, - /obj/item/reagent_containers/food/drinks/flask/detflask = 50, + /obj/item/reagent_containers/drinks/flask/detflask = 50, /obj/item/storage/fancy/cigarettes/dromedaryco = 5) contraband = list(/obj/item/toy/figure/crew/detective = 1) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index a15406306dc8..17ea778639f4 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -3,7 +3,7 @@ var/maxsize = 2 internal_damage_threshold = 50 maint_access = 0 - armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, rad = 0, fire = 100, acid = 100) + armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, rad = 0, fire = 100) destruction_sleep_duration = 4 SECONDS var/am = "d3c2fbcadca903a41161ccc9df9cf948" diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 3694b5256509..1ba971d347f3 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 400 deflect_chance = 20 - armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, rad = 50, fire = 100, acid = 100) + armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, rad = 50, fire = 100, acid = 75) max_temperature = 30000 infra_luminosity = 8 force = 40 diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index e32ec8e3236f..f8f4c97d9d92 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 250 deflect_chance = 5 - armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, rad = 0, fire = 100, acid = 100) + armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, rad = 0, fire = 100, acid = 75) max_temperature = 25000 infra_luminosity = 6 leg_overload_coeff = 2 diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 6559f69ad4d3..f57aa643db78 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -52,7 +52,8 @@ initial_icon = "ares" operation_req_access = list(ACCESS_SECURITY) max_integrity = 450 - armor = list(melee = 50, bullet = 40, laser = 20, energy = 20, bomb = 20, rad = 60, fire = 100, acid = 100) + resistance_flags = LAVA_PROOF | FIRE_PROOF + armor = list(melee = 50, bullet = 40, laser = 20, energy = 20, bomb = 20, rad = 60, fire = 100, acid = 75) max_temperature = 40000 wreckage = /obj/structure/mecha_wreckage/ares max_equip = 5 diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 1d7b748d3443..4711eedb5fd6 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -9,7 +9,7 @@ normal_step_energy_drain = 3 max_integrity = 200 deflect_chance = 30 - armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, RAD = 50, FIRE = 100, ACID = 100) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, RAD = 50, FIRE = 100, ACID = 75) max_temperature = 25000 infra_luminosity = 3 wreckage = /obj/structure/mecha_wreckage/phazon diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 1e9beb7016ed..e6970740a80e 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 150 deflect_chance = 30 - armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, RAD = 0, FIRE = 100, ACID = 100) + armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, RAD = 0, FIRE = 100, ACID = 75) max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_MIME) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 228d4e8c6a1e..4d70c30b9ccc 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -107,7 +107,6 @@ if(patient) temp = "
        \[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\]
        View stats|Eject" return "[output] [temp]" - return /obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list) ..() diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 1272e5a518dd..d0e24c093ba8 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -227,7 +227,7 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay name = "exosuit energy relay" - desc = "An exosuit module that wirelessly drains energy from any available power channel in area. The performance index is quite low." + desc = "An exosuit module that wirelessly drains energy from any available power channel in an area. The performance index barely compensates for movement costs." icon_state = "tesla" origin_tech = "magnets=4;powerstorage=4;engineering=4" energy_drain = 0 @@ -299,7 +299,7 @@ pow_chan = c break if(pow_chan) - var/delta = min(20, chassis.cell.maxcharge-cur_charge) + var/delta = min(60, chassis.cell.maxcharge - cur_charge) chassis.give_power(delta) A.powernet.use_active_power(pow_chan, delta * coeff) @@ -311,14 +311,15 @@ icon_state = "tesla" origin_tech = "plasmatech=2;powerstorage=2;engineering=2" range = MECHA_MELEE + energy_drain = 0 //for allow load fuel without energy var/coeff = 100 var/fuel_type = MAT_PLASMA - var/max_fuel = 150000 + var/max_fuel = 150000 // 45k energy for 75 plasma/ 375 cr. var/fuel_name = "plasma" // Our fuel name as a string var/fuel_amount = 0 var/fuel_per_cycle_idle = 10 - var/fuel_per_cycle_active = 100 - var/power_per_cycle = 30 + var/fuel_per_cycle_active = 500 + var/power_per_cycle = 150 /obj/item/mecha_parts/mecha_equipment/generator/Destroy() @@ -424,10 +425,10 @@ origin_tech = "powerstorage=4;engineering=4" fuel_name = "uranium" // Our fuel name as a string fuel_type = MAT_URANIUM - max_fuel = 50000 + max_fuel = 50000 // around 83k energy for 25 uranium/ 0 cr. fuel_per_cycle_idle = 10 - fuel_per_cycle_active = 30 - power_per_cycle = 50 + fuel_per_cycle_active = 150 + power_per_cycle = 250 var/rad_per_cycle = 30 /obj/item/mecha_parts/mecha_equipment/generator/nuclear/process() diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 675f127937d7..a6a47b5596f9 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -67,9 +67,9 @@ size = 2 /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - equip_cooldown = 8 + equip_cooldown = 0.8 SECONDS name = "\improper CH-PS \"Firedart\" Laser" - icon_state = "mecha_laser" + icon_state = "mecha_firedart" origin_tech = "magnets=3;combat=3;engineering=3" energy_drain = 30 projectile = /obj/item/projectile/beam @@ -77,7 +77,7 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler - equip_cooldown = 8 + equip_cooldown = 0.8 SECONDS name = "\improper CH-DS \"Peacemaker\" disabler" desc = "A weapon for combat exosuits. Shoots basic disablers." icon_state = "mecha_disabler" @@ -87,9 +87,9 @@ harmful = FALSE /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - equip_cooldown = 10 + equip_cooldown = 1 SECONDS name = "\improper CH-LC \"Solaris\" Laser Cannon" - icon_state = "mecha_laser" + icon_state = "mecha_solaris" origin_tech = "magnets=4;combat=4;engineering=3" energy_drain = 60 projectile = /obj/item/projectile/beam/laser/heavylaser @@ -113,10 +113,10 @@ return ..() /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla - equip_cooldown = 35 + equip_cooldown = 3.5 SECONDS name = "\improper P-X Tesla Cannon" - desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine" - icon_state = "mecha_laser" + desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine." + icon_state = "mecha_teslacannon" origin_tech = "materials=4;engineering=4;combat=6;magnets=6" energy_drain = 500 projectile = /obj/item/projectile/energy/tesla_bolt @@ -124,10 +124,10 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray - equip_cooldown = 35 + equip_cooldown = 3.5 SECONDS name = "\improper S-1 X-Ray Projector" desc = "A weapon for combat exosuits. Fires beams of X-Rays that pass through solid matter." - icon_state = "mecha_laser" + icon_state = "mecha_xray" origin_tech = "materials=3;combat=5;magnets=2;syndicate=2" energy_drain = 80 projectile = /obj/item/projectile/beam/xray @@ -140,10 +140,10 @@ projectile_delay = 1 /obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator - equip_cooldown = 35 + equip_cooldown = 3.5 SECONDS name = "\improper ZFI Immolation Beam Gun" desc = "A weapon for combat exosuits. Fires beams of extreme heat that set targets on fire." - icon_state = "mecha_laser" + icon_state = "mecha_immolator" origin_tech = "materials=4;engineering=4;combat=6;magnets=6" energy_drain = 80 projectile = /obj/item/projectile/beam/immolator @@ -151,7 +151,7 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse - equip_cooldown = 30 + equip_cooldown = 3 SECONDS name = "eZ-13 mk2 Heavy Pulse Rifle" icon_state = "mecha_pulse" energy_drain = 120 @@ -181,20 +181,20 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser + equip_cooldown = 0.8 SECONDS name = "\improper PBT \"Pacifier\" Mounted Taser" icon_state = "mecha_taser" origin_tech = "combat=3" energy_drain = 20 - equip_cooldown = 8 projectile = /obj/item/projectile/energy/electrode fire_sound = 'sound/weapons/taser.ogg' size = 1 /obj/item/mecha_parts/mecha_equipment/weapon/honker + equip_cooldown = 15 SECONDS name = "\improper HoNkER BlAsT 5000" icon_state = "mecha_honker" energy_drain = 200 - equip_cooldown = 150 range = MECHA_MELEE | MECHA_RANGED /obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M as obj) @@ -275,10 +275,10 @@ rearm() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine + equip_cooldown = 0.5 SECONDS name = "\improper FNX-66 Carbine" icon_state = "mecha_carbine" origin_tech = "materials=4;combat=4" - equip_cooldown = 5 projectile = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath fire_sound = 'sound/weapons/gunshots/gunshot_rifle.ogg' projectiles = 24 @@ -286,10 +286,10 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced + equip_cooldown = 1.5 SECONDS name = "\improper S.H.H. \"Quietus\" Carbine" fire_sound = 'sound/weapons/gunshots/gunshot_silenced.ogg' icon_state = "mecha_mime" - equip_cooldown = 15 projectile = /obj/item/projectile/bullet/mime/nonlethal projectiles = 20 projectile_energy_cost = 50 @@ -301,10 +301,10 @@ return FALSE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot + equip_cooldown = 2 SECONDS name = "\improper LBX AC 10 \"Scattershot\"" icon_state = "mecha_scatter" origin_tech = "combat=4" - equip_cooldown = 20 projectile = /obj/item/projectile/bullet/midbullet2 fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg' projectiles = 40 @@ -314,10 +314,10 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + equip_cooldown = 1 SECONDS name = "\improper Ultra AC 2" icon_state = "mecha_uac2" origin_tech = "combat=4" - equip_cooldown = 10 projectile = /obj/item/projectile/bullet/weakbullet3 fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg' projectiles = 300 @@ -332,23 +332,26 @@ projectiles_per_shot = 6 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + equip_cooldown = 6 SECONDS name = "\improper SRM-8 Light Missile Rack" - icon_state = "mecha_missilerack" + icon_state = "mecha_missilerack_six" origin_tech = "combat=5;materials=4;engineering=4" projectile = /obj/item/projectile/missile/light fire_sound = 'sound/effects/bang.ogg' - projectiles = 8 + projectiles = 6 projectile_energy_cost = 1000 - equip_cooldown = 60 var/missile_speed = 2 var/missile_range = 30 harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/heavy name = "\improper SRX-13 Heavy Missile Launcher" + icon_state = "mecha_missilerack" projectile = /obj/item/projectile/missile + projectiles = 9 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + equip_cooldown = 6 SECONDS name = "\improper SGL-6 Flashbang Launcher" icon_state = "mecha_grenadelnchr" origin_tech = "combat=4;engineering=4" @@ -357,7 +360,6 @@ projectiles = 6 missile_speed = 1.5 projectile_energy_cost = 800 - equip_cooldown = 60 var/det_time = 20 size=1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/action(target, params) @@ -374,13 +376,13 @@ do_after_cooldown() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve + equip_cooldown = 9 SECONDS name = "\improper SOB-3 Clusterbang Launcher" desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." origin_tech = "combat=4;materials=4" projectiles = 3 projectile = /obj/item/grenade/clusterbuster projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. - equip_cooldown = 90 size=1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload @@ -390,6 +392,7 @@ return//Extra bit of security /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar + equip_cooldown = 2 SECONDS name = "banana mortar" icon_state = "mecha_bananamrtr" projectile = /obj/item/grown/bananapeel @@ -397,7 +400,6 @@ projectiles = 15 missile_speed = 1.5 projectile_energy_cost = 100 - equip_cooldown = 20 harmful = FALSE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/can_attach(obj/mecha/combat/honker/M as obj) @@ -419,6 +421,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar + equip_cooldown = 1 SECONDS name = "mousetrap mortar" icon_state = "mecha_mousetrapmrtr" projectile = /obj/item/assembly/mousetrap @@ -426,7 +429,6 @@ projectiles = 15 missile_speed = 1.5 projectile_energy_cost = 100 - equip_cooldown = 10 harmful = FALSE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M as obj) @@ -448,6 +450,7 @@ do_after_cooldown() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola + equip_cooldown = 1 SECONDS name = "\improper PCMK-6 Bola Launcher" icon_state = "mecha_bola" origin_tech = "combat=4;engineering=4" @@ -457,7 +460,6 @@ missile_speed = 1 missile_range = 30 projectile_energy_cost = 50 - equip_cooldown = 10 harmful = FALSE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola/can_attach(obj/mecha/combat/gygax/M as obj) @@ -478,7 +480,7 @@ do_after_cooldown() /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - equip_cooldown = 10 + equip_cooldown = 1 SECONDS name = "\improper 217-D Heavy Plasma Cutter" desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." icon_state = "mecha_plasmacutter" diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 2e26607e3592..7f1f01500399 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -181,10 +181,13 @@ return ui_interact(user) -/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/mech_bay_power_console/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MechBayConsole", name, 400, 150, master_ui, state) + ui = new(user, src, "MechBayConsole", name) ui.open() /obj/machinery/computer/mech_bay_power_console/ui_act(action, params) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index aca69f9ca08d..4df9d1b4a636 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -314,19 +314,24 @@ return ui_interact(user) -/obj/machinery/mecha_part_fabricator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/mecha_part_fabricator/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mecha_part_fabricator/ui_interact(mob/user, datum/tgui/ui = null) if(!selected_category) selected_category = categories[1] - var/datum/asset/materials_assets = get_asset_datum(/datum/asset/simple/materials) - materials_assets.send(user) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ExosuitFabricator", name, 800, 600) + ui = new(user, src, "ExosuitFabricator", name) ui.open() ui.set_autoupdate(FALSE) +/obj/machinery/mecha_part_fabricator/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/materials) + ) + /obj/machinery/mecha_part_fabricator/ui_data(mob/user) var/list/data = list() data["syncing"] = syncing @@ -453,7 +458,7 @@ var/datum/material/M = materials.materials[id] if(!M || !M.amount) return - var/num_sheets = input(usr, "How many sheets do you want to withdraw?", "Withdrawing [M.name]") as num|null + var/num_sheets = tgui_input_number(usr, "How many sheets do you want to withdraw?", "Withdrawing [M.name]", max_value = round(M.amount / 2000)) if(isnull(num_sheets) || num_sheets <= 0) return materials.retrieve_sheets(num_sheets, id) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2fb25b4111fa..3af23927e211 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -7,12 +7,12 @@ density = TRUE //Dense. To raise the heat. opacity = TRUE ///opaque. Menacing. anchored = TRUE //no pulling around. - resistance_flags = FIRE_PROOF | ACID_PROOF + resistance_flags = FIRE_PROOF layer = MOB_LAYER //icon draw layer infra_luminosity = 15 //byond implementation is bugged. force = 5 max_integrity = 300 //max_integrity is base health - armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, rad = 0, fire = 100, acid = 100) + armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, rad = 0, fire = 100, acid = 75) bubble_icon = "machine" var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5) var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming. @@ -355,7 +355,7 @@ if(phasing && get_charge() >= phasing_energy_drain) if(can_move < world.time) . = FALSE // We lie to mech code and say we didn't get to move, because we want to handle power usage + cooldown ourself - flick("phazon-phase", src) + flick("[initial_icon]-phase", src) forceMove(get_step(src, direction)) use_power(phasing_energy_drain) playsound(src, stepsound, 40, 1) @@ -614,7 +614,7 @@ /obj/mecha/handle_atom_del(atom/A) if(A == occupant) occupant = null - icon_state = initial(icon_state)+"-open" + icon_state = reset_icon(icon_state)+"-open" setDir(dir_in) if(A in trackers) trackers -= A @@ -777,14 +777,13 @@ return user.visible_message("[user] opens [P] and spends some quality time customising [src].") - - name = P.new_name - desc = P.new_desc - initial_icon = P.new_icon - reset_icon() - - user.drop_item() - qdel(P) + if(do_after_once(user, 3 SECONDS, target = src)) + name = P.new_name + desc = P.new_desc + initial_icon = P.new_icon + reset_icon() + user.drop_item() + qdel(P) else if(istype(W, /obj/item/mecha_modkit)) if(occupant) @@ -900,6 +899,7 @@ playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) dna = null operation_req_access = list() + return TRUE @@ -950,7 +950,7 @@ to_chat(user, "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, "ACCESS DENIED.") return AI.aiRestorePowerRoutine = 0//So the AI initially has power. AI.control_disabled = TRUE @@ -959,7 +959,7 @@ occupant = null AI.controlled_mech = null AI.remote_control = null - icon_state = initial(icon_state)+"-open" + icon_state = reset_icon(icon_state)+"-open" 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.") @@ -993,7 +993,7 @@ AI.aiRestorePowerRoutine = 0 AI.forceMove(src) occupant = AI - icon_state = initial(icon_state) + icon_state = reset_icon(icon_state) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!hasInternalDamage()) SEND_SOUND(occupant, sound(nominalsound, volume = 50)) @@ -1304,7 +1304,7 @@ 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 = initial(icon_state)+"-open" + icon_state = reset_icon(icon_state)+"-open" dir = dir_in if(L && L.client) @@ -1413,7 +1413,7 @@ if(initial_icon) icon_state = initial_icon else - icon_state = initial(icon_state) + icon_state = reset_icon(icon_state) return icon_state ////////////////////////////////////////// @@ -1536,6 +1536,7 @@ AI = occupant occupant = null var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI) + WR.icon_state = "[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 diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 44a20b00e4bf..72c9272cb1bd 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -15,10 +15,13 @@ /obj/machinery/computer/mecha/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/mecha/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/mecha/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/mecha/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MechaControlConsole", name, 420, 500, master_ui, state) + ui = new(user, src, "MechaControlConsole", name) ui.open() /obj/machinery/computer/mecha/ui_data(mob/user) diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 98039289aa80..79e4670bf6d7 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -287,7 +287,7 @@ if(href_list["rfreq"]) if(usr != occupant) return var/new_frequency = (radio.frequency + afilter.getNum("rfreq")) - if((radio.frequency < PUBLIC_LOW_FREQ || radio.frequency > PUBLIC_HIGH_FREQ)) + if(radio.frequency < PUBLIC_LOW_FREQ || radio.frequency > PUBLIC_HIGH_FREQ) new_frequency = sanitize_frequency(new_frequency) radio.set_frequency(new_frequency) send_byjax(occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 7c2b0ff3f7c4..66ad6d2f8649 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -78,9 +78,9 @@ initial_icon = "firefighter" max_temperature = 65000 max_integrity = 250 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF lights_power = 7 - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, RAD = 70, FIRE = 100, ACID = 100) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, RAD = 70, FIRE = 100) max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index a46670fc1dcb..75a8d868a9c9 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -13,7 +13,7 @@ . = ..() if(can_buckle && has_buckled_mobs()) if(length(buckled_mobs) > 1) - var/unbuckled = input(user, "Who do you wish to unbuckle?", "Unbuckle Who?") as null|mob in buckled_mobs + var/unbuckled = tgui_input_list(user, "Who do you wish to unbuckle?", "Unbuckle Who?", buckled_mobs) if(user_unbuckle_mob(unbuckled,user)) return TRUE else @@ -33,8 +33,8 @@ . = ..() if(can_buckle && has_buckled_mobs() && Adjacent(user)) // attack_robot is called on all ranges, so the Adjacent check is needed if(length(buckled_mobs) > 1) - var/unbuckled = input(user, "Who do you wish to unbuckle?", "Unbuckle Who?") as null|mob in buckled_mobs - if(user_unbuckle_mob(unbuckled,user)) + var/unbuckled = tgui_input_list(user, "Who do you wish to unbuckle?", "Unbuckle Who?", buckled_mobs) + if(user_unbuckle_mob(unbuckled, user)) return TRUE else if(user_unbuckle_mob(buckled_mobs[1], user)) diff --git a/code/game/objects/cleaning.dm b/code/game/objects/cleaning.dm index f1ba88a04416..b65980d1daa9 100644 --- a/code/game/objects/cleaning.dm +++ b/code/game/objects/cleaning.dm @@ -46,6 +46,7 @@ var/obj/effect/decal/cleanable/C = locate() in src qdel(C) clean_blood() + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT) return TRUE /atom/proc/can_clean() //For determining if a cleaning object can actually remove decals diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index 8d1eb45036e5..86c1c0c2c730 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -24,7 +24,6 @@ START_PROCESSING(SSobj, src) - /obj/effect/acid/Destroy() STOP_PROCESSING(SSobj, src) target = null @@ -67,6 +66,14 @@ /obj/effect/acid/alien var/target_strength = 30 +/obj/effect/acid/alien/Initialize(mapload, acid_pwr, acid_amt) + . = ..() + var/turf/cleanable_turf = get_turf(src) + RegisterSignal(cleanable_turf, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(remove_acid)) + +/obj/effect/acid/alien/proc/remove_acid(datum/source) + SIGNAL_HANDLER + qdel(src) /obj/effect/acid/alien/process() . = ..() diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index b4b65c935bc3..f3a3eab83209 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -232,23 +232,40 @@ icon = 'icons/obj/projectiles.dmi' icon_state = "bluespace" density = TRUE + ///Do we teleport everything around us to a beacon when despawning? var/mass_teleporting = TRUE + ///Do we have a smaller mob and object grab range, and 4 seconds of mercy? + var/supermatter_spawned = FALSE + ///What is the range we will grab mobs to teleport from + var/mob_range = 4 + ///What is the range we will grab objects to teleport from + var/other_range = 4 + ///Used by supermatter anomalies. If fully active, behaves like normal. Otherwise, will not teleport people, to keep them being telefragged into the SM + var/fully_active = TRUE aSignal = /obj/item/assembly/signaler/anomaly/bluespace -/obj/effect/anomaly/bluespace/Initialize(mapload, new_lifespan, drops_core = TRUE, _mass_teleporting = TRUE) +/obj/effect/anomaly/bluespace/Initialize(mapload, new_lifespan, drops_core = TRUE, _mass_teleporting = TRUE, _supermatter_spawned = FALSE) . = ..() mass_teleporting = _mass_teleporting + supermatter_spawned = _supermatter_spawned + if(supermatter_spawned) + mob_range = 1 + other_range = 3 + fully_active = FALSE + addtimer(VARSET_CALLBACK(src, fully_active, TRUE), 4 SECONDS) /obj/effect/anomaly/bluespace/anomalyEffect() + if(!fully_active) + return ..() - for(var/mob/living/M in range(4, src)) - do_teleport(M, locate(M.x, M.y, M.z), 4, do_effect = drops_core) - for(var/obj/O in range (4, src)) + for(var/mob/living/M in range(mob_range, src)) + do_teleport(M, locate(M.x, M.y, M.z), 4, do_effect = drops_core || supermatter_spawned) + for(var/obj/O in range (other_range, src)) if(!O.anchored && O.invisibility == 0 && prob(50)) - do_teleport(O, locate(O.x, O.y, O.z), 6, do_effect = drops_core ) + do_teleport(O, locate(O.x, O.y, O.z), 6, do_effect = drops_core || supermatter_spawned) /obj/effect/anomaly/bluespace/Bumped(atom/movable/AM) - if(isliving(AM)) + if(isliving(AM) && fully_active) do_teleport(AM, locate(AM.x, AM.y, AM.z), 8) /obj/effect/anomaly/bluespace/detonate() diff --git a/code/game/objects/effects/decals/Cleanable/misc_cleanables.dm b/code/game/objects/effects/decals/Cleanable/misc_cleanables.dm index 0076975c7f02..6e025ccb1525 100644 --- a/code/game/objects/effects/decals/Cleanable/misc_cleanables.dm +++ b/code/game/objects/effects/decals/Cleanable/misc_cleanables.dm @@ -77,6 +77,11 @@ icon = 'icons/effects/effects.dmi' icon_state = "flour" +/obj/effect/decal/cleanable/flour/nanofrost + name = "nanofrost residue" + desc = "Residue left behind from a nanofrost detonation. Perhaps there was a fire here?" + color = "#B2FFFF" + /obj/effect/decal/cleanable/flour/foam name = "Fire fighting foam" desc = "It's foam." diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index fc2a414eddda..f07d0243c183 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -13,14 +13,14 @@ var/expand = 1 var/metal = 0 -/obj/effect/particle_effect/foam/New(loc, ismetal=0) +/obj/effect/particle_effect/foam/New(loc, ismetal = FALSE) ..(loc) icon_state = "[ismetal ? "m":""]foam" if(!ismetal && reagents) color = mix_color_from_reagents(reagents.reagent_list) metal = ismetal - playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3) - spawn(3 + metal*3) + playsound(src, 'sound/effects/bubbles2.ogg', 80, TRUE, -3) + spawn(3 + metal * 3) process() spawn(120) STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 0c0520bc876e..cc88b207b857 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -171,7 +171,7 @@ for(var/obj/item/Item in T) Item.extinguish() -/datum/effect_system/smoke_spread/freezing/set_up(amount = 5, only_cardinals = FALSE, source, desired_direction, blasting = 0) +/datum/effect_system/smoke_spread/freezing/set_up(amount = 5, only_cardinals = FALSE, source, desired_direction, blasting = FALSE) ..() blast = blasting diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index dd1736f2d9eb..5c7c1254b8d6 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -45,6 +45,17 @@ /datum/effect_system/spark_spread effect_type = /obj/effect/particle_effect/sparks +/datum/effect_system/spark_spread/generate_effect() + var/spark_budget = GLOBAL_SPARK_LIMIT - GLOB.sparks_active + if(spark_budget <= 0) + return + GLOB.sparks_active++ + return ..() + +/datum/effect_system/spark_spread/decrement_total_effect() + GLOB.sparks_active-- + return ..() + ////////////////////////////////// //////SPARKLE FIREWORKS ///////////////////////////////// diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 7c2f9d7a28b1..be73848e2e7e 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -24,6 +24,22 @@ AM.water_act(life, COLD_WATER_TEMPERATURE, src) return ..() +/obj/effect/particle_effect/water/proc/extinguish_move(turf/target) + for(var/counter in 1 to 5) + if(!step_towards(src, target) && counter != 1) + return + var/turf/current_turf = get_turf(src) + reagents.reaction(current_turf) + for(var/atom/atm in current_turf) + reagents.reaction(atm) + if(isliving(atm)) //For extinguishing mobs on fire + var/mob/living/M = atm + M.ExtinguishMob() + + if(current_turf == target) + return + sleep(2) + ///////////////////////////////////////////// // GENERIC STEAM SPREAD SYSTEM diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 2ca15c2fe7a6..1d74ec9bb0d5 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -99,7 +99,7 @@ reagents.add_reagent_list(scoop_reagents) /obj/effect/decal/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks)) + if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks)) scoop(I, user) else if(issimulatedturf(loc)) I.melee_attack_chain(user, loc) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 9482984df034..b08762c94cbd 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -223,9 +223,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp /obj/effect/landmark/spawner/nuclear_bomb/death_squad name = "Death Squad Nuclear Bomb" -/obj/effect/landmark/spawner/teleport_scroll - name = "Teleport-Scroll" - /obj/effect/landmark/spawner/nuke_code name = "nukecode" diff --git a/code/game/objects/effects/meteors.dm b/code/game/objects/effects/meteors.dm index ec519dfeca5f..edb05feb8e93 100644 --- a/code/game/objects/effects/meteors.dm +++ b/code/game/objects/effects/meteors.dm @@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits = 2 heavy = TRUE meteorsound = 'sound/effects/blobattack.ogg' - meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/human, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/appendix) + meteordrop = list(/obj/item/food/snacks/meat/human, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/appendix) var/meteorgibs = /obj/effect/gibspawner/generic /obj/effect/meteor/meaty/make_debris() @@ -323,7 +323,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops //Meaty Ore Xeno edition /obj/effect/meteor/meaty/xeno color = "#5EFF00" - meteordrop = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat) + meteordrop = list(/obj/item/food/snacks/monstermeat/xenomeat) meteorgibs = /obj/effect/gibspawner/xeno /obj/effect/meteor/meaty/xeno/Initialize(mapload, target) @@ -342,7 +342,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits = 10 hitpwr = EXPLODE_DEVASTATE meteorsound = 'sound/effects/blobattack.ogg' - meteordrop = list(/obj/item/reagent_containers/food/snacks/meat) + meteordrop = list(/obj/item/food/snacks/meat) var/meteorgibs = /obj/effect/gibspawner/generic /obj/effect/meteor/goreops/make_debris() @@ -370,7 +370,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits = 10 heavy = TRUE dropamt = 1 - meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/reagent_containers/food/snacks/grown/pumpkin) + meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/food/snacks/grown/pumpkin) /obj/effect/meteor/pumpkin/Initialize(mapload, target) . = ..() diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index bc80f56dbbba..e669ab95d370 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -24,6 +24,7 @@ var/effect_cooldown = 0 ///Whether or not portal use will cause sparks var/create_sparks = TRUE + var/teleports_this_cycle = 0 /obj/effect/portal/New(loc, turf/_target, obj/creation_object = null, lifespan = 300, mob/creation_mob = null, create_sparks = TRUE) ..() @@ -36,6 +37,7 @@ else creation_obj_data = list(null, null) creation_mob_ckey = creation_mob?.ckey + START_PROCESSING(SSobj, src) if(lifespan > 0) QDEL_IN(src, lifespan) @@ -48,8 +50,12 @@ target = null if(create_sparks) do_sparks(5, 0, loc) + STOP_PROCESSING(SSobj, src) return ..() +/obj/effect/portal/process() + teleports_this_cycle = 0 + /obj/effect/portal/singularity_pull() return @@ -132,6 +138,8 @@ return TRUE /obj/effect/portal/proc/attempt_teleport(atom/movable/victim, turf/destination, variance = 0, force_teleport = TRUE) + if(teleports_this_cycle >= MAX_ALLOWED_TELEPORTS_PER_PROCESS) + return var/use_effects = world.time >= effect_cooldown var/effect = null // Will result in the default effect being used if(!use_effects) @@ -141,6 +149,7 @@ invalid_teleport() return FALSE effect_cooldown = world.time + EFFECT_COOLDOWN + teleports_this_cycle++ return TRUE /obj/effect/portal/proc/invalid_teleport() diff --git a/code/game/objects/effects/snowcloud.dm b/code/game/objects/effects/snowcloud.dm index 6760b5833f51..266e4314bb7f 100644 --- a/code/game/objects/effects/snowcloud.dm +++ b/code/game/objects/effects/snowcloud.dm @@ -131,7 +131,7 @@ . = ..() if(!. && isliving(target)) var/mob/living/M = target - M.adjustStaminaLoss(stamina_damage) + M.apply_damage(stamina_damage, STAMINA) playsound(target, 'sound/weapons/tap.ogg', 50, TRUE) qdel(src) diff --git a/code/game/objects/effects/spawners/airlock_spawner.dm b/code/game/objects/effects/spawners/airlock_spawner.dm index 12191d0c2977..4c868311746c 100644 --- a/code/game/objects/effects/spawners/airlock_spawner.dm +++ b/code/game/objects/effects/spawners/airlock_spawner.dm @@ -232,6 +232,14 @@ This spawner places pipe leading up to the interior door, you will need to finis icon_state = "1x2_S_to_N" tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/s_to_n/long/square/engineer + req_access_txt = ACCESS_ENGINE_EQUIP + door_name = "engineering external access" + +/obj/effect/spawner/airlock/s_to_n/long/engineer + req_access_txt = ACCESS_ENGINE_EQUIP + door_name = "engineering external access" + /obj/effect/spawner/airlock/e_to_w/long name = "long airlock spawner (interior east, exterior west)" icon_state = "1x2_E_to_W" diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index d8600cbfb6c2..5ef0a837cad7 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -136,6 +136,7 @@ /obj/item/caution = 10, /obj/item/mod/construction/broken_core = 4, /obj/effect/spawner/random_spawners/mod/maint = 10, + /obj/item/melee/knuckleduster = 10, ////////////////CONTRABAND STUFF////////////////// /obj/item/grenade/clown_grenade = 3, /obj/item/grenade/smokebomb = 3, @@ -165,6 +166,7 @@ /obj/item/storage/pill_bottle/fakedeath = 2, /obj/item/clothing/suit/jacket/syndicatebomber = 5, /obj/item/clothing/suit/storage/iaa/blackjacket/armored = 2, // More armored than bomber and has pockets, so it is rarer + /obj/item/melee/knuckleduster/syndie = 2, "" = 61 // This should be a decently high number for chances where no loot will spawn ) @@ -421,20 +423,20 @@ lootcount = 3 lootdoubles = FALSE var/soups = list( - /obj/item/reagent_containers/food/snacks/soup/beetsoup, - /obj/item/reagent_containers/food/snacks/soup/stew, - /obj/item/reagent_containers/food/snacks/soup/hotchili, - /obj/item/reagent_containers/food/snacks/soup/nettlesoup, - /obj/item/reagent_containers/food/snacks/soup/meatballsoup) + /obj/item/food/snacks/soup/beetsoup, + /obj/item/food/snacks/soup/stew, + /obj/item/food/snacks/soup/hotchili, + /obj/item/food/snacks/soup/nettlesoup, + /obj/item/food/snacks/soup/meatballsoup) var/salads = list( - /obj/item/reagent_containers/food/snacks/salad/herb, - /obj/item/reagent_containers/food/snacks/salad/valid, - /obj/item/reagent_containers/food/snacks/salad/aesir) + /obj/item/food/snacks/salad/herb, + /obj/item/food/snacks/salad/valid, + /obj/item/food/snacks/salad/aesir) var/mains = list( - /obj/item/reagent_containers/food/snacks/enchiladas, - /obj/item/reagent_containers/food/snacks/stewedsoymeat, - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/burger/superbite) + /obj/item/food/snacks/enchiladas, + /obj/item/food/snacks/stewedsoymeat, + /obj/item/food/snacks/burger/bigbite, + /obj/item/food/snacks/burger/superbite) /obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload) loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index 850e12c3ef50..9fe0686aefdb 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -266,7 +266,7 @@ spawn_inside = null result = list(/datum/nothing = 1, /obj/item/wrench = 1, - /obj/item/reagent_containers/food/snacks/syndicake = 1, + /obj/item/food/snacks/syndicake = 1, /obj/item/coin/antagtoken/syndicate = 1, /obj/item/gun/projectile/automatic/pistol = 1) @@ -345,7 +345,7 @@ /obj/item/melee/energy/sword/saber = 1, /obj/item/gun/energy/kinetic_accelerator/crossbow = 1, /obj/item/gun/projectile/revolver = 1, - /obj/item/clothing/gloves/color/yellow/power = 1, + /obj/item/bio_chip_implanter/shock = 1, /obj/item/butcher_chainsaw = 1, /obj/item/bee_briefcase = 1, /obj/item/fireaxe/energized = 1, diff --git a/code/game/objects/effects/temporary_visuals/misc_visuals.dm b/code/game/objects/effects/temporary_visuals/misc_visuals.dm index ee3702ecf9ec..2e69b3713d97 100644 --- a/code/game/objects/effects/temporary_visuals/misc_visuals.dm +++ b/code/game/objects/effects/temporary_visuals/misc_visuals.dm @@ -355,6 +355,14 @@ icon_state = "shieldsparkles" duration = 6 +/obj/effect/temp_visual/impact_effect/chaos + icon_state = "shieldsparkles" + duration = 6 + +/obj/effect/temp_visual/impact_effect/chaos/Initialize(mapload) + . = ..() + icon_state = pick("shieldsparkles", "purplesparkles", "bloodsparkles", "snowcloud") + /obj/effect/temp_visual/bsg_kaboom name = "bluespace explosion" icon = 'icons/effects/96x96.dmi' @@ -498,3 +506,9 @@ if(new_filter) animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1) animate(offset = 0, time = 10 SECONDS) + +/obj/effect/temp_visual/warning + name = "warning" + icon = 'icons/effects/96x96.dmi' + icon_state = "warning" + duration = 3 SECONDS diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 0103d787999b..e2bc73d59fa8 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -36,8 +36,6 @@ var/distance = get_dist(epicenter, T) var/will_affect = FALSE - if(distance < 0) - distance = 0 if(distance < heavy_range) will_affect = T.emp_act(1) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d6ba038494ce..a095a7342f9e 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -132,6 +132,8 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons var/belt_icon = null /// Holder var for the item outline filter, null when no outline filter on the item. var/outline_filter + /// In tiles, how far this weapon can reach; 1 for adjacent, which is default + var/reach = 1 /obj/item/New() ..() @@ -253,10 +255,6 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons MO.desc = "Looks like this was \an [src] some time ago." ..() -/obj/item/afterattack(atom/target, mob/user, proximity, params) - SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity, params) - ..() - /obj/item/attack_hand(mob/user as mob, pickupfireoverride = FALSE) if(!user) return 0 if(ishuman(user)) @@ -397,7 +395,7 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons return ..() /obj/item/proc/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, owner, hitby, damage, attack_type) + prob(final_block_chance) + var/signal_result = (SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, owner, hitby, damage, attack_type) & COMPONENT_BLOCK_SUCCESSFUL) + prob(final_block_chance) if(signal_result != 0) if(hit_reaction_chance >= 0) //Normally used for non blocking hit reactions, but also used for displaying block message on actual blocks owner.visible_message("[owner] blocks [attack_text] with [src]!") @@ -779,6 +777,14 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons outline_color = COLOR_THEME_CLOCKWORK //if you want free gbp go fix the fact that clockwork's tooltip css is glass' if("glass") outline_color = COLOR_THEME_GLASS + // SS220 ADDITION - START + if("vaporwave") + outline_color = COLOR_THEME_VAPORWAVE + if("detective") + outline_color = COLOR_THEME_DETECTIVE + if("trasenknox") + outline_color = COLOR_THEME_TRASENKNOX + // SS220 ADDITION - END else //this should never happen, hopefully outline_color = COLOR_WHITE if(color) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 220ff274970e..2c9f8c47b2b1 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -204,11 +204,8 @@ to_chat(usr, "Error! Please notify administration.") return area_created var/list/turf/turfs = res - var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", "", MAX_NAME_LEN)) - if(!str || !length(str)) //cancel - return area_created - if(length(str) > 50) - to_chat(usr, "The given name is too long. The area remains undefined.") + var/str = tgui_input_text(usr, "New area name:", "Blueprint Editing", max_length = MAX_NAME_LEN, encode = FALSE) + if(!str || !length(str)) // Cancel return area_created var/area/A = new A.name = str @@ -239,11 +236,8 @@ /obj/item/areaeditor/proc/edit_area() var/area/A = get_area() var/prevname = "[sanitize(A.name)]" - var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", prevname, MAX_NAME_LEN)) - if(!str || !length(str) || str==prevname) //cancel - return - if(length(str) > 50) - to_chat(usr, "The given name is too long. The area's name is unchanged.") + var/str = tgui_input_text(usr, "New area name:", "Blueprint Editing", prevname, MAX_NAME_LEN, encode = FALSE) + if(!str || !length(str) || str == prevname) // Cancel return set_area_machinery_title(A,str,prevname) A.name = str diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 1264cf0daa90..903956bae376 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -73,7 +73,6 @@ dat += "
        " var/datum/browser/popup = new(user, "crayon", name, 300, 500) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() dat = "" @@ -307,8 +306,8 @@ ..() update_icon() -/obj/item/toy/crayon/spraycan/attack_self(mob/living/user as mob) - var/choice = input(user,"Spraycan options") in list("Toggle Cap","Change Drawing","Change Color") +/obj/item/toy/crayon/spraycan/attack_self(mob/living/user) + var/choice = tgui_input_list(user, "Do you want to...", "Spraycan Options", list("Toggle Cap","Change Drawing", "Change Color")) switch(choice) if("Toggle Cap") to_chat(user, "You [capped ? "remove" : "replace"] the cap of [src].") diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 7b73551245c0..1f5ed9131e16 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -48,10 +48,13 @@ /obj/item/aicard/attack_self(mob/user) ui_interact(user) -/obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/aicard/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/aicard/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AICard", "[name]", 600, 394, master_ui, state) + ui = new(user, src, "AICard", "[name]") ui.open() /obj/item/aicard/ui_data(mob/user) @@ -95,8 +98,8 @@ if(flush) // Don't doublewipe. to_chat(user, "You are already wiping this AI!") return - var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No") - if(confirm == "Yes" && (ui_status(user, GLOB.inventory_state) == STATUS_INTERACTIVE)) // And make doubly sure they want to wipe (three total clicks) + var/confirm = tgui_alert(user, "Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", list("Yes", "No")) + if(confirm == "Yes" && (ui_status(user, GLOB.inventory_state) == UI_INTERACTIVE)) // And make doubly sure they want to wipe (three total clicks) msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].", ATKLOG_FEW) add_attack_logs(user, AI, "Wiped with [src].") INVOKE_ASYNC(src, PROC_REF(wipe_ai)) @@ -114,6 +117,16 @@ return TRUE +/obj/item/aicard/examine(mob/user) + . = ..() + var/mob/living/silicon/ai/AI = locate() in src + if(!AI) + return + + if(!GetComponent(/datum/component/ducttape) && AI.builtInCamera) + . += "You see a small [AI]'s camera staring at you." + . += "You can use a tape roll on [src] to tape the camera lens." + /obj/item/aicard/proc/wipe_ai() var/mob/living/silicon/ai/AI = locate() in src flush = TRUE @@ -128,12 +141,20 @@ var/mob/living/silicon/ai/AI = locate() in src if(!AI) return + + if(AI.cracked_camera) + return // we dont crack camera if its already cracked + QDEL_NULL(AI.builtInCamera) /obj/item/aicard/remove_tape() var/mob/living/silicon/ai/AI = locate() in src if(!AI) return + + if(AI.cracked_camera) + return // we dont fix camera if malf AI cracked it + AI.builtInCamera = new /obj/machinery/camera/portable(AI) AI.builtInCamera.c_tag = AI.name AI.builtInCamera.network = list("SS13") diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 342cc2981cf3..d4f2a95c3efd 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -34,8 +34,11 @@ /obj/item/camera_bug/attack_self(mob/user as mob) ui_interact(user) -/obj/item/camera_bug/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - integrated_console.ui_interact(user, ui_key, ui, force_open, master_ui, state) +/obj/item/camera_bug/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/camera_bug/ui_interact(mob/user, datum/tgui/ui = null) + integrated_console.ui_interact(user, ui) /obj/item/camera_bug/ert @@ -59,10 +62,11 @@ . = ..() link_to_camera(the_bug) AddComponent(/datum/component/sticky) + ADD_TRAIT(src, TRAIT_NO_THROWN_MESSAGE, ROUNDSTART_TRAIT) /obj/item/wall_bug/Destroy() QDEL_NULL(camera) - . = ..() + return ..() /obj/item/wall_bug/examine(mob/user) . = ..() diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 95d379d04790..dd3e7c82d2c0 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -105,8 +105,9 @@ if(M.flash_eyes(1, 1)) M.AdjustConfused(power) revolution_conversion(M, user) - M.drop_l_hand() - M.drop_r_hand() + if(!M.absorb_stun(0)) + M.drop_l_hand() + M.drop_r_hand() visible_message("[user] blinds [M] with [src]!") to_chat(user, "You blind [M] with [src]!") to_chat(M, "[user] blinds you with [src]!") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 62ac92441115..2aafdc9e9af8 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -202,6 +202,8 @@ on = FALSE force = initial(force) damtype = initial(damtype) + hitsound = "swing_hit" + attack_verb = list() update_brightness() /obj/item/flashlight/flare/attack_self(mob/user) @@ -220,6 +222,8 @@ if(produce_heat) force = on_damage damtype = "fire" + hitsound = 'sound/items/welder.ogg' + attack_verb = list("burnt", "singed") START_PROCESSING(SSobj, src) /obj/item/flashlight/flare/decompile_act(obj/item/matter_decompiler/C, mob/user) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 93cce7b9b6d8..2515fbca7d81 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -76,7 +76,7 @@ if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL) . += "Ambient radiation levels nearing critical level." if(RAD_LEVEL_CRITICAL + 1 to INFINITY) - . += "Ambient radiation levels above critical level!" + . += "Ambient radiation levels above critical level!" . += "The last radiation amount detected was [last_tick_amount]" @@ -140,10 +140,10 @@ if(!M.radiation) to_chat(user, "[bicon(src)] Radiation levels within normal boundaries.") else - to_chat(user, "[bicon(src)] Subject is irradiated. Radiation levels: [M.radiation] rads.") + to_chat(user, "[bicon(src)] Subject is irradiated. Radiation levels: [M.radiation] rads.") if(rad_strength) - to_chat(user, "[bicon(src)] Target contains radioactive contamination. Radioactive strength: [rad_strength] rads.") + to_chat(user, "[bicon(src)] Target contains radioactive contamination. Radioactive strength: [rad_strength] rads.") else to_chat(user, "[bicon(src)] Target is free of radioactive contamination.") @@ -181,6 +181,7 @@ return to_chat(user, "You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.") emagged = TRUE + return TRUE diff --git a/code/game/objects/items/devices/handheld_defib.dm b/code/game/objects/items/devices/handheld_defib.dm index bae2fde5e883..d04f8365efb1 100644 --- a/code/game/objects/items/devices/handheld_defib.dm +++ b/code/game/objects/items/devices/handheld_defib.dm @@ -24,11 +24,13 @@ desc += " The screen only shows the word KILL flashing over and over." if(user) to_chat(user, "you short out the safeties on [src]") + return TRUE else emagged = FALSE desc = "Used to restart stopped hearts." if(user) to_chat(user, "You restore the safeties on [src]") + return TRUE /obj/item/handheld_defibrillator/attack(mob/living/carbon/human/H, mob/user) if(!istype(H)) @@ -47,7 +49,7 @@ add_attack_logs(user, H, "emag-defibbed with [src]") playsound(user.loc, "sound/weapons/egloves.ogg", 75, 1) H.KnockDown(knockdown_duration) - H.adjustStaminaLoss(60) + H.apply_damage(60, STAMINA) SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) ADD_TRAIT(H, TRAIT_WAS_BATONNED, user_UID) cooldown = TRUE diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 74c9a68c1a9f..29f0d28cf468 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -147,6 +147,7 @@ emagged = !emagged playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) + return TRUE /obj/item/lightreplacer/attack_self(mob/user) for(var/obj/machinery/light/target in user.loc) @@ -227,17 +228,18 @@ else return 0 -/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity) +/obj/item/lightreplacer/afterattack(atom/target_turf, mob/U, proximity) . = ..() if(!proximity && !bluespace_toggle) return - if(!isturf(T)) + var/turf/replace_turf = get_turf(target_turf) + if(!istype(replace_turf)) return - if(get_dist(src, T) >= (U.client.maxview() + 2)) // To prevent people from using it over cameras + if(get_dist(src, target_turf) >= (U.client.maxview() + 2)) // To prevent people from using it over cameras return var/used = FALSE - for(var/atom/A in T) + for(var/atom/A in replace_turf) if(!CanUse(U)) break used = TRUE diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 3e5dd8c00782..72e5e67d539d 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -56,10 +56,7 @@ to_chat(user, "[src] needs to recharge!") return - var/message = input(user, "Shout a message:", "Megaphone") as text|null - if(!message) - return - message = sanitize(copytext_char(message, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + var/message = tgui_input_text(user, "Shout a message:", "Megaphone") if(!message) return message = capitalize(message) @@ -107,4 +104,5 @@ to_chat(user, "You short out [src]'s dampener circuits.") emagged = TRUE span = "reallybig userdanger" // really obvious, but also really loud + return TRUE diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 58b5efe55960..88f5e6a9e422 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -260,7 +260,7 @@ looking_for_personality = 1 GLOB.paiController.findPAI(src, usr) if(href_list["wipe"]) - var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No") + var/confirm = tgui_alert(usr, "Are you certain you wish to delete the current personality? This action cannot be undone.", "Personality Wipe", list("No", "Yes")) if(confirm == "Yes") for(var/mob/M in src) to_chat(M, "

        You feel yourself slipping away from reality.

        ") @@ -281,7 +281,7 @@ if(2) radio.ToggleReception() if(href_list["setlaws"]) - var/newlaws = sanitize(copytext_char(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) as message,1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + var/newlaws = tgui_input_text(usr, "Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) if(newlaws) pai.pai_laws = newlaws to_chat(pai, "Your supplemental directives have been updated. Your new directives are:") diff --git a/code/game/objects/items/devices/painter/floor_painter.dm b/code/game/objects/items/devices/painter/floor_painter.dm index 83b7ee5f43e0..6d796aebc37d 100644 --- a/code/game/objects/items/devices/painter/floor_painter.dm +++ b/code/game/objects/items/devices/painter/floor_painter.dm @@ -21,6 +21,23 @@ "darkred", "darkredcorners", "darkredfull", "darkblue", "darkbluecorners", "darkbluefull", "darkgreen", "darkgreencorners", "darkgreenfull", "darkyellow", "darkyellowcorners", "darkyellowfull", "darkbrown", "darkbrowncorners", "darkbrownfull") + // This is a double-list. First entry is the type key, second is the direction, with the final value being the b64 of the icon + var/static/list/lookup_cache = list() + +/datum/painter/floor/New(obj/item/painter/parent_painter) + . = ..() + if(!length(lookup_cache)) + for(var/style in allowed_states) + if(!(style in lookup_cache)) + lookup_cache += style + lookup_cache[style] = list() + + for(var/dir in GLOB.alldirs) + var/icon/floor_icon = icon('modular_ss220/aesthetics/floors/icons/floors.dmi', style, dir) // SS220 EDIT + // These indexes have to be strings otherwise it treats it as a list index not a map lookup index + lookup_cache[style] += "[dir]" + lookup_cache[style]["[dir]"] = icon2base64(floor_icon) + /datum/painter/floor/paint_atom(atom/target, mob/user) if(!istype(target, /turf/simulated/floor/plasteel)) to_chat(user, "[holder] can only be used on station flooring.") @@ -41,10 +58,13 @@ return ui_interact(user) -/datum/painter/floor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/painter/floor/ui_state(mob/user) + return GLOB.inventory_state + +/datum/painter/floor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "FloorPainter", module_name, 405, 470, master_ui, state) + ui = new(user, src, "FloorPainter", module_name) // Disable automatic updates, because: // 1) we are the only user of the item, and don't expect to observe external changes // 2) generating and sending the icon each tick is a bit expensive, and creates small but noticeable lag @@ -59,8 +79,7 @@ data["directionsPreview"] = list() for(var/dir in GLOB.alldirs) - var/icon/floor_icon = icon('icons/turf/floors.dmi', floor_state, dir) - data["directionsPreview"][dir2text(dir)] = icon2base64(floor_icon) + data["directionsPreview"][dir2text(dir)] = lookup_cache[floor_state]["[dir]"] return data @@ -69,8 +88,7 @@ var/list/data = list() data["allStylesPreview"] = list() for(var/style in allowed_states) - var/icon/floor_icon = icon('icons/turf/floors.dmi', style, SOUTH) - data["allStylesPreview"][style] = icon2base64(floor_icon) + data["allStylesPreview"][style] = lookup_cache[style]["[SOUTH]"] return data @@ -97,4 +115,4 @@ if(dir != 0) floor_dir = dir - SStgui.update_uis(src) + return TRUE diff --git a/code/game/objects/items/devices/painter/painter.dm b/code/game/objects/items/devices/painter/painter.dm index 601606b035ba..fd1b2c86f800 100644 --- a/code/game/objects/items/devices/painter/painter.dm +++ b/code/game/objects/items/devices/painter/painter.dm @@ -114,7 +114,7 @@ /obj/item/painter/suicide_act(mob/user) user.visible_message("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!") playsound(src, usesound, 50, TRUE) - var/obj/item/organ/internal/lungs/L = user.get_organ_slot("lungs") + var/obj/item/organ/internal/lungs/L = user.get_organ_slot("lungs") // not going to use an organ datum here, would be too easy for slime people to throw up their brains var/turf/T = get_turf(user) if(!do_mob(user, user, 3 SECONDS) || !L) return SHAME diff --git a/code/game/objects/items/devices/painter/pipe_painter.dm b/code/game/objects/items/devices/painter/pipe_painter.dm index fb254955d414..879533899fb6 100644 --- a/code/game/objects/items/devices/painter/pipe_painter.dm +++ b/code/game/objects/items/devices/painter/pipe_painter.dm @@ -1,7 +1,7 @@ /datum/painter/pipe module_name = "pipe painter" module_state = "pipe_painter" - var/static/list/blacklisted_pipes = list(/obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/machinery/atmospherics/pipe/simple/insulated) + var/static/list/blacklisted_pipes = list(/obj/machinery/atmospherics/pipe/simple/heat_exchanging) var/static/list/modes = list() /datum/painter/pipe/New() diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 88c5e23d89ca..c6c5facc872e 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -21,6 +21,7 @@ emagged = TRUE syndicate = TRUE to_chat(user, "The This beacon now only be locked on to by emagged teleporters!") + return TRUE /obj/item/radio/beacon/hear_talk() return @@ -98,6 +99,7 @@ bundle = new bundle(user.loc) to_chat(user, "Welcome to [station_name()], [bundle_name]!") user.drop_item() + SSblackbox.record_feedback("tally", "syndicate_bundle_pick", 1, "[bundle]") qdel(src) user.put_in_hands(bundle) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 556c0de2ee3e..d8448a6bf671 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -89,10 +89,13 @@ M.Weaken(10 SECONDS) // This should honestly just proxy the UI to the internal signaler -/obj/item/electropack/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/electropack/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/electropack/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Electropack", name, 360, 150, master_ui, state) + ui = new(user, src, "Electropack", name) ui.open() /obj/item/electropack/ui_data(mob/user) diff --git a/code/game/objects/items/devices/radio/radio_objects.dm b/code/game/objects/items/devices/radio/radio_objects.dm index c93f9e190896..64a5c5c3bfa9 100644 --- a/code/game/objects/items/devices/radio/radio_objects.dm +++ b/code/game/objects/items/devices/radio/radio_objects.dm @@ -131,13 +131,13 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) return ui_interact(user) -/obj/item/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/radio/ui_state(mob/user) + return GLOB.default_state + +/obj/item/radio/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - var/list/schannels = list_secure_channels(user) - var/list/ichannels = list_internal_channels(user) - var/calc_height = 150 + (schannels.len * 20) + (ichannels.len * 10) - ui = new(user, src, ui_key, "Radio", name, 400, calc_height, master_ui, state) + ui = new(user, src, "Radio", name) ui.open() /obj/item/radio/ui_data(mob/user) @@ -162,16 +162,16 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) return . = TRUE switch(action) - if("frequency") + if("frequency") // Available to both headsets and non-headset radios if(freqlock) return - var/tune = params["tune"] - var/adjust = text2num(params["adjust"]) + var/tune = isnum(params["tune"]) ? params["tune"] : text2num(params["tune"]) + var/adjust = isnum(params["adjust"]) ? params["adjust"] : text2num(params["adjust"]) if(tune == "reset") tune = initial(frequency) else if(adjust) tune = frequency + adjust * 10 - else if(text2num(tune) != null) + else if(!isnull(tune)) tune = tune * 10 else . = FALSE @@ -180,17 +180,17 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) usr << browse(null, "window=radio") if(.) set_frequency(sanitize_frequency(tune, freerange)) - if("ichannel") // change primary frequency to an internal channel authorized by access + if("ichannel") // Change primary frequency to an internal channel authorized by access, for non-headset radios only if(freqlock) return - var/freq = params["ichannel"] - if(has_channel_access(usr, freq)) - set_frequency(text2num(freq)) + var/freq = isnum(params["ichannel"]) ? params["ichannel"] : text2num(params["ichannel"]) + if(has_channel_access(usr, num2text(freq))) + set_frequency(freq) if("listen") listening = !listening if("broadcast") broadcasting = !broadcasting - if("channel") + if("channel") // For keyed channels on headset radios only var/channel = params["channel"] if(!(channel in channels)) return @@ -198,8 +198,7 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) channels[channel] &= ~FREQ_LISTENING else channels[channel] |= FREQ_LISTENING - if("loudspeaker") - // Toggle loudspeaker mode, AKA everyone around you hearing your radio. + if("loudspeaker") // Toggle loudspeaker mode, AKA everyone around you hearing your radio. if(has_loudspeaker) loudspeaker = !loudspeaker if(loudspeaker) @@ -513,18 +512,6 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) broadcast_message(tcm) qdel(tcm) // Delete the message datum -/* -/obj/item/radio/proc/accept_rad(obj/item/radio/R as obj, message) - - if((R.frequency == frequency && message)) - return 1 - else if - - else - return null - return -*/ - /obj/item/radio/proc/receive_range(freq, level) // check if this radio can receive on the given frequency, and if so, @@ -657,8 +644,8 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) /obj/item/radio/borg/syndicate/ui_status(mob/user, datum/ui_state/state) . = ..() - if(. == STATUS_UPDATE && istype(user, /mob/living/silicon/robot/syndicate)) - . = STATUS_INTERACTIVE + if(. == UI_UPDATE && istype(user, /mob/living/silicon/robot/syndicate)) + . = UI_INTERACTIVE /obj/item/radio/borg/Destroy() myborg = null diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 880ad5990959..db5796fd9beb 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -3,6 +3,7 @@ CONTAINS: T-RAY DETECTIVE SCANNER HEALTH ANALYZER +ROBOT ANALYZER GAS ANALYZER PLANT ANALYZER REAGENT SCANNER @@ -73,7 +74,7 @@ REAGENT SCANNER if(H.reagents.reagent_list.len) msgs += "Subject contains the following reagents:" for(var/datum/reagent/R in H.reagents.reagent_list) - msgs += "[R.volume]u of [R.name][R.overdosed ? " - OVERDOSING" : ".
        "]" + msgs += "[R.volume]u of [R.name][R.overdosed ? " - OVERDOSING" : ".
        "]" else msgs += "Subject contains no reagents." if(H.reagents.addiction_list.len) @@ -114,9 +115,9 @@ REAGENT SCANNER if((HAS_TRAIT(user, TRAIT_CLUMSY) || user.getBrainLoss() >= 60) && prob(50)) var/list/msgs = list() user.visible_message("[user] analyzes the floor's vitals!", "You stupidly try to analyze the floor's vitals!") - msgs += "Analyzing results for The floor:\n\tOverall status: Healthy" + msgs += "Analyzing results for The floor:\nOverall status: Healthy" msgs += "Key: Suffocation/Toxin/Burn/Brute" - msgs += "\tDamage specifics: 0 - 0 - 0 - 0" + msgs += "Damage specifics: 0 - 0 - 0 - 0" msgs += "Body temperature: ???" to_chat(user, chat_box_healthscan(msgs.Join("
        "))) return @@ -133,17 +134,17 @@ REAGENT SCANNER if(issimple_animal(M)) // no box here, keep it simple. if(M.stat == DEAD) - to_chat(user, "Analyzing Results for [M]:\n\t Overall Status: Dead") + to_chat(user, "Analyzing Results for [M]:\nOverall Status: Dead") else - to_chat(user, "Analyzing Results for [M]:\n\t Overall Status: [round(M.health / M.maxHealth * 100, 0.1)]% Healthy") + to_chat(user, "Analyzing Results for [M]:\nOverall Status: [round(M.health / M.maxHealth * 100, 0.1)]% Healthy") to_chat(user, "\t Damage Specifics: [M.maxHealth - M.health]") return if(!ishuman(M) || ismachineperson(M)) //these sensors are designed for organic life - msgs += "Analyzing Results for ERROR:\n\t Overall Status: ERROR" - msgs += "\t Key: Suffocation/Toxin/Burns/Brute" - msgs += "\t Damage Specifics: ? - ? - ? - ?" + msgs += "Analyzing Results for ERROR:\nOverall Status: ERROR" + msgs += "Key: Suffocation/Toxin/Burns/Brute" + msgs += "Damage Specifics: ? - ? - ? - ?" msgs += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)" msgs += "Warning: Blood Level ERROR: --% --cl.Type: ERROR" msgs += "Subject's pulse: -- bpm." @@ -168,9 +169,9 @@ REAGENT SCANNER else status = "[H.health]% Healthy" - msgs += "Analyzing Results for [H]:\n\t Overall Status: [status]" - msgs += "\t Key: Suffocation/Toxin/Burns/Brute" - msgs += "\t Damage Specifics: [OX] - [TX] - [BU] - [BR]" + msgs += "Analyzing Results for [H]:\nOverall Status: [status]" + msgs += "Key: Suffocation/Toxin/Burns/Brute" + msgs += "Damage Specifics: [OX] - [TX] - [BU] - [BR]" if(H.timeofdeath && (H.stat == DEAD || (HAS_TRAIT(H, TRAIT_FAKEDEATH)))) msgs += "Time of Death: [station_time_timestamp("hh:mm:ss", H.timeofdeath)]" var/tdelta = round(world.time - H.timeofdeath) @@ -184,7 +185,7 @@ REAGENT SCANNER if(length(damaged)) msgs += "Localized Damage, Brute/Burn:" for(var/obj/item/organ/external/org in damaged) - msgs += "\t\t[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]" + msgs += "[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]" if(advanced) msgs.Add(get_chemscan_results(user, H)) @@ -194,17 +195,17 @@ REAGENT SCANNER continue // Snowflaking heart problems, because they are special (and common). if(istype(D, /datum/disease/critical)) - msgs += "Warning: Subject is undergoing [D.name].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" + msgs += "Warning: Subject is undergoing [D.name].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" continue - msgs += "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" + msgs += "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" if(H.undergoing_cardiac_arrest()) var/obj/item/organ/internal/heart/heart = H.get_int_organ(/obj/item/organ/internal/heart) if(heart && !(heart.status & ORGAN_DEAD)) - msgs += "The patient's heart has stopped.\nPossible Cure: Electric Shock" + msgs += "The patient's heart has stopped.\nPossible Cure: Electric Shock" else if(heart && (heart.status & ORGAN_DEAD)) - msgs += "Subject's heart is necrotic." + msgs += "Subject's heart is necrotic." else if(!heart) - msgs += "Subject has no heart." + msgs += "Subject has no heart." if(H.getStaminaLoss()) msgs += "Subject appears to be suffering from fatigue." @@ -268,7 +269,7 @@ REAGENT SCANNER var/implant_detect for(var/obj/item/organ/internal/O in H.internal_organs) - if(O.is_robotic()) + if(O.is_robotic() && !O.stealth_level) implant_detect += "[H.name] is modified with a [O.name].
        " if(implant_detect) msgs += "Detected cybernetic modifications:" @@ -328,6 +329,131 @@ REAGENT SCANNER origin_tech = "magnets=2;biotech=2" usesound = 'sound/items/deconstruct.ogg' +/obj/item/robotanalyzer + name = "cyborg analyzer" + desc = "A hand-held scanner able to diagnose robotic injuries." + icon = 'icons/obj/device.dmi' + icon_state = "robotanalyzer" + item_state = "analyzer" + flags = CONDUCT + slot_flags = SLOT_FLAG_BELT + throwforce = 3 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 5 + throw_range = 10 + origin_tech = "magnets=1;biotech=1" + +/obj/item/robotanalyzer/attack(mob/living/M, mob/living/user) + if((HAS_TRAIT(user, TRAIT_CLUMSY) || user.getBrainLoss() >= 60) && prob(50)) + var/list/msgs = list() + user.visible_message("[user] has analyzed the floor's components!", "You try to analyze the floor's vitals!") + msgs += "Analyzing Results for The floor:\n\t Overall Status: Unknown" + msgs += "\t Damage Specifics: [0]/Key: Burns/Brute" + msgs += "Chassis Temperature: ???" + to_chat(user, chat_box_healthscan(msgs.Join("
        "))) + return + + user.visible_message("[user] has analyzed [M]'s components.", "You have analyzed [M]'s components.") + robot_healthscan(user, M) + add_fingerprint(user) + +/proc/robot_healthscan(mob/user, mob/living/M) + var/scan_type + var/list/msgs = list() + if(isrobot(M)) + scan_type = "robot" + else if(ishuman(M)) + scan_type = "prosthetics" + else if(isAI(M)) + scan_type = "ai" + else + to_chat(user, "You can't analyze non-robotic things!") + return + + switch(scan_type) + if("robot") + var/burn = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() + var/brute = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() + msgs += "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health]% functional"]" + msgs += "\t Key: Electronics/Brute" + msgs += "\t Damage Specifics: [burn] - [brute]" + if(M.timeofdeath && M.stat == DEAD) + msgs += "Time of disable: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]" + var/mob/living/silicon/robot/H = M + var/list/damaged = H.get_damaged_components(TRUE, TRUE, TRUE) // Get all except the missing ones + var/list/missing = H.get_missing_components() + msgs += "Localized Damage:" + if(!LAZYLEN(damaged) && !LAZYLEN(missing)) + msgs += "\t Components are OK." + else + if(LAZYLEN(damaged)) + for(var/datum/robot_component/org in damaged) + msgs += text("\t []: [][] - [] - [] - []", \ + capitalize(org.name), \ + (org.is_destroyed()) ? "DESTROYED " :"",\ + (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ + (org.brute_damage > 0) ? "[org.brute_damage]" :0, \ + (org.toggled) ? "Toggled ON" : "Toggled OFF",\ + (org.powered) ? "Power ON" : "Power OFF") + if(LAZYLEN(missing)) + for(var/datum/robot_component/org in missing) + msgs += "\t [capitalize(org.name)]: MISSING" + + if(H.emagged && prob(5)) + msgs += "\t ERROR: INTERNAL SYSTEMS COMPROMISED" + + if("prosthetics") + var/mob/living/carbon/human/H = M + var/is_ipc = ismachineperson(H) + msgs += "Analyzing Results for [M]: [is_ipc ? "\n\t Overall Status: [H.stat > 1 ? "fully disabled" : "[H.health]% functional"]
        " : "
        "]" //for the record im sorry + msgs += "\t Key: Electronics/Brute" + msgs += "External prosthetics:" + var/organ_found + if(LAZYLEN(H.internal_organs)) + for(var/obj/item/organ/external/E in H.bodyparts) + if(!E.is_robotic() || (is_ipc && (E.get_damage() == 0))) //Non-IPCs have their cybernetics show up in the scan, even if undamaged + continue + organ_found = TRUE + msgs += "[E.name]: [E.brute_dam] [E.burn_dam]" + if(!organ_found) + msgs += "No prosthetics located." + msgs += "
        " + msgs += "Internal prosthetics:" + organ_found = null + if(LAZYLEN(H.internal_organs)) + for(var/obj/item/organ/internal/O in H.internal_organs) + if(!O.is_robotic() || istype(O, /obj/item/organ/internal/cyberimp) || O.stealth_level > 1) + continue + organ_found = TRUE + msgs += "[capitalize(O.name)]: [O.damage]" + if(!organ_found) + msgs += "No prosthetics located." + msgs += "
        " + msgs += "Cybernetic implants:" + organ_found = null + if(LAZYLEN(H.internal_organs)) + for(var/obj/item/organ/internal/cyberimp/I in H.internal_organs) + if(I.stealth_level > 1) + continue + organ_found = TRUE + msgs += "[capitalize(I.name)]: [I.crit_fail ? "CRITICAL FAILURE" : I.damage]" + if(!organ_found) + msgs += "No implants located." + msgs += "
        " + if(is_ipc) + msgs.Add(get_chemscan_results(user, H)) + msgs += "Subject temperature: [round(H.bodytemperature-T0C, 0.01)]°C ([round(H.bodytemperature*1.8-459.67, 0.01)]°F)" + if("ai") + var/mob/living/silicon/ai/A = M + var/burn = A.getFireLoss() > 50 ? "[A.getFireLoss()]" : A.getFireLoss() + var/brute = A.getBruteLoss() > 50 ? "[A.getBruteLoss()]" : A.getBruteLoss() + msgs += "Analyzing Results for [M]:\n\t Overall Status: [A.stat > 1 ? "fully disabled" : "[A.health]% functional"]" + msgs += "\t Key: Electronics/Brute" + msgs += "\t Damage Specifics: [burn] - [brute]" + + to_chat(user, chat_box_healthscan(msgs.Join("
        "))) + /obj/item/analyzer name = "analyzer" desc = "A hand-held environmental scanner which reports current gas levels." diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index 8f96b7d2f244..cff8ec351798 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -19,5 +19,8 @@ /obj/item/sensor_device/attack_self(mob/user as mob) ui_interact(user) -/obj/item/sensor_device/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) - crew_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/item/sensor_device/ui_state(mob/user) + return GLOB.default_state + +/obj/item/sensor_device/ui_interact(mob/user, datum/tgui/ui = null) + crew_monitor.ui_interact(user, ui) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 1b9e637beb10..40fbaec9bc81 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -210,14 +210,10 @@ atom_say("End of recording.") break atom_say("[mytape.storedinfo[i]]") - if(length(mytape.storedinfo) < i + 1) + if(length(mytape.storedinfo) < i + 1 || playsleepseconds > 1.4 SECONDS) playsleepseconds = 1 SECONDS else playsleepseconds = (mytape.timestamp[i + 1] - mytape.timestamp[i]) SECONDS - if(playsleepseconds > 1.4 SECONDS) - sleep(10) - atom_say("Skipping [playsleepseconds / 10] seconds of silence.") - playsleepseconds = 1 SECONDS i++ stop(TRUE) @@ -321,6 +317,7 @@ to_chat(user, "You erase the data from [src].") used_capacity = 0 + remaining_capacity = max_capacity storedinfo.Cut() timestamp.Cut() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 0c653374304d..0282857720a0 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -20,7 +20,7 @@ icon_state = "[initial(icon_state)]" /obj/item/jammer/attack_self(mob/user) - to_chat(user, "You [active ? "deactivate [src]. It goes quiet with a small click." : "activate [src]. It starts to hum softly."] ") + to_chat(user, "You [active ? "deactivate [src]. It goes quiet with a small click." : "activate [src]. It starts to hum softly."]") active = !active update_icon(UPDATE_ICON_STATE) if(active) @@ -145,7 +145,7 @@ 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 + else if(!EMP_D && !(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 @@ -278,8 +278,8 @@ to_chat(user, "The injector is empty!") return used = TRUE // Set this BEFORE the popup to prevent people using the injector more than once. - var/choice = alert(user, "The injector is still unused. Do you wish to use it?", "Fireproofing injector", "Yes", "No") - if(choice == "No") + var/choice = tgui_alert(user, "The injector is still unused. Do you wish to use it?", "Fireproofing injector", list("Yes", "No")) + if(choice != "Yes") to_chat(user, "You decide against using [src].") used = FALSE return @@ -369,7 +369,7 @@ M.EyeBlind(15 SECONDS) to_chat(M, "and you can't see a goddamn thing!") if(5) - M.adjustStaminaLoss(40) + M.apply_damage(40, STAMINA) to_chat(M, "and a wave of tiredness washes over you!") else to_chat(M, "but as soon as it arrives, it fades.") @@ -410,8 +410,11 @@ w_class = WEIGHT_CLASS_TINY var/datum/ui_module/appearance_changer/appearance_changer_holder -/obj/item/handheld_mirror/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - appearance_changer_holder.ui_interact(user, ui_key, ui, force_open, master_ui, state = GLOB.hands_state) +/obj/item/handheld_mirror/ui_state(mob/user) + return GLOB.hands_state + +/obj/item/handheld_mirror/ui_interact(mob/user, datum/tgui/ui = null) + appearance_changer_holder.ui_interact(user, ui) /obj/item/handheld_mirror/attack_self(mob/user) if(ishuman(user)) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index e2cfcaf54744..994ff550b1ef 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -88,10 +88,13 @@ /obj/item/transfer_valve/attack_self(mob/user) ui_interact(user) -/obj/item/transfer_valve/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/transfer_valve/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/transfer_valve/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TransferValve", name, 460, 320, master_ui, state) + ui = new(user, src, "TransferValve", name) ui.open() /obj/item/transfer_valve/ui_data(mob/user) @@ -157,7 +160,7 @@ icon_state = "valve_1" else icon_state = "valve" - + /obj/item/transfer_valve/update_overlays() . = ..() underlays.Cut() diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 4b8adfc8e58d..1208b3d54781 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -195,10 +195,13 @@ GLOBAL_LIST_EMPTY(world_uplinks) return TRUE return FALSE -/obj/item/uplink/hidden/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/uplink/hidden/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/uplink/hidden/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Uplink", name, 900, 600, master_ui, state) + ui = new(user, src, "Uplink", name) ui.open() /obj/item/uplink/hidden/ui_data(mob/user) diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 88129529ca6c..b7a80d4cf7a5 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -29,6 +29,7 @@ if(!emagged) to_chat(user, "You overload \the [src]'s voice synthesizer.") emagged = TRUE + return TRUE #undef USE_COOLDOWN diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 06d1149ed2b9..e7afcbc4a9bd 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -234,10 +234,11 @@ var/list/show_flag = list("EXIT" = null) + sortList(flag) - var/input_flag = input(user, "Choose a flag to disguise as.", "Choose a flag.") in show_flag - - if(user && (src in user.contents)) + var/input_flag = tgui_input_list(user, "Choose a flag to disguise this as.", "Choose a flag.", show_flag) + if(!input_flag) + return + if(user && (src in user.GetAllContents())) var/obj/item/flag/chosen_flag = flag[input_flag] if(chosen_flag && !used) diff --git a/code/game/objects/items/granters/action_granters/summon_cheese.dm b/code/game/objects/items/granters/action_granters/summon_cheese.dm index c115a46b73cf..62645a34def7 100644 --- a/code/game/objects/items/granters/action_granters/summon_cheese.dm +++ b/code/game/objects/items/granters/action_granters/summon_cheese.dm @@ -22,7 +22,7 @@ /obj/item/book/granter/spell/summon_cheese/recoil(mob/living/user) to_chat(user, "[src] turns into a wedge of cheese!") - var/obj/item/reagent_containers/food/snacks/cheesewedge/presliced/book_cheese = new + var/obj/item/food/snacks/cheesewedge/presliced/book_cheese = new user.drop_item() user.put_in_hands(book_cheese) qdel(src) @@ -35,7 +35,7 @@ overlay = null action_icon_state = "cheese_wedge" action_background_icon_state = "bg_spell" - summon_type = list(/obj/item/reagent_containers/food/snacks/cheesewedge/presliced) + summon_type = list(/obj/item/food/snacks/cheesewedge/presliced) summon_amt = 9 aoe_range = 1 summon_ignore_prev_spawn_points = TRUE diff --git a/code/game/objects/items/mixing_bowl.dm b/code/game/objects/items/mixing_bowl.dm index 996ab847b0ce..4b81d55974a2 100644 --- a/code/game/objects/items/mixing_bowl.dm +++ b/code/game/objects/items/mixing_bowl.dm @@ -39,7 +39,7 @@ return add_item(S, user) else return add_item(I, user) - else if(is_type_in_list(I, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment))) + else if(is_type_in_list(I, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/drinks, /obj/item/reagent_containers/condiment))) if(!I.reagents) return 1 for(var/datum/reagent/R in I.reagents.reagent_list) @@ -68,20 +68,20 @@ var/list/items_measures_p = new for(var/obj/O in contents) var/display_name = O.name - if(istype(O,/obj/item/reagent_containers/food/snacks/egg)) + if(istype(O,/obj/item/food/snacks/egg)) items_measures[display_name] = "egg" items_measures_p[display_name] = "eggs" - if(istype(O,/obj/item/reagent_containers/food/snacks/tofu)) + if(istype(O,/obj/item/food/snacks/tofu)) items_measures[display_name] = "tofu chunk" items_measures_p[display_name] = "tofu chunks" - if(istype(O,/obj/item/reagent_containers/food/snacks/meat)) //any meat + if(istype(O,/obj/item/food/snacks/meat)) //any meat items_measures[display_name] = "slab of meat" items_measures_p[display_name] = "slabs of meat" - if(istype(O,/obj/item/reagent_containers/food/snacks/donkpocket)) + if(istype(O,/obj/item/food/snacks/donkpocket)) display_name = "Turnovers" items_measures[display_name] = "turnover" items_measures_p[display_name] = "turnovers" - if(istype(O,/obj/item/reagent_containers/food/snacks/carpmeat)) + if(istype(O,/obj/item/food/snacks/carpmeat)) items_measures[display_name] = "fillet of meat" items_measures_p[display_name] = "fillets of meat" items_counts[display_name]++ @@ -165,7 +165,7 @@ if(id) amount += reagents.get_reagent_amount(id) reagents.clear_reagents() - var/obj/item/reagent_containers/food/snacks/badrecipe/mysteryfood = new(get_turf(source)) + var/obj/item/food/snacks/badrecipe/mysteryfood = new(get_turf(source)) mysteryfood.reagents.add_reagent("carbon", amount) mysteryfood.reagents.add_reagent("????", amount / 10) make_dirty(75) diff --git a/code/game/objects/items/mountable_frames/mountables.dm b/code/game/objects/items/mountable_frames/mountables.dm index 6abe277b4d9d..c850bb5b6e9d 100644 --- a/code/game/objects/items/mountable_frames/mountables.dm +++ b/code/game/objects/items/mountable_frames/mountables.dm @@ -1,5 +1,8 @@ /obj/item/mounted - var/list/buildon_types = list(/turf/simulated/wall) + var/list/buildon_types = list( + /turf/simulated/mineral/ancient, + /turf/simulated/wall + ) /obj/item/mounted/afterattack(atom/A, mob/user, proximity_flag) diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index bea4ba78d010..c32d3397a1c3 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -25,11 +25,11 @@ new T(loc) qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/random_drink +/obj/item/reagent_containers/drinks/bottle/random_drink name = "unlabelled drink" icon = 'icons/obj/drinks.dmi' -/obj/item/reagent_containers/food/drinks/bottle/random_drink/Initialize(mapload) +/obj/item/reagent_containers/drinks/bottle/random_drink/Initialize(mapload) . = ..() var/list/possible_drinks = GLOB.drinks.Copy() if(prob(50)) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index a00156fcb763..f5b296027281 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -427,3 +427,4 @@ else to_chat(user, "You slide the emag into the dataport on [src] and short out the safeties.") sabotaged = TRUE + return TRUE diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index ae7181aba82b..80d1c2da512b 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -80,6 +80,10 @@ R.module?.rebuild_modules() return TRUE +/*******************/ +/**** COMMON ****/ +/*******************/ + /obj/item/borg/upgrade/reset name = "cyborg module reset board" desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the cyborg." @@ -100,7 +104,10 @@ var/heldname = "default name" /obj/item/borg/upgrade/rename/attack_self(mob/user) - heldname = stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN) + var/new_heldname = tgui_input_text(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN) + if(!new_heldname) + return + heldname = new_heldname /obj/item/borg/upgrade/rename/do_install(mob/living/silicon/robot/R) if(!R.allow_rename) @@ -136,59 +143,6 @@ return TRUE - -/obj/item/borg/upgrade/vtec - name = "robotic VTEC Module" - desc = "Used to activate a cyborg's VTEC systems, increasing their speed." - icon_state = "cyborg_upgrade2" - require_module = TRUE - origin_tech = "engineering=4;materials=5;programming=4" - -/obj/item/borg/upgrade/vtec/do_install(mob/living/silicon/robot/R) - for(var/obj/item/borg/upgrade/vtec/U in R.contents) - to_chat(R, "A VTEC unit is already installed!") - to_chat(usr, "There's no room for another VTEC unit!") - return - - for(var/obj/item/borg/upgrade/floorbuffer/U in R.contents) - if(R.floorbuffer) - R.floorbuffer = FALSE - R.speed -= U.buffer_speed - - for(var/datum/action/innate/robot_magpulse/magpulse in R.module_actions) - if(magpulse.active) - REMOVE_TRAIT(R, TRAIT_MAGPULSE, "innate boots") - to_chat(R, "You turn your magboots off.") - R.speed -= magpulse.slowdown_active - magpulse.button_icon_state = initial(magpulse.button_icon_state) - magpulse.active = FALSE - - R.speed = -1 // Gotta go fast. - - return TRUE - -/obj/item/borg/upgrade/disablercooler - name = "cyborg rapid disabler cooling module" - desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate." - icon_state = "cyborg_upgrade3" - origin_tech = "engineering=4;powerstorage=4;combat=4" - require_module = TRUE - module_type = /obj/item/robot_module/security - -/obj/item/borg/upgrade/disablercooler/do_install(mob/living/silicon/robot/R) - var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.module.modules - if(!T) - to_chat(usr, "There's no disabler in this unit!") - return - if(T.charge_delay <= 2) - to_chat(R, "A cooling unit is already installed!") - to_chat(usr, "There's no room for another cooling unit!") - return - - T.charge_delay = max(2 , T.charge_delay - 4) - - return TRUE - /obj/item/borg/upgrade/thrusters name = "ion thruster upgrade" desc = "A energy-operated thruster system for cyborgs." @@ -203,100 +157,6 @@ R.ionpulse = TRUE return TRUE -/obj/item/borg/upgrade/ddrill - name = "mining cyborg diamond drill" - desc = "A diamond drill replacement for the mining cyborg's standard drill." - icon_state = "cyborg_upgrade3" - origin_tech = "engineering=4;materials=5" - require_module = TRUE - module_type = /obj/item/robot_module/miner - items_to_replace = list( - /obj/item/pickaxe/drill/cyborg = /obj/item/pickaxe/drill/cyborg/diamond - ) - -/obj/item/borg/upgrade/soh - name = "mining cyborg satchel of holding" - desc = "A satchel of holding replacement for mining cyborg's ore satchel module." - icon_state = "cyborg_upgrade3" - origin_tech = "engineering=4;materials=4;bluespace=4" - require_module = TRUE - module_type = /obj/item/robot_module/miner - items_to_replace = list( - /obj/item/storage/bag/ore/cyborg = /obj/item/storage/bag/ore/holding - ) - -/obj/item/borg/upgrade/abductor_engi - name = "engineering cyborg abductor upgrade" - desc = "An experimental upgrade that replaces an engineering cyborg's tools with the abductor versions." - icon_state = "abductor_mod" - origin_tech = "engineering=6;materials=6;abductor=3" - require_module = TRUE - module_type = /obj/item/robot_module/engineering - items_to_replace = list( - /obj/item/weldingtool = /obj/item/weldingtool/abductor, - /obj/item/wrench = /obj/item/wrench/abductor, - /obj/item/screwdriver = /obj/item/screwdriver/abductor, - /obj/item/crowbar = /obj/item/crowbar/abductor, - /obj/item/wirecutters = /obj/item/wirecutters/abductor, - /obj/item/multitool = /obj/item/multitool/abductor - ) - special_rechargables = list( - /obj/item/weldingtool/abductor - ) - -/obj/item/borg/upgrade/abductor_medi - name = "medical cyborg abductor upgrade" - desc = "An experimental upgrade that replaces a medical cyborg's tools with the abductor versions." - icon_state = "abductor_mod" - origin_tech = "biotech=6;materials=6;abductor=2" - require_module = TRUE - module_type = /obj/item/robot_module/medical - items_to_replace = list( - /obj/item/scalpel/laser/laser1 = /obj/item/scalpel/laser/laser3, // No abductor laser scalpel, so next best thing. - /obj/item/hemostat = /obj/item/hemostat/alien, - /obj/item/retractor = /obj/item/retractor/alien, - /obj/item/bonegel = /obj/item/bonegel/alien, - /obj/item/FixOVein = /obj/item/FixOVein/alien, - /obj/item/bonesetter = /obj/item/bonesetter/alien, - /obj/item/circular_saw = /obj/item/circular_saw/alien, - /obj/item/surgicaldrill = /obj/item/surgicaldrill/alien, - /obj/item/reagent_containers/borghypo = /obj/item/reagent_containers/borghypo/abductor - ) - -/obj/item/borg/upgrade/abductor_medi/after_install(mob/living/silicon/robot/R) - . = ..() - if(!R.emagged) // Emagged Mediborgs that are upgraded need the evil chems. - return - for(var/obj/item/reagent_containers/borghypo/F in R.module.modules) - F.emag_act() - -/obj/item/borg/upgrade/syndicate - name = "safety override module" - desc = "Unlocks the hidden, deadlier functions of a cyborg." - icon_state = "cyborg_upgrade3" - origin_tech = "combat=6;materials=6" - require_module = TRUE - -/obj/item/borg/upgrade/syndicate/do_install(mob/living/silicon/robot/R) - if(R.weapons_unlock) - return // They already had the safety override upgrade, or they're a cyborg type which has this by default. - R.weapons_unlock = TRUE - to_chat(R, "Warning: safety protocols have been disabled!") - return TRUE - -/obj/item/borg/upgrade/lavaproof - name = "mining cyborg lavaproof chassis" - desc = "An upgrade kit to apply specialized coolant systems and insulation layers to a mining cyborg's chassis, enabling them to withstand exposure to molten rock." - icon_state = "ash_plating" - resistance_flags = LAVA_PROOF | FIRE_PROOF - require_module = TRUE - module_type = /obj/item/robot_module/miner - -/obj/item/borg/upgrade/lavaproof/do_install(mob/living/silicon/robot/R) - if(istype(R)) - R.weather_immunities += "lava" - return TRUE - /obj/item/borg/upgrade/selfrepair name = "self-repair module" desc = "This module will repair the cyborg over time." @@ -391,6 +251,118 @@ else deactivate() +/obj/item/borg/upgrade/vtec + name = "robotic VTEC Module" + desc = "Used to activate a cyborg's VTEC systems, increasing their speed." + icon_state = "cyborg_upgrade2" + require_module = TRUE + origin_tech = "engineering=4;materials=5;programming=4" + +/obj/item/borg/upgrade/vtec/do_install(mob/living/silicon/robot/R) + for(var/obj/item/borg/upgrade/vtec/U in R.contents) + to_chat(R, "A VTEC unit is already installed!") + to_chat(usr, "There's no room for another VTEC unit!") + return + + R.speed -= 1 // Gotta go fast. + return TRUE + +/***********************/ +/**** SECURITY ****/ +/***********************/ + +/obj/item/borg/upgrade/disablercooler + name = "cyborg rapid disabler cooling module" + desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate." + icon_state = "cyborg_upgrade3" + origin_tech = "engineering=4;powerstorage=4;combat=4" + require_module = TRUE + module_type = /obj/item/robot_module/security + +/obj/item/borg/upgrade/disablercooler/do_install(mob/living/silicon/robot/R) + var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.module.modules + if(!T) + to_chat(usr, "There's no disabler in this unit!") + return + if(T.charge_delay <= 2) + to_chat(R, "A cooling unit is already installed!") + to_chat(usr, "There's no room for another cooling unit!") + return + + T.charge_delay = max(2 , T.charge_delay - 4) + + return TRUE + +/*******************/ +/**** MINING ****/ +/*******************/ + +/obj/item/borg/upgrade/ddrill + name = "mining cyborg diamond drill" + desc = "A diamond drill replacement for the mining cyborg's standard drill." + icon_state = "cyborg_upgrade3" + origin_tech = "engineering=4;materials=5" + require_module = TRUE + module_type = /obj/item/robot_module/miner + items_to_replace = list( + /obj/item/pickaxe/drill/cyborg = /obj/item/pickaxe/drill/cyborg/diamond + ) + +/obj/item/borg/upgrade/soh + name = "mining cyborg satchel of holding" + desc = "A satchel of holding replacement for mining cyborg's ore satchel module." + icon_state = "cyborg_upgrade3" + origin_tech = "engineering=4;materials=4;bluespace=4" + require_module = TRUE + module_type = /obj/item/robot_module/miner + items_to_replace = list( + /obj/item/storage/bag/ore/cyborg = /obj/item/storage/bag/ore/holding + ) + +/obj/item/borg/upgrade/lavaproof + name = "mining cyborg lavaproof chassis" + desc = "An upgrade kit to apply specialized coolant systems and insulation layers to a mining cyborg's chassis, enabling them to withstand exposure to molten rock." + icon_state = "ash_plating" + resistance_flags = LAVA_PROOF | FIRE_PROOF + require_module = TRUE + module_type = /obj/item/robot_module/miner + +/obj/item/borg/upgrade/lavaproof/do_install(mob/living/silicon/robot/R) + if(istype(R)) + R.weather_immunities += "lava" + return TRUE + +/***********************/ +/**** ENGINEER ****/ +/***********************/ + +/obj/item/borg/upgrade/rcd + name = "R.C.D. upgrade" + desc = "A modified Rapid Construction Device, able to pull energy directly from a cyborg's internal power cell." + icon_state = "cyborg_upgrade5" + origin_tech = "engineering=4;materials=5;powerstorage=4" + require_module = TRUE + module_type = /obj/item/robot_module/engineering + items_to_add = list(/obj/item/rcd/borg) + +/obj/item/borg/upgrade/rcd/after_install(mob/living/silicon/robot/R) + if(R.emagged) // Emagged engi-borgs have already have the RCD added. + return + R.module.remove_item_from_lists(/obj/item/rcd) // So emagging them in the future won't grant another RCD. + ..() + +/obj/item/borg/upgrade/rped + name = "Rapid Part Exchange Device upgrade" + desc = "A modified Rapid Part Exchange Device designed to be used by engineering robots." + icon_state = "cyborg_upgrade5" + require_module = TRUE + module_type = /obj/item/robot_module/engineering + items_to_add = list(/obj/item/storage/part_replacer) + +/***********************/ +/**** JANITOR ****/ +/***********************/ + /obj/item/borg/upgrade/floorbuffer name = "janitor cyborg floor buffer upgrade" desc = "A floor buffer upgrade kit that can be attached to janitor cyborgs." @@ -427,6 +399,34 @@ cyborg = null return ..() +/obj/item/borg/upgrade/bluespace_trash_bag + name = "janitor cyborg trash bag of holding upgrade" + desc = "An advanced trash bag upgrade board with bluespace properties that can be attached to janitorial cyborgs." + icon_state = "cyborg_upgrade4" + require_module = TRUE + module_type = /obj/item/robot_module/janitor + items_to_replace = list( + /obj/item/storage/bag/trash/cyborg = /obj/item/storage/bag/trash/bluespace/cyborg + ) + +/***********************/ +/**** SYNDIE ****/ +/***********************/ + +/obj/item/borg/upgrade/syndicate + name = "safety override module" + desc = "Unlocks the hidden, deadlier functions of a cyborg." + icon_state = "cyborg_upgrade3" + origin_tech = "combat=6;materials=6" + require_module = TRUE + +/obj/item/borg/upgrade/syndicate/do_install(mob/living/silicon/robot/R) + if(R.weapons_unlock) + return // They already had the safety override upgrade, or they're a cyborg type which has this by default. + R.weapons_unlock = TRUE + to_chat(R, "Warning: safety protocols have been disabled!") + return TRUE + /obj/item/borg/upgrade/syndie_soap name = "janitor cyborg syndicate soap" desc = "Using forbidden technology and some red dye, upgrade a janitorial cyborg's soap performance by 90 percent!" @@ -437,27 +437,51 @@ /obj/item/soap/nanotrasen = /obj/item/soap/syndie ) -/obj/item/borg/upgrade/bluespace_trash_bag - name = "janitor cyborg trash bag of holding upgrade" - desc = "An advanced trash bag upgrade board with bluespace properties that can be attached to janitorial cyborgs." - icon_state = "cyborg_upgrade4" +/***********************/ +/**** ABDUCTOR ****/ +/***********************/ + +/obj/item/borg/upgrade/abductor_engi + name = "engineering cyborg abductor upgrade" + desc = "An experimental upgrade that replaces an engineering cyborg's tools with the abductor versions." + icon_state = "abductor_mod" + origin_tech = "engineering=6;materials=6;abductor=3" require_module = TRUE - module_type = /obj/item/robot_module/janitor + module_type = /obj/item/robot_module/engineering items_to_replace = list( - /obj/item/storage/bag/trash/cyborg = /obj/item/storage/bag/trash/bluespace/cyborg + /obj/item/weldingtool = /obj/item/weldingtool/abductor, + /obj/item/wrench = /obj/item/wrench/abductor, + /obj/item/screwdriver = /obj/item/screwdriver/abductor, + /obj/item/crowbar = /obj/item/crowbar/abductor, + /obj/item/wirecutters = /obj/item/wirecutters/abductor, + /obj/item/multitool = /obj/item/multitool/abductor + ) + special_rechargables = list( + /obj/item/weldingtool/abductor ) -/obj/item/borg/upgrade/rcd - name = "R.C.D. upgrade" - desc = "A modified Rapid Construction Device, able to pull energy directly from a cyborg's internal power cell." - icon_state = "cyborg_upgrade5" - origin_tech = "engineering=4;materials=5;powerstorage=4" +/obj/item/borg/upgrade/abductor_medi + name = "medical cyborg abductor upgrade" + desc = "An experimental upgrade that replaces a medical cyborg's tools with the abductor versions." + icon_state = "abductor_mod" + origin_tech = "biotech=6;materials=6;abductor=2" require_module = TRUE - module_type = /obj/item/robot_module/engineering - items_to_add = list(/obj/item/rcd/borg) + module_type = /obj/item/robot_module/medical + items_to_replace = list( + /obj/item/scalpel/laser/laser1 = /obj/item/scalpel/laser/laser3, // No abductor laser scalpel, so next best thing. + /obj/item/hemostat = /obj/item/hemostat/alien, + /obj/item/retractor = /obj/item/retractor/alien, + /obj/item/bonegel = /obj/item/bonegel/alien, + /obj/item/FixOVein = /obj/item/FixOVein/alien, + /obj/item/bonesetter = /obj/item/bonesetter/alien, + /obj/item/circular_saw = /obj/item/circular_saw/alien, + /obj/item/surgicaldrill = /obj/item/surgicaldrill/alien, + /obj/item/reagent_containers/borghypo = /obj/item/reagent_containers/borghypo/abductor + ) -/obj/item/borg/upgrade/rcd/after_install(mob/living/silicon/robot/R) - if(R.emagged) // Emagged engi-borgs have already have the RCD added. +/obj/item/borg/upgrade/abductor_medi/after_install(mob/living/silicon/robot/R) + . = ..() + if(!R.emagged) // Emagged Mediborgs that are upgraded need the evil chems. return - R.module.remove_item_from_lists(/obj/item/rcd) // So emagging them in the future won't grant another RCD. - ..() + for(var/obj/item/reagent_containers/borghypo/F in R.module.modules) + F.emag_act() diff --git a/code/game/objects/items/roulette.dm b/code/game/objects/items/roulette.dm new file mode 100644 index 000000000000..4c86922a5312 --- /dev/null +++ b/code/game/objects/items/roulette.dm @@ -0,0 +1,72 @@ +#define SPINNING_DURATION 3 SECONDS + +/obj/structure/roulette + name = "roulette" + desc = "Normally used for giving out rewards.. or choosing torture methods." + icon = 'icons/obj/roulette.dmi' + icon_state = "blue" + density = TRUE + /// Is it currently spinning? + var/spinning = FALSE + /// List of options the roulette currently has + var/list/options = list("Blue", "Orange", "Green", "Yellow", "Red", "Purple") + /// Colors available on the roulette + var/list/colors = list("blue", "orange", "green", "yellow", "red", "purple") + +/obj/structure/roulette/examine(mob/user) + . = ..() + . += "Interact to customise it and spin with Alt-Click." + . += "The options are: \n[options.Join(".\n")]" + +/obj/structure/roulette/AltClick() + if(spinning) + return + playsound(src, 'sound/items/roulette_spin.ogg', 50, TRUE) + icon_state = "roulette_on" + spinning = TRUE + addtimer(CALLBACK(src, PROC_REF(stop_spin)), SPINNING_DURATION) + +/obj/structure/roulette/proc/stop_spin() + var/chosen_number = rand(1, 6) + atom_say(options[chosen_number]) + icon_state = colors[chosen_number] + spinning = FALSE + +/obj/structure/roulette/wrench_act(mob/user, obj/item/I) + . = TRUE + if(!I.use_tool(src, user, delay = 3 SECONDS, volume = I.tool_volume)) + return + deconstruct() + +/obj/structure/roulette/deconstruct() + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/wood(loc, 10) + return ..() + +/obj/structure/roulette/attack_hand(mob/user) + var/list/radials = list("Blue" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[1]), + "Orange" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[2]), + "Green" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[3]), + "Yellow" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[4]), + "Red" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[5]), + "Purple" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[6]) + ) + var/choice = show_radial_menu(user, src, radials, radius = 38, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE) + switch(choice) + if("Blue") + options[1] = input("Customise the blue option:", name, options[1]) as text + if("Orange") + options[2] = input("Customise the orange option:", name, options[2]) as text + if("Green") + options[3] = input("Customise the green option:", name, options[3]) as text + if("Yellow") + options[4] = input("Customise the yellow option:", name, options[4]) as text + if("Red") + options[5] = input("Customise the red option:", name, options[5]) as text + if("Purple") + options[6] = input("Customise the purple option:", name, options[6]) as text + +/obj/structure/roulette/proc/check_menu(mob/living/user) + return (istype(user) && !HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + +#undef SPINNING_DURATION diff --git a/code/game/objects/items/stacks/medical_packs.dm b/code/game/objects/items/stacks/medical_packs.dm index dae725637d8d..01d1bb1586b0 100644 --- a/code/game/objects/items/stacks/medical_packs.dm +++ b/code/game/objects/items/stacks/medical_packs.dm @@ -320,7 +320,7 @@ if(affecting.status & ORGAN_SPLINTED) to_chat(user, "[H]'s [limb] is already splinted!") - if(alert(user, "Would you like to remove the splint from [H]'s [limb]?", "Splint removal.", "Yes", "No") == "Yes") + if(tgui_alert(user, "Would you like to remove the splint from [H]'s [limb]?", "Splint removal", list("Yes", "No")) == "Yes") affecting.status &= ~ORGAN_SPLINTED H.handle_splints() to_chat(user, "You remove the splint from [H]'s [limb].") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index a8b4bec22555..ef50232da87f 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -21,6 +21,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( new /datum/stack_recipe("fish tank", /obj/machinery/fishtank/tank, 3, time = 2 SECONDS, on_floor = TRUE), new /datum/stack_recipe("wall aquarium", /obj/machinery/fishtank/wall, 4, time = 4 SECONDS, on_floor = TRUE), new /datum/stack_recipe("glass ashtray", /obj/item/ashtray/glass, 1, time = 1 SECONDS), + new /datum/stack_recipe("dropper", /obj/item/reagent_containers/dropper, 1, time = 1 SECONDS), )) /obj/item/stack/sheet/glass diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index b42d0dfac594..c62f88f218dd 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -242,7 +242,8 @@ GLOBAL_LIST_INIT(wood_recipes, list( new /datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 5 SECONDS), - new /datum/stack_recipe("compost bin", /obj/machinery/compost_bin, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE) + new /datum/stack_recipe("compost bin", /obj/machinery/compost_bin, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("roulette", /obj/structure/roulette, 10, time = 3 SECONDS, one_per_turf = TRUE, on_floor = TRUE) )) /obj/item/stack/sheet/wood @@ -293,6 +294,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( new /datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), new /datum/stack_recipe("fish bag", /obj/item/storage/bag/fish, 4), new /datum/stack_recipe("mail bag", /obj/item/storage/bag/mail, 4), + new /datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4), )), null, new /datum/stack_recipe("improvised gauze", /obj/item/stack/medical/bruise_pack/improvised, 1, 2, 6), @@ -589,6 +591,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2), new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), + new /datum/stack_recipe("spray bottle", /obj/item/reagent_containers/spray/empty, 6), null, new /datum/stack_recipe_list("first-aid kits", list( new /datum/stack_recipe("first-aid kit", /obj/item/storage/firstaid/regular, 4), diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 11d45ad6448e..9a23693e8cd9 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -348,9 +348,11 @@ //get amount from user var/min = 0 var/max = get_amount() - var/stackmaterial = round(input(user, "How many sheets do you wish to take out of this stack? (Maximum: [max])") as null|num) + var/stackmaterial = tgui_input_number(user, "How many sheets do you wish to take out of this stack? (Max: [max])", "Stack Split", max_value = max) if(stackmaterial == null || stackmaterial <= min || stackmaterial > get_amount()) return + if(!Adjacent(user, 1)) + return change_stack(user,stackmaterial) to_chat(user, "You take [stackmaterial] sheets out of the stack.") diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 7873e3a3d03b..f5249ae91696 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -126,3 +126,11 @@ user.dust() user.visible_message("[user]'s soul coalesces into a new [W.name]!") return OBLITERATION + +/obj/item/wrench/bolter + name = "airlock bolt wrench" + desc = "A large wrench designed to interlock with an airlock's bolting mechanisms, allowing it to lift the bolts regardless of power." + icon_state = "bolter_wrench" + origin_tech = "materials=5;engineering=4" + w_class = WEIGHT_CLASS_NORMAL + toolspeed = 2.5 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f229ce8b9562..40f4c6fe1d68 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -68,7 +68,7 @@ return /obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params) - if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass)) + if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/drinks/drinkingglass)) if(O.reagents) if(O.reagents.total_volume < 1) to_chat(user, "[O] is empty.") @@ -225,6 +225,18 @@ qdel(W) qdel(src) +/obj/item/toy/sword/chaosprank + name = "energy sword" + /// Sets to TRUE once the character using it hits something and realises it's not a real energy sword + var/pranked = FALSE + +/obj/item/toy/sword/chaosprank/afterattack(mob/living/target, mob/living/user, proximity) + ..() + if(!pranked) + to_chat(user, "Oh... it's a fake.") + name = "toy sword" + pranked = TRUE + /* * Subtype of Double-Bladed Energy Swords */ @@ -781,9 +793,9 @@ item_state = "plushie_ipc" /obj/item/toy/plushie/ipcplushie/attackby(obj/item/B, mob/user, params) - if(istype(B, /obj/item/reagent_containers/food/snacks/breadslice)) - new /obj/item/reagent_containers/food/snacks/toast(get_turf(loc)) - to_chat(user, " You insert bread into the toaster. ") + if(istype(B, /obj/item/food/snacks/breadslice)) + new /obj/item/food/snacks/toast(get_turf(loc)) + to_chat(user, "You insert bread into the toaster.") playsound(loc, 'sound/machines/ding.ogg', 50, 1) qdel(B) else diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm old mode 100755 new mode 100644 index 9d85a0827614..6095e7c92ad5 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -116,8 +116,10 @@ AI MODULES /obj/item/aiModule/safeguard/attack_self(mob/user as mob) ..() - var/targName = stripped_input(usr, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name) - targetName = targName + var/new_targetName = tgui_input_text(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name) + if(!new_targetName) + return + targetName = new_targetName desc = "A 'safeguard' AI module: 'Safeguard [targetName]. Individuals that threaten [targetName] are not crew and must be eliminated.'" /obj/item/aiModule/safeguard/install(obj/machinery/computer/C) @@ -143,8 +145,10 @@ AI MODULES /obj/item/aiModule/oneCrewMember/attack_self(mob/user as mob) ..() - var/targName = stripped_input(usr, "Please enter the name of the person who is the only crew.", "Who?", user.real_name) - targetName = targName + var/new_targetName = tgui_input_text(usr, "Please enter the name of the person who is the only crew.", "Who?", user.real_name) + if(!new_targetName) + return + targetName = new_targetName desc = "A 'one crew' AI module: 'Only [targetName] is crew.'" /obj/item/aiModule/oneCrewMember/install(obj/machinery/computer/C) @@ -208,12 +212,15 @@ AI MODULES /obj/item/aiModule/freeform/attack_self(mob/user as mob) ..() - var/new_lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num - if(new_lawpos < MIN_SUPPLIED_LAW_NUMBER) return - lawpos = min(new_lawpos, MAX_SUPPLIED_LAW_NUMBER) - var/newlaw = "" - var/targName = sanitize(copytext_char(input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw),1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext - newFreeFormLaw = targName + var/new_lawpos = tgui_input_number(user, "Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority", lawpos, MAX_SUPPLIED_LAW_NUMBER, MIN_SUPPLIED_LAW_NUMBER) + if(!new_lawpos || new_lawpos == lawpos) + return + lawpos = new_lawpos + + var/new_targetName = tgui_input_text(user, "Please enter a new law for the AI.", "Freeform Law Entry") + if(!new_targetName) + return + newFreeFormLaw = new_targetName desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'" /obj/item/aiModule/freeform/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) @@ -358,7 +365,7 @@ AI MODULES name = "\improper Pranksimov core AI module" desc = "A 'Pranksimov' Core AI Module: 'Reconfigures the AI's core laws.'" icon_state = "pranksimov" - origin_tech = "programming=3;syndicate=2" + origin_tech = "programming=3;syndicate=1" laws = new /datum/ai_laws/pranksimov() /******************** NT Aggressive ********************/ @@ -406,10 +413,11 @@ AI MODULES /obj/item/aiModule/freeformcore/attack_self(mob/user as mob) ..() - var/newlaw = "" - var/targName = stripped_input(usr, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) - newFreeFormLaw = targName - desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'" + var/new_targetName = tgui_input_text(usr, "Please enter a new core law for the AI.", "Freeform Law Entry") + if(!new_targetName) + return + newFreeFormLaw = new_targetName + desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'" /obj/item/aiModule/freeformcore/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() @@ -433,10 +441,11 @@ AI MODULES /obj/item/aiModule/syndicate/attack_self(mob/user as mob) ..() - var/newlaw = "" - var/targName = stripped_input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) - newFreeFormLaw = targName - desc = "A hacked AI law module: '[newFreeFormLaw]'" + var/new_targetName = tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", max_length = MAX_MESSAGE_LEN) + if(!new_targetName) + return + newFreeFormLaw = new_targetName + desc = "A hacked AI law module: '[newFreeFormLaw]'" /obj/item/aiModule/syndicate/transmitInstructions(mob/living/silicon/ai/target, mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 143ad0422eea..23a32b354918 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -238,10 +238,13 @@ /obj/item/rcd/attack_self_tk(mob/user) radial_menu(user) -/obj/item/rcd/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/rcd/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/rcd/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RCD", "Rapid Construction Device", 471, 673, master_ui, state) + ui = new(user, src, "RCD", "Rapid Construction Device") ui.open() /obj/item/rcd/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 66951e2e044d..970916bba0d5 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -22,15 +22,15 @@ to_chat(user, "Choose an item to dispense!") else to_chat(user, "You are currently dispensing a [initial(currently_dispensing.name)].") - var/static/list/rsf_items = list("Drinking Glass" = /obj/item/reagent_containers/food/drinks/drinkingglass, + var/static/list/rsf_items = list("Drinking Glass" = /obj/item/reagent_containers/drinks/drinkingglass, "Paper" = /obj/item/paper, "Pen" = /obj/item/pen, "Dice Pack" = /obj/item/storage/bag/dice, "Cigarette" = /obj/item/clothing/mask/cigarette, - "Newdles" = /obj/item/reagent_containers/food/snacks/chinese/newdles, - "Donut" = /obj/item/reagent_containers/food/snacks/donut, - "Chicken Soup" = /obj/item/reagent_containers/food/drinks/chicken_soup, - "Tofu Burger" = /obj/item/reagent_containers/food/snacks/burger/tofu) + "Newdles" = /obj/item/food/snacks/chinese/newdles, + "Donut" = /obj/item/food/snacks/donut, + "Chicken Soup" = /obj/item/reagent_containers/drinks/chicken_soup, + "Tofu Burger" = /obj/item/food/snacks/burger/tofu) var/static/list/rsf_icons = list("Drinking Glass" = image(icon = 'icons/obj/drinks.dmi', icon_state = "glass_empty"), "Paper" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "paper"), "Pen" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "pen"), diff --git a/code/game/objects/items/weapons/batons.dm b/code/game/objects/items/weapons/batons.dm index 63220202163a..08e01fc96b6d 100644 --- a/code/game/objects/items/weapons/batons.dm +++ b/code/game/objects/items/weapons/batons.dm @@ -130,7 +130,7 @@ percentage_reduction = (100 - ARMOUR_VALUE_TO_PERCENTAGE(armour)) / 100 else percentage_reduction = (100 - armour) / 100 // converts the % into a decimal - target.adjustStaminaLoss(stamina_damage * percentage_reduction) + target.apply_damage(stamina_damage * percentage_reduction, STAMINA) /obj/item/melee/classic_baton/proc/baton_delay(mob/living/target, user_UID) REMOVE_TRAIT(target, TRAIT_WAS_BATONNED, user_UID) diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_abductor.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_abductor.dm index 74fc5e42dceb..d1dfad0363eb 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_abductor.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_abductor.dm @@ -14,6 +14,9 @@ /obj/item/bio_chip/abductor/activate() if(cooldown == total_cooldown) + if(imp_in.has_status_effect(STATUS_EFFECT_ABDUCTOR_COOLDOWN)) + to_chat(imp_in, "The teleporter will not activate yet to prevent potential damage!") + return home.Retrieve(imp_in, 1) cooldown = 0 START_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_fluff.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_fluff.dm index 789198dc093d..336f74465d1e 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_fluff.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_fluff.dm @@ -135,6 +135,12 @@ notes = "Manually activated by the user." function = "Allows the user to summon a box from a bluespace pocket located inside the implant. The exterior of this box is lined with experimental cloaking panels which render the box invisible to the naked eye." +/datum/implant_fluff/shock + name = "Syndicate ARC-7 \"Power\" Bio-chip" + life = "5-12 months, depending on active use." + notes = "Manually activated by the user." + function = "An effective biochip designed to redirect large amounts of power in destructive arcs. Attempts to reduce the minimum power drain to allow for weapon and cell charging have failed so far." + /datum/implant_fluff/deathrattle name = "BioTech Solutions \"Dead Ringer\" Death Ratttle Bio-chip" notes = "Alerts implanted crew to crewmember death." diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm index 9c9036cffb41..e0867c566524 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm @@ -66,10 +66,13 @@ eject_case(user) -/obj/item/bio_chip_pad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/bio_chip_pad/ui_state(mob/user) + return GLOB.default_state + +/obj/item/bio_chip_pad/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ImplantPad", name, 410, 400, master_ui, state) + ui = new(user, src, "BioChipPad", name) ui.open() /obj/item/bio_chip_pad/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_shock.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_shock.dm new file mode 100644 index 000000000000..a8531de3df58 --- /dev/null +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_shock.dm @@ -0,0 +1,46 @@ +/obj/item/bio_chip/shock + name = "power bio-chip" + desc = "A shockingly effective bio-chip for stunning or killing all those in your way. Do it." + icon_state = "lighting_bolt" + item_color = "r" + origin_tech = "combat=5;magnets=3;biotech=4;syndicate=2" + implant_data = /datum/implant_fluff/shock + implant_state = "implant-syndicate" + var/enabled = TRUE + var/old_mclick_override + var/datum/middleClickOverride/shock_implant/mclick_override = new /datum/middleClickOverride/shock_implant + var/last_shocked = 0 + var/shock_delay = 3 SECONDS + var/unlimited_power = FALSE // Does this really need explanation? + var/shock_range = 7 + +/obj/item/bio_chip/shock/activate() + enabled = !enabled + to_chat(imp_in, "You toggle the implant [enabled? "on" : "off"].") + if(enabled) + if(imp_in.middleClickOverride) + old_mclick_override = imp_in.middleClickOverride + imp_in.middleClickOverride = mclick_override + else + if(old_mclick_override) + imp_in.middleClickOverride = old_mclick_override + old_mclick_override = null + else + imp_in.middleClickOverride = null + +/obj/item/bio_chip/shock/removed() + if(old_mclick_override) + imp_in.middleClickOverride = old_mclick_override + old_mclick_override = null + else + imp_in.middleClickOverride = null + return ..() + +/obj/item/bio_chip_implanter/shock + name = "bio-chip implanter (power)" + implant_type = /obj/item/bio_chip/shock + +/obj/item/bio_chip_case/shock + name = "bio-chip case - 'power'" + desc = "A glass case containing a power bio-chip." + implant_type = /obj/item/bio_chip/shock diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 7afd3326575b..a6fadb5b1608 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -134,7 +134,6 @@ var/datum/browser/popup = new(user, "idcard", name, 600, 400) popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) popup.open() /obj/item/card/id/attack_self(mob/user as mob) @@ -278,7 +277,7 @@ guest_pass.forceMove(get_turf(src)) guest_pass = null else - to_chat(user, "There is no guest pass attached to this ID") + to_chat(user, "There is no guest pass attached to this ID.") /obj/item/card/id/serialize() var/list/data = ..() @@ -367,13 +366,13 @@ /obj/item/card/id/syndicate/attack_self(mob/user as mob) if(!src.registered_name) - var/t = reject_bad_name(input(user, "What name would you like to use on this card?", "Agent Card name", ishuman(user) ? user.real_name : user.name), TRUE) + var/t = reject_bad_name(tgui_input_text(user, "What name would you like to use on this card?", "Agent Card name", ishuman(user) ? user.real_name : user.name), TRUE) if(!t) to_chat(user, "Invalid name.") return src.registered_name = t - var/u = sanitize(stripped_input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than maintenance.", "Agent Card Job Assignment", "Agent", MAX_MESSAGE_LEN)) + var/u = tgui_input_text(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than maintenance.", "Agent Card Job Assignment", "Agent", MAX_MESSAGE_LEN) if(!u) to_chat(user, "Invalid assignment.") src.registered_name = "" @@ -386,14 +385,14 @@ if(!registered_user) registered_user = user.mind.current - switch(alert(user,"Would you like to display \the [src] or edit it?","Choose","Show","Edit")) + switch(tgui_alert(user, "Would you like to display [src] or edit it?", "Choose", list("Show", "Edit"))) if("Show") return ..() if("Edit") - switch(input(user,"What would you like to edit on \the [src]?") in list("Name", "Photo", "Appearance", "Sex", "Age", "Occupation", "Money Account", "Blood Type", "DNA Hash", "Fingerprint Hash", "Reset Access", "Delete Card Information")) + switch(tgui_input_list(user, "What would you like to edit on [src]?", "Agent ID", list("Name", "Photo", "Appearance", "Sex", "Age", "Occupation", "Money Account", "Blood Type", "DNA Hash", "Fingerprint Hash", "Reset Access", "Delete Card Information"))) if("Name") - var/new_name = reject_bad_name(input(user,"What name would you like to put on this card?","Agent Card Name", ishuman(user) ? user.real_name : user.name), TRUE) - if(!Adjacent(user)) + var/new_name = reject_bad_name(tgui_input_text(user, "What name would you like to put on this card?", "Agent Card Name", ishuman(user) ? user.real_name : user.name), TRUE) + if(!Adjacent(user) || !new_name) return src.registered_name = new_name UpdateName() @@ -414,7 +413,7 @@ RebuildHTML() if("Appearance") - var/list/appearances = list( + var/static/list/appearances = list( "data", "id", "gold", @@ -465,10 +464,8 @@ "ERT_janitorial", "ERT_paranormal", ) - var/choice = input(user, "Select the appearance for this card.", "Agent Card Appearance") in appearances - if(!Adjacent(user)) - return - if(!choice) + var/choice = tgui_input_list(user, "Select the appearance for this card.", "Agent Card Appearance", appearances) + if(!Adjacent(user) || !choice) return icon_state = choice switch(choice) @@ -489,8 +486,8 @@ to_chat(usr, "Appearance changed to [choice].") if("Sex") - var/new_sex = sanitize(stripped_input(user,"What sex would you like to put on this card?","Agent Card Sex", ishuman(user) ? capitalize(user.gender) : "Male", MAX_MESSAGE_LEN)) - if(!Adjacent(user)) + var/new_sex = tgui_input_text(user,"What sex would you like to put on this card?", "Agent Card Sex", ishuman(user) ? capitalize(user.gender) : "Male") + if(!Adjacent(user) || !new_sex) return sex = new_sex to_chat(user, "Sex changed to [new_sex].") @@ -501,15 +498,15 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user default = H.age - var/new_age = sanitize(input(user,"What age would you like to be written on this card?","Agent Card Age", default) as text) - if(!Adjacent(user)) + var/new_age = tgui_input_number(user, "What age would you like to be written on this card?", "Agent Card Age", default, 300, 17) + if(!Adjacent(user) || !new_age) return age = new_age to_chat(user, "Age changed to [new_age].") RebuildHTML() if("Occupation") - var/list/departments = list( + var/static/list/departments = list( "Assistant" = null, "Engineering" = GLOB.engineering_positions, "Medical" = GLOB.medical_positions, @@ -521,15 +518,15 @@ "Custom" = null, ) - var/department = input(user, "What job would you like to put on this card?\nChoose a department or a custom job title.\nChanging occupation will not grant or remove any access levels.","Agent Card Occupation") in departments + var/department = tgui_input_list(user, "What job would you like to put on this card?\nChoose a department or a custom job title.\nChanging occupation will not grant or remove any access levels.", "Agent Card Occupation", departments) var/new_job = "Assistant" if(department == "Custom") - new_job = sanitize(stripped_input(user,"Choose a custom job title:","Agent Card Occupation", "Assistant", MAX_MESSAGE_LEN)) + new_job = tgui_input_text(user, "Choose a custom job title:", "Agent Card Occupation", "Assistant") else if(department != "Assistant" && !isnull(departments[department])) - new_job = input(user, "What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.","Agent Card Occupation") in departments[department] + new_job = tgui_input_list(user, "What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.", "Agent Card Occupation", departments[department]) - if(!Adjacent(user)) + if(!Adjacent(user) || !new_job) return assignment = new_job to_chat(user, "Occupation changed to [new_job].") @@ -537,8 +534,8 @@ RebuildHTML() if("Money Account") - var/new_account = input(user,"What money account would you like to link to this card?","Agent Card Account",12345) as num - if(!Adjacent(user)) + var/new_account = tgui_input_number(user, "What money account would you like to link to this card?", "Agent Card Account", 12345) + if(!Adjacent(user) || !new_account) return associated_account_number = new_account to_chat(user, "Linked money account changed to [new_account].") @@ -550,8 +547,8 @@ if(H.dna) default = H.dna.blood_type - var/new_blood_type = sanitize(input(user,"What blood type would you like to be written on this card?","Agent Card Blood Type",default) as text) - if(!Adjacent(user)) + var/new_blood_type = tgui_input_text(user, "What blood type would you like to be written on this card?", "Agent Card Blood Type", default) + if(!Adjacent(user) || !new_blood_type) return blood_type = new_blood_type to_chat(user, "Blood type changed to [new_blood_type].") @@ -564,8 +561,8 @@ if(H.dna) default = H.dna.unique_enzymes - var/new_dna_hash = sanitize(input(user,"What DNA hash would you like to be written on this card?","Agent Card DNA Hash",default) as text) - if(!Adjacent(user)) + var/new_dna_hash = tgui_input_text(user, "What DNA hash would you like to be written on this card?", "Agent Card DNA Hash", default) + if(!Adjacent(user) || !new_dna_hash) return dna_hash = new_dna_hash to_chat(user, "DNA hash changed to [new_dna_hash].") @@ -578,21 +575,21 @@ if(H.dna) default = md5(H.dna.uni_identity) - var/new_fingerprint_hash = sanitize(input(user,"What fingerprint hash would you like to be written on this card?","Agent Card Fingerprint Hash",default) as text) - if(!Adjacent(user)) + var/new_fingerprint_hash = tgui_input_text(user, "What fingerprint hash would you like to be written on this card?", "Agent Card Fingerprint Hash", default) + if(!Adjacent(user) || !new_fingerprint_hash) return fingerprint_hash = new_fingerprint_hash to_chat(user, "Fingerprint hash changed to [new_fingerprint_hash].") RebuildHTML() if("Reset Access") - var/response = alert(user, "Are you sure you want to reset access saved on the card?","Reset Access", "No", "Yes") + var/response = tgui_alert(user, "Are you sure you want to reset access saved on the card?", "Reset Access", list("No", "Yes")) if(response == "Yes") access = initial_access.Copy() // Initial() doesn't work on lists to_chat(user, "Card access reset.") if("Delete Card Information") - var/response = alert(user, "Are you sure you want to delete all information saved on the card?","Delete Card Information", "No", "Yes") + var/response = tgui_alert(user, "Are you sure you want to delete all information saved on the card?", "Delete Card Information", list("No", "Yes")) if(response == "Yes") name = initial(name) registered_name = initial(registered_name) @@ -718,13 +715,6 @@ name = "Prisoner [random_number]" registered_name = name -/obj/item/card/id/salvage_captain - name = "Captain's ID" - registered_name = "Captain" - icon_state = "centcom" - desc = "Finders, keepers." - access = list(ACCESS_SALVAGE_CAPTAIN) - /obj/item/card/id/medical name = "Medical ID" registered_name = "Medic" diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 6e2d363c319e..53972aac2779 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -315,7 +315,7 @@ LIGHTERS ARE IN LIGHTERS.DM //////////// /obj/item/clothing/mask/cigarette/cigar - name = "Premium Cigar" + name = "\improper Premium Cigar" desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!" icon_state = "cigaroff" icon_on = "cigaron" @@ -327,15 +327,22 @@ LIGHTERS ARE IN LIGHTERS.DM chem_volume = 120 list_reagents = list("nicotine" = 120) +/obj/item/clothing/mask/cigarette/cigar/proc/can_light_cigar(obj/item/lighting_item) + return (istype(lighting_item, /obj/item/match) || istype(lighting_item, /obj/item/lighter/zippo)) + +/obj/item/clothing/mask/cigarette/cigar/can_light(obj/item/cigar, obj/item/lighting_item) + if(can_light_cigar(lighting_item)) + return ..() + /obj/item/clothing/mask/cigarette/cigar/cohiba - name = "Cohiba Robusto Cigar" + name = "\improper Cohiba Robusto Cigar" desc = "There's little more you could want from a cigar." icon_state = "cigar2off" icon_on = "cigar2on" icon_off = "cigar2off" /obj/item/clothing/mask/cigarette/cigar/havana - name = "Premium Havanian Cigar" + name = "\improper Premium Havanian Cigar" desc = "A cigar fit for only the best for the best." icon_state = "cigar2off" icon_on = "cigar2on" @@ -374,7 +381,7 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/clothing/mask/cigarette/cigar/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers)) return - if(istype(I, /obj/item/match) || istype(I, /obj/item/lighter/zippo)) + if(can_light_cigar(I)) ..() else to_chat(user, "[src] straight out REFUSES to be lit by such uncivilized means.") @@ -534,8 +541,8 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/rollingpaper/afterattack(atom/target, mob/user, proximity) if(!proximity) return - if(istype(target, /obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/O = target + if(istype(target, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/O = target if(O.dry) user.unEquip(target, 1) user.unEquip(src, 1) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index cea375da82b3..c8a397d542cb 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -138,6 +138,7 @@ safety = !safety ..() update_icon(UPDATE_OVERLAYS) + return TRUE /obj/item/defibrillator/proc/toggle_paddles(mob/living/carbon/human/user) if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 6363f02b6389..998dd526021b 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -225,7 +225,7 @@ 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()) + var/obj/item/food/snacks/cookie/C = new(drop_location()) create_smoke(2) C.name = "Cookie of Fate" if(12) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 0e2d8b42bec9..5fff7b07f6c6 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/items.dmi' icon_state = "fire_extinguisher0" item_state = "fire_extinguisher" + base_icon_state = "fire_extinguisher" hitsound = 'sound/weapons/smash.ogg' flags = CONDUCT throwforce = 10 @@ -17,27 +18,26 @@ dog_fashion = /datum/dog_fashion/back resistance_flags = FIRE_PROOF var/max_water = 50 - var/last_use = 1.0 - var/safety = 1 + var/safety = TRUE var/refilling = FALSE - var/sprite_name = "fire_extinguisher" - var/power = 5 //Maximum distance launched water will travel - var/precision = 0 //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row + /// FALSE by default, turfs picked from a spray are random, set to TRUE to make it always have at least one water effect per row + var/precision = FALSE var/cooling_power = 2 //Sets the cooling_temperature of the water reagent datum inside of the extinguisher when it is refilled + COOLDOWN_DECLARE(last_use) /obj/item/extinguisher/mini name = "pocket fire extinguisher" desc = "A light and compact fibreglass-framed model fire extinguisher." icon_state = "miniFE0" item_state = "miniFE" + base_icon_state = "miniFE" hitsound = null //it is much lighter, after all. flags = null //doesn't CONDUCT throwforce = 2 w_class = WEIGHT_CLASS_SMALL - force = 3.0 + force = 3 materials = list() max_water = 30 - sprite_name = "miniFE" dog_fashion = null /obj/item/extinguisher/examine(mob/user) @@ -54,10 +54,8 @@ /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"]." - to_chat(user, "The safety is [safety ? "on" : "off"].") - return + icon_state = "[base_icon_state][!safety]" + to_chat(user, "You [safety ? "enable" : "disable"] [src]'s safety.") /obj/item/extinguisher/attack_obj(obj/O, mob/living/user, params) if(AttemptRefill(O, user)) @@ -67,28 +65,27 @@ return ..() /obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user) - if(istype(target, /obj/structure/reagent_dispensers/watertank) && target.Adjacent(user)) - var/safety_save = safety - safety = 1 - if(reagents.total_volume == reagents.maximum_volume) - to_chat(user, "\The [src] is already full!") - safety = safety_save - return 1 - var/obj/structure/reagent_dispensers/watertank/W = target - var/transferred = W.reagents.trans_to(src, max_water) - if(transferred > 0) - to_chat(user, "\The [src] has been refilled by [transferred] units") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - for(var/datum/reagent/water/R in reagents.reagent_list) - R.cooling_temperature = cooling_power - else - to_chat(user, "\The [W] is empty!") - safety = safety_save - return 1 + if(!istype(target, /obj/structure/reagent_dispensers/watertank) || !target.Adjacent(user)) + return FALSE + var/old_safety = safety + safety = TRUE + if(reagents.total_volume == reagents.maximum_volume) + to_chat(user, "\The [src] is already full!") + safety = old_safety + return TRUE + var/obj/structure/reagent_dispensers/watertank/W = target + var/transferred = W.reagents.trans_to(src, max_water) + if(transferred > 0) + to_chat(user, "\The [src] has been refilled by [transferred] units.") + playsound(loc, 'sound/effects/refill.ogg', 50, TRUE, -6) + for(var/datum/reagent/water/R in reagents.reagent_list) + R.cooling_temperature = cooling_power else - return 0 + to_chat(user, "\The [W] is empty!") + safety = old_safety + return TRUE -/obj/item/extinguisher/afterattack(atom/target, mob/user , flag) +/obj/item/extinguisher/afterattack(atom/target, mob/user, flag) . = ..() //TODO; Add support for reagents in water. if(target.loc == user)//No more spraying yourself when putting your extinguisher away @@ -98,90 +95,75 @@ refilling = FALSE return - if(!safety) - if(src.reagents.total_volume < 1) - to_chat(usr, "\The [src] is empty.") - return - - if(world.time < src.last_use + 20) - return - - src.last_use = world.time - - if(reagents.chem_temp > 300 || reagents.chem_temp < 280) - add_attack_logs(user, target, "Sprayed with superheated or cooled fire extinguisher at Temperature [reagents.chem_temp]K") - playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3) - - var/direction = get_dir(src,target) - - if(usr.buckled && isobj(usr.buckled) && !usr.buckled.anchored && !istype(usr.buckled, /obj/vehicle)) - spawn(0) - var/obj/structure/chair/C = null - if(istype(usr.buckled, /obj/structure/chair)) - C = usr.buckled - var/obj/B = usr.buckled - var/movementdirection = turn(direction,180) - if(C) C.propelled = 4 - step(B, movementdirection) - sleep(1) - step(B, movementdirection) - if(C) C.propelled = 3 - sleep(1) - step(B, movementdirection) - sleep(1) - step(B, movementdirection) - if(C) C.propelled = 2 - sleep(2) - step(B, movementdirection) - if(C) C.propelled = 1 - sleep(2) - step(B, movementdirection) - if(C) C.propelled = 0 - sleep(3) - step(B, movementdirection) - sleep(3) - step(B, movementdirection) - sleep(3) - step(B, movementdirection) - - else user.newtonian_move(turn(direction, 180)) - - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T,T1,T2) - if(precision) - var/turf/T3 = get_step(T1, turn(direction, 90)) - var/turf/T4 = get_step(T2,turn(direction, -90)) - the_targets = list(T,T1,T2,T3,T4) - - for(var/a=0, a<5, a++) - spawn(0) - var/obj/effect/particle_effect/water/W = new /obj/effect/particle_effect/water( get_turf(src) ) - var/turf/my_target = pick(the_targets) - if(precision) - the_targets -= my_target - var/datum/reagents/R = new/datum/reagents(5) - if(!W) return - W.reagents = R - R.my_atom = W - if(!W || !src) return - src.reagents.trans_to(W,1) - for(var/b=0, b<5, b++) - step_towards(W,my_target) - if(!W || !W.reagents) return - W.reagents.reaction(get_turf(W)) - for(var/atom/atm in get_turf(W)) - if(!W) return - W.reagents.reaction(atm) - if(isliving(atm)) //For extinguishing mobs on fire - var/mob/living/M = atm - M.ExtinguishMob() - - if(W.loc == my_target) break - sleep(2) - else + if(safety) return ..() + if(reagents.total_volume < 1) + to_chat(user, "[src] is empty.") + return + + if(!COOLDOWN_FINISHED(src, last_use)) + return + + COOLDOWN_START(src, last_use, 2 SECONDS) + + if(reagents.chem_temp > 300 || reagents.chem_temp < 280) + add_attack_logs(user, target, "Sprayed with superheated or cooled fire extinguisher at Temperature [reagents.chem_temp]K") + playsound(loc, 'sound/effects/extinguish.ogg', 75, TRUE, -3) + + var/direction = get_dir(src, target) + + if(isobj(user.buckled) && !user.buckled.anchored && !istype(user.buckled, /obj/vehicle)) + INVOKE_ASYNC(src, PROC_REF(buckled_speed_move), user.buckled, direction) + else + user.newtonian_move(turn(direction, 180)) + + var/turf/T = get_turf(target) + var/turf/T1 = get_step(T, turn(direction, 90)) + var/turf/T2 = get_step(T, turn(direction, -90)) + var/list/the_targets = list(T, T1, T2) + if(precision) + var/turf/T3 = get_step(T1, turn(direction, 90)) + var/turf/T4 = get_step(T2, turn(direction, -90)) + the_targets = list(T, T1, T2, T3, T4) + + for(var/a in 1 to 5) + var/obj/effect/particle_effect/water/water = new /obj/effect/particle_effect/water(get_turf(src)) + water.create_reagents(5) + reagents.trans_to(water, 1) + var/turf/new_target = pick(the_targets) + if(precision) + the_targets -= new_target + INVOKE_ASYNC(water, TYPE_PROC_REF(/obj/effect/particle_effect/water, extinguish_move), new_target) /obj/item/extinguisher/cyborg_recharge(coeff, emagged) reagents.check_and_add("water", max_water, 5 * coeff) + +/obj/item/extinguisher/proc/buckled_speed_move(obj/structure/chair/buckled_to, direction) // Buckled_to may not be a chair here, but we're assuming so because it makes it easier to typecheck + var/movementdirection = turn(direction, 180) + if(istype(buckled_to)) + buckled_to.propelled = 4 + step(buckled_to, movementdirection) + sleep(1) + step(buckled_to, movementdirection) + if(istype(buckled_to)) + buckled_to.propelled = 3 + sleep(1) + step(buckled_to, movementdirection) + sleep(1) + step(buckled_to, movementdirection) + if(istype(buckled_to)) + buckled_to.propelled = 2 + sleep(2) + step(buckled_to, movementdirection) + if(istype(buckled_to)) + buckled_to.propelled = 1 + sleep(2) + step(buckled_to, movementdirection) + if(istype(buckled_to)) + buckled_to.propelled = 0 + sleep(3) + step(buckled_to, movementdirection) + sleep(3) + step(buckled_to, movementdirection) + sleep(3) + step(buckled_to, movementdirection) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index ac626199b33b..a16963b648ad 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -218,7 +218,7 @@ previousturf = T operating = FALSE for(var/mob/M in viewers(1, loc)) - if((M.client && M.machine == src)) + if(M.client && M.machine == src) attack_self(M) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 45c788385bc2..c070e1d1f989 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -79,8 +79,8 @@ /obj/random/mech, /obj/item/toy/spinningtoy, /obj/item/toy/sword, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/deus, + /obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/paicard, /obj/item/instrument/violin, /obj/item/instrument/guitar, diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm index 30323173f4e5..7da1f504009c 100644 --- a/code/game/objects/items/weapons/grenades/atmosgrenade.dm +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -48,6 +48,6 @@ for(var/turf/simulated/floor/T in view(freeze_range, loc)) T.MakeSlippery(TURF_WET_ICE) for(var/mob/living/carbon/L in T) - L.adjustStaminaLoss(stamina_damage) + L.apply_damage(stamina_damage, STAMINA) L.adjust_bodytemperature(-230) qdel(src) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 5d18e4321d8f..5b8cebe360db 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -324,8 +324,8 @@ desc = "A custom made large grenade. It affects a larger area." icon_state = "large_grenade" bomb_state = "largebomb" - allowed_containers = list(/obj/item/reagent_containers/glass,/obj/item/reagent_containers/food/condiment, - /obj/item/reagent_containers/food/drinks) + allowed_containers = list(/obj/item/reagent_containers/glass,/obj/item/reagent_containers/condiment, + /obj/item/reagent_containers/drinks) origin_tech = "combat=3;engineering=3" affected_area = 5 ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades. diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index aeae35cc6450..46aebed6b252 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -141,7 +141,7 @@ /obj/item/grenade/clusterbuster/booze name = "\improper Booze Grenade" - payload = /obj/item/reagent_containers/food/drinks/bottle/random_drink + payload = /obj/item/reagent_containers/drinks/bottle/random_drink /obj/item/grenade/clusterbuster/honk name = "\improper Mega Honk Grenade" diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 15d827677b5f..92310e2484c5 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -27,7 +27,7 @@ /obj/item/grenade/iedcasing/CheckParts(list/parts_list) ..() - var/obj/item/reagent_containers/food/drinks/cans/can = locate() in contents + var/obj/item/reagent_containers/drinks/cans/can = locate() in contents if(can) can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED can.pixel_y = 0 diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index ae90f8b8ae2e..3f7f3250b342 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -305,8 +305,7 @@ S.name = name S.ckey = theghost.ckey dust_if_respawnable(theghost) - var/input = stripped_input(S, "What are you named?", null, "", MAX_NAME_LEN) - + var/input = tgui_input_text(S, "What are you named?", "Change Name", max_length = MAX_NAME_LEN) if(src && input) name = input S.real_name = input diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 6b08bf0d9d03..73b6a3b9aa9e 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -57,7 +57,7 @@ return ..() if(length(contents)) - var/obj/item/reagent_containers/food/snacks/toEat = contents[1] + var/obj/item/food/snacks/toEat = contents[1] if(istype(toEat)) if(C.eat(toEat, user)) toEat.On_Consume(C, user) @@ -121,6 +121,10 @@ righthand_file = 'icons/mob/inhands/weapons_righthand.dmi' var/bayonet = FALSE //Can this be attached to a gun? +/obj/item/kitchen/knife/Initialize(mapload) + . = ..() + AddComponent(/datum/component/surgery_initiator/robo) + /obj/item/kitchen/knife/suicide_act(mob/user) user.visible_message(pick("[user] is slitting [user.p_their()] wrists with [src]! It looks like [user.p_theyre()] trying to commit suicide.", \ "[user] is slitting [user.p_their()] throat with [src]! It looks like [user.p_theyre()] trying to commit suicide.", \ diff --git a/code/game/objects/items/weapons/knuckledusters.dm b/code/game/objects/items/weapons/knuckledusters.dm new file mode 100644 index 000000000000..138482aa43bf --- /dev/null +++ b/code/game/objects/items/weapons/knuckledusters.dm @@ -0,0 +1,79 @@ +/obj/item/melee/knuckleduster + name = "knuckleduster" + desc = "Simple metal punch enhancers, perfect for bar brawls." + icon = 'icons/obj/knuckleduster.dmi' + icon_state = "knuckleduster" + flags = CONDUCT + force = 10 + throwforce = 3 + w_class = WEIGHT_CLASS_SMALL + resistance_flags = FIRE_PROOF + materials = list(MAT_METAL = 500) + origin_tech = "combat=2" + attack_verb = list("struck", "bludgeoned", "bashed", "smashed") + hitsound = null + /// Is the weapon gripped or not? + var/gripped = FALSE + /// Can the weapon damage organs directly or not? + var/elite = FALSE + /// How much organ damage can the weapon do? + var/trauma = 5 + +/obj/item/melee/knuckleduster/attack_self(mob/user) + if(!gripped) + gripped = TRUE + to_chat(user, "You tighten your grip on [src], ensuring you won't drop it.") + flags |= (NODROP | ABSTRACT) + else + gripped = FALSE + to_chat(user, "You relax your grip on [src].") + flags &= ~(NODROP | ABSTRACT) + +/obj/item/melee/knuckleduster/attack/(mob/living/user) + hitsound = pick('sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', +'sound/weapons/punch4.ogg') + return ..() + +/obj/item/melee/knuckleduster/attack(mob/living/target, mob/living/user) + . = ..() + if(!ishuman(target)) + return + + var/obj/item/organ/external/punched = target.get_organ(user.zone_selected) + if(!length(punched.internal_organs)) + return + + var/obj/item/organ/internal/squishy = pick(punched.internal_organs) + if(gripped && elite) + squishy.receive_damage(trauma) + if(punched.is_broken()) + squishy.receive_damage(trauma) // Probably not so good for your organs to have your already broken ribs punched hard by a metal object + +/obj/item/melee/knuckleduster/syndie + name = "syndicate knuckleduster" + desc = "For feeling like a real Syndicate Elite when threatening to punch someone to death." + icon_state = "knuckleduster_syndie" + force = 15 + throwforce = 5 + origin_tech = "combat=2;syndicate=1" + elite = TRUE + +/obj/item/melee/knuckleduster/nanotrasen + name = "engraved knuckleduster" + desc = "Perfect for giving that Greytider a golden, painful lesson." + icon_state = "knuckleduster_nt" + force = 10 + throwforce = 5 + origin_tech = "combat=3" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF // Steal objectives shouldnt be easy to destroy. + materials = list(MAT_GOLD = 500) + trauma = 10 + +/obj/item/melee/knuckleduster/admin + name = "handheld bone-breaker" + desc = "Your bones just hurt looking at it." + icon_state = "knuckleduster_nt" + force = 25 + throwforce = 25 + elite = TRUE + trauma = 30 diff --git a/code/game/objects/items/weapons/misc_items.dm b/code/game/objects/items/weapons/misc_items.dm index e90c14664d05..bce1df899f20 100644 --- a/code/game/objects/items/weapons/misc_items.dm +++ b/code/game/objects/items/weapons/misc_items.dm @@ -126,18 +126,6 @@ icon_state = "fan" desc = "A small desktop fan. The button seems to be stuck in the 'on' position." -/* -/obj/item/game_kit - name = "Gaming Kit" - icon = 'icons/obj/items.dmi' - icon_state = "game_kit" - var/selected = null - var/board_stat = null - var/data = "" - var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit" - item_state = "sheet-metal" - w_class = WEIGHT_CLASS_HUGE -*/ /obj/item/gift name = "gift" diff --git a/code/game/objects/items/weapons/picket_signs.dm b/code/game/objects/items/weapons/picket_signs.dm index 9697c084c0c6..62815bfe5165 100644 --- a/code/game/objects/items/weapons/picket_signs.dm +++ b/code/game/objects/items/weapons/picket_signs.dm @@ -14,11 +14,12 @@ /obj/item/picket_sign/attackby(obj/item/W, mob/user, params) if(is_pen(W) || istype(W, /obj/item/toy/crayon)) - var/txt = stripped_input(user, "What would you like to write on the sign?", "Sign Label", null , 30) - if(txt) - label = txt - src.name = "[label] sign" - desc = "It reads: [label]" + var/txt = tgui_input_text(user, "What would you like to write on the sign?", "Sign Label", max_length = 30) + if(!txt) + return + label = txt + src.name = "[label] sign" + desc = "It reads: [label]" ..() /obj/item/picket_sign/attack_self(mob/living/carbon/human/user) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 37dc3b4917e7..a0a629f54e00 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -170,12 +170,19 @@ /obj/item/rpd/attack_self(mob/user) ui_interact(user) -/obj/item/rpd/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/rpd/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/rpd/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RPD", name, 450, 650, master_ui, state) + ui = new(user, src, "RPD", name) ui.open() +/obj/item/rpd/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/rpd) + ) /obj/item/rpd/AltClick(mob/user) radial_menu(user) @@ -200,15 +207,15 @@ switch(action) if("iconrotation") - iconrotation = text2num(sanitize(params["iconrotation"])) + iconrotation = isnum(params[action]) ? params[action] : text2num(params[action]) if("whatpipe") - whatpipe = text2num(sanitize(params["whatpipe"])) + whatpipe = isnum(params[action]) ? params[action] : text2num(params[action]) if("whatdpipe") - whatdpipe = text2num(sanitize(params["whatdpipe"])) + whatdpipe = isnum(params[action]) ? params[action] : text2num(params[action]) if("pipe_category") - pipe_category = text2num(sanitize(params["pipe_category"])) + pipe_category = isnum(params[action]) ? params[action] : text2num(params[action]) if("mode") - mode = text2num(sanitize(params["mode"])) + mode = isnum(params[action]) ? params[action] : text2num(params[action]) //RPD radial menu /obj/item/rpd/proc/check_menu(mob/living/user) @@ -268,7 +275,7 @@ if(target != T) // We only check the rpd_act of the target if it isn't the turf, because otherwise // (A) blocked turfs can be acted on, and (B) unblocked turfs get acted on twice. - if(target.rpd_act(user, src) == TRUE) + if(target.rpd_act(user, src)) // If the object we are clicking on has a valid RPD interaction for just that specific object, do that and nothing else. // Example: clicking on a pipe with a RPD in rotate mode should rotate that pipe and ignore everything else on the tile. if(ranged) @@ -279,7 +286,7 @@ // This is done by calling rpd_blocksusage on every /obj in the tile. If any block usage, fail at this point. for(var/obj/O in T) - if(O.rpd_blocksusage() == TRUE) + if(O.rpd_blocksusage()) to_chat(user, "[O] blocks [src]!") return diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 0e812f8fc566..c5fdde6e1ade 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -65,12 +65,12 @@ /obj/item/storage/backpack/holding/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/storage/backpack/holding)) - var/response = alert(user, "This creates a singularity, destroying you and much of the station. Are you SURE?","IMMINENT DEATH!", "No", "Yes") + var/response = tgui_alert(user, "This creates a singularity, destroying you and much of the station. Are you SURE?", "IMMINENT DEATH!", list("No", "Yes")) if(response == "Yes") user.visible_message("[user] grins as [user.p_they()] begin[user.p_s()] to put a Bag of Holding into a Bag of Holding!", "You begin to put the Bag of Holding into the Bag of Holding!") if(do_after(user, 30, target=src)) investigate_log("has become a singularity. Caused by [user.key]","singulo") - user.visible_message("[user] erupts in evil laughter as [user.p_they()] put[user.p_s()] the Bag of Holding into another Bag of Holding!", "You can't help but laugh wildly as you put the Bag of Holding into another Bag of Holding, complete darkness surrounding you."," You hear the sound of scientific evil brewing! ") + user.visible_message("[user] erupts in evil laughter as [user.p_they()] put[user.p_s()] the Bag of Holding into another Bag of Holding!", "You can't help but laugh wildly as you put the Bag of Holding into another Bag of Holding, complete darkness surrounding you."," You hear the sound of scientific evil brewing!") qdel(W) var/obj/singularity/singulo = new /obj/singularity(get_turf(user)) singulo.energy = 300 //To give it a small boost @@ -116,12 +116,12 @@ new /obj/item/radio/headset/headset_service(src) new /obj/item/pda/clown(src) new /obj/item/storage/box/survival(src) - new /obj/item/reagent_containers/food/snacks/grown/banana(src) + new /obj/item/food/snacks/grown/banana(src) new /obj/item/stamp/clown(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/storage/fancy/crayons(src) new /obj/item/reagent_containers/spray/waterflower(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) new /obj/item/instrument/bikehorn(src) new /obj/item/bikehorn(src) new /obj/item/dnainjector/comic(src) @@ -717,9 +717,8 @@ /obj/item/organ/internal/heart/cursed/wizard = 1, /obj/item/organ/internal/vocal_cords/colossus/wizard = 2, /obj/item/warp_cube/red = 1, - /obj/item/reagent_containers/food/drinks/everfull = 2, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard = 2, - /obj/item/jacobs_ladder = 1, //funny + /obj/item/reagent_containers/drinks/everfull = 2, + /obj/item/clothing/suit/space/hardsuit/wizard = 2, /obj/item/immortality_talisman = 1 ) //spells recharge when invincible var/obj/item/pickeda = pick(list_a) value += list_a[pickeda] @@ -750,7 +749,7 @@ value += 1 if(8) if(prob(25)) - new /obj/item/reagent_containers/food/snacks/grown/nymph_pod(src) + new /obj/item/food/snacks/grown/nymph_pod(src) new /obj/item/slimepotion/sentience(src) else new /obj/item/paicard(src) //Still useful, not a point useful. @@ -758,10 +757,10 @@ //Treat / potion. Free. var/obj/item/pickedt = pick( /obj/item/storage/box/syndidonkpockets, // Healing + speed - /obj/item/reagent_containers/food/drinks/bottle/dragonsbreath, // Killing - /obj/item/reagent_containers/food/drinks/bottle/immortality, // Super healing for 20 seconds - /obj/item/reagent_containers/food/snacks/meatsteak/stimulating, //Healing + stun immunity - /obj/item/reagent_containers/food/snacks/plum_pie ) // Great healing over long period of time + /obj/item/reagent_containers/drinks/bottle/dragonsbreath, // Killing + /obj/item/reagent_containers/drinks/bottle/immortality, // Super healing for 20 seconds + /obj/item/food/snacks/meatsteak/stimulating, //Healing + stun immunity + /obj/item/food/snacks/plum_pie ) // Great healing over long period of time new pickedt(src) @@ -775,7 +774,7 @@ #undef NANNY_MAX_VALUE #undef NANNY_MIN_VALUE -/obj/item/reagent_containers/food/drinks/bottle/dragonsbreath +/obj/item/reagent_containers/drinks/bottle/dragonsbreath name = "flask of dragons breath" desc = "Not recommended for wizardly consumption. Recommended for mundane consumption!" icon_state = "holyflask" @@ -783,7 +782,7 @@ volume = 100 list_reagents = list("dragonsbreath" = 80, "hell_water" = 20) -/obj/item/reagent_containers/food/drinks/bottle/immortality +/obj/item/reagent_containers/drinks/bottle/immortality name = "drop of immortality" desc = "Drinking this will make you immortal. For a moment or two, at least." icon_state = "holyflask" @@ -791,13 +790,13 @@ volume = 5 list_reagents = list("adminordrazine" = 5) -/obj/item/reagent_containers/food/snacks/meatsteak/stimulating +/obj/item/food/snacks/meatsteak/stimulating name = "stimulating steak" desc = "Stimulate your senses." list_reagents = list("nutriment" = 5, "stimulants" = 25) bitesize = 100 -/obj/item/reagent_containers/food/snacks/plum_pie +/obj/item/food/snacks/plum_pie name = "perfect plum pie" desc = "The Jack Horner brand of pie. 2 big thumbs up." icon = 'icons/obj/food/bakedgoods.dmi' diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index fbcd813e5044..11c745f7e721 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -202,11 +202,11 @@ name = "plant bag" icon = 'icons/obj/hydroponics/equipment.dmi' icon_state = "plantbag" - storage_slots = 100 //the number of plant pieces it can carry. - max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class + storage_slots = 40 //the number of plant pieces it can carry. + max_combined_w_class = 40 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class max_w_class = WEIGHT_CLASS_NORMAL w_class = WEIGHT_CLASS_TINY - can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/food/snacks/grown/ash_flora,/obj/item/reagent_containers/food/snacks/honeycomb) + can_hold = list(/obj/item/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/food/snacks/grown/ash_flora,/obj/item/food/snacks/honeycomb) resistance_flags = FLAMMABLE /obj/item/storage/bag/plants/portaseeder @@ -497,7 +497,7 @@ /obj/item/storage/bag/tray/cookies_tray - var/cookie = /obj/item/reagent_containers/food/snacks/cookie + var/cookie = /obj/item/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) @@ -506,7 +506,7 @@ update_icon(UPDATE_OVERLAYS) /obj/item/storage/bag/tray/cookies_tray/sugarcookie - cookie = /obj/item/reagent_containers/food/snacks/sugarcookie + cookie = /obj/item/food/snacks/sugarcookie /* * Chemistry bag @@ -537,7 +537,7 @@ storage_slots = 25 max_combined_w_class = 200 w_class = WEIGHT_CLASS_TINY - can_hold = list(/obj/item/slime_extract, /obj/item/reagent_containers/food/snacks/monkeycube, + can_hold = list(/obj/item/slime_extract, /obj/item/food/snacks/monkeycube, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/iv_bag, /obj/item/reagent_containers/hypospray/autoinjector/epinephrine) @@ -558,3 +558,19 @@ w_class = WEIGHT_CLASS_TINY can_hold = list(/obj/item/envelope, /obj/item/stamp, /obj/item/pen, /obj/item/paper, /obj/item/mail_scanner) resistance_flags = FLAMMABLE + +/* + * Construction bag + */ + +/obj/item/storage/bag/construction + name = "construction bag" + desc = "A bag for storing various small scale construction supplies, such as wiring and circuit boards." + icon = 'icons/obj/tools.dmi' + icon_state = "construction_bag" + item_state = "construction_bag" + storage_slots = 30 + max_combined_w_class = 60 + w_class = WEIGHT_CLASS_TINY + can_hold = list(/obj/item/airlock_electronics, /obj/item/firelock_electronics, /obj/item/firealarm_electronics, /obj/item/apc_electronics, /obj/item/airalarm_electronics, /obj/item/camera_assembly, /obj/item/stock_parts/cell, /obj/item/circuitboard, /obj/item/stack/cable_coil) + resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 717b00c0bb8a..caf4ce0f190c 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -102,7 +102,9 @@ /obj/item/analyzer, /obj/item/geiger_counter, /obj/item/extinguisher/mini, - /obj/item/holosign_creator) + /obj/item/holosign_creator, + /obj/item/stack/nanopaste, + /obj/item/robotanalyzer) /obj/item/storage/belt/utility/full/populate_contents() new /obj/item/screwdriver(src) @@ -278,7 +280,7 @@ /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, - /obj/item/reagent_containers/food/snacks/donut, + /obj/item/food/snacks/donut, /obj/item/kitchen/knife/combat, /obj/item/melee/baton, /obj/item/melee/classic_baton, @@ -329,7 +331,7 @@ /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, - /obj/item/reagent_containers/food/snacks/donut, + /obj/item/food/snacks/donut, /obj/item/kitchen/knife/combat, /obj/item/melee/baton, /obj/item/melee/classic_baton, @@ -420,7 +422,7 @@ can_hold = list( /obj/item/grenade, /obj/item/lighter, - /obj/item/reagent_containers/food/drinks/bottle/molotov + /obj/item/reagent_containers/drinks/bottle/molotov ) /obj/item/storage/belt/grenade/full/populate_contents() @@ -919,7 +921,7 @@ /obj/item/stack/sheet/bone, /obj/item/lighter, /obj/item/storage/fancy/cigarettes, - /obj/item/reagent_containers/food/drinks/bottle, + /obj/item/reagent_containers/drinks/bottle, /obj/item/stack/medical, /obj/item/kitchen/knife, /obj/item/reagent_containers/hypospray, @@ -930,7 +932,7 @@ /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/stack/ore, - /obj/item/reagent_containers/food/drinks, + /obj/item/reagent_containers/drinks, /obj/item/organ/internal/regenerative_core, /obj/item/wormhole_jaunter, /obj/item/storage/bag/plants, @@ -968,11 +970,11 @@ /obj/item/kitchen/cutter, /obj/item/assembly/mousetrap, /obj/item/reagent_containers/spray/pestspray, - /obj/item/reagent_containers/food/drinks/flask, - /obj/item/reagent_containers/food/drinks/drinkingglass, - /obj/item/reagent_containers/food/drinks/bottle, - /obj/item/reagent_containers/food/drinks/cans, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/condiment, + /obj/item/reagent_containers/drinks/flask, + /obj/item/reagent_containers/drinks/drinkingglass, + /obj/item/reagent_containers/drinks/bottle, + /obj/item/reagent_containers/drinks/cans, + /obj/item/reagent_containers/drinks/shaker, + /obj/item/food/snacks, + /obj/item/reagent_containers/condiment, /obj/item/reagent_containers/glass/beaker) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 35432af8c702..e4bafc9d70f5 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -58,8 +58,8 @@ icon_state ="bible" /obj/item/storage/bible/booze/populate_contents() - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) new /obj/item/stack/spacecash(src) new /obj/item/stack/spacecash(src) new /obj/item/stack/spacecash(src) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b8e166396aaf..43e323d98307 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -302,7 +302,7 @@ /obj/item/storage/box/cups/populate_contents() for(var/I in 1 to 7) - new /obj/item/reagent_containers/food/drinks/sillycup(src) + new /obj/item/reagent_containers/drinks/sillycup(src) /obj/item/storage/box/drinkingglasses name = "box of drinking glasses" @@ -310,7 +310,7 @@ /obj/item/storage/box/drinkingglasses/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) + new /obj/item/reagent_containers/drinks/drinkingglass(src) /obj/item/storage/box/condimentbottles name = "box of condiment bottles" @@ -318,7 +318,7 @@ /obj/item/storage/box/condimentbottles/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/condiment(src) + new /obj/item/reagent_containers/condiment(src) /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" @@ -424,9 +424,9 @@ desc = "A box intended for experienced chefs." /obj/item/storage/box/chef_rare_ingredients_kit/populate_contents() - new /obj/item/reagent_containers/food/condiment/soysauce(src) - new /obj/item/reagent_containers/food/condiment/enzyme(src) - new /obj/item/reagent_containers/food/condiment/pack/hotsauce(src) + new /obj/item/reagent_containers/condiment/soysauce(src) + new /obj/item/reagent_containers/condiment/enzyme(src) + new /obj/item/reagent_containers/condiment/pack/hotsauce(src) new /obj/item/kitchen/knife/butcher(src) var/list/reagent_list = list("msg", "triple_citrus", "salglu_solution", "nutriment", "gravy", "honey", "vitfro") for(var/reag in reagent_list) @@ -490,8 +490,8 @@ desc = "Drymate brand monkey cubes. Just add water!" icon_state = "monkey_box" storage_slots = 7 - can_hold = list(/obj/item/reagent_containers/food/snacks/monkeycube) - var/monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube + can_hold = list(/obj/item/food/snacks/monkeycube) + var/monkey_cube_type = /obj/item/food/snacks/monkeycube /obj/item/storage/box/monkeycubes/populate_contents() for(var/I in 1 to 5) @@ -499,31 +499,31 @@ /obj/item/storage/box/monkeycubes/syndicate desc = "Waffle Co. brand monkey cubes. Just add water and a dash of subterfuge!" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/syndicate + monkey_cube_type = /obj/item/food/snacks/monkeycube/syndicate /obj/item/storage/box/monkeycubes/farwacubes name = "farwa cube box" desc = "Drymate brand farwa cubes. Just add water!" icon_state = "farwa_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube + monkey_cube_type = /obj/item/food/snacks/monkeycube/farwacube /obj/item/storage/box/monkeycubes/stokcubes name = "stok cube box" desc = "Drymate brand stok cubes. Just add water!" icon_state = "stok_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube + monkey_cube_type = /obj/item/food/snacks/monkeycube/stokcube /obj/item/storage/box/monkeycubes/neaeracubes name = "neaera cube box" desc = "Drymate brand neaera cubes. Just add water!" icon_state = "neaera_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube + monkey_cube_type = /obj/item/food/snacks/monkeycube/neaeracube /obj/item/storage/box/monkeycubes/wolpincubes name = "wolpin cube box" desc = "Drymate brand wolpin cubes. Just add water!" icon_state = "wolpin_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube + monkey_cube_type = /obj/item/food/snacks/monkeycube/wolpincube /////////////////// /* Medical Boxes */ @@ -864,14 +864,14 @@ icon_state = "donk_box" storage_slots = 6 can_hold = list( - /obj/item/reagent_containers/food/snacks/donkpocket, - /obj/item/reagent_containers/food/snacks/warmdonkpocket, - /obj/item/reagent_containers/food/snacks/warmdonkpocket_weak, - /obj/item/reagent_containers/food/snacks/syndidonkpocket) + /obj/item/food/snacks/donkpocket, + /obj/item/food/snacks/warmdonkpocket, + /obj/item/food/snacks/warmdonkpocket_weak, + /obj/item/food/snacks/syndidonkpocket) /obj/item/storage/box/donkpockets/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) + new /obj/item/food/snacks/donkpocket(src) /obj/item/storage/box/donkpockets/empty/populate_contents() return @@ -883,7 +883,7 @@ /obj/item/storage/box/syndidonkpockets/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) + new /obj/item/food/snacks/syndidonkpocket(src) //////////////// /* Misc Boxes */ @@ -1178,7 +1178,7 @@ icon_state = "wizard_box" /obj/item/storage/box/wizard/hardsuit/populate_contents() - new /obj/item/clothing/suit/space/hardsuit/shielded/wizard(src) + new /obj/item/clothing/suit/space/hardsuit/wizard(src) new /obj/item/clothing/shoes/magboots/wizard(src) /obj/item/storage/box/breaching @@ -1226,7 +1226,7 @@ /obj/item/storage/box/foam_grenades name = "foam grenades box" desc = "A box full of foam grenades." - icon_state = "flashbang" + icon_state = "flashbang_box" /obj/item/storage/box/foam_grenades/populate_contents() for(var/I in 1 to 7) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 95bdd28570bd..7e4d2106f3b0 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -41,7 +41,7 @@ icon_type = "donut" icon_state = "donutbox" storage_slots = 6 - can_hold = list(/obj/item/reagent_containers/food/snacks/donut) + can_hold = list(/obj/item/food/snacks/donut) icon_type = "donut" foldable = /obj/item/stack/sheet/cardboard foldable_amt = 1 @@ -49,7 +49,7 @@ /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/obj/item/food/snacks/donut/donut = contents[I] var/icon/new_donut_icon = icon('icons/obj/food/containers.dmi', "[(I - 1)]donut[donut.donut_sprite_type]") . += new_donut_icon @@ -58,7 +58,7 @@ /obj/item/storage/fancy/donut_box/populate_contents() for(var/I in 1 to storage_slots) - new /obj/item/reagent_containers/food/snacks/donut(src) + new /obj/item/food/snacks/donut(src) update_icon(UPDATE_OVERLAYS) /obj/item/storage/fancy/donut_box/empty/populate_contents() @@ -82,11 +82,11 @@ item_state = "eggbox" name = "egg box" storage_slots = 12 - can_hold = list(/obj/item/reagent_containers/food/snacks/egg) + can_hold = list(/obj/item/food/snacks/egg) /obj/item/storage/fancy/egg_box/populate_contents() for(var/I in 1 to storage_slots) - new /obj/item/reagent_containers/food/snacks/egg(src) + new /obj/item/food/snacks/egg(src) /* * Candle Box diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 8dd2b4142c3c..503f92cafc2c 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -37,7 +37,7 @@ return else if((istype(W, /obj/item/card/emag) || (istype(W, /obj/item/melee/energy/blade)) && !broken)) emag_act(user) - return + return TRUE if(!locked) ..() else diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 3d530f357515..e66bc988adee 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -84,6 +84,7 @@ to_chat(user, "You slice through the lock on [src].") else to_chat(user, "You short out the lock on [src].") + return TRUE /obj/item/storage/secure/AltClick(mob/user) if(!try_to_open()) @@ -128,10 +129,13 @@ /obj/item/storage/secure/attack_self(mob/user) ui_interact(user) -/obj/item/storage/secure/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/storage/secure/ui_state(mob/user) + return GLOB.default_state + +/obj/item/storage/secure/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SecureStorage", name, 275, 500, master_ui, state) + ui = new(user, src, "SecureStorage", name) ui.open() /obj/item/storage/secure/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/storage/storage_base.dm b/code/game/objects/items/weapons/storage/storage_base.dm index c5fc34647572..b0cde0fb715a 100644 --- a/code/game/objects/items/weapons/storage/storage_base.dm +++ b/code/game/objects/items/weapons/storage/storage_base.dm @@ -123,7 +123,7 @@ if(isfloorturf(over_object)) if(get_turf(M) != T) return // Can only empty containers onto the floor under you - if(alert(M, "Empty [src] onto [T]?", "Confirm", "Yes", "No") != "Yes") + if(tgui_alert(M, "Empty [src] onto [T]?", "Confirm", list("Yes", "No")) != "Yes") return if(!(M && over_object && length(contents) && loc == M && !M.stat && !M.restrained() && !HAS_TRAIT(M, TRAIT_HANDS_BLOCKED) && get_turf(M) == T)) return // Something happened while the player was thinking diff --git a/code/game/objects/items/weapons/storage/surgical_tray.dm b/code/game/objects/items/weapons/storage/surgical_tray.dm new file mode 100644 index 000000000000..d46f15b0894e --- /dev/null +++ b/code/game/objects/items/weapons/storage/surgical_tray.dm @@ -0,0 +1,42 @@ +// Sprites from CM13 +/obj/item/storage/surgical_tray + name = "surgical tray" + desc = "A small metallic tray covered in sterile tarp. Intended to store surgical tools in a neat and clean fashion." + icon_state = "surgical_tray" + storage_slots = 22 // 11 Items, x2 to be sure + w_class = WEIGHT_CLASS_BULKY + max_w_class = WEIGHT_CLASS_GIGANTIC + max_combined_w_class = 38 // Items listed add up to 19, x2 to be sure + can_hold = list( + /obj/item/scalpel, + /obj/item/cautery, + /obj/item/hemostat, + /obj/item/retractor, + /obj/item/FixOVein, + /obj/item/surgicaldrill, + /obj/item/circular_saw, + /obj/item/bonegel, + /obj/item/bonesetter, + /obj/item/stack/medical/bruise_pack, + /obj/item/stack/medical/ointment + ) + +/obj/item/storage/surgical_tray/Initialize(mapload) + . = ..() + new /obj/item/scalpel(src) + new /obj/item/cautery(src) + new /obj/item/hemostat(src) + new /obj/item/retractor(src) + new /obj/item/FixOVein(src) + new /obj/item/surgicaldrill(src) + new /obj/item/circular_saw(src) + new /obj/item/bonegel(src) + new /obj/item/bonesetter(src) + new /obj/item/stack/medical/bruise_pack/advanced(src) + new /obj/item/stack/medical/ointment/advanced(src) + +/obj/item/storage/surgical_tray/update_icon_state() + if(!contents.len) + icon_state = "surgical_tray_e" + else + icon_state = "surgical_tray" diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 943fba0275d6..1607d8a1ad02 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -68,7 +68,7 @@ /obj/item/storage/box/syndie_kit/emp, // 10TC /obj/item/clothing/glasses/hud/security/chameleon, // 10TC /obj/item/encryptionkey/syndicate, // 10TC - /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail, // 0TC + /obj/item/reagent_containers/drinks/drinkingglass/alliescocktail, // 0TC /obj/item/storage/box/syndie_kit/pen_bomb, // 30 TC /obj/item/CQC_manual) // 13TC @@ -121,7 +121,7 @@ desc = "A kit with everything you need to hack into and disrupt the Station, AI, its cyborgs and the Security team. HACK THE PLANET!" items = list( /obj/item/melee/energy/sword/saber/blue, // 40TC - /obj/item/card/emag, // 30TC + /obj/item/autosurgeon/organ/syndicate/hackerman_deck, // 30TC /obj/item/door_remote/omni/access_tuner, // 30 TC, HACK EVERYTHING /obj/item/encryptionkey/syndicate, // 10TC /obj/item/encryptionkey/binary, // 25TC @@ -141,7 +141,7 @@ items = list( /obj/item/melee/energy/sword/saber/red, // 40TC /obj/item/melee/energy/sword/saber/red, // 40TC - /obj/item/clothing/gloves/color/yellow/power, // 50TC + /obj/item/bio_chip_implanter/shock, // 50TC /obj/item/dnainjector/telemut/darkbundle, // ?TC /obj/item/clothing/suit/hooded/chaplain_hoodie, // 0TC /obj/item/clothing/glasses/meson/engine/tray, // 0TC @@ -310,9 +310,9 @@ name = "combat bakery kit" /obj/item/storage/box/syndie_kit/combat_baking/populate_contents() - new /obj/item/reagent_containers/food/snacks/baguette/combat(src) + new /obj/item/food/snacks/baguette/combat(src) for(var/i in 1 to 2) - new /obj/item/reagent_containers/food/snacks/croissant/throwing(src) + new /obj/item/food/snacks/croissant/throwing(src) new /obj/item/book/granter/crafting_recipe/combat_baking(src) /obj/item/storage/box/syndie_kit/atmosn2ogrenades diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 511765091187..03cfae8693ef 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -211,7 +211,7 @@ return FALSE H.Confused(10 SECONDS) H.Jitter(10 SECONDS) - H.adjustStaminaLoss(stam_damage) + H.apply_damage(stam_damage, STAMINA) H.SetStuttering(10 SECONDS) ADD_TRAIT(L, TRAIT_WAS_BATONNED, user_UID) // so one person cannot hit the same person with two separate batons @@ -248,7 +248,7 @@ return FALSE L.Confused(4 SECONDS) L.Jitter(4 SECONDS) - L.adjustStaminaLoss(30) + L.apply_damage(30, STAMINA) L.SetStuttering(4 SECONDS) ADD_TRAIT(L, TRAIT_WAS_BATONNED, user_UID) // so one person cannot hit the same person with two separate batons @@ -281,6 +281,11 @@ return TRUE ..() +/// baton used for security bots +/obj/item/melee/baton/infinite_cell + hitcost = 0 + turned_on = TRUE + //Makeshift stun baton. Replacement for stun gloves. /obj/item/melee/baton/cattleprod name = "stunprod" diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 17ee75fe8330..6e11a28b0a61 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -157,10 +157,13 @@ ui_interact(user) -/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/tank/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/tank/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Tank", name, 300, 150, master_ui, state) + ui = new(user, src, "Tank", name) ui.open() /obj/item/tank/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index e456bfa2f73a..4472a0ad8f09 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -226,15 +226,18 @@ item_state = "nozzleatmos" safety = 0 max_water = 500 - power = 8 precision = 1 cooling_power = 5 w_class = WEIGHT_CLASS_HUGE flags = NODROP //Necessary to ensure that the nozzle and tank never seperate + /// A reference to the tank that this nozzle is linked to var/obj/item/watertank/tank - var/nozzle_mode = 0 + /// What mode are we currently in? + var/nozzle_mode = EXTINGUISHER + /// Are we overusing the metal synthesizer? can be used 5 times in quick succession, regains 1 use per 10 seconds var/metal_synthesis_cooldown = 0 - var/nanofrost_cooldown = 0 + /// Is our nanofrost on cooldown? + var/nanofrost_cooldown = FALSE /obj/item/extinguisher/mini/nozzle/Initialize(mapload) if(!check_tank_exists(loc, src)) @@ -254,29 +257,24 @@ /obj/item/extinguisher/mini/nozzle/Move() ..() if(tank && loc != tank.loc) - loc = tank - return + forceMove(tank) -/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 -/obj/item/extinguisher/mini/nozzle/dropped(mob/user as mob) +/obj/item/extinguisher/mini/nozzle/dropped(mob/user) ..() to_chat(user, "The nozzle snaps back onto the tank!") tank.on = FALSE @@ -289,42 +287,40 @@ var/Adj = user.Adjacent(target) if(Adj) AttemptRefill(target, user) - if(nozzle_mode == NANOFROST) - if(Adj) - return //Safety check so you don't blast yourself trying to refill your tank - var/datum/reagents/R = reagents - if(R.total_volume < 100) - to_chat(user, "You need at least 100 units of water to use the nanofrost launcher!") - return - if(nanofrost_cooldown) - to_chat(user, "Nanofrost launcher is still recharging") - return - nanofrost_cooldown = 1 - R.remove_any(100) - var/obj/effect/nanofrost_container/A = new /obj/effect/nanofrost_container(get_turf(src)) - log_game("[key_name(user)] used Nanofrost at [get_area(user)] ([user.x], [user.y], [user.z]).") - playsound(src,'sound/items/syringeproj.ogg',40,1) - for(var/a=0, a<5, a++) - step_towards(A, target) - sleep(2) - A.Smoke() - spawn(100) - if(src) - nanofrost_cooldown = 0 - return - if(nozzle_mode == METAL_FOAM) - if(!Adj|| !isturf(target)) - return - if(metal_synthesis_cooldown < 5) - var/obj/effect/particle_effect/foam/F = new /obj/effect/particle_effect/foam(get_turf(target), 1) + + switch(nozzle_mode) + if(NANOFROST) + if(Adj) + return //Safety check so you don't blast yourself trying to refill your tank + if(reagents.total_volume < 100) + to_chat(user, "You need at least 100 units of water to use the nanofrost launcher!") + return + if(nanofrost_cooldown) + to_chat(user, "Nanofrost launcher is still recharging.") + return + nanofrost_cooldown = TRUE + reagents.remove_any(100) + var/obj/effect/nanofrost_container/A = new /obj/effect/nanofrost_container(get_turf(src)) + log_game("[key_name(user)] used Nanofrost at [get_area(user)] ([user.x], [user.y], [user.z]).") + playsound(src,'sound/items/syringeproj.ogg', 40, TRUE) + for(var/a in 1 to 6) + step_towards(A, target) + sleep(2) + A.Smoke() + addtimer(VARSET_CALLBACK(src, nanofrost_cooldown, FALSE)) + if(METAL_FOAM) + if(!Adj) + return + if(metal_synthesis_cooldown >= 5) + to_chat(user, "Metal foam mix is still being synthesized.") + return + var/obj/effect/particle_effect/foam/F = new /obj/effect/particle_effect/foam(get_turf(target), TRUE) F.amount = 0 metal_synthesis_cooldown++ - spawn(100) - if(src) - metal_synthesis_cooldown-- - else - to_chat(user, "Metal foam mix is still being synthesized.") - return + addtimer(CALLBACK(src, PROC_REF(metal_cooldown)), 10 SECONDS) + +/obj/item/extinguisher/mini/nozzle/proc/metal_cooldown() + metal_synthesis_cooldown-- /obj/effect/nanofrost_container name = "nanofrost container" @@ -336,13 +332,10 @@ /obj/effect/nanofrost_container/proc/Smoke() var/datum/effect_system/smoke_spread/freezing/S = new - S.set_up(6, FALSE, loc, null, 1) + S.set_up(6, FALSE, loc, null, TRUE) S.start() - var/obj/effect/decal/cleanable/flour/F = new /obj/effect/decal/cleanable/flour(src.loc) - F.color = "#B2FFFF" - F.name = "nanofrost residue" - F.desc = "Residue left behind from a nanofrost detonation. Perhaps there was a fire here?" - playsound(src,'sound/effects/bamf.ogg',100,1) + new /obj/effect/decal/cleanable/flour/nanofrost(get_turf(src)) + playsound(src, 'sound/effects/bamf.ogg', 100, TRUE) qdel(src) #undef EXTINGUISHER diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 360e2150df1e..ab111432411c 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -49,7 +49,7 @@ icon_state = "taperoll-2" if((amount <= 6) && (amount > 4)) icon_state = "taperoll-3" - if((amount > 6)) + if(amount > 6) icon_state = "taperoll-4" else icon_state = "taperoll-4" diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index f335db6ae370..d8e18e42e5fb 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -1008,7 +1008,7 @@ user.do_attack_animation(H, ATTACK_EFFECT_DISARM) playsound(get_turf(user), 'sound/effects/woodhit.ogg', 50, TRUE, -1) H.AdjustConfused(4 SECONDS, 0, 4 SECONDS) //no stacking infinitely - H.adjustStaminaLoss(15) + H.apply_damage(15, STAMINA) add_attack_logs(user, H, "Swept with the brush of the titanium push broom", ATKLOG_ALL) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index e7ccfb48c2b6..fb5727c94d99 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -47,6 +47,8 @@ /obj/item/claymore name = "claymore" desc = "What are you standing around staring at this for? Get to killing!" + lefthand_file = 'icons/mob/inhands/weapons_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons_righthand.dmi' icon_state = "claymore" item_state = "claymore" flags = CONDUCT diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm index 23df94c2cf5d..eea0f7621fb1 100644 --- a/code/game/objects/items/weapons/whetstone.dm +++ b/code/game/objects/items/weapons/whetstone.dm @@ -31,11 +31,9 @@ if((signal_out & COMPONENT_BLOCK_SHARPEN_ALREADY) || (I.force > initial(I.force) && !(signal_out & COMPONENT_SHARPEN_APPLIED))) //No sharpening stuff twice to_chat(user, "[I] has already been refined before. It cannot be sharpened further!") return - if(!(signal_out & COMPONENT_SHARPEN_APPLIED)) //If the item has a relevant component and COMPONENT_BLOCK_SHARPEN_APPLIED is returned, the item only gets the throw force increase - I.force = clamp(I.force + increment, 0, max) if(istype(I, /obj/item/melee/energy)) var/obj/item/melee/energy/E = I - if(E.force_on > initial(E.force_on) || (E.force > initial(E.force))) + if(E.force_on > initial(E.force_on)) to_chat(user, "[E] is much too powerful to sharpen further!") return E.throwforce_on = clamp(E.throwforce_on + increment, 0, max) @@ -43,6 +41,9 @@ E.force_on = clamp(E.force_on + increment, 0, max) E.force_off = clamp(E.force_off + increment, 0, max) + if(!(signal_out & COMPONENT_SHARPEN_APPLIED)) //If the item has a relevant component and COMPONENT_BLOCK_SHARPEN_APPLIED is returned, the item only gets the throw force increase + I.force = clamp(I.force + increment, 0, max) + user.visible_message("[user] sharpens [I] with [src]!", "You sharpen [I], making it much more deadly than before.") if(!requires_sharpness) set_sharpness(TRUE) diff --git a/code/game/objects/mail.dm b/code/game/objects/mail.dm index 13f6601ecb7f..8da165a7be11 100644 --- a/code/game/objects/mail.dm +++ b/code/game/objects/mail.dm @@ -56,13 +56,13 @@ /obj/item/envelope/security icon_state = "mail_sec" - possible_contents = list(/obj/item/reagent_containers/food/snacks/donut/sprinkles, + possible_contents = list(/obj/item/food/snacks/donut/sprinkles, /obj/item/megaphone, /obj/item/clothing/mask/whistle, /obj/item/poster/random_official, /obj/item/restraints/handcuffs/pinkcuffs, /obj/item/restraints/legcuffs/bola/energy, - /obj/item/reagent_containers/food/drinks/coffee, + /obj/item/reagent_containers/drinks/coffee, /obj/item/stock_parts/cell/super, /obj/item/grenade/barrier/dropwall, /obj/item/toy/figure/crew/detective, @@ -92,7 +92,7 @@ /obj/item/envelope/supply icon_state = "mail_sup" possible_contents = list(/obj/item/reagent_containers/hypospray/autoinjector/survival, - /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, + /obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/clothing/glasses/meson/gar, /obj/item/stack/marker_beacon/ten, /obj/item/stack/medical/splint, @@ -113,7 +113,7 @@ /obj/item/reagent_containers/applicator/brute, /obj/item/reagent_containers/applicator/burn, /obj/item/clothing/glasses/sunglasses, - /obj/item/reagent_containers/food/snacks/fortunecookie, + /obj/item/food/snacks/fortunecookie, /obj/item/scalpel/laser/laser1, /obj/item/toy/figure/crew/cmo, /obj/item/toy/figure/crew/chemist, @@ -126,8 +126,8 @@ /obj/item/envelope/engineering icon_state = "mail_eng" possible_contents = list(/obj/item/airlock_electronics, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/snacks/candy/confectionery/nougat, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/food/snacks/candy/confectionery/nougat, /obj/item/mod/module/storage/large_capacity, /obj/item/weldingtool/hugetank, /obj/item/geiger_counter, @@ -143,7 +143,7 @@ icon_state = "mail_serv" possible_contents = list(/obj/item/painter, /obj/item/gun/energy/floragun, - /obj/item/reagent_containers/food/drinks/bottle/fernet, + /obj/item/reagent_containers/drinks/bottle/fernet, /obj/item/whetstone, /obj/item/soap/deluxe, /obj/item/stack/tile/disco_light/thirty, @@ -162,7 +162,7 @@ possible_contents = list(/obj/item/painter, /obj/item/stack/sheet/mineral/tranquillite/ten, /obj/item/stack/sheet/mineral/bananium/ten, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, + /obj/item/reagent_containers/drinks/bottle/bottleofnothing, /obj/item/gun/throw/piecannon, /obj/item/ammo_box/shotgun/confetti, /obj/item/book/manual/wiki/sop_security, // They'll need this. @@ -183,7 +183,7 @@ /obj/item/book/manual/wiki/sop_command, /obj/item/reagent_containers/patch/synthflesh, /obj/item/paper_bin/nanotrasen, - /obj/item/reagent_containers/food/snacks/spesslaw, + /obj/item/food/snacks/spesslaw, /obj/item/clothing/head/collectable/petehat, /obj/item/toy/figure/crew/captain, /obj/item/toy/figure/crew/lawyer, diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index fd263b11f9d4..a21489172e89 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -192,6 +192,11 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e SSacid.processing -= src deconstruct(FALSE) +/obj/cleaning_act(mob/user, atom/cleaner, cleanspeed, text_verb, text_description, text_targetname) + . = ..() + if(acid_level) + acid_level = 0 + //// FIRE /obj/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index d3eddd8b963d..5947d66a8010 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -33,6 +33,12 @@ /// Is it emagged or not? var/emagged = FALSE + // Access-related fields + var/list/req_access = null + var/req_access_txt = "0" + var/list/req_one_access = null + var/req_one_access_txt = "0" + /obj/New() ..() if(obj_integrity == null) @@ -62,7 +68,7 @@ // In the far future no checks are made in an overriding Topic() beyond if(..()) return // Instead any such checks are made in CanUseTopic() - if(ui_status(usr, state, href_list) == STATUS_INTERACTIVE) + if(ui_status(usr, state, href_list) == UI_INTERACTIVE) CouldUseTopic(usr) return FALSE @@ -134,7 +140,7 @@ var/is_in_use = FALSE var/list/nearby = viewers(1, src) for(var/mob/M in nearby) - if((M.client && M.machine == src)) + if(M.client && M.machine == src) is_in_use = TRUE src.attack_hand(M) if(isAI(usr) || isrobot(usr)) @@ -159,7 +165,7 @@ var/list/nearby = viewers(1, src) var/is_in_use = FALSE for(var/mob/M in nearby) - if((M.client && M.machine == src)) + if(M.client && M.machine == src) is_in_use = TRUE src.interact(M) var/ai_in_use = AutoUpdateAI(src) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 367d1c62648c..b719335d278f 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -77,7 +77,7 @@ if(!isturf(loc)) return FALSE - if(HAS_TRAIT(user, TRAIT_TABLE_LEAP)) + if(HAS_MIND_TRAIT(user, TRAIT_TABLE_LEAP)) user.visible_message("[user] gets ready to vault up onto [src]!") if(!do_after(user, 0.5 SECONDS, target = src)) return FALSE @@ -91,7 +91,7 @@ user.forceMove(get_turf(src)) if(get_turf(user) == get_turf(src)) - if(HAS_TRAIT(user, TRAIT_TABLE_LEAP)) + if(HAS_MIND_TRAIT(user, TRAIT_TABLE_LEAP)) user.visible_message("[user] leaps up onto [src]!") else user.visible_message("[user] climbs onto [src]!") @@ -154,6 +154,9 @@ return FALSE return TRUE +/obj/structure/proc/get_climb_text() + return "You can Click-Drag yourself to [src] to climb on top of it after a short delay." + /obj/structure/examine(mob/user) . = ..() if(!(resistance_flags & INDESTRUCTIBLE)) @@ -165,7 +168,7 @@ if(examine_status) . += examine_status if(climbable) - . += "You can Click-Drag someone to [src] to put them on the table after a short delay." + . += get_climb_text() /obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls. var/healthpercent = (obj_integrity/max_integrity) * 100 diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index c11b47c82cdc..9beb67b5e35e 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -111,7 +111,7 @@ icon = 'icons/obj/smooth_structures/alien/resin_door.dmi' icon_state = "resin" base_icon_state = "resin" - max_integrity = 100 + max_integrity = 60 armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 50) damage_deflection = 0 flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 @@ -156,7 +156,7 @@ /obj/structure/alien/resin/door/CanAtmosPass(turf/T) return !density -/obj/structure/alien/resin/door/proc/try_to_operate(mob/user) +/obj/structure/alien/resin/door/proc/try_to_operate(mob/user, bumped_open = FALSE) if(is_operating) return if(!iscarbon(user)) @@ -164,7 +164,7 @@ var/mob/living/carbon/C = user if(C.get_int_organ(/obj/item/organ/internal/alien/hivenode)) if(!C.handcuffed) - operate() + operate(bumped_open) return to_chat(user, "Your lack of connection to the hive prevents the resin door from opening") /* @@ -178,7 +178,7 @@ return operate() -/obj/structure/alien/resin/door/proc/operate() +/obj/structure/alien/resin/door/proc/operate(bumped_open = FALSE) is_operating = TRUE if(!state_open) playsound(loc, open_sound, 50, TRUE) @@ -194,14 +194,14 @@ density = !density opacity = !opacity state_open = !state_open - addtimer(CALLBACK(src, PROC_REF(operate_update)), 1 SECONDS) + addtimer(CALLBACK(src, PROC_REF(operate_update), bumped_open), 1 SECONDS) -/obj/structure/alien/resin/door/proc/operate_update() +/obj/structure/alien/resin/door/proc/operate_update(bumped_open) air_update_turf(1) update_icon(UPDATE_ICON_STATE) is_operating = FALSE - if(state_open) + if(state_open && bumped_open) addtimer(CALLBACK(src, PROC_REF(mobless_try_to_operate)), close_delay) /obj/structure/alien/resin/door/update_icon_state() @@ -219,7 +219,7 @@ /obj/structure/alien/resin/door/Bumped(atom/user) ..() if(!state_open) - return try_to_operate(user) + return try_to_operate(user, TRUE) /* * Weeds diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 039698d630ab..d34c9007ffb0 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -132,7 +132,8 @@ to_chat(user, "Nothing interesting happens!") return to_chat(user, "You emag the barsign. Takeover in progress...") - addtimer(CALLBACK(src, PROC_REF(post_emag)), 100) + addtimer(CALLBACK(src, PROC_REF(post_emag)), 10 SECONDS) + return TRUE /obj/structure/sign/barsign/proc/post_emag() if(broken || emagged) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index d27a430d7e9f..0cf7d24743a1 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -11,13 +11,13 @@ close_sound_volume = 50 /obj/structure/closet/secure_closet/bar/populate_contents() - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm index 7938db083027..28d421596d69 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm @@ -27,10 +27,11 @@ new /obj/item/clothing/accessory/medal/supply(src) new /obj/item/rcs(src) new /obj/item/destTagger(src) - new /obj/item/reagent_containers/food/drinks/mug/qm(src) + new /obj/item/reagent_containers/drinks/mug/qm(src) new /obj/item/flash(src) new /obj/item/cartridge/qm(src) new /obj/item/storage/bag/mail(src) + new /obj/item/melee/knuckleduster/nanotrasen(src) /obj/structure/closet/secure_closet/quartermaster/lavaland //used in mining outpost name = "quartermaster's secondary locker" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm index 7794cdbbc106..3d00876ed713 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm @@ -24,12 +24,13 @@ new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/door_remote/chief_engineer(src) new /obj/item/rpd(src) - new /obj/item/reagent_containers/food/drinks/mug/ce(src) + new /obj/item/reagent_containers/drinks/mug/ce(src) new /obj/item/organ/internal/eyes/cybernetic/meson(src) new /obj/item/clothing/accessory/medal/engineering(src) new /obj/item/holosign_creator/atmos(src) new /obj/item/rcd/preloaded(src) new /obj/item/organ/internal/cyberimp/brain/wire_interface(src) + new /obj/item/storage/bag/construction(src) /obj/structure/closet/secure_closet/engineering_electrical @@ -92,6 +93,7 @@ new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/cartridge/engineering(src) new /obj/item/clothing/head/beret/eng(src) + new /obj/item/storage/bag/construction(src) /obj/structure/closet/secure_closet/atmos_personal 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 a4a2f4a77087..e678e4952108 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -15,9 +15,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen/populate_contents() for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/condiment/flour(src) - new /obj/item/reagent_containers/food/condiment/rice(src) - new /obj/item/reagent_containers/food/condiment/sugar(src) + new /obj/item/reagent_containers/condiment/flour(src) + new /obj/item/reagent_containers/condiment/rice(src) + new /obj/item/reagent_containers/condiment/sugar(src) /obj/structure/closet/secure_closet/freezer/kitchen/mining @@ -30,9 +30,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen/maintenance/populate_contents() for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/milk(src) + new /obj/item/reagent_containers/condiment/milk(src) for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/soymilk(src) + new /obj/item/reagent_containers/condiment/soymilk(src) for(var/i = 0, i < 2, i++) new /obj/item/storage/fancy/egg_box(src) @@ -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/food/snacks/meat/monkey(src) /obj/structure/closet/secure_closet/freezer/meat/open req_access = null @@ -56,8 +56,8 @@ /obj/structure/closet/secure_closet/freezer/fridge/populate_contents() for(var/i in 1 to 5) - new /obj/item/reagent_containers/food/condiment/milk(src) - new /obj/item/reagent_containers/food/condiment/soymilk(src) + new /obj/item/reagent_containers/condiment/milk(src) + new /obj/item/reagent_containers/condiment/soymilk(src) for(var/i in 1 to 2) new /obj/item/storage/fancy/egg_box(src) 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 ab0ba13a0261..710979b6f833 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -19,6 +19,7 @@ locked = FALSE to_chat(user, "You break the lock on [src].") update_icon() + return TRUE /obj/structure/closet/secure_closet/guncabinet/update_overlays() . = list() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm index 7ef37f41ed32..9a0f455f0d46 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm @@ -135,7 +135,7 @@ new /obj/item/storage/pill_bottle/psychiatrist(src) new /obj/random/plushie(src) for(var/i in 0 to 3) - var/candy = pick(subtypesof(/obj/item/reagent_containers/food/snacks/candy/fudge)) + var/candy = pick(subtypesof(/obj/item/food/snacks/candy/fudge)) new candy(src) /obj/structure/closet/secure_closet/CMO @@ -163,7 +163,7 @@ new /obj/item/reagent_containers/hypospray/CMO(src) new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src) new /obj/item/door_remote/chief_medical_officer(src) - new /obj/item/reagent_containers/food/drinks/mug/cmo(src) + new /obj/item/reagent_containers/drinks/mug/cmo(src) new /obj/item/clothing/accessory/medal/medical(src) new /obj/item/storage/briefcase(src) new /obj/item/clothing/mask/gas(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm b/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm index fc7bafad01d0..ee2c5e262ea6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm @@ -17,7 +17,7 @@ new /obj/item/clown_recorder(src) new /obj/item/bikehorn(src) new /obj/item/reagent_containers/spray/waterflower(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/seeds/banana(src) new /obj/item/restraints/handcuffs/toy(src) @@ -44,7 +44,7 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/storage/backpack/mime(src) new /obj/item/toy/crayon/mime(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(src) new /obj/item/cane(src) /obj/structure/closet/secure_closet/syndicate_officer diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 73f75df0569a..85cf3434504a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -57,7 +57,7 @@ new /obj/item/flash(src) new /obj/item/laser_pointer(src) new /obj/item/door_remote/research_director(src) - new /obj/item/reagent_containers/food/drinks/mug/rd(src) + new /obj/item/reagent_containers/drinks/mug/rd(src) new /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic(src) new /obj/item/clothing/accessory/medal/science(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 a1ad8350df0a..c6015152be6c 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 @@ -56,7 +56,7 @@ visible_message("The locker has been [locked ? null : "un"]locked by [user].") update_icon() else - to_chat(user, "Access Denied") + to_chat(user, "Access Denied.") /obj/structure/closet/secure_closet/closed_item_click(mob/user) togglelock(user) @@ -74,6 +74,7 @@ add_overlay("sparking") to_chat(user, "You break the lock on [src].") addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 1 SECONDS) + return TRUE /obj/structure/closet/secure_closet/attack_hand(mob/user) add_fingerprint(user) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm index ebda73462c86..4affb212385b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm @@ -18,7 +18,7 @@ new /obj/item/gun/energy/gun(src) new /obj/item/flash(src) new /obj/item/door_remote/captain(src) - new /obj/item/reagent_containers/food/drinks/mug/cap(src) + new /obj/item/reagent_containers/drinks/mug/cap(src) new /obj/item/tank/internals/emergency_oxygen/double(src) /obj/structure/closet/secure_closet/hop @@ -35,7 +35,7 @@ new /obj/item/gun/energy/gun/mini(src) new /obj/item/flash(src) new /obj/item/door_remote/civillian(src) - new /obj/item/reagent_containers/food/drinks/mug/hop(src) + new /obj/item/reagent_containers/drinks/mug/hop(src) new /obj/item/clothing/accessory/medal/service(src) new /obj/item/storage/bag/garment/head_of_personnel(src) @@ -62,10 +62,10 @@ new /obj/item/storage/belt/security/full(src) new /obj/item/gun/energy/gun/hos(src) new /obj/item/door_remote/head_of_security(src) - new /obj/item/reagent_containers/food/drinks/mug/hos(src) + new /obj/item/reagent_containers/drinks/mug/hos(src) new /obj/item/organ/internal/cyberimp/eyes/hud/security(src) new /obj/item/clothing/accessory/medal/security(src) - new /obj/item/reagent_containers/food/drinks/flask/barflask(src) + new /obj/item/reagent_containers/drinks/flask/barflask(src) new /obj/item/clothing/mask/gas/sechailer(src) /obj/structure/closet/secure_closet/warden @@ -112,6 +112,14 @@ new /obj/item/clothing/head/helmet(src) new /obj/item/clothing/suit/armor/secjacket(src) +/obj/structure/closet/secure_closet/evidence + name = "evidence locker" + req_access = list(ACCESS_SEC_DOORS) + anchored = TRUE + +/obj/structure/closet/secure_closet/evidence/detective + req_access = list(ACCESS_FORENSICS_LOCKERS) + /obj/structure/closet/secure_closet/blueshield name = "blueshield's locker" req_access = list(ACCESS_BLUESHIELD) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index c07464d48ad1..38240e163151 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -115,4 +115,4 @@ if(user) user.dust() dump_contents() - visible_message("[src] shatters!. ") + visible_message("[src] shatters!") diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 8323cfac71a4..d2d3050e71f9 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -37,8 +37,8 @@ if(by_hand) for(var/obj/O in src) if(O.density) - var/response = alert(usr, "This crate has been packed with bluespace compression, an item inside won't fit back inside. Are you sure you want to open it?","Bluespace Compression Warning", "Yes", "No") - if(response == "No" || !Adjacent(usr)) + var/response = tgui_alert(usr, "This crate has been packed with bluespace compression, an item inside won't fit back inside. Are you sure you want to open it?", "Bluespace Compression Warning", list("Yes", "No")) + if(response != "Yes" || !Adjacent(usr)) return FALSE break @@ -225,7 +225,7 @@ visible_message("The crate has been [locked ? null : "un"]locked by [user].") update_icon() else - to_chat(user, "Access Denied") + to_chat(user, "Access Denied.") /obj/structure/closet/crate/secure/AltClick(mob/user) if(Adjacent(user) && !opened) @@ -259,8 +259,9 @@ locked = FALSE broken = TRUE update_icon() - do_sparks(2, 1, src) + do_sparks(2, TRUE, src) to_chat(user, "You unlock \the [src].") + return TRUE /obj/structure/closet/crate/secure/emp_act(severity) for(var/obj/O in src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index dba2daeb782a..bf94750fbae3 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -42,6 +42,7 @@ emagged = TRUE toggle_lock() + return TRUE /obj/structure/displaycase/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 01c0099884bc..7109ea8444b1 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -253,11 +253,11 @@ . = ..() icon_state = "fullgrass_[rand(1, 3)]" - +// Kirby plants /obj/item/kirbyplants name = "potted plant" icon = 'icons/obj/flora/plants.dmi' - icon_state = "plant-1" + icon_state = "random_plant" anchored = FALSE layer = ABOVE_MOB_LAYER w_class = WEIGHT_CLASS_HUGE @@ -270,9 +270,10 @@ /obj/item/kirbyplants/Initialize(mapload) . = ..() - icon_state = "plant-[rand(1,35)]" - if(prob(1)) - icon_state = "plant-36" + if(prob(1) && icon_state == "random_plant") + icon_state = "plant-eye" + if(icon_state == "random_plant") + icon_state = "plant-[rand(1, 34)]" AddComponent(/datum/component/two_handed, require_twohands = TRUE) /obj/item/kirbyplants/Destroy() @@ -314,10 +315,117 @@ ..() unhide_user(user) +/obj/item/kirbyplants/plant1 + icon_state = "plant-1" + +/obj/item/kirbyplants/plant2 + icon_state = "plant-2" + +/obj/item/kirbyplants/plant3 + icon_state = "plant-3" + +/obj/item/kirbyplants/plant4 + icon_state = "plant-4" + +/obj/item/kirbyplants/plant5 + icon_state = "plant-5" + +/obj/item/kirbyplants/plant6 + icon_state = "plant-6" + +/obj/item/kirbyplants/plant7 + icon_state = "plant-7" + +/obj/item/kirbyplants/plant8 + icon_state = "plant-8" + +/obj/item/kirbyplants/plant9 + icon_state = "plant-9" + +/obj/item/kirbyplants/plant10 + icon_state = "plant-10" + +/obj/item/kirbyplants/plant11 + icon_state = "plant-11" + +/obj/item/kirbyplants/plant12 + icon_state = "plant-12" + +/obj/item/kirbyplants/plant13 + icon_state = "plant-13" + +/obj/item/kirbyplants/plant14 + icon_state = "plant-14" + +/obj/item/kirbyplants/plant15 + icon_state = "plant-15" + +/obj/item/kirbyplants/plant16 + icon_state = "plant-16" + +/obj/item/kirbyplants/plant17 + icon_state = "plant-17" + +/obj/item/kirbyplants/plant18 + icon_state = "plant-18" + +/obj/item/kirbyplants/plant19 + icon_state = "plant-19" + +/obj/item/kirbyplants/plant20 + icon_state = "plant-20" + +/obj/item/kirbyplants/plant21 + icon_state = "plant-21" + +/obj/item/kirbyplants/plant22 + icon_state = "plant-22" + +/obj/item/kirbyplants/plant23 + icon_state = "plant-23" + +/obj/item/kirbyplants/plant24 + icon_state = "plant-24" + +/obj/item/kirbyplants/plant25 + icon_state = "plant-25" + +/obj/item/kirbyplants/plant26 + icon_state = "plant-26" + +/obj/item/kirbyplants/plant27 + icon_state = "plant-27" + +/obj/item/kirbyplants/plant28 + icon_state = "plant-28" + +/obj/item/kirbyplants/plant29 + icon_state = "plant-29" + +/obj/item/kirbyplants/plant30 + icon_state = "plant-30" + +/obj/item/kirbyplants/plant31 + icon_state = "plant-31" + +/obj/item/kirbyplants/plant32 + icon_state = "plant-32" + +/obj/item/kirbyplants/plant33 + icon_state = "plant-33" + +/obj/item/kirbyplants/plant34 + icon_state = "plant-34" + +/obj/item/kirbyplants/applebush + icon_state = "applebush" + /obj/item/kirbyplants/dead + icon_state = "plant-dead" + +/obj/item/kirbyplants/dead/rd name = "\improper RD's potted plant" desc = "A gift from the botanical staff, presented after the RD's reassignment. There's a tag on it that says \"Y'all come back now, y'hear?\"\nIt doesn't look very healthy..." - icon_state = "plant-dead" //a rock is flora according to where the icon file is //and now these defines diff --git a/code/game/objects/structures/grey_autocloner.dm b/code/game/objects/structures/grey_autocloner.dm index 8e444ae070f5..5178e6eadcfe 100644 --- a/code/game/objects/structures/grey_autocloner.dm +++ b/code/game/objects/structures/grey_autocloner.dm @@ -56,7 +56,6 @@ R.dna = new /datum/dna() var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.set_species(/datum/species/grey) //This is a grey cloner after all. Funnier this way tbh occupant = H if(!R.dna.real_name) //to prevent null names @@ -66,6 +65,8 @@ H.dna = R.dna.Clone() + H.set_species(/datum/species/grey) //This is a grey cloner after all. Funnier this way tbh + for(var/datum/language/L in R.languages) H.add_language(L.name) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm deleted file mode 100644 index 8b5f6a8365ac..000000000000 --- a/code/game/objects/structures/ladders.dm +++ /dev/null @@ -1,202 +0,0 @@ -// Basic ladder. By default links to the z-level above/below. -/obj/structure/ladder - name = "ladder" - desc = "A sturdy metal ladder." - icon = 'icons/obj/structures.dmi' - icon_state = "ladder11" - anchored = TRUE - var/obj/structure/ladder/down //the ladder below this one - var/obj/structure/ladder/up //the ladder above this one - var/use_verb = "climb" - -/obj/structure/ladder/Initialize(mapload, obj/structure/ladder/up, obj/structure/ladder/down) - . = ..() - if(up) - src.up = up - up.down = src - up.update_icon() - if(down) - src.down = down - down.up = src - down.update_icon() - return INITIALIZE_HINT_LATELOAD - -/obj/structure/ladder/Destroy(force) - if((resistance_flags & INDESTRUCTIBLE) && !force) - return QDEL_HINT_LETMELIVE - disconnect() - return ..() - -/obj/structure/ladder/LateInitialize() - // By default, discover ladders above and below us vertically - var/turf/T = get_turf(src) - - if(!down) - 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() - break - if(!up) - for(var/obj/structure/ladder/L in locate(T.x, T.y, T.z + 1)) - up = L - L.down = src // Don't waste effort looping the other way - L.update_icon() - break - - update_icon() - -/obj/structure/ladder/proc/disconnect() - if(up && up.down == src) - up.down = null - up.update_icon() - if(down && down.up == src) - down.up = null - down.update_icon() - up = down = null - -/obj/structure/ladder/update_icon_state() - if(up && down) - icon_state = "ladder11" - - else if(up) - icon_state = "ladder10" - - else if(down) - icon_state = "ladder01" - - else //wtf make your ladders properly assholes - icon_state = "ladder00" - -/obj/structure/ladder/singularity_pull() - if(!(resistance_flags & INDESTRUCTIBLE)) - visible_message("[src] is torn to pieces by the gravitational pull!") - qdel(src) - -/obj/structure/ladder/proc/travel(going_up, mob/user, is_ghost, obj/structure/ladder/ladder) - if(!is_ghost) - show_fluff_message(going_up, user) - ladder.add_fingerprint(user) - - var/turf/T = get_turf(ladder) - var/atom/movable/AM - if(user.pulling) - AM = user.pulling - AM.forceMove(T) - user.forceMove(T) - if(AM) - user.start_pulling(AM) - -/obj/structure/ladder/proc/use(mob/user, is_ghost = FALSE) - if(!is_ghost && !in_range(src, user)) - return - - if(up && down) - var/result = alert("Go up or down [src]?", "[name]", "Up", "Down", "Cancel") - if(!is_ghost && !in_range(src, user)) - return // nice try - switch(result) - if("Up") - travel(TRUE, user, is_ghost, up) - if("Down") - travel(FALSE, user, is_ghost, down) - if("Cancel") - return - else if(up) - travel(TRUE, user, is_ghost, up) - else if(down) - travel(FALSE, user, is_ghost, down) - else - to_chat(user, "[src] doesn't seem to lead anywhere!") - - if(!is_ghost) - add_fingerprint(user) - -/obj/structure/ladder/attack_hand(mob/user) - use(user) - -/obj/structure/ladder/attackby(obj/item/W, mob/user, params) - return use(user) - -/obj/structure/ladder/attack_robot(mob/living/silicon/robot/R) - if(R.Adjacent(src)) - return use(R) - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/obj/structure/ladder/attack_ghost(mob/dead/observer/user) - use(user, TRUE) - -/obj/structure/ladder/proc/show_fluff_message(going_up, mob/user) - if(going_up) - user.visible_message("[user] climbs up [src].","You [use_verb] up [src].") - else - user.visible_message("[user] climbs down [src].","You [use_verb] down [src].") - - -// Indestructible away mission ladders which link based on a mapped ID and height value rather than X/Y/Z. -/obj/structure/ladder/unbreakable - name = "sturdy ladder" - desc = "An extremely sturdy metal ladder." - resistance_flags = INDESTRUCTIBLE - var/id - var/height = 0 // higher numbers are considered physically higher - -/obj/structure/ladder/unbreakable/Initialize(mapload) - GLOB.ladders += src - return ..() - -/obj/structure/ladder/unbreakable/Destroy() - . = ..() - if(. != QDEL_HINT_LETMELIVE) - GLOB.ladders -= src - -/obj/structure/ladder/unbreakable/LateInitialize() - // Override the parent to find ladders based on being height-linked - if(!id || (up && down)) - update_icon() - return - - for(var/O in GLOB.ladders) - var/obj/structure/ladder/unbreakable/L = O - if(L.id != id) - continue // not one of our pals - if(!down && L.height == height - 1) - down = L - L.up = src - L.update_icon() - 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() - if(down) - break // break if both our connections are filled - - update_icon() - -/obj/structure/ladder/unbreakable/dive_point/buoy - name = "diving point buoy" - desc = "A buoy marking the location of an underwater dive area." - icon = 'icons/misc/beach.dmi' - icon_state = "buoy" - id = "dive" - height = 2 - use_verb = "swim" - layer = MOB_LAYER + 0.2 //0.1 higher than the water overlay, this also means people can "swim" behind/under it - -/obj/structure/ladder/unbreakable/dive_point/anchor - name = "diving point anchor" - desc = "An anchor tethered to the buoy at the surface, to keep the dive area marked." - icon = 'icons/misc/beach.dmi' - icon_state = "anchor" - id = "dive" - height = 1 - light_range = 5 - -/obj/structure/ladder/dive_point/Initialize(mapload) - . = ..() - set_light(light_range, light_power) //magical glowing anchor - -/obj/structure/ladder/unbreakable/dive_point/update_icon_state() - return diff --git a/code/game/objects/structures/lavaland/ladder.dm b/code/game/objects/structures/lavaland/ladder.dm new file mode 100644 index 000000000000..876999997525 --- /dev/null +++ b/code/game/objects/structures/lavaland/ladder.dm @@ -0,0 +1,6 @@ +/obj/structure/ladder/unusable + name = "shattered ladder" + desc = "The shattered remnants of a ladder hanging over the pitch-black chasm, providing no safe route to the abyss beneath. Its fractured rungs suggest an inevitable plunge, as if the remainder might soon join the void." + icon = 'icons/obj/structures.dmi' + icon_state = "ladder" + anchored = TRUE diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index 27d1a9f40638..8a6288792b5b 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_EMPTY(tendrils) /obj/effect/collapse/Initialize(mapload) . = ..() emitted_light = new(loc) - visible_message("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!") + visible_message("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!") visible_message("Something falls free of the tendril!") playsound(loc, 'sound/effects/tendril_destroyed.ogg', 200, FALSE, 50, TRUE, TRUE) addtimer(CALLBACK(src, PROC_REF(collapse)), 50) @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(tendrils) for(var/mob/M in range(7, src)) shake_camera(M, 15, 1) playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, TRUE) - visible_message("The tendril falls inward, the ground around it widening into a yawning chasm!") + visible_message("The tendril falls inward, the ground around it widening into a yawning chasm!") for(var/turf/T in range(2,src)) if(!T.density) T.TerraformTurf(/turf/simulated/floor/chasm/straight_down/lava_land_surface) diff --git a/code/game/objects/structures/misc_structures.dm b/code/game/objects/structures/misc_structures.dm index 26b4e7dc7a01..3a33788ae4ac 100644 --- a/code/game/objects/structures/misc_structures.dm +++ b/code/game/objects/structures/misc_structures.dm @@ -22,8 +22,7 @@ /obj/structure/ninjatele/attack_hand(mob/user as mob) if(user.mind.special_role=="Ninja") - switch(alert("Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)",,"Yes","No")) - + switch(tgui_alert(user, "Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)", "Void Shift", list("Yes", "No"))) if("Yes") if(user.z != src.z) return @@ -55,8 +54,8 @@ /obj/structure/respawner/attack_ghost(mob/dead/observer/user) if(check_rights(R_EVENT)) - var/outfit_pick = alert(user, "Do you want to pick an outfit or respawn?", "Pick an Outfit?", "Pick outfit", "Respawn", "Cancel") - if(outfit_pick == "Cancel") + var/outfit_pick = tgui_alert(user, "Do you want to pick an outfit or respawn?", "Pick an Outfit?", list("Pick outfit", "Respawn", "Cancel")) + if(!outfit_pick || outfit_pick == "Cancel") return if(outfit_pick == "Pick outfit") var/new_outfit = user.client.robust_dress_shop() @@ -70,7 +69,7 @@ selected_outfit = new_outfit return - var/response = alert(user, "Are you sure you want to spawn here?\n(If you do this, you won't be able to be cloned!)", "Respawn?", "Yes", "No") + var/response = tgui_alert(user, "Are you sure you want to spawn here?\n(If you do this, you won't be able to be cloned!)", "Respawn?", list("Yes", "No")) if(response == "Yes") var/turf/respawner_location = get_turf(src) if(!respawner_location) // gotta check it still exists, else you'll get sent to nullspace diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 7174c642cf6d..e7281879e280 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -152,6 +152,10 @@ update_state() return +/obj/structure/morgue/attack_ai(mob/user) + if(isrobot(user) && Adjacent(user)) //Robots can open/close it, but not the AI + attack_hand(user) + /obj/structure/morgue/attack_animal(mob/living/user) if(user.a_intent == INTENT_HARM) return ..() @@ -266,22 +270,6 @@ qdel(src) return -/obj/structure/m_tray/attack_animal(mob/living/user) - if(user.a_intent == INTENT_HARM) - return ..() - if(user.mob_size < MOB_SIZE_HUMAN) - return ..() - if(!user.mind) //Stops mindless mobs from doing weird stuff with them - return ..() - attack_hand(user) - -/obj/structure/m_tray/attack_alien(mob/user) - if(user.a_intent == INTENT_HARM) - return ..() - if(!user.mind) - return ..() - attack_hand(user) - /obj/structure/m_tray/MouseDrop_T(atom/movable/O, mob/living/user) if((!(istype(O, /atom/movable)) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) return diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 5ffc0ab9d50c..b74f52a1d3b7 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -52,7 +52,7 @@ if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open return var/obj/item/P = locate(href_list["remove"]) - if((P && P.loc == src)) + if(P && P.loc == src) P.loc = get_turf(src) //dump paper on the floor because you're a clumsy fuck P.add_fingerprint(usr) add_fingerprint(usr) @@ -77,6 +77,6 @@ if(href_list["read"]) var/obj/item/paper/P = locate(href_list["read"]) - if((P && P.loc == src)) + if(P && P.loc == src) P.show_content(usr) return diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 08ad6fd86b4c..126142a7e6f3 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -78,7 +78,7 @@ /obj/structure/plasticflaps/CanPathfindPass(obj/item/card/id/ID, to_dir, caller, no_id = FALSE) if(isliving(caller)) - if(isbot(caller)) + if(isbot(caller) || isdrone(caller)) return TRUE var/mob/living/M = caller diff --git a/code/game/objects/structures/pondering_orb.dm b/code/game/objects/structures/pondering_orb.dm new file mode 100644 index 000000000000..2cfbddc9ef6e --- /dev/null +++ b/code/game/objects/structures/pondering_orb.dm @@ -0,0 +1,29 @@ +/obj/structure/pondering_orb + name = "pondering orb" + desc = "Ponder your plans for the station using this farsight artefact." + icon = 'icons/obj/wizard.dmi' + icon_state = "scrying_orb" //TODO : Placeholder sprite + anchored = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + var/mob/dead/observer/ghost // owners ghost when active + +/obj/structure/pondering_orb/attack_hand(mob/user) + ADD_TRAIT(user, SCRYING, SCRYING_ORB) + user.visible_message("[user] stares into [src], [user.p_their()] eyes glazing over.", + "You stare into [src], you can see the entire universe!") + ghost = user.ghostize(TRUE, COLOR_BLUE, "Magic Spirit of [user.name]") + while(!QDELETED(user)) + if(user.key || QDELETED(src)) + user.visible_message("[user] blinks, returning to the world around [user.p_them()].", + "You look away from [src].") + break + if(!Adjacent(user)) + user.grab_ghost() + user.visible_message("[user]'s focus is forced away from [src].", + "Your vision is ripped away from [src].") + break + sleep(5) + if(QDELETED(user)) + return + user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, COLOR_BLUE) + REMOVE_TRAIT(user, SCRYING, SCRYING_ORB) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 3ff5c2635353..266460cc6a9d 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -12,6 +12,9 @@ var/currently_climbed = FALSE var/mover_dir = null +/obj/structure/railing/get_climb_text() + return "You can Click-Drag yourself to [src] to climb over it after a short delay." + /obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch icon_state = "railing_corner" density = FALSE diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index dc4141592faf..63eaf9932be9 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -147,7 +147,7 @@ GLOBAL_LIST_EMPTY(safes) return TRUE if(drill && !broken) - switch(alert("What would you like to do?", "Thermal Drill", "Turn [drill_timer ? "Off" : "On"]", "Remove Drill", "Cancel")) + switch(tgui_alert(user, "What would you like to do?", "Thermal Drill", list("Turn [drill_timer ? "Off" : "On"]", "Remove Drill", "Cancel"))) if("Turn On") if(do_after(user, 2 SECONDS, target = src)) drill_timer = addtimer(CALLBACK(src, PROC_REF(drill_open)), time_to_drill, TIMER_STOPPABLE) @@ -221,16 +221,21 @@ GLOBAL_LIST_EMPTY(safes) to_chat(user, "You can't put [I] into the safe while it is closed!") return -/obj/structure/safe/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - var/datum/asset/safe_assets = get_asset_datum(/datum/asset/simple/safe) - safe_assets.send(user) +/obj/structure/safe/ui_state(mob/user) + return GLOB.physical_state - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/structure/safe/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Safe", name, 600, 750) + ui = new(user, src, "Safe", name) ui.open() ui.set_autoupdate(FALSE) +/obj/structure/safe/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/safe) + ) + /obj/structure/safe/ui_data(mob/user) var/list/data = list() data["dial"] = dial diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 8213944e888b..4503aa524c4b 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -62,14 +62,12 @@ /obj/item/sign/screwdriver_act(mob/living/user, obj/item/I) if(!isturf(user.loc)) // Why does this use user? This should just be loc. return + . = TRUE // These return values gotta be true or we stab the sign + var/direction = tgui_input_list(user, "Which direction will this sign be moved?", "Select direction,", list("North", "East", "South", "West", "Cancel")) + if(direction == "Cancel" || QDELETED(src)) + 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/S = new(user.loc) //This is really awkward to use user.loc + var/obj/structure/sign/S = new(get_turf(user)) switch(direction) if("North") S.pixel_y = 32 @@ -80,13 +78,12 @@ if("West") S.pixel_x = -32 else - return TRUE // We dont want to stab it or place it, so we return + return S.name = name S.desc = desc S.icon_state = sign_state to_chat(user, "You fasten [S] with your [I].") qdel(src) - return TRUE /obj/structure/sign/double/map name = "station map" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index c7310b9141db..c62d9d426ac9 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -27,7 +27,6 @@ return return ..() - /obj/structure/statue/welder_act(mob/user, obj/item/I) if(anchored) return @@ -39,7 +38,6 @@ WELDER_SLICING_SUCCESS_MESSAGE deconstruct(TRUE) - /obj/structure/statue/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) @@ -332,7 +330,7 @@ desc = "Just like the ones you remember from childhood!" /obj/structure/snowman/built/Destroy() - new /obj/item/reagent_containers/food/snacks/grown/carrot(drop_location()) + new /obj/item/food/snacks/grown/carrot(drop_location()) new /obj/item/grown/log(drop_location()) new /obj/item/grown/log(drop_location()) return ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 25b08b00413b..3313812d833d 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -110,3 +110,118 @@ /obj/structure/bed/nest/prevents_buckled_mobs_attacking() return TRUE + +/obj/structure/bed/revival_nest + name = "alien rejuvenation nest" + desc = "It's a gruesome pile of thick, sticky resin shaped like a flytrap. Heals damaged aliens and slowly revives the dead, breaks down non xenos and uses their genetic soup to make an alien egg." + icon = 'icons/mob/alien.dmi' + icon_state = "placeholder_rejuv_nest" + max_integrity = 30 + var/image/nest_overlay + comfort = 0 + flags = NODECONSTRUCT + var/processing_ticks = 0 + var/revive_or_decay_timer + +/obj/structure/bed/revival_nest/user_unbuckle_mob(mob/living/buckled_mob, mob/user) + for(var/mob/living/M in buckled_mobs) //breaking a nest releases all the buckled mobs, because the nest isn't holding them down anymore + if(HAS_TRAIT(user, TRAIT_XENO_IMMUNE)) + unbuckle_mob(M) + add_fingerprint(user) + return + + if(M != user) + M.visible_message("[user] tears [M] out of the rejuvination pod!",\ + "[user] pulls you free from the rejuvination pod!",\ + "You hear squelching...") + else + M.visible_message("[M] struggles to break free from the rejuvination pod!",\ + "You struggle to break free from the rejuvination pod... (Stay still for 15 seconds.)",\ + "You hear squelching...") + if(!do_after(M, 15 SECONDS, target = src)) + if(M && M.buckled) + to_chat(M, "You fail to escape \the [src]!") + return + if(!M.buckled) + return + M.visible_message("[M] breaks free from the rejuvination pod!",\ + "You break free from the rejuvination pod!",\ + "You hear squelching...") + unbuckle_mob(M) + add_fingerprint(user) + +/obj/structure/bed/revival_nest/post_unbuckle_mob(mob/living/M) + STOP_PROCESSING(SSobj, src) + deltimer(revive_or_decay_timer) + +/obj/structure/bed/revival_nest/process() + for(var/mob/living/buckled_mob in buckled_mobs) + processing_ticks++ + if(isalien(buckled_mob)) + buckled_mob.adjustBruteLoss(-5) + buckled_mob.adjustFireLoss(-5) + buckled_mob.adjustToxLoss(-5) + buckled_mob.adjustOxyLoss(-5) + buckled_mob.adjustCloneLoss(-5) + for(var/datum/disease/virus in buckled_mob.viruses) + if(virus.stage < 1 && processing_ticks >= 4) + virus.cure() + processing_ticks = 0 + if(virus.stage > 1 && processing_ticks >= 4) + virus.stage-- + processing_ticks = 0 + if(buckled_mob.stat == DEAD && !revive_or_decay_timer) + revive_or_decay_timer = addtimer(CALLBACK(src, PROC_REF(revive_dead_alien), buckled_mob), 40 SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE) + else + buckled_mob.adjustBruteLoss(3) + buckled_mob.adjustFireLoss(3) + +/obj/structure/bed/revival_nest/proc/revive_dead_alien(mob/living/carbon/alien/dead_alien) + dead_alien.revive() + dead_alien.visible_message("Vines seep into the back of [dead_alien], and it awakes with a burning rage!") + if(dead_alien.ghost_can_reenter()) + var/mob/dead/observer/dead_bro = dead_alien.grab_ghost() + SEND_SOUND(dead_alien, sound('sound/voice/hiss5.ogg')) + if(isalienqueen(dead_alien)) + for(var/mob/living/carbon/alien/humanoid/queen/living_queen in GLOB.alive_mob_list) + if(living_queen.key || !living_queen.get_int_organ(/obj/item/organ/internal/brain)) + to_chat(dead_bro, "We already have an alive queen. We've been reverted to our drone form!") + qdel(dead_alien) + var/mob/living/carbon/alien/humanoid/drone/new_drone = new(get_turf(src)) + new_drone.key = dead_bro.key + else + var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as [dead_alien]?", ROLE_ALIEN, FALSE, source = dead_alien) + if(!length(candidates)) + return + var/mob/C = pick(candidates) + dead_alien.key = C.key + dust_if_respawnable(C) + dead_alien.mind.name = dead_alien.name + dead_alien.mind.assigned_role = SPECIAL_ROLE_XENOMORPH + dead_alien.mind.special_role = SPECIAL_ROLE_XENOMORPH + SEND_SOUND(dead_alien, sound('sound/voice/hiss5.ogg')) + +/obj/structure/bed/revival_nest/user_buckle_mob(mob/living/M, mob/living/user) + if(!istype(M) || (get_dist(src, user) > 1) || (M.loc != loc) || user.incapacitated() || M.buckled) + return + + if(!user.get_int_organ(/obj/item/organ/internal/alien/hivenode)) + to_chat(user, "Your lack of linkage to the hive prevents you from buckling [M] into [src].") + return + + if(has_buckled_mobs()) + unbuckle_all_mobs() + + if(buckle_mob(M)) + M.visible_message("[user] secretes a thick vile goo, securing [M] into [src]!",\ + "[user] drenches you in a foul-smelling resin, trapping you in [src]!",\ + "You hear squelching...") + START_PROCESSING(SSobj, src) + +/obj/structure/bed/revival_nest/attack_alien(mob/living/carbon/alien/user) + if(user.a_intent != INTENT_HARM) + return attack_hand(user) + if(!do_after(user, 4 SECONDS, target = src) || QDELETED(src)) + return + playsound(get_turf(user), pick('sound/effects/alien_resin_break2.ogg', 'sound/effects/alien_resin_break1.ogg'), 50, FALSE) + qdel(src) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 90c101b45b3b..d38485b0c9b4 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -59,13 +59,20 @@ add_fingerprint(user) ui_interact(user) +/obj/structure/dispenser/attack_ai(mob/user) + if(isrobot(user) && Adjacent(user)) //Robots can use it, but not the AI + attack_hand(user) + /obj/structure/dispenser/attack_ghost(mob/user) ui_interact(user) -/obj/structure/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) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/structure/dispenser/ui_state(mob/user) + return GLOB.default_state + +/obj/structure/dispenser/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TankDispenser", name, 275, 100, master_ui, state) + ui = new(user, src, "TankDispenser", name) ui.open() /obj/structure/dispenser/ui_data(user) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 04b98ffde474..f22e746da5ce 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -161,7 +161,9 @@ anchored = TRUE if("Rotate") 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 + var/selected = tgui_input_list(user, "Select a direction for the connector.", "Connector Direction", dir_choices) + if(!selected) + return dir = dir_choices[selected] update_icon() //is this necessary? probably not @@ -572,7 +574,9 @@ anchored = TRUE if("Rotate") 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 + var/selected = tgui_input_list(user, "Select a direction for the connector.", "Connector Direction", dir_choices) + if(!selected) + return dir = dir_choices[selected] update_icon() //is this necessary? probably not diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 0129aecfa718..f47ba3220098 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -523,8 +523,13 @@ icon_state = "light0" anchored = TRUE desc = "A remote control switch for polarized windows." - var/range = 7 - var/id = 0 + /// The area where the button is located. + var/area/button_area + /// Windows in this range are controlled by this button. If it equals TINT_CONTROL_RANGE_AREA, the button controls only windows at button_area. + var/range = TINT_CONTROL_RANGE_AREA + /// If equals TINT_CONTROL_GROUP_NONE, only windows with 'null-like' id are controlled by this button. Otherwise, windows with corresponding or 'null-like' id are controlled by this button. + var/id = TINT_CONTROL_GROUP_NONE + /// The button toggle state. If range equals TINT_CONTROL_RANGE_AREA and id equals TINT_CONTROL_GROUP_NONE or is same with other button, it is shared between all such buttons in its area. var/active = FALSE /obj/machinery/button/windowtint/Initialize(mapload, w_dir = null) @@ -539,6 +544,10 @@ if(WEST) pixel_x = -25 +/obj/machinery/button/windowtint/New(turf/loc, direction) + ..() + button_area = get_area(src) + /obj/machinery/button/windowtint/attack_hand(mob/user) if(..()) return TRUE @@ -562,23 +571,30 @@ /obj/machinery/button/windowtint/proc/toggle_tint() use_power(5) - - active = !active - update_icon() - - for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) - if(W.id == src.id || !W.id) - W.toggle_polarization() - - for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range)) - if(W.id == id || !W.id) - W.toggle_polarization() - - for(var/obj/machinery/door/D in range(src, range)) - if(!D.polarized_glass) + if(range == TINT_CONTROL_RANGE_AREA) + button_area.window_tint = !button_area.window_tint + for(var/obj/machinery/button/windowtint/button in button_area) + if(button.range != TINT_CONTROL_RANGE_AREA || (button.id != id && button.id != TINT_CONTROL_GROUP_NONE)) + continue + button.active = button_area.window_tint + button.update_icon() + else + active = !active + update_icon() + process_controlled_windows(range != TINT_CONTROL_RANGE_AREA ? range(src, range) : button_area) + +/obj/machinery/button/windowtint/proc/process_controlled_windows(control_area) + for(var/obj/structure/window/reinforced/polarized/window in control_area) + if(window.id == id || !window.id) + window.toggle_polarization() + for(var/obj/structure/window/full/reinforced/polarized/window in control_area) + if(window.id == id || !window.id) + window.toggle_polarization() + for(var/obj/machinery/door/door in control_area) + if(!door.polarized_glass) continue - if(D.id == id || !D.id) - D.toggle_polarization() + if(door.id == id || !door.id) + door.toggle_polarization() /obj/machinery/button/windowtint/power_change() if(!..()) diff --git a/code/game/sound.dm b/code/game/sound.dm index 4fac230bb3aa..bf5a50e9fb54 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -92,9 +92,6 @@ falloff_distance - Distance at which falloff begins. Sound is at peak volume (in S.channel = channel || SSsounds.random_available_channel() S.volume = vol - if(channel) - S.volume *= client.prefs.get_channel_volume(channel) - if(vary) if(frequency) S.frequency = frequency @@ -159,6 +156,10 @@ falloff_distance - Distance at which falloff begins. Sound is at peak volume (in S.echo[3] = 0 //Room setting, 0 means normal reverb S.echo[4] = 0 //RoomHF setting, 0 means normal reverb. + S.volume *= USER_VOLUME(src, CHANNEL_GENERAL) + if(channel) + S.volume *= USER_VOLUME(src, channel) + SEND_SOUND(src, S) /proc/sound_to_playing_players_on_station_level(soundin, volume = 100, vary = FALSE, frequency = 0, channel = 0, pressure_affected = FALSE, sound/S) diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index bdb1c3fb8735..e718e0dec432 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -206,7 +206,7 @@ if((O.resistance_flags & (LAVA_PROOF|INDESTRUCTIBLE)) || O.throwing) continue . = TRUE - if((O.resistance_flags & ON_FIRE)) + if(O.resistance_flags & ON_FIRE) continue if(!(O.resistance_flags & FLAMMABLE)) O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava @@ -268,6 +268,5 @@ /turf/simulated/floor/lava/mapping_lava/LateInitialize() . = ..() - ChangeTurf(SSmapping.lavaland_theme, ignore_air = TRUE) - - + if(SSmapping.lavaland_theme?.primary_turf_type) + ChangeTurf(SSmapping.lavaland_theme.primary_turf_type, ignore_air = TRUE) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index dcbf61dbdab2..d3090e85ebc3 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -47,6 +47,8 @@ /turf/simulated/floor/light/attack_hand(mob/user) if(!can_modify_colour) return + if(user.a_intent != INTENT_HELP) + return toggle_light(!on) /turf/simulated/floor/light/attackby(obj/item/C, mob/user, params) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index a90566c998e1..7239de9f3985 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -86,7 +86,8 @@ if(rotting) . += "There is fungus growing on [src]." - . += "Using a lit welding tool on this item will allow you to slice through it, eventually removing the outer layer." + if(can_dismantle_with_welder) + . += "Using a lit welding tool on this item will allow you to slice through it, eventually removing the outer layer." /// Apply rust effects to the wall /turf/simulated/wall/proc/rust() diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 57a7f7dbc043..09d0b7cc4368 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -283,6 +283,7 @@ /turf/simulated/wall/mineral/titanium/nodecon name = "russian wall" desc = "Like regular titanium, but able to deflect capitalist aggressors." + can_dismantle_with_welder = FALSE /turf/simulated/wall/mineral/titanium/nodecon/tileblend fixed_underlay = list("icon"='icons/turf/floors.dmi', "icon_state"="darkredfull") diff --git a/code/game/turfs/space/space_turf.dm b/code/game/turfs/space/space_turf.dm index 5e89ba1d44d9..2cef6597e293 100644 --- a/code/game/turfs/space/space_turf.dm +++ b/code/game/turfs/space/space_turf.dm @@ -161,7 +161,7 @@ A.z = target_z A.x = world.maxx - 2 spawn (0) - if((A && A.loc)) + if(A && A.loc) A.loc.Entered(A) else if(src.x >= world.maxx) if(istype(A, /obj/effect/meteor)) @@ -186,7 +186,7 @@ A.z = target_z A.x = 3 spawn (0) - if((A && A.loc)) + if(A && A.loc) A.loc.Entered(A) else if(src.y <= 1) if(istype(A, /obj/effect/meteor)) @@ -210,7 +210,7 @@ A.z = target_z A.y = world.maxy - 2 spawn (0) - if((A && A.loc)) + if(A && A.loc) A.loc.Entered(A) else if(src.y >= world.maxy) @@ -235,7 +235,7 @@ A.z = target_z A.y = 3 spawn (0) - if((A && A.loc)) + if(A && A.loc) A.loc.Entered(A) return diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index c72f5072f63a..cf6a05644f53 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -6,10 +6,6 @@ GLOBAL_VAR_INIT(mentor_ooc_colour, "#00B0EB") GLOBAL_VAR_INIT(moderator_ooc_colour, "#184880") GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") -//Checks if the client already has a text input open -/client/proc/checkTyping() - return (prefs.toggles & PREFTOGGLE_TYPING_ONCE && typing) - /client/verb/ooc(msg = "" as text) set name = "OOC" set category = "OOC" @@ -17,18 +13,18 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(!mob) return if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") + to_chat(src, "Guests may not use OOC.", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(!check_rights(R_ADMIN|R_MOD, 0)) if(!GLOB.ooc_enabled) - to_chat(src, "OOC is globally muted.") + to_chat(src, "OOC is globally muted.", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(!GLOB.dooc_enabled && (mob.stat == DEAD)) - to_chat(usr, "OOC for dead mobs has been turned off.") + to_chat(usr, "OOC for dead mobs has been turned off.", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(check_mute(ckey, MUTE_OOC)) - to_chat(src, "You cannot use OOC (muted).") + to_chat(src, "You cannot use OOC (muted).", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(!msg) @@ -70,7 +66,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(prefs.unlock_content) if(display_colour == GLOB.normal_ooc_colour) - if((prefs.toggles & PREFTOGGLE_MEMBER_PUBLIC)) + if(prefs.toggles & PREFTOGGLE_MEMBER_PUBLIC) display_colour = GLOB.member_ooc_colour for(var/client/C in GLOB.clients) @@ -87,7 +83,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") display_name = "[bicon(byond)][display_name]" if(donator_level > 0) - if((prefs.toggles & PREFTOGGLE_DONATOR_PUBLIC)) + if(prefs.toggles & PREFTOGGLE_DONATOR_PUBLIC) var/icon/donator = icon('icons/ooc_tag_16x.png') display_name = "[bicon(donator)][display_name]" @@ -179,18 +175,18 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(!mob) return if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") + to_chat(src, "Guests may not use LOOC.", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(!check_rights(R_ADMIN|R_MOD,0)) if(!GLOB.looc_enabled) - to_chat(src, "LOOC is globally muted.") + to_chat(src, "LOOC is globally muted.", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(!GLOB.dooc_enabled && (mob.stat == DEAD)) - to_chat(usr, "LOOC for dead mobs has been turned off.") + to_chat(usr, "LOOC for dead mobs has been turned off.", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(check_mute(ckey, MUTE_OOC)) - to_chat(src, "You cannot use LOOC (muted).") + to_chat(src, "You cannot use LOOC (muted).", MESSAGE_TYPE_WARNING, confidential = TRUE) return if(!msg) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 21b37d58a74d..25fe32c71780 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -24,7 +24,7 @@ // killing themselves as soon as they're in cuffs to_chat(src, "We refuse to take the coward's way out.") return - confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") + confirm = tgui_alert(src, "Are you sure you want to commit suicide?", "Confirm Suicide", list("Yes", "No")) if(stat == DEAD || suiciding) //We check again, because alerts sleep until a choice is made to_chat(src, "You're already dead!") @@ -32,7 +32,7 @@ if(forced || (confirm == "Yes")) if(!forced && isAntag(src) && !HAS_TRAIT(src, TRAIT_RESPAWNABLE)) - confirm = alert("Are you absolutely sure? If you do this after you got converted/joined as an antagonist, you could face a jobban!", "Confirm Suicide", "Yes", "No") + confirm = tgui_alert(src, "Are you absolutely sure? If you do this after you got converted/joined as an antagonist, you could face a jobban!", "Confirm Suicide", list("Yes", "No")) if(confirm == "Yes") suiciding = TRUE do_suicide() @@ -61,9 +61,6 @@ //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) -/mob/living/silicon/robot/drone/do_suicide() - shut_down() - /mob/living/silicon/pai/do_suicide() if(mobility_flags & MOBILITY_MOVE) close_up() diff --git a/code/game/verbs/switch_server.dm b/code/game/verbs/switch_server.dm index 67879a768ef5..ae8b7fc96ad6 100644 --- a/code/game/verbs/switch_server.dm +++ b/code/game/verbs/switch_server.dm @@ -1,3 +1,4 @@ +#ifdef MULTIINSTANCE /client/verb/switch_server() set name = "Switch Server" set desc = "Switch to a different Paradise server" @@ -48,3 +49,4 @@ // Formulate a connection URL var/target = "byond://[world.internet_address]:[formatted_servers[selected_server]]" src << link(target) +#endif diff --git a/code/game/verbs/webmap.dm b/code/game/verbs/webmap.dm index 714b501e8085..e4b536e230ee 100644 --- a/code/game/verbs/webmap.dm +++ b/code/game/verbs/webmap.dm @@ -6,7 +6,7 @@ to_chat(usr, "The current map has no defined webmap. Please file an issue report.") return - if(alert(usr, "Do you want to open this map's Webmap in your browser?", "Webmap", "Yes", "No") != "Yes") + if(tgui_alert(usr, "Do you want to open this map's Webmap in your browser?", "Webmap", list("Yes", "No")) != "Yes") return usr << link(SSmapping.map_datum.webmap_url) diff --git a/code/game/world.dm b/code/game/world.dm index 2b03f0ad2d1f..c4fab4b9445b 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -31,7 +31,9 @@ GLOBAL_DATUM(test_runner, /datum/test_runner) // Right off the bat, load up the DB SSdbcore.CheckSchemaVersion() // This doesnt just check the schema version, it also connects to the db! This needs to happen super early! I cannot stress this enough! SSdbcore.SetRoundID() // Set the round ID here + #ifdef MULTIINSTANCE SSinstancing.seed_data() // Set us up in the DB + #endif // Setup all log paths and stamp them with startups, including round IDs SetupLogs() @@ -124,7 +126,7 @@ GLOBAL_LIST_EMPTY(world_topic_handlers) return message_admins("[key_name_admin(usr)] has requested an immediate world restart via client side debugging tools") log_admin("[key_name(usr)] has requested an immediate world restart via client side debugging tools") - to_chat(world, "Rebooting world immediately due to host request") + to_chat(world, "Rebooting world immediately due to host request") rustg_log_close_all() // Past this point, no logging procs can be used, at risk of data loss. // Now handle a reboot if(GLOB.configuration.system.shutdown_on_reboot) @@ -153,15 +155,12 @@ GLOBAL_LIST_EMPTY(world_topic_handlers) to_chat(world, "Stats for this round can be viewed at [stats_link]") // If the server has been gracefully shutdown in TGS, have a 60 seconds grace period for SQL updates and stuff - var/secs_before_auto_reconnect = 10 if(GLOB.slower_restart) - secs_before_auto_reconnect = 60 server_announce_global("Reboot will take a little longer due to pending backend changes.") - // Send the reboot banner to all players for(var/client/C in GLOB.clients) - C << output(list2params(list(secs_before_auto_reconnect)), "browseroutput:reboot") + C?.tgui_panel?.send_roundrestart() if(C.prefs.server_region) // Keep them on the same relay C << link(GLOB.configuration.system.region_map[C.prefs.server_region]) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 9d84ec41216b..48549b082d6f 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -30,10 +30,12 @@ admin = 1 // Lets see if they are logged in on another paradise server + #ifdef MULTIINSTANCE if(SSdbcore.IsConnected()) var/other_server_login = SSinstancing.check_player(ckey) if(other_server_login) return list("reason"="duplicate login", "desc"="\nReason: You are already logged in on server '[other_server_login]'. Please contact the server host if you believe this is an error.") + #endif //Guest Checking if(GLOB.configuration.general.guest_ban && check_guest && IsGuestKey(key)) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index eb5c03c7d01b..d633e142fbd5 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -255,10 +255,6 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( /client/proc/timer_log )) -/client/proc/on_holder_add() - if(chatOutput && chatOutput.loaded) - chatOutput.loadAdmin() - /client/proc/add_admin_verbs() if(holder) // If they have ANYTHING OTHER THAN ONLY VIEW RUNTIMES (65536), then give them the default admin verbs @@ -549,16 +545,16 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( if("Big Bomb") explosion(epicenter, 3, 5, 7, 5) if("Custom Bomb") - var/devastation_range = input("Devastation range (in tiles):") as null|num + var/devastation_range = tgui_input_number(src, "Devastation range (in tiles):", "Custom Bomb", max_value = 255) if(devastation_range == null) return - var/heavy_impact_range = input("Heavy impact range (in tiles):") as null|num + var/heavy_impact_range = tgui_input_number(src, "Heavy impact range (in tiles):", "Custom Bomb", max_value = 255) if(heavy_impact_range == null) return - var/light_impact_range = input("Light impact range (in tiles):") as null|num + var/light_impact_range = tgui_input_number(src, "Light impact range (in tiles):", "Custom Bomb", max_value = 255) if(light_impact_range == null) return - var/flash_range = input("Flash range (in tiles):") as null|num + var/flash_range = tgui_input_number(src, "Flash range (in tiles):", "Custom Bomb", max_value = 255) if(flash_range == null) return explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, 1, 1) @@ -664,6 +660,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( GLOB.de_mentors += ckey deadmin() verbs += /client/proc/readmin + update_active_keybindings() to_chat(src, "You are now a normal player.") SSblackbox.record_feedback("tally", "admin_verb", 1, "De-admin") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -710,7 +707,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( // Do a little check here if(GLOB.configuration.system.is_production && (GLOB.admin_ranks[rank] & R_ADMIN) && prefs._2fa_status == _2FA_DISABLED) // If they are an admin and their 2FA is disabled - to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious + to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious return D = new(rank, GLOB.admin_ranks[rank], ckey) else @@ -745,7 +742,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( var/client/check_client = GLOB.directory[ckey] // Do a little check here if(GLOB.configuration.system.is_production && (flags & R_ADMIN) && check_client.prefs._2fa_status == _2FA_DISABLED) // If they are an admin and their 2FA is disabled - to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious + to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious qdel(admin_read) return D = new(admin_rank, flags, ckey) @@ -753,6 +750,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( var/client/C = GLOB.directory[ckey] D.associate(C) + update_active_keybindings() message_admins("[key_name_admin(usr)] re-adminned themselves.") log_admin("[key_name(usr)] re-adminned themselves.") GLOB.de_admins -= ckey @@ -801,7 +799,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( if(!S) return var/datum/ui_module/law_manager/L = new(S) - L.ui_interact(usr, state = GLOB.admin_state) + L.ui_interact(usr) log_and_message_admins("has opened [S]'s law manager.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Manage Silicon Laws") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/db_ban/functions.dm b/code/modules/admin/db_ban/functions.dm index f98979861cd4..73d103e2d8fa 100644 --- a/code/modules/admin/db_ban/functions.dm +++ b/code/modules/admin/db_ban/functions.dm @@ -5,7 +5,7 @@ if(!check_rights(R_BAN)) return if(!SSdbcore.IsConnected()) - to_chat(usr, "Database connection failure when attempting to make DB ban. Please freeze them and write their ckey in notepad, so they can be banned when the DB returns.") + to_chat(usr, "Database connection failure when attempting to make DB ban. Please freeze them and write their ckey in notepad, so they can be banned when the DB returns.") return var/serverip = "[world.internet_address]:[world.port]" @@ -198,7 +198,7 @@ if(!check_rights(R_BAN)) return if(!SSdbcore.IsConnected()) - to_chat(usr, "Database connection failure when attempting to remove DB ban. Please remember to unban them at a later date!.") + to_chat(usr, "Database connection failure when attempting to remove DB ban. Please remember to unban them at a later date!.") return var/bantype_str @@ -394,7 +394,7 @@ return if(!SSdbcore.IsConnected()) - to_chat(usr, "Database connection failure when attempting to remove DB ban. Please remember to unban them at a later date!.") + to_chat(usr, "Database connection failure when attempting to remove DB ban. Please remember to unban them at a later date!.") return var/ban_number = 0 //failsafe diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 3274482fe701..344db25398c1 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -17,7 +17,7 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma /datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey) if(IsAdminAdvancedProcCall()) - to_chat(usr, "Admin rank creation blocked: Advanced ProcCall detected.") + to_chat(usr, "Admin rank creation blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to create a new admin rank via advanced proc-call") log_admin("[key_name(usr)] attempted to edit feedback a new admin rank via advanced proc-call") return @@ -32,7 +32,7 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma /datum/admins/Destroy() if(IsAdminAdvancedProcCall()) - to_chat(usr, "Admin rank deletion blocked: Advanced ProcCall detected.") + to_chat(usr, "Admin rank deletion blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to delete an admin rank via advanced proc-call") log_admin("[key_name(usr)] attempted to delete an admin rank via advanced proc-call") return @@ -41,21 +41,20 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma /datum/admins/proc/associate(client/C) if(IsAdminAdvancedProcCall()) - to_chat(usr, "Rank association blocked: Advanced ProcCall detected.") + to_chat(usr, "Rank association blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to associate an admin rank to a new client via advanced proc-call") log_admin("[key_name(usr)] attempted to associate an admin rank to a new client via advanced proc-call") return if(istype(C)) owner = C owner.holder = src - owner.on_holder_add() owner.add_admin_verbs() //TODO owner.verbs -= /client/proc/readmin GLOB.admins |= C /datum/admins/proc/disassociate() if(IsAdminAdvancedProcCall()) - to_chat(usr, "Rank disassociation blocked: Advanced ProcCall detected.") + to_chat(usr, "Rank disassociation blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to disassociate an admin rank from a client via advanced proc-call") log_admin("[key_name(usr)] attempted to disassociate an admin rank from a client via advanced proc-call") return @@ -127,7 +126,7 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself. /client/proc/deadmin() if(IsAdminAdvancedProcCall()) - to_chat(usr, "Deadmin blocked: Advanced ProcCall detected.") + to_chat(usr, "Deadmin blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to de-admin a client via advanced proc-call") log_admin("[key_name(usr)] attempted to de-admin a client via advanced proc-call") return diff --git a/code/modules/admin/misc_admin_procs.dm b/code/modules/admin/misc_admin_procs.dm index 52a1c80c8f54..dd14afd921d2 100644 --- a/code/modules/admin/misc_admin_procs.dm +++ b/code/modules/admin/misc_admin_procs.dm @@ -7,14 +7,14 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(R_ADMIN & C.holder.rights) if(C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_ADMINLOGS)) - to_chat(C, msg) + to_chat(C, msg, MESSAGE_TYPE_ADMINLOG, confidential = TRUE) /proc/msg_admin_attack(text, loglevel) if(!GLOB.nologevent) var/rendered = "ATTACK: [text]" for(var/client/C in GLOB.admins) if((C.holder.rights & R_ADMIN) && (C.prefs?.atklog <= loglevel)) - to_chat(C, rendered) + to_chat(C, rendered, MESSAGE_TYPE_ATTACKLOG, confidential = TRUE) /** * Sends a message to the staff able to see admin tickets @@ -27,7 +27,7 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(R_ADMIN & C.holder.rights) if(important || (C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_TICKETLOGS))) - to_chat(C, msg) + to_chat(C, msg, MESSAGE_TYPE_ADMINPM, confidential = TRUE) if(important) if(C.prefs?.sound & SOUND_ADMINHELP) SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) @@ -44,7 +44,7 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(check_rights(R_ADMIN | R_MENTOR | R_MOD, 0, C.mob)) if(important || (C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_TICKETLOGS))) - to_chat(C, msg) + to_chat(C, msg, MESSAGE_TYPE_MENTORCHAT, confidential = TRUE) if(important) if(C.prefs?.sound & SOUND_MENTORHELP) SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) @@ -56,12 +56,12 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/mob/O in GLOB.mob_list) if(O.ckey && O.ckey == ckey_to_find) if(admin_to_notify) - to_chat(admin_to_notify, "admin_ban_mobsearch: Player [ckey_to_find] is now in mob [O]. Pulling data from new mob.") + to_chat(admin_to_notify, "admin_ban_mobsearch: Player [ckey_to_find] is now in mob [O]. Pulling data from new mob.", MESSAGE_TYPE_ADMINLOG, confidential = TRUE) return O if(admin_to_notify) - to_chat(admin_to_notify, "admin_ban_mobsearch: Player [ckey_to_find] does not seem to have any mob, anywhere. This is probably an error.") + to_chat(admin_to_notify, "admin_ban_mobsearch: Player [ckey_to_find] does not seem to have any mob, anywhere. This is probably an error.", MESSAGE_TYPE_ADMINLOG, confidential = TRUE) else if(admin_to_notify) - to_chat(admin_to_notify, "admin_ban_mobsearch: No mob or ckey detected.") + to_chat(admin_to_notify, "admin_ban_mobsearch: No mob or ckey detected.", MESSAGE_TYPE_ADMINLOG, confidential = TRUE) return M ///////////////////////////////////////////////////////////////////////////////////////////////Panels @@ -280,12 +280,6 @@ GLOBAL_VAR_INIT(nologevent, 0) usr << browse(body, "window=adminplayeropts;size=550x615") SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/player_info/var/author // admin who authored the information -/datum/player_info/var/rank //rank of admin who made the notes -/datum/player_info/var/content // text content of the information -/datum/player_info/var/timestamp // Because this is bloody annoying - #define PLAYER_NOTES_ENTRIES_PER_PAGE 50 /datum/admins/proc/PlayerNotes() set category = "Admin" diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index 872bac35bca5..c50cb44ae976 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -10,12 +10,15 @@ if(!check_rights(R_PERMISSIONS)) return + var/datum/asset/permissions_asset = get_asset_datum(/datum/asset/simple/permissions) + permissions_asset.send(usr) + var/output = {" Permissions Panel - - + +
        @@ -137,7 +140,7 @@ /datum/admins/proc/log_admin_permission_modification(adm_ckey, new_permission) if(IsAdminAdvancedProcCall()) - to_chat(usr, "Admin edit blocked: Advanced ProcCall detected.") + to_chat(usr, "Admin edit blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to edit admin ranks via advanced proc-call") log_admin("[key_name(usr)] attempted to edit admin ranks via advanced proc-call") return diff --git a/code/modules/admin/sql_notes.dm b/code/modules/admin/sql_notes.dm index ef00466c3db3..21aa422e5b62 100644 --- a/code/modules/admin/sql_notes.dm +++ b/code/modules/admin/sql_notes.dm @@ -3,7 +3,7 @@ return if(IsAdminAdvancedProcCall() && !sanitise_html) // *sigh* - to_chat(usr, "Unsanitized note add blocked: Advanced ProcCall detected.") + to_chat(usr, "Unsanitized note add blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to possibly inject HTML into notes via advanced proc-call") log_admin("[key_name(usr)] attempted to possibly inject HTML into notes via advanced proc-call") return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5095e112ad4c..34bfaca75efb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1786,10 +1786,10 @@ to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return - H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), SLOT_HUD_LEFT_HAND ) - if(!(istype(H.l_hand,/obj/item/reagent_containers/food/snacks/cookie))) - H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), SLOT_HUD_RIGHT_HAND ) - if(!(istype(H.r_hand,/obj/item/reagent_containers/food/snacks/cookie))) + H.equip_to_slot_or_del( new /obj/item/food/snacks/cookie(H), SLOT_HUD_LEFT_HAND ) + if(!(istype(H.l_hand,/obj/item/food/snacks/cookie))) + H.equip_to_slot_or_del( new /obj/item/food/snacks/cookie(H), SLOT_HUD_RIGHT_HAND ) + if(!(istype(H.r_hand,/obj/item/food/snacks/cookie))) log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].") message_admins("[key_name_admin(H)] has [H.p_their()] hands full, so [H.p_they()] did not receive [H.p_their()] cookie, spawned by [key_name_admin(src.owner)].") return @@ -2119,7 +2119,7 @@ ADD_TRAIT(H, TRAIT_BADDNA, "smiting") logmsg = "cluwned." if("Mutagen Cookie") - var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie + var/obj/item/food/snacks/cookie/evilcookie = new /obj/item/food/snacks/cookie evilcookie.reagents.add_reagent("mutagen", 10) evilcookie.desc = "It has a faint green glow." evilcookie.bitesize = 100 @@ -2128,7 +2128,7 @@ H.equip_to_slot_or_del(evilcookie, SLOT_HUD_LEFT_HAND) logmsg = "a mutagen cookie." if("Hellwater Cookie") - var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie + var/obj/item/food/snacks/cookie/evilcookie = new /obj/item/food/snacks/cookie evilcookie.reagents.add_reagent("hell_water", 25) evilcookie.desc = "Sulphur-flavored." evilcookie.bitesize = 100 @@ -2192,7 +2192,7 @@ if("Bread") var/mob/living/simple_animal/shade/sword/bread/breadshade = new(H.loc) - var/bready = pick(/obj/item/reagent_containers/food/snacks/customizable/cook/bread, /obj/item/reagent_containers/food/snacks/sliceable/meatbread, /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread, /obj/item/reagent_containers/food/snacks/sliceable/spidermeatbread, /obj/item/reagent_containers/food/snacks/sliceable/bananabread, /obj/item/reagent_containers/food/snacks/sliceable/tofubread, /obj/item/reagent_containers/food/snacks/sliceable/bread, /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread, /obj/item/reagent_containers/food/snacks/sliceable/banarnarbread, /obj/item/reagent_containers/food/snacks/flatbread, /obj/item/reagent_containers/food/snacks/baguette) + var/bready = pick(/obj/item/food/snacks/customizable/cook/bread, /obj/item/food/snacks/sliceable/meatbread, /obj/item/food/snacks/sliceable/xenomeatbread, /obj/item/food/snacks/sliceable/spidermeatbread, /obj/item/food/snacks/sliceable/bananabread, /obj/item/food/snacks/sliceable/tofubread, /obj/item/food/snacks/sliceable/bread, /obj/item/food/snacks/sliceable/creamcheesebread, /obj/item/food/snacks/sliceable/banarnarbread, /obj/item/food/snacks/flatbread, /obj/item/food/snacks/baguette) var/obj/item/bread = new bready(get_turf(H)) breadshade.forceMove(bread) breadshade.key = H.key @@ -2981,7 +2981,7 @@ GLOB.configuration.general.bomb_cap = newBombCap - message_admins("[key_name_admin(usr)] changed the bomb cap to [GLOB.configuration.general.bomb_cap / 4], [GLOB.configuration.general.bomb_cap / 2], [GLOB.configuration.general.bomb_cap]") + message_admins("[key_name_admin(usr)] changed the bomb cap to [GLOB.configuration.general.bomb_cap / 4], [GLOB.configuration.general.bomb_cap / 2], [GLOB.configuration.general.bomb_cap]") log_admin("[key_name(usr)] changed the bomb cap to [GLOB.configuration.general.bomb_cap / 4], [GLOB.configuration.general.bomb_cap / 2], [GLOB.configuration.general.bomb_cap]") if("flicklights") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 40fb2ab3da75..308a65877dc0 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -4,7 +4,7 @@ //handle muting and automuting if(check_mute(ckey, MUTE_ADMINHELP)) - to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).") + to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).", MESSAGE_TYPE_ADMINPM, confidential = TRUE) return adminhelped = TRUE //Determines if they get the message to reply by clicking the name. @@ -31,7 +31,7 @@ SStickets.newHelpRequest(src, msg) // Ahelp //show it to the person adminhelping too - to_chat(src, "[selected_type]: [msg]") + to_chat(src, "[selected_type]: [msg]", MESSAGE_TYPE_ADMINPM, confidential = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "Adminhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! switch(selected_type) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index bf9c71d77b0b..66f5fab88d87 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -186,13 +186,13 @@ switch(type) if("Mentorhelp") if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) - to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]", type = MESSAGE_TYPE_MENTORCHAT) if("Adminhelp") if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]", type = MESSAGE_TYPE_ADMINCHAT) else if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]", type = MESSAGE_TYPE_ADMINCHAT) //Check if the mob being PM'd has any open admin tickets. var/tickets = list() @@ -242,7 +242,7 @@ GLOB.discord_manager.send2discord_simple(DISCORD_WEBHOOK_ADMIN, "PM from [key_name(src)]: [html_decode(msg)]") - to_chat(src, "PM to-Discord Admins: [msg]") + to_chat(src, "PM to-Discord Admins: [msg]", MESSAGE_TYPE_ADMINPM, confidential = TRUE) log_admin("PM: [key_name(src)]->Discord: [msg]") for(var/client/X in GLOB.admins) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 695b707bbd26..25516a468ced 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -30,7 +30,7 @@ temp_message = replacetext(temp_message, "@[C.key]", "@[C.key]") // Same applies here. key and ckey. temp_message = "[temp_message]" - to_chat(C, "ADMIN: [key_name(usr, 1)] ([admin_jump_link(mob)]): [temp_message]") + to_chat(C, "ADMIN: [key_name(usr, 1)] ([admin_jump_link(mob)]): [temp_message]", MESSAGE_TYPE_ADMINCHAT, confidential = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -76,7 +76,7 @@ else display_name = holder.fakekey msg = "[msg]" - to_chat(C, "MENTOR: [display_name] ([admin_jump_link(mob)]): [msg]") + to_chat(C, "MENTOR: [display_name] ([admin_jump_link(mob)]): [msg]", MESSAGE_TYPE_MENTORCHAT, confidential = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "Msay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index add4b2a57f3d..72efec272412 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -141,7 +141,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) else if(target != world) return call(target, procname)(arglist(arguments)) else - to_chat(usr, "Call to world/proc/[procname] blocked: Advanced ProcCall detected.") + to_chat(usr, "Call to world/proc/[procname] blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]") log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]l") diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index 76cbe02ae0ff..faddd7c217a4 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -64,8 +64,6 @@ GLOBAL_LIST_EMPTY(frozen_atom_list) // A list of admin-frozen atoms. else revive() -/mob/living/simple_animal/var/admin_prev_health = null - /mob/living/simple_animal/admin_Freeze(admin) if(..()) // The result of the parent call here will be the value of the mob's `frozen` variable after they get (un)frozen. admin_prev_health = health diff --git a/code/modules/admin/verbs/mapping_verbs.dm b/code/modules/admin/verbs/mapping_verbs.dm index ce193e1b2895..49e16972ee61 100644 --- a/code/modules/admin/verbs/mapping_verbs.dm +++ b/code/modules/admin/verbs/mapping_verbs.dm @@ -204,4 +204,4 @@ GLOBAL_VAR_INIT(intercom_range_display_status, 0) message_admins("[key_name_admin(usr)] has set the next map to [SSmapping.next_map.fluff_name] ([SSmapping.next_map.technical_name])") log_admin("[key_name(usr)] has set the next map to [SSmapping.next_map.fluff_name] ([SSmapping.next_map.technical_name])") if(announce_to_players == "Yes") - to_chat(world, "[key] has chosen the following map for next round: [SSmapping.next_map.fluff_name] ([SSmapping.next_map.technical_name])") + to_chat(world, "[key] has chosen the following map for next round: [SSmapping.next_map.fluff_name] ([SSmapping.next_map.technical_name])") diff --git a/code/modules/admin/verbs/ping_all_admins.dm b/code/modules/admin/verbs/ping_all_admins.dm index 2d314e3eaca9..de7a3c1f7be1 100644 --- a/code/modules/admin/verbs/ping_all_admins.dm +++ b/code/modules/admin/verbs/ping_all_admins.dm @@ -26,7 +26,7 @@ admins_to_ping += C if(length(admins_to_ping) < 2) // All by yourself? - to_chat(usr, "No other admins online to ping[de_admin_also == "Yes" ? ", including those that have used de-admin" : ""]!") + to_chat(usr, "No other admins online to ping[de_admin_also == "Yes" ? ", including those that have used de-admin" : ""]!") return var/datum/asays/asay = new(usr.ckey, usr.client.holder.rank, msg, world.timeofday) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 634485dabc09..97ee1b1167a2 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY(sounds_cache) uploaded_sound.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN) var/this_uid = M.client.UID() - to_chat(M, "[ckey] played [S] (SILENCE) (ALWAYS SILENCE THIS ADMIN)") + to_chat(M, "[ckey] played [S] (SILENCE) (ALWAYS SILENCE THIS ADMIN)") SEND_SOUND(M, uploaded_sound) SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Global Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 605b1575d281..c8af444ee3ed 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -295,14 +295,14 @@ for(var/mob/dead/observer/g in get_ghosts()) if(g.antagHUD) g.antagHUD = FALSE // Disable it on those that have it enabled - to_chat(g, "The Administrators have disabled AntagHUD ") + to_chat(g, "The Administrators have disabled AntagHUD.") GLOB.configuration.general.allow_antag_hud = FALSE to_chat(src, "AntagHUD usage has been disabled") action = "disabled" else for(var/mob/dead/observer/g in get_ghosts()) if(!g.client.holder) // Add the verb back for all non-admin ghosts - to_chat(g, "The Administrators have enabled AntagHUD ")// Notify all observers they can now use AntagHUD + to_chat(g, "The Administrators have enabled AntagHUD.")// Notify all observers they can now use AntagHUD GLOB.configuration.general.allow_antag_hud = TRUE action = "enabled" @@ -330,7 +330,7 @@ else for(var/mob/dead/observer/g in get_ghosts()) to_chat(g, "The administrator has placed restrictions on joining the round if you use AntagHUD") - to_chat(g, "Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions ") + to_chat(g, "Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions.") g.antagHUD = FALSE GLOB.antag_hud_users -= g.ckey action = "placed restrictions" @@ -869,7 +869,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(SSshuttle.emergency.mode >= SHUTTLE_DOCKED) return - if(SSshuttle.emergency.canRecall == FALSE) + if(!SSshuttle.emergency.canRecall) if(alert("Shuttle is currently set to be nonrecallable. Recalling may break things. Respect Recall Status?", "Override Recall Status?", "Yes", "No") == "Yes") return else diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 9af71e5350a9..108f4ede4254 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -36,6 +36,19 @@ GLOBAL_LIST_EMPTY(antagonists) /// The url page name for this antagonist, appended to the end of the wiki url in the form of: [GLOB.configuration.url.wiki_url]/index.php/[wiki_page_name] var/wiki_page_name + //Blurb stuff + /// Intro Blurbs text colour + var/blurb_text_color = COLOR_BLACK + /// Intro Blurbs outline width + var/blurb_text_outline_width = 0 + /// Intro Blurb Font + var/blurb_font = "Courier New" + //Backgrount + var/blurb_r = 0 + var/blurb_g = 0 + var/blurb_b = 0 + var/blurb_a = 0 + /datum/antagonist/New() GLOB.antagonists += src objective_holder = new(src) @@ -340,7 +353,7 @@ GLOBAL_LIST_EMPTY(antagonists) */ /datum/antagonist/proc/farewell() if(owner && owner.current) - to_chat(owner.current,"You are no longer a [special_role]! ") + to_chat(owner.current,"You are no longer a [special_role]!") /** * Creates a new antagonist team. @@ -396,3 +409,6 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/on_cryo() return +/// This is the custom blurb message used on login for an antagonist. +/datum/antagonist/proc/custom_blurb() + return FALSE diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 687237e66741..ea6345143afe 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -125,8 +125,8 @@ poll_icon = image(icon = 'icons/mob/robots.dmi', icon_state = "syndi-engi-preview") /obj/item/antag_spawner/nuke_ops/borg_tele/before_candidate_search(mob/user) - var/switch_roles_choice = input("Would you like to continue playing as an operative or take over as the cyborg? If you play as the cyborg, another player will control your old self.", "Play As") as null|anything in list("Nuclear Operative", "Syndicate Cyborg") - if(!switch_roles_choice || !(check_usability(user))) + var/switch_roles_choice = tgui_input_list(user, "Would you like to continue playing as an operative or take over as the cyborg? If you play as the cyborg, another player will control your old self.", "Play As", list("Nuclear Operative", "Syndicate Cyborg", "Don't activate this Cyborg Teleporter")) + if(!switch_roles_choice || !(check_usability(user)) || switch_roles_choice == "Don't activate this Cyborg Teleporter") return FALSE if(switch_roles_choice == "Syndicate Cyborg") diff --git a/code/modules/antagonists/changeling/datum_changeling.dm b/code/modules/antagonists/changeling/datum_changeling.dm index caadf62b167b..f8c39e74fd9b 100644 --- a/code/modules/antagonists/changeling/datum_changeling.dm +++ b/code/modules/antagonists/changeling/datum_changeling.dm @@ -48,7 +48,8 @@ var/datum/action/changeling/sting/chosen_sting /// If the changeling is in the process of regenerating from their fake death. var/regenerating = FALSE - + blurb_text_color = COLOR_PURPLE + blurb_text_outline_width = 1 /datum/antagonist/changeling/New() ..() @@ -429,3 +430,6 @@ /proc/ischangeling(mob/M) return M.mind?.has_antag_datum(/datum/antagonist/changeling) + +/datum/antagonist/changeling/custom_blurb() + return "We awaken on the [station_name()], [get_area_name(owner.current, TRUE)]...\nWe have our tasks to attend to..." diff --git a/code/modules/antagonists/changeling/evolution_menu.dm b/code/modules/antagonists/changeling/evolution_menu.dm index cfc62411a7e3..a777a1f34057 100644 --- a/code/modules/antagonists/changeling/evolution_menu.dm +++ b/code/modules/antagonists/changeling/evolution_menu.dm @@ -18,10 +18,13 @@ /datum/action/changeling/evolution_menu/try_to_sting(mob/user, mob/target) ui_interact(user) -/datum/action/changeling/evolution_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/action/changeling/evolution_menu/ui_state(mob/user) + return GLOB.always_state + +/datum/action/changeling/evolution_menu/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EvolutionMenu", "Evolution Menu", 480, 574, master_ui, state) + ui = new(user, src, "EvolutionMenu", "Evolution Menu") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/antagonists/changeling/powers/apex_predator.dm b/code/modules/antagonists/changeling/powers/apex_predator.dm index e40d7207e8e7..60306e115f60 100644 --- a/code/modules/antagonists/changeling/powers/apex_predator.dm +++ b/code/modules/antagonists/changeling/powers/apex_predator.dm @@ -10,7 +10,7 @@ /datum/action/changeling/apex_predator/sting_action(mob/user) var/list/target_by_name = list() for(var/mob/living/carbon/human/possible_target as anything in GLOB.human_list) - if((!possible_target.mind || possible_target.z != user.z)) + if(!possible_target.mind || possible_target.z != user.z) continue target_by_name[possible_target.real_name] = possible_target diff --git a/code/modules/antagonists/changeling/powers/become_headslug.dm b/code/modules/antagonists/changeling/powers/become_headslug.dm index be1f1fdbfae6..2ef080c80461 100644 --- a/code/modules/antagonists/changeling/powers/become_headslug.dm +++ b/code/modules/antagonists/changeling/powers/become_headslug.dm @@ -12,7 +12,7 @@ category = /datum/changeling_power_category/defence /datum/action/changeling/headslug/try_to_sting(mob/user, mob/target) - if(alert("Are you sure you wish to do this? This action cannot be undone.",,"Yes","No") == "No") + if(tgui_alert(user, "Are you sure you wish to do this? This action cannot be undone.", "Sting", list("Yes", "No")) == "No") return ..() diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index 2f44a349b75a..b02852a72291 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -32,7 +32,7 @@ to_chat(user, "We are already regenerating.") return FALSE if(!user.stat)//Confirmation for living changelings if they want to fake their death - switch(alert("Are we sure we wish to fake our death?",,"Yes","No")) + switch(tgui_alert(user, "Are we sure we wish to fake our death?", "Fake Death", list("Yes", "No"))) if("No") return FALSE // Do the checks again since we had user input diff --git a/code/modules/antagonists/changeling/powers/fleshmend.dm b/code/modules/antagonists/changeling/powers/fleshmend.dm index a2d46914432c..b0ee5255b5cd 100644 --- a/code/modules/antagonists/changeling/powers/fleshmend.dm +++ b/code/modules/antagonists/changeling/powers/fleshmend.dm @@ -4,7 +4,7 @@ helptext = "Does not regrow limbs. Partially recovers our blood. Functions while unconscious." button_icon_state = "fleshmend" chemical_cost = 20 - dna_cost = 4 + dna_cost = 5 req_stat = UNCONSCIOUS power_type = CHANGELING_PURCHASABLE_POWER category = /datum/changeling_power_category/defence diff --git a/code/modules/antagonists/changeling/powers/hivemind.dm b/code/modules/antagonists/changeling/powers/hivemind.dm index 29079eaa61dd..0e8c75ec5e92 100644 --- a/code/modules/antagonists/changeling/powers/hivemind.dm +++ b/code/modules/antagonists/changeling/powers/hivemind.dm @@ -18,7 +18,7 @@ GLOBAL_LIST_EMPTY(hivemind_bank) to_chat(user, "We feel our consciousness become capable of communion with the hivemind.") /datum/action/changeling/hivemind_pick/sting_action(mob/user) - var/channel_pick = alert("Upload or Absorb DNA?", "Channel Select", "Upload", "Absorb") + var/channel_pick = tgui_alert(user, "Upload or Absorb DNA?", "Channel Select", list("Upload", "Absorb")) if(channel_pick == "Upload") dna_upload(user) diff --git a/code/modules/antagonists/changeling/powers/mimic_voice.dm b/code/modules/antagonists/changeling/powers/mimic_voice.dm index 17347810c990..714d4eab77c0 100644 --- a/code/modules/antagonists/changeling/powers/mimic_voice.dm +++ b/code/modules/antagonists/changeling/powers/mimic_voice.dm @@ -17,7 +17,7 @@ to_chat(user, "We return our vocal glands to their original position.") return FALSE - var/mimic_voice = stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN) + var/mimic_voice = tgui_input_text(user, "Enter a name to mimic.", "Mimic Voice", max_length = MAX_NAME_LEN) if(!mimic_voice) return FALSE diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index c689b9386fda..7a9e986bf775 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -582,3 +582,4 @@ flags = BLOCKHAIR | NODROP | DROPDEL armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 20, BOMB = 10, RAD = 0, FIRE = 90, ACID = 90) flags_inv = HIDEEARS + flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH diff --git a/code/modules/antagonists/revolutionary/datum_revolutionary.dm b/code/modules/antagonists/revolutionary/datum_revolutionary.dm index 1081bf9da443..ed3be5c22cdf 100644 --- a/code/modules/antagonists/revolutionary/datum_revolutionary.dm +++ b/code/modules/antagonists/revolutionary/datum_revolutionary.dm @@ -25,7 +25,7 @@ /datum/antagonist/rev/farewell() if(owner && owner.current) - to_chat(owner.current,"You have been brainwashed! You are no longer a [special_role]! ") + to_chat(owner.current,"You have been brainwashed! You are no longer a [special_role]!") /datum/antagonist/rev/add_owner_to_gamemode() diff --git a/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm b/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm index cc7b733c743e..250e6a5876f2 100644 --- a/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm +++ b/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm @@ -38,10 +38,13 @@ var/obj/item/U = ui_host() U?.add_fingerprint(usr) -/datum/contractor_hub/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/contractor_hub/ui_state(mob/user) + return GLOB.default_state + +/datum/contractor_hub/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Contractor", "Syndicate Contractor Uplink", 500, 600, master_ui, state) + ui = new(user, src, "Contractor", "Syndicate Contractor Uplink") ui.open() /datum/contractor_hub/ui_data(mob/user) diff --git a/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm index 82d4ca3ea709..19bf47f722d9 100644 --- a/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm @@ -23,8 +23,8 @@ /obj/item/clothing/under/syndicate/tacticool, /obj/item/coin/antagtoken/syndicate, /obj/item/poster/syndicate_recruitment, - /obj/item/reagent_containers/food/snacks/syndicake, - /obj/item/reagent_containers/food/snacks/tatortot, + /obj/item/food/snacks/syndicake, + /obj/item/food/snacks/tatortot, /obj/item/storage/box/fakesyndiesuit, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/figure/crew/syndie, @@ -422,7 +422,7 @@ M.update_icons() // Supply them with some chow. How generous is the Syndicate? - var/obj/item/reagent_containers/food/snacks/breadslice/food = new(get_turf(M)) + var/obj/item/food/snacks/breadslice/food = new(get_turf(M)) food.name = "stale bread" food.desc = "Looks like your captors care for their prisoners as much as their bread." food.trash = null @@ -432,7 +432,7 @@ food.name = "moldy bread" food.reagents.add_reagent("fungus", 1) - var/obj/item/reagent_containers/food/drinks/drinkingglass/drink = new(get_turf(M)) + var/obj/item/reagent_containers/drinks/drinkingglass/drink = new(get_turf(M)) drink.reagents.add_reagent("tea", 25) // British coders beware, tea in glasses var/obj/item/coin/antagtoken/passingtime = new(get_turf(M)) diff --git a/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm b/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm index 7b5ac75edf95..65799fc10436 100644 --- a/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm +++ b/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm @@ -12,13 +12,12 @@ // Offensive /obj/item/gun/projectile/automatic/c20r/toy, /obj/item/storage/box/syndie_kit/throwing_weapons, - /obj/item/pen/edagger, /obj/item/gun/projectile/automatic/toy/pistol/riot, /obj/item/soap/syndie, /obj/item/storage/box/syndie_kit/dart_gun, /obj/item/gun/syringe/rapidsyringe, - /obj/item/storage/backpack/duffel/syndie/x4, // Mixed + /obj/item/storage/box/syndie_kit/c4, /obj/item/storage/box/syndie_kit/emp, /obj/item/flashlight/emp, // Support @@ -28,7 +27,7 @@ /obj/item/storage/toolbox/syndicate, /obj/item/storage/backpack/duffel/syndie/med/surgery, /obj/item/multitool/ai_detect, - /obj/item/encryptionkey/binary, + /obj/item/encryptionkey/syndicate, /obj/item/jammer, /obj/item/clothing/under/syndicate/silicon_cham, /obj/item/bio_chip_implanter/freedom, @@ -53,6 +52,8 @@ new /obj/item/clothing/suit/space/syndicate/contractor(src) new /obj/item/melee/classic_baton/telescopic/contractor(src) new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/head/chameleon(src) new /obj/item/clothing/mask/chameleon(src) new /obj/item/card/id/syndicate(src) new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 22dfd2c48b70..37135db80216 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -15,6 +15,8 @@ var/give_codewords = TRUE /// Should we give the traitor their uplink? var/give_uplink = TRUE + blurb_r = 200 + blurb_a = 0.75 /datum/antagonist/traitor/on_gain() // Create this in case the traitor wants to mindslaves someone. @@ -24,6 +26,18 @@ owner.som.masters += owner ..() +/datum/antagonist/traitor/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/datum_owner = mob_override || owner.current + datum_owner.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "codephrases", src) + datum_owner.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "coderesponses", src) + +/datum/antagonist/traitor/remove_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/datum_owner = mob_override || owner.current + for(var/datum/component/codeword_hearing/component in datum_owner.GetComponents(/datum/component/codeword_hearing)) + component.delete_if_from_source(src) + /datum/antagonist/traitor/Destroy(force, ...) // Remove all associated malf AI abilities. if(isAI(owner.current)) @@ -44,8 +58,8 @@ slaved.leave_serv_hud(owner) owner.som = null - owner.current.client?.chatOutput?.clear_syndicate_codes() - + // Need to bring this functionality back to TGchat + // owner.current.client?.chatOutput?.clear_syndicate_codes() // Try removing their uplink, check PDA var/mob/M = owner.current var/obj/item/uplink_holder = locate(/obj/item/pda) in M.contents @@ -162,7 +176,8 @@ /datum/antagonist/traitor/proc/give_codewords() if(!owner.current) return - var/mob/traitor_mob = owner.current + // Need to bring this functionality back to TGchat + // var/mob/traitor_mob = owner.current var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") var/responses = jointext(GLOB.syndicate_code_response, ", ") @@ -177,7 +192,8 @@ messages.Add("Use the codewords during regular conversation to identify other agents. Proceed with caution, however, as everyone is a potential foe.") messages.Add("You memorize the codewords, allowing you to recognize them when heard.") - traitor_mob.client.chatOutput?.notify_syndicate_codes() + // Need to bring this functionality back to TGchat + // traitor_mob.client.chatOutput?.notify_syndicate_codes() return messages /** @@ -253,3 +269,6 @@ The code responses were:[responses]
        " return message + +/datum/antagonist/traitor/custom_blurb() + return "[GLOB.current_date_string], [station_time_timestamp()]\n[station_name()], [get_area_name(owner.current, TRUE)]\nBEGIN_MISSION" diff --git a/code/modules/antagonists/vampire/vamp_datum.dm b/code/modules/antagonists/vampire/vamp_datum.dm index 760b271a544f..d05fd904e83e 100644 --- a/code/modules/antagonists/vampire/vamp_datum.dm +++ b/code/modules/antagonists/vampire/vamp_datum.dm @@ -26,6 +26,12 @@ /// list of the peoples UIDs that we have drained, and how much blood from each one var/list/drained_humans = list() + blurb_text_color = COLOR_RED + blurb_text_outline_width = 0 + blurb_r = 255 + blurb_g = 221 + blurb_b = 138 + blurb_a = 1 /datum/antagonist/mindslave/thrall name = "Vampire Thrall" @@ -359,3 +365,6 @@ /datum/hud/proc/remove_vampire_hud() static_inventory -= vampire_blood_display QDEL_NULL(vampire_blood_display) + +/datum/antagonist/vampire/custom_blurb() + return "On the date [GLOB.current_date_string], at [station_time_timestamp()],\n in the [station_name()], [get_area_name(owner.current, TRUE)]...\nThe hunt begins again..." diff --git a/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm b/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm index b2c6c2db499c..c9dc978e2e2b 100644 --- a/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm @@ -111,7 +111,7 @@ return T /obj/effect/proc_holder/spell/vampire/thrall_commune/cast(list/targets, mob/user) - var/input = stripped_input(user, "Enter a message to relay to the other thralls", "Thrall Commune", "") + var/input = tgui_input_text(user, "Enter a message to relay to the other thralls", "Thrall Commune") if(!input) revert_cast(user) return @@ -120,7 +120,7 @@ for(var/mob/M in targets) to_chat(M, "[full_title]: [input]") for(var/mob/M in GLOB.dead_mob_list) - to_chat(M, "[full_title] ([ghost_follow_link(user, ghost=M)]): [input] ") + to_chat(M, "[full_title] ([ghost_follow_link(user, ghost=M)]): [input]") log_say("(DANTALION) [input]", user) user.create_log(SAY_LOG, "(DANTALION) [input]") diff --git a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm index 2fb0c1cbb32f..185725490562 100644 --- a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm @@ -138,7 +138,7 @@ for(var/mob/living/L in range(distance, T)) if(L.affects_vampire(user)) L.Slowed(slowed_amount) - L.visible_message("[L] gets ensnare in blood tendrils, restricting [L.p_their()] movement!") + L.visible_message("[L] gets ensnared in blood tendrils, restricting [L.p_their()] movement!") new /obj/effect/temp_visual/blood_tendril/long(get_turf(L)) /obj/effect/temp_visual/blood_tendril @@ -288,7 +288,7 @@ for(var/mob/living/carbon/human/H as anything in targets) targets_by_name[H.real_name] = H - var/target_name = input(user, "Person to Locate", "Blood Stench") in targets_by_name + var/target_name = tgui_input_list(user, "Person to Locate", "Blood Stench", targets_by_name) if(!target_name) return var/mob/living/carbon/human/target = targets_by_name[target_name] diff --git a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm index 68304f932a6c..62e17c541303 100644 --- a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm @@ -106,10 +106,13 @@ /obj/effect/proc_holder/spell/vampire/self/specialize/cast(mob/user) ui_interact(user) -/obj/effect/proc_holder/spell/vampire/self/specialize/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/effect/proc_holder/spell/vampire/self/specialize/ui_state(mob/user) + return GLOB.always_state + +/obj/effect/proc_holder/spell/vampire/self/specialize/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SpecMenu", "Specialisation Menu", 1200, 760, master_ui, state) + ui = new(user, src, "SpecMenu", "Specialisation Menu") ui.set_autoupdate(FALSE) ui.open() @@ -204,14 +207,14 @@ if(deviation == DEVIATION_FULL) target.Confused(6 SECONDS) - target.adjustStaminaLoss(20) + target.apply_damage(20, STAMINA) else if(deviation == DEVIATION_PARTIAL) target.KnockDown(5 SECONDS) target.Confused(6 SECONDS) - target.adjustStaminaLoss(40) + target.apply_damage(40, STAMINA) else target.Confused(10 SECONDS) - target.adjustStaminaLoss(70) + target.apply_damage(70, STAMINA) target.KnockDown(12 SECONDS) target.AdjustSilence(8 SECONDS) target.flash_eyes(1, TRUE, TRUE) diff --git a/code/modules/arcade/claw_game.dm b/code/modules/arcade/claw_game.dm index d1c6bd555818..ccd8d1e40cd9 100644 --- a/code/modules/arcade/claw_game.dm +++ b/code/modules/arcade/claw_game.dm @@ -8,14 +8,8 @@ GLOBAL_VAR(claw_game_html) token_price = 5 window_name = "Claw Game" var/machine_image = "_1" - var/bonus_prize_chance = 5 //chance to dispense a SECOND prize if you win, increased by matter bin rating - //This is to make sure the images are available - var/list/img_resources = list('icons/obj/arcade_images/backgroundsprite.png', - 'icons/obj/arcade_images/clawpieces.png', - 'icons/obj/arcade_images/crane_bot.png', - 'icons/obj/arcade_images/crane_top.png', - 'icons/obj/arcade_images/prize_inside.png', - 'icons/obj/arcade_images/prizeorbs.png') + /// Chance to dispense a SECOND prize if you win, increased by matter bin rating + var/bonus_prize_chance = 5 /obj/machinery/economy/arcade/claw/Initialize(mapload) . = ..() @@ -62,16 +56,16 @@ GLOBAL_VAR(claw_game_html) /obj/machinery/economy/arcade/claw/start_play(mob/user as mob) ..() - user << browse_rsc('page.css') - for(var/i in 1 to img_resources.len) - user << browse_rsc(img_resources[i]) + var/datum/asset/claw_game_page_asset = get_asset_datum(/datum/asset/group/claw_game) + claw_game_page_asset.send(user) + var/my_game_html = replacetext(GLOB.claw_game_html, "/* ref src */", UID()) var/datum/browser/popup = new(user, window_name, name, 915, 700, src) popup.set_content(my_game_html) - popup.add_stylesheet("page.css", 'code/modules/arcade/page.css') - popup.add_stylesheet("Button.scss", 'tgui/packages/tgui/styles/components/Button.scss') - popup.add_script("jquery-1.8.2.min.js", 'html/browser/jquery-1.8.2.min.js') - popup.add_script("jquery-ui-1.8.24.custom.min.js", 'html/browser/jquery-ui-1.8.24.custom.min.js') + popup.add_stylesheet("page", 'code/modules/arcade/page.css') + popup.add_scss_stylesheet("Button", 'tgui/packages/tgui/styles/components/Button.scss') + popup.add_script("jquery-1.8.2.min", 'html/browser/jquery-1.8.2.min.js') + popup.add_script("jquery-ui-1.8.24.custom.min", 'html/browser/jquery-ui-1.8.24.custom.min.js') popup.open() user.set_machine(src) diff --git a/code/modules/arcade/mob_hunt/battle_computer.dm b/code/modules/arcade/mob_hunt/battle_computer.dm index fc16026f48a5..e3acd026c33d 100644 --- a/code/modules/arcade/mob_hunt/battle_computer.dm +++ b/code/modules/arcade/mob_hunt/battle_computer.dm @@ -117,6 +117,9 @@ /obj/machinery/computer/mob_battle_terminal/interact(mob/user) check_connection() + var/datum/asset/mob_hunt_asset = get_asset_datum(/datum/asset/simple/mob_hunt) + mob_hunt_asset.send(user) + var/dat = "" dat += "
        " dat += "" @@ -144,9 +147,9 @@ dat += "" dat += "" diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 568fb542cac9..5e34b1d59c73 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -189,8 +189,8 @@ th.cost.toomuch {background:maroon;} if(href_list["buy"]) var/itemID = text2num(href_list["buy"]) var/datum/prize_item/item = GLOB.global_prizes.prizes[itemID] - var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for [item.cost] tickets?","You sure?","Yes","No") in list("Yes","No") - if(sure=="No") + var/sure = tgui_alert(usr,"Are you sure you wish to purchase [item.name] for [item.cost] tickets?", "You sure?", list("Yes","No")) + if(sure == "No") updateUsrDialog() return if(!GLOB.global_prizes.PlaceOrder(src, itemID)) diff --git a/code/modules/assembly/assebmly_holder.dm b/code/modules/assembly/assebmly_holder.dm index 90c56c3b5c3a..02a526da94e2 100644 --- a/code/modules/assembly/assebmly_holder.dm +++ b/code/modules/assembly/assebmly_holder.dm @@ -165,8 +165,8 @@ if(!a_left || !a_right) to_chat(user, "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")) + if(istype(a_left, a_right.type)) // If they are the same type it causes issues due to window code + switch(tgui_alert(user, "Which side would you like to use?", "Choose", list("Left", "Right"))) if("Left") a_left.attack_self(user) if("Right") diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 795f1a5ac5b5..6d128f01ce6d 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -76,10 +76,13 @@ /obj/item/assembly/health/attack_self(mob/user) ui_interact(user) -/obj/item/assembly/health/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.deep_inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/assembly/health/ui_state(mob/user) + return GLOB.deep_inventory_state + +/obj/item/assembly/health/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "HealthSensor", name, 300, 140, master_ui, state) + ui = new(user, src, "HealthSensor", name) ui.open() /obj/item/assembly/health/ui_data(mob/user) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 074d254d4977..518706ac1743 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -81,10 +81,13 @@ GLOBAL_LIST_EMPTY(remote_signalers) /obj/item/assembly/signaler/attack_self(mob/user) ui_interact(user) -/obj/item/assembly/signaler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.deep_inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/assembly/signaler/ui_state(mob/user) + return GLOB.deep_inventory_state + +/obj/item/assembly/signaler/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RemoteSignaler", name, 300, 200, master_ui, state) + ui = new(user, src, "RemoteSignaler", name) ui.open() /obj/item/assembly/signaler/ui_data(mob/user) diff --git a/code/modules/asset_cache/asset_cache_client.dm b/code/modules/asset_cache/asset_cache_client.dm new file mode 100644 index 000000000000..cbb1e8bc777d --- /dev/null +++ b/code/modules/asset_cache/asset_cache_client.dm @@ -0,0 +1,53 @@ +/client + /// List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s + var/list/sent_assets = list() + /// List of all completed blocking send jobs awaiting acknowledgement by send_asset + var/list/completed_asset_jobs = list() + + /// Last asset send job id + var/last_asset_job = 0 + var/last_completed_asset_job = 0 + +/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]" +/client/proc/asset_cache_confirm_arrival(job_id) + var/asset_cache_job = round(text2num(job_id)) + //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us into letting them append to a list without limit. + if(asset_cache_job > 0 && asset_cache_job <= last_asset_job && !(completed_asset_jobs["[asset_cache_job]"])) + completed_asset_jobs["[asset_cache_job]"] = TRUE + last_completed_asset_job = max(last_completed_asset_job, asset_cache_job) + else + return asset_cache_job || TRUE + + +/// Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING] +/client/proc/asset_cache_preload_data(data) + var/json = data + var/list/preloaded_assets = json_decode(json) + for(var/preloaded_asset in preloaded_assets) + if(copytext(preloaded_asset, findlasttext(preloaded_asset, ".") + 1) in list("js", "jsm", "htm", "html")) + preloaded_assets -= preloaded_asset + continue + sent_assets |= preloaded_assets + + +/// Updates the client side stored json file used to keep track of what assets the client has between restarts/reconnects. +/client/proc/asset_cache_update_json() + if(world.time - connection_time < 10 SECONDS) //don't override the existing data file on a new connection + return + + src << browse(json_encode(sent_assets), "file=asset_data.json&display=0") + +/// Blocks until all currently sending browse and browse_rs assets have been sent. +/// Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. +/// This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away. +/client/proc/browse_queue_flush(timeout = 5 SECONDS) + var/job = ++last_asset_job + var/t = 0 + var/timeout_time = timeout + src << browse({""}, "window=asset_cache_browser&file=asset_cache_send_verify.htm") + + while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic() + stoplag(1) // Lock up the caller until this is received. + t++ + if(t < timeout_time) + return TRUE diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm new file mode 100644 index 000000000000..2d9aa65e503c --- /dev/null +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -0,0 +1,54 @@ +/** + * # asset_cache_item + * + * An internal datum containing info on items in the asset cache. Mainly used to cache md5 info for speed. +**/ +/datum/asset_cache_item + /// the name of this asset item, becomes the key in SSassets.cache list + var/name + /// md5() of the file this asset item represents. + var/hash + /// the file this asset represents + var/resource + /// our file extension e.g. .png, .gif, etc + var/ext = "" + /// Should this file also be sent via the legacy browse_rsc system + /// when cdn transports are enabled? + var/legacy = FALSE + /// Used by the cdn system to keep legacy css assets with their parent + /// css file. (css files resolve urls relative to the css file, so the + /// legacy system can't be used if the css file itself could go out over + /// the cdn) + var/namespace = null + /// True if this is the parent css or html file for an asset's namespace + var/namespace_parent = FALSE + /// TRUE for keeping local asset names when browse_rsc backend is used + var/keep_local_name = FALSE + +/datum/asset_cache_item/New(name, file) + if(!isfile(file)) + file = fcopy_rsc(file) + hash = md5(file) + if(!hash) + hash = md5(fcopy_rsc(file)) + if(!hash) + CRASH("invalid asset sent to asset cache") + log_debug("asset cache unexpected success of second fcopy_rsc") + src.name = name + var/extstart = findlasttext(name, ".") + if(extstart) + ext = ".[copytext(name, extstart+1)]" + resource = file + +/datum/asset_cache_item/vv_edit_var(var_name, var_value) + return FALSE + +/datum/asset_cache_item/CanProcCall(procname) + return FALSE + +/* + * can_vv_delete override + * Admins should not be deleting asset cache items through VV + */ +/datum/asset_cache_item/can_vv_delete() + return FALSE diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm new file mode 100644 index 000000000000..4674bf24ce64 --- /dev/null +++ b/code/modules/asset_cache/asset_list.dm @@ -0,0 +1,378 @@ +//These datums are used to populate the asset cache, the proc "register()" does this. +//Place any asset datums you create in asset_list_items.dm + +//all of our asset datums, used for referring to these later +GLOBAL_LIST_EMPTY(asset_datums) + +//get an assetdatum or make a new one +/proc/get_asset_datum(type) + return GLOB.asset_datums[type] || new type() + +/datum/asset + var/_abstract = /datum/asset + var/cached_serialized_url_mappings + var/cached_serialized_url_mappings_transport_type + +/datum/asset/New() + GLOB.asset_datums[type] = src + register() + +/datum/asset/proc/get_url_mappings() + return list() + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + + +/// If you don't need anything complicated. +/datum/asset/simple + _abstract = /datum/asset/simple + /// List of assets for this datum in the form of asset_filename = asset_file. At runtime the asset_file will be converted into a asset_cache datum + var/assets = list() + /// Set to true to have this asset also be sent via browse_rsc when cdn asset transports are enabled + var/legacy = FALSE + /// TRUE for keeping local asset names when browse_rsc backend is used + var/keep_local_name = FALSE + +/datum/asset/simple/register() + for(var/asset_name in assets) + var/datum/asset_cache_item/ACI = SSassets.transport.register_asset(asset_name, assets[asset_name]) + if(!ACI) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + if(legacy) + ACI.legacy = TRUE + if(keep_local_name) + ACI.keep_local_name = keep_local_name + assets[asset_name] = ACI + +/datum/asset/simple/send(client) + . = SSassets.transport.send_assets(client, assets) + +/datum/asset/simple/get_url_mappings() + . = list() + for(var/asset_name in assets) + var/datum/asset_cache_item/ACI = assets[asset_name] + if(!ACI) + continue + .[asset_name] = SSassets.transport.get_asset_url(asset_name, assets[asset_name]) + + +/// For registering or sending multiple others at once +/datum/asset/group + _abstract = /datum/asset/group + var/list/children + +/datum/asset/group/register() + for(var/type in children) + get_asset_datum(type) + +/datum/asset/group/send(client/C) + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . = A.send(C) || . + +/datum/asset/group/get_url_mappings() + . = list() + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . += A.get_url_mappings() + +/// Returns a cached tgui message of URL mappings +/datum/asset/proc/get_serialized_url_mappings() + if(isnull(cached_serialized_url_mappings) || cached_serialized_url_mappings_transport_type != SSassets.transport.type) + cached_serialized_url_mappings = TGUI_CREATE_MESSAGE("asset/mappings", get_url_mappings()) + cached_serialized_url_mappings_transport_type = SSassets.transport.type + + return cached_serialized_url_mappings + +// spritesheet implementation - coalesces various icons into a single .png file +// and uses CSS to select icons out of that file - saves on transferring some +// 1400-odd individual PNG files +#define SPR_SIZE 1 +#define SPR_IDX 2 +#define SPRSZ_COUNT 1 +#define SPRSZ_ICON 2 +#define SPRSZ_STRIPPED 3 + +/datum/asset/spritesheet + _abstract = /datum/asset/spritesheet + var/name + /// "32x32" -> list(10, icon/normal, icon/stripped) + var/list/sizes = list() + /// "foo_bar" -> list("32x32", 5) + var/list/sprites = list() + +/datum/asset/spritesheet/register() + SHOULD_NOT_OVERRIDE(TRUE) + + if(!name) + CRASH("spritesheet [type] cannot register without a name") + + create_spritesheets() + realize_spritesheets() + +/datum/asset/spritesheet/proc/realize_spritesheets() + ensure_stripped() + for(var/size_id in sizes) + var/size = sizes[size_id] + SSassets.transport.register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED]) + var/css_name = "spritesheet_[name].css" + var/file_directory = "data/spritesheets/[css_name]" + fdel(file_directory) + text2file(generate_css(), file_directory) + SSassets.transport.register_asset(css_name, fcopy_rsc(file_directory)) + fdel(file_directory) + +/datum/asset/spritesheet/send(client/client) + if(!name) + return + var/all = list("spritesheet_[name].css") + for(var/size_id in sizes) + all += "[name]_[size_id].png" + . = SSassets.transport.send_assets(client, all) + +/datum/asset/spritesheet/get_url_mappings() + if(!name) + return + + . = list("spritesheet_[name].css" = SSassets.transport.get_asset_url("spritesheet_[name].css")) + for(var/size_id in sizes) + .["[name]_[size_id].png"] = SSassets.transport.get_asset_url("[name]_[size_id].png") + +/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes) + for(var/size_id in sizes_to_strip) + var/size = sizes[size_id] + if(size[SPRSZ_STRIPPED]) + continue + + // save flattened version + var/png_name = "[name]_[size_id].png" + var/file_directory = "data/spritesheets/[png_name]" + fcopy(size[SPRSZ_ICON], file_directory) + var/error = rustg_dmi_strip_metadata(file_directory) + if(length(error)) + stack_trace("Failed to strip [png_name]: [error]") + size[SPRSZ_STRIPPED] = icon(file_directory) + fdel(file_directory) + +/datum/asset/spritesheet/proc/generate_css() + var/list/out = list() + + for(var/size_id in sizes) + var/size = sizes[size_id] + var/icon/tiny = size[SPRSZ_ICON] + out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[SSassets.transport.get_asset_url("[name]_[size_id].png")]') no-repeat;}" + + for(var/sprite_id in sprites) + var/sprite = sprites[sprite_id] + var/size_id = sprite[SPR_SIZE] + var/idx = sprite[SPR_IDX] + var/size = sizes[size_id] + + var/icon/tiny = size[SPRSZ_ICON] + var/icon/big = size[SPRSZ_STRIPPED] + var/per_line = big.Width() / tiny.Width() + var/x = (idx % per_line) * tiny.Width() + var/y = round(idx / per_line) * tiny.Height() + + out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}" + + return out.Join("\n") + +/* + * Override this in order to start the creation of the spritehseet. + * This is where all your Insert, InsertAll, etc calls should be inside. + */ +/datum/asset/spritesheet/proc/create_spritesheets() + SHOULD_CALL_PARENT(FALSE) + CRASH("create_spritesheets() not implemented for [type]!") + +/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) + I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) + if(!I || !length(icon_states(I))) // that direction or state doesn't exist + return + // any sprite modifications we want to do (aka, coloring a greyscaled asset) + I = ModifyInserted(I) + var/size_id = "[I.Width()]x[I.Height()]" + var/size = sizes[size_id] + + if(sprites[sprite_name]) + CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])") + + if(size) + var/position = size[SPRSZ_COUNT]++ + // Icons are essentially representations of files + modifications + // Because of this, byond keeps them in a cache. It does this in a really dumb way tho + // It's essentially a FIFO queue. So after we do icon() some amount of times, our old icons go out of cache + // When this happens it becomes impossible to modify them, trying to do so will instead throw a + // "bad icon" error. + // What we're doing here is ensuring our icon is in the cache by refreshing it, so we can modify it w/o runtimes. + var/icon/sheet = size[SPRSZ_ICON] + var/icon/sheet_copy = icon(sheet) + size[SPRSZ_STRIPPED] = null + sheet_copy.Insert(I, icon_state=sprite_name) + size[SPRSZ_ICON] = sheet_copy + + sprites[sprite_name] = list(size_id, position) + else + sizes[size_id] = size = list(1, I, null) + sprites[sprite_name] = list(size_id, 0) + +/** + * A simple proc handing the Icon for you to modify before it gets turned into an asset. + * + * Arguments: + * * I: icon being turned into an asset + */ +/datum/asset/spritesheet/proc/ModifyInserted(icon/pre_asset) + return pre_asset + +/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions) + if(length(prefix)) + prefix = "[prefix]-" + + if(!directions) + directions = list(SOUTH) + + for(var/icon_state_name in icon_states(I)) + for(var/direction in directions) + var/prefix2 = length(directions) ? "[dir2text(direction)]-" : "" + Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction) + +/datum/asset/spritesheet/proc/css_tag() + return {""} + +/datum/asset/spritesheet/proc/css_filename() + return SSassets.transport.get_asset_url("spritesheet_[name].css") + +/datum/asset/spritesheet/proc/icon_tag(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {""} + +/datum/asset/spritesheet/proc/icon_class_name(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {"[name][size_id] [sprite_name]"} + +/** + * Returns the size class (ex design32x32) for a given sprite's icon + * + * Arguments: + * * sprite_name - The sprite to get the size of + */ +/datum/asset/spritesheet/proc/icon_size_id(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return "[name][size_id]" + +#undef SPR_SIZE +#undef SPR_IDX +#undef SPRSZ_COUNT +#undef SPRSZ_ICON +#undef SPRSZ_STRIPPED + + +/datum/asset/spritesheet/simple + _abstract = /datum/asset/spritesheet/simple + var/list/assets + +/datum/asset/spritesheet/simple/create_spritesheets() + for(var/key in assets) + Insert(key, assets[key]) + +/// Generates assets based on iconstates of a single icon +/datum/asset/simple/icon_states + _abstract = /datum/asset/simple/icon_states + var/icon + var/list/directions = list(SOUTH) + var/frame = 1 + var/movement_states = FALSE + + /// Used in asset name generation, (asset_name = "[prefix].[icon_state_name].png") + var/prefix = "default" + /// Generate icon filenames using GENERATE_ASSET_NAME instead the "[prefix].[icon_state_name].png" format + var/generic_icon_names = FALSE + +/datum/asset/simple/icon_states/register(_icon = icon) + for(var/icon_state_name in icon_states(_icon)) + for(var/direction in directions) + var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) + if(!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" + var/asset_name = "[prefix].[prefix2][icon_state_name].png" + if(generic_icon_names) + asset_name = "[GENERATE_ASSET_NAME(asset)].png" + + SSassets.transport.register_asset(asset_name, asset) + +/datum/asset/simple/icon_states/multiple_icons + _abstract = /datum/asset/simple/icon_states/multiple_icons + var/list/icons + +/datum/asset/simple/icon_states/multiple_icons/register() + for(var/i in icons) + ..(i) + +/// Namespace'ed assets (for static css and html files) +/// When sent over a cdn transport, all assets in the same asset datum will exist in the same folder, as their plain names. +/// Used to ensure css files can reference files by url() without having to generate the css at runtime, both the css file and the files it depends on must exist in the same namespace asset datum. (Also works for html) +/// For example `blah.css` with asset `blah.png` will get loaded as `namespaces/a3d..14f/f12..d3c.css` and `namespaces/a3d..14f/blah.png`. allowing the css file to load `blah.png` by a relative url rather then compute the generated url with get_url_mappings(). +/// The namespace folder's name will change if any of the assets change. (excluding parent assets) +/datum/asset/simple/namespaced + _abstract = /datum/asset/simple/namespaced + /// parents - list of the parent asset or assets (in name = file assoicated format) for this namespace. + /// parent assets must be referenced by their generated url, but if an update changes a parent asset, it won't change the namespace's identity. + var/list/parents = list() + +/datum/asset/simple/namespaced/register() + if(legacy) + assets |= parents + var/list/hashlist = list() + var/list/sorted_assets = sortTim(assets, GLOBAL_PROC_REF(cmp_text_asc), TRUE) + + for(var/asset_name in sorted_assets) + var/datum/asset_cache_item/ACI = new(asset_name, sorted_assets[asset_name]) + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + hashlist += ACI.hash + sorted_assets[asset_name] = ACI + var/namespace = md5(hashlist.Join()) + + for(var/asset_name in parents) + var/datum/asset_cache_item/ACI = new(asset_name, parents[asset_name]) + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + ACI.namespace_parent = TRUE + sorted_assets[asset_name] = ACI + + for(var/asset_name in sorted_assets) + var/datum/asset_cache_item/ACI = sorted_assets[asset_name] + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + ACI.namespace = namespace + + assets = sorted_assets + ..() + +/* + * Get a html string that will load a html asset. + * Needed because byond doesn't allow you to browse() to a url. + */ +/datum/asset/simple/namespaced/proc/get_htmlloader(filename) + return URL2HTMLLOADER(SSassets.transport.get_asset_url(filename, assets[filename])) diff --git a/code/modules/asset_cache/assets/asset_alloys.dm b/code/modules/asset_cache/assets/asset_alloys.dm new file mode 100644 index 000000000000..8c6ff0f71d77 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_alloys.dm @@ -0,0 +1,10 @@ +/datum/asset/spritesheet/alloys + name = "alloys" + +/datum/asset/spritesheet/alloys/create_spritesheets() + for(var/datum/design/smelter/alloy_typepath as anything in subtypesof(/datum/design/smelter) + /datum/design/rglass) + var/obj/item/stack/stack_type = initial(alloy_typepath.build_path) + if(!stack_type) + continue + + Insert(alloy_typepath.id, stack_type.icon, stack_type.icon_state) diff --git a/code/modules/asset_cache/assets/asset_chem_master.dm b/code/modules/asset_cache/assets/asset_chem_master.dm new file mode 100644 index 000000000000..7371b807289a --- /dev/null +++ b/code/modules/asset_cache/assets/asset_chem_master.dm @@ -0,0 +1,15 @@ +/// Pill sprites for UIs +/datum/asset/spritesheet/chem_master + name = "chem_master" + +/datum/asset/spritesheet/chem_master/create_spritesheets() + for(var/pill_type = 1 to 20) + Insert("pill[pill_type]", 'icons/obj/chemical.dmi', "pill[pill_type]") + for(var/bottle_type in list("bottle", "small_bottle", "wide_bottle", "round_bottle", "reagent_bottle")) + Insert(bottle_type, 'icons/obj/chemical.dmi', bottle_type) + +/datum/asset/spritesheet/chem_master/ModifyInserted(icon/pre_asset) + pre_asset.Scale(64, 64) + pre_asset.Crop(16,16,48,48) + pre_asset.Scale(32, 32) + return pre_asset diff --git a/code/modules/asset_cache/assets/asset_chess.dm b/code/modules/asset_cache/assets/asset_chess.dm new file mode 100644 index 000000000000..84af9c24a2bf --- /dev/null +++ b/code/modules/asset_cache/assets/asset_chess.dm @@ -0,0 +1,16 @@ +/datum/asset/simple/namespaced/chess + legacy = TRUE + assets = list( + "sprites.png" = 'icons/chess_pieces/sprites.png', + "blank.gif" = 'icons/chess_pieces/blank.gif', + "garbochess.js" = 'html/browser/garbochess.js', + ) + parents = list( + "boardui.js" = 'html/browser/boardui.js' + ) + +/datum/asset/group/chess + children = list( + /datum/asset/simple/namespaced/chess, + /datum/asset/simple/jquery + ) diff --git a/code/modules/asset_cache/assets/asset_claw_game.dm b/code/modules/asset_cache/assets/asset_claw_game.dm new file mode 100644 index 000000000000..e503820c74b3 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_claw_game.dm @@ -0,0 +1,20 @@ +/datum/asset/simple/namespaced/claw_game + legacy = TRUE + assets = list( + "backgroundsprite.png" = 'icons/obj/arcade_images/backgroundsprite.png', + "clawpieces.png" = 'icons/obj/arcade_images/clawpieces.png', + "crane_bot.png" = 'icons/obj/arcade_images/crane_bot.png', + "crane_top.png" = 'icons/obj/arcade_images/crane_top.png', + "prize_inside.png" = 'icons/obj/arcade_images/prize_inside.png', + "prizeorbs.png" = 'icons/obj/arcade_images/prizeorbs.png' + ) + parents = list( + "page.css" = 'code/modules/arcade/page.css', + "Button.scss" = 'tgui/packages/tgui/styles/components/Button.scss' + ) + +/datum/asset/group/claw_game + children = list( + /datum/asset/simple/namespaced/claw_game, + /datum/asset/simple/jquery + ) diff --git a/code/modules/asset_cache/assets/asset_cloning.dm b/code/modules/asset_cache/assets/asset_cloning.dm new file mode 100644 index 000000000000..4d5ca534dbd2 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_cloning.dm @@ -0,0 +1,6 @@ +/datum/asset/simple/cloning + assets = list( + "pod_idle.gif" = icon('icons/obj/cloning.dmi', "pod_idle"), + "pod_cloning.gif" = icon('icons/obj/cloning.dmi', "pod_cloning"), + "pod_mess.gif" = icon('icons/obj/cloning.dmi', "pod_mess") + ) diff --git a/code/modules/asset_cache/assets/asset_common.dm b/code/modules/asset_cache/assets/asset_common.dm new file mode 100644 index 000000000000..2ada930f3611 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_common.dm @@ -0,0 +1,2 @@ +/datum/asset/simple/common + assets = list("common.css" = 'html/browser/common.css') diff --git a/code/modules/asset_cache/assets/asset_jquery.dm b/code/modules/asset_cache/assets/asset_jquery.dm new file mode 100644 index 000000000000..e6de67c3b796 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_jquery.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/jquery + assets = list( + "jquery-1.8.2.min.js" = 'html/browser/jquery-1.8.2.min.js', + "jquery-ui-1.8.24.custom.min.js" = 'html/browser/jquery-ui-1.8.24.custom.min.js' + ) diff --git a/code/modules/asset_cache/assets/asset_materials.dm b/code/modules/asset_cache/assets/asset_materials.dm new file mode 100644 index 000000000000..8226e23d4904 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_materials.dm @@ -0,0 +1,10 @@ +/datum/asset/spritesheet/materials + name = "materials" + +/datum/asset/spritesheet/materials/create_spritesheets() + for(var/datum/material/material_typepath as anything in subtypesof(/datum/material)) + var/obj/item/stack/stack_type = initial(material_typepath.sheet_type) + if(!stack_type) + continue + + Insert(material_typepath.id, stack_type.icon, stack_type.icon_state) diff --git a/code/modules/asset_cache/assets/asset_mob_hunt.dm b/code/modules/asset_cache/assets/asset_mob_hunt.dm new file mode 100644 index 000000000000..ed1f7494e332 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_mob_hunt.dm @@ -0,0 +1,7 @@ +/datum/asset/simple/mob_hunt/register() + for(var/state in icon_states('icons/effects/mob_hunt.dmi')) + if(state == "Placeholder") + continue + assets["[state].png"] = icon('icons/effects/mob_hunt.dmi', state) + + return ..() diff --git a/code/modules/asset_cache/assets/asset_nanomap.dm b/code/modules/asset_cache/assets/asset_nanomap.dm new file mode 100644 index 000000000000..d678800f292c --- /dev/null +++ b/code/modules/asset_cache/assets/asset_nanomap.dm @@ -0,0 +1,9 @@ +/datum/asset/simple/nanomaps + // It REALLY doesnt matter too much if these arent up to date + // They are relatively big + assets = list( + "Cyberiad220_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad220_nanomap_z1.png', // SS220 EDITS - OUR MAPS + "Delta220_nanomap_z1.png" = 'icons/_nanomaps/Delta220_nanomap_z1.png', + "MetaStation220_nanomap_z1.png" = 'icons/_nanomaps/MetaStation220_nanomap_z1.png', + "CereStation_nanomap_z1.png" = 'icons/_nanomaps/CereStation_nanomap_z1.png', + ) diff --git a/code/modules/asset_cache/assets/asset_panels.dm b/code/modules/asset_cache/assets/asset_panels.dm new file mode 100644 index 000000000000..783105fa9bb8 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_panels.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/permissions + assets = list( + "search.js" = 'html/search.js', + "panels.css" = 'html/panels.css' + ) diff --git a/code/modules/asset_cache/assets/asset_paper.dm b/code/modules/asset_cache/assets/asset_paper.dm new file mode 100644 index 000000000000..5c3e3329e481 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_paper.dm @@ -0,0 +1,31 @@ +/datum/asset/simple/paper + // TODO: revrite stamp code to not rely on hardcoded stamp url or make TGUI for paper + keep_local_name = TRUE + assets = list( + "large_stamp-clown.png" = 'icons/paper_icons/large_stamp-clown.png', + "large_stamp-deny.png"= 'icons/paper_icons/large_stamp-deny.png', + "large_stamp-ok.png" = 'icons/paper_icons/large_stamp-ok.png', + "large_stamp-hop.png" = 'icons/paper_icons/large_stamp-hop.png', + "large_stamp-cmo.png" = 'icons/paper_icons/large_stamp-cmo.png', + "large_stamp-ce.png" = 'icons/paper_icons/large_stamp-ce.png', + "large_stamp-hos.png" = 'icons/paper_icons/large_stamp-hos.png', + "large_stamp-rd.png" = 'icons/paper_icons/large_stamp-rd.png', + "large_stamp-cap.png" = 'icons/paper_icons/large_stamp-cap.png', + "large_stamp-qm.png" = 'icons/paper_icons/large_stamp-qm.png', + "large_stamp-law.png" = 'icons/paper_icons/large_stamp-law.png', + "large_stamp-cent.png"= 'icons/paper_icons/large_stamp-cent.png', + "large_stamp-syndicate.png" = 'icons/paper_icons/large_stamp-syndicate.png', + "large_stamp-rep.png" = 'icons/paper_icons/large_stamp-rep.png', + "large_stamp-magistrate.png" = 'icons/paper_icons/large_stamp-magistrate.png', + "talisman.png" = 'icons/paper_icons/talisman.png', + "ntlogo.png" = 'icons/paper_icons/ntlogo.png', + "syndielogo.png" ='icons/paper_icons/syndielogo.png', + + // SS220 ADDITION + "large_stamp-ward.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ward.png', + "large_stamp-ploho.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ploho.png', + "large_stamp-BIGdeny.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-BIGdeny.png', + "large_stamp-navcom.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-navcom.png', + "large_stamp-mime.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-mime.png', + "large_stamp-ussp.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ussp.png' + ) diff --git a/code/modules/asset_cache/assets/asset_rpd.dm b/code/modules/asset_cache/assets/asset_rpd.dm new file mode 100644 index 000000000000..89b954cb1442 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_rpd.dm @@ -0,0 +1,6 @@ +/datum/asset/spritesheet/rpd + name = "rpd" + +/datum/asset/spritesheet/rpd/create_spritesheets() + InsertAll("", 'icons/obj/pipe-item.dmi', GLOB.alldirs) + InsertAll("", 'icons/obj/pipes/disposal.dmi', GLOB.alldirs) diff --git a/code/modules/asset_cache/assets/asset_safe.dm b/code/modules/asset_cache/assets/asset_safe.dm new file mode 100644 index 000000000000..007226cf952c --- /dev/null +++ b/code/modules/asset_cache/assets/asset_safe.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/safe + keep_local_name = TRUE + assets = list( + "safe_dial.png" = 'icons/safe_dial.png' + ) diff --git a/code/modules/asset_cache/assets/asset_tgui.dm b/code/modules/asset_cache/assets/asset_tgui.dm new file mode 100644 index 000000000000..2ffaa23144b7 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_tgui.dm @@ -0,0 +1,26 @@ +/datum/asset/simple/tgui + keep_local_name = TRUE + assets = list( + "tgui.bundle.js" = 'tgui/public/tgui.bundle.js', + "tgui.bundle.css" = 'tgui/public/tgui.bundle.css' +) + +/datum/asset/simple/tgui_panel + keep_local_name = TRUE + assets = list( + "tgui-panel.bundle.js" = 'tgui/public/tgui-panel.bundle.js', + "tgui-panel.bundle.css" = 'tgui/public/tgui-panel.bundle.css', + ) + +/datum/asset/simple/namespaced/fontawesome + legacy = TRUE + assets = list( + "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', + "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', + "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', + "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', + "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' + ) + parents = list( + "font-awesome.css" = 'html/font-awesome/css/all.min.css' + ) diff --git a/code/modules/asset_cache/readme.md b/code/modules/asset_cache/readme.md new file mode 100644 index 000000000000..b2f8914708bb --- /dev/null +++ b/code/modules/asset_cache/readme.md @@ -0,0 +1,35 @@ +# Asset cache system + +## Framework for managing browser assets (javascript,css,images,etc) + +This manages getting the asset to the client without doing unneeded re-sends, as well as utilizing any configured cdns. + +There are two frameworks for using this system: + +### Asset datum: + +Make a datum in asset_list_items.dm with your browser assets for your thing. + +Checkout asset_list.dm for the helper subclasses + +The `simple` subclass will most likely be of use for most cases. + +Call get_asset_datum() with the type of the datum you created to get your asset cache datum + +Call .send(client|usr) on that datum to send the asset to the client. Depending on the asset transport this may or may not block. + +Call .get_url_mappings() to get an associated list with the urls your assets can be found at. + +### Manual backend: + +See the documentation for `/datum/asset_transport` for the backend api the asset datums utilize. + +The global variable `SSassets.transport` contains the currently configured transport. + +### Notes: + +Because byond browse() calls use non-blocking queues, if your code uses output() (which bypasses all of these queues) to invoke javascript functions you will need to first have the javascript announce to the server it has loaded before trying to invoke js functions. + +To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by `get_url_mappings()` or by asset_transport's `get_asset_url()`. (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details. + +CSS files that use url() can be made to use the CDN without needing to rewrite all url() calls in code by using the namespaced helper datum. See the documentation for `/datum/asset/simple/namespaced` for details. diff --git a/code/modules/asset_cache/transports/asset_transport.dm b/code/modules/asset_cache/transports/asset_transport.dm new file mode 100644 index 000000000000..a8edb2f6afa5 --- /dev/null +++ b/code/modules/asset_cache/transports/asset_transport.dm @@ -0,0 +1,155 @@ +/// When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +/// Base browse_rsc asset transport +/datum/asset_transport + var/name = "Simple browse_rsc asset transport" + var/static/list/preload + /// Don't mutate the filename of assets when sending via browse_rsc. + /// This is to make it easier to debug issues with assets, and allow server operators to bypass issues that make it to production. + /// If turning this on fixes asset issues, something isn't using SSassets.transport.get_asset_url and the asset isn't marked legacy, fix one of those. + var/dont_mutate_filenames = FALSE + +/// Initialize - Called when SSassets initializes. +/datum/asset_transport/proc/Initialize(list/assets) + preload = assets.Copy() + Load() + +/// Called when the transport is loaded by the config controller, not called on the default transport unless it gets loaded by a config change. +/datum/asset_transport/proc/Load() + if(!GLOB.configuration.asset_cache.asset_simple_preload) + return + for(var/client/C as anything in GLOB.clients) + addtimer(CALLBACK(src, PROC_REF(send_assets_slow), C, preload), 1 SECONDS) + + +/// Register a browser asset with the asset cache system +/// asset_name - the identifier of the asset +/// asset - the actual asset file (or an asset_cache_item datum) +/// returns a /datum/asset_cache_item. +/// mutiple calls to register the same asset under the same asset_name return the same datum +/datum/asset_transport/proc/register_asset(asset_name, asset) + var/datum/asset_cache_item/ACI = asset + if(!istype(ACI)) + ACI = new(asset_name, asset) + if(!ACI || !ACI.hash) + CRASH("ERROR: Invalid asset: [asset_name]:[asset]:[ACI]") + if(SSassets.cache[asset_name]) + var/datum/asset_cache_item/OACI = SSassets.cache[asset_name] + OACI.legacy = ACI.legacy = (ACI.legacy|OACI.legacy) + OACI.namespace_parent = ACI.namespace_parent = (ACI.namespace_parent | OACI.namespace_parent) + OACI.namespace = OACI.namespace || ACI.namespace + if(OACI.hash != ACI.hash) + var/error_msg = "ERROR: new asset added to the asset cache with the same name as another asset: [asset_name] existing asset hash: [OACI.hash] new asset hash:[ACI.hash]" + stack_trace(error_msg) + log_debug(error_msg) + else + if(length(ACI.namespace)) + return ACI + return OACI + + SSassets.cache[asset_name] = ACI + return ACI + + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/proc/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if(!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + // To ensure code that breaks on cdns breaks in local testing, we only + // use the normal filename on legacy assets and name space assets. + var/keep_local_name = dont_mutate_filenames \ + || asset_cache_item.legacy \ + || asset_cache_item.keep_local_name \ + || (asset_cache_item.namespace && !asset_cache_item.namespace_parent) + if(keep_local_name) + return url_encode(asset_cache_item.name) + return url_encode("asset.[asset_cache_item.hash][asset_cache_item.ext]") + + +/// Sends a list of browser assets to a client +/// client - a client or mob +/// asset_list - A list of asset filenames to be sent to the client. Can optionally be assoicated with the asset's asset_cache_item datum. +/// Returns TRUE if any assets were sent. +/datum/asset_transport/proc/send_assets(client/client, list/asset_list) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + else //no stacktrace because this will mainly happen because the client went away + return + else + CRASH("Invalid argument: client: `[client]`") + if(!islist(asset_list)) + asset_list = list(asset_list) + var/list/unreceived = list() + + for(var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if(!istype(ACI) && !(ACI = SSassets.cache[asset_name])) + log_debug("ERROR: can't send asset `[asset_name]`: unregistered or invalid state: `[ACI]`") + continue + var/asset_file = ACI.resource + if(!asset_file) + log_debug("ERROR: can't send asset `[asset_name]`: invalid registered resource: `[ACI.resource]`") + continue + + var/asset_hash = ACI.hash + var/new_asset_name = asset_name + var/keep_local_name = dont_mutate_filenames \ + || ACI.legacy \ + || ACI.keep_local_name \ + || (ACI.namespace && !ACI.namespace_parent) + if(!keep_local_name) + new_asset_name = "asset.[ACI.hash][ACI.ext]" + if(client.sent_assets[new_asset_name] == asset_hash) + // Un-comment below to debug asset sending (This will spam logs so do not enable normally) + // log_debug("Skipping send of `[asset_name]` (as `[new_asset_name]`) for `[client]` because it already exists in the client's sent_assets list") + continue + unreceived[asset_name] = ACI + + if(length(unreceived)) + if(length(unreceived) >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + to_chat(client, "Sending Resources...") + + for(var/asset_name in unreceived) + var/new_asset_name = asset_name + var/datum/asset_cache_item/ACI = unreceived[asset_name] + var/keep_local_name = dont_mutate_filenames \ + || ACI.legacy \ + || ACI.keep_local_name \ + || (ACI.namespace && !ACI.namespace_parent) + if(!keep_local_name) + new_asset_name = "asset.[ACI.hash][ACI.ext]" + // Un-comment below to debug asset sending (This will spam logs so do not enable normally) + // log_debug("Sending asset `[asset_name]` to client `[client]` as `[new_asset_name]`") + client << browse_rsc(ACI.resource, new_asset_name) + + client.sent_assets[new_asset_name] = ACI.hash + + addtimer(CALLBACK(client, /client/proc/asset_cache_update_json), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + return FALSE + + +/// Precache files without clogging up the browse() queue, used for passively sending files on connection start. +/datum/asset_transport/proc/send_assets_slow(client/client, list/files, filerate = 6) + var/startingfilerate = filerate + for(var/file in files) + if(!client) + break + if(send_assets(client, file)) + if(!(--filerate)) + filerate = startingfilerate + client.browse_queue_flush() + stoplag(0) //queuing calls like this too quickly can cause issues in some client versions + +/// Check the config is valid to load this transport +/// Returns TRUE or FALSE +/datum/asset_transport/proc/validate_config(log = TRUE) + return TRUE + +#undef ASSET_CACHE_TELL_CLIENT_AMOUNT diff --git a/code/modules/asset_cache/transports/webroot_transport.dm b/code/modules/asset_cache/transports/webroot_transport.dm new file mode 100644 index 000000000000..3da0863e0077 --- /dev/null +++ b/code/modules/asset_cache/transports/webroot_transport.dm @@ -0,0 +1,87 @@ +/// CDN Webroot asset transport. +/datum/asset_transport/webroot + name = "CDN Webroot asset transport" + +/datum/asset_transport/webroot/Load() + if(validate_config(log = FALSE)) + load_existing_assets() + +/// Processes thru any assets that were registered before we were loaded as a transport. +/datum/asset_transport/webroot/proc/load_existing_assets() + for(var/asset_name in SSassets.cache) + var/datum/asset_cache_item/ACI = SSassets.cache[asset_name] + save_asset_to_webroot(ACI) + +/// Register a browser asset with the asset cache system +/// We also save it to the CDN webroot at this step instead of waiting for send_assets() +/// asset_name - the identifier of the asset +/// asset - the actual asset file or an asset_cache_item datum. +/datum/asset_transport/webroot/register_asset(asset_name, asset) + . = ..() + var/datum/asset_cache_item/ACI = . + + if(istype(ACI) && ACI.hash) + save_asset_to_webroot(ACI) + +/// Saves the asset to the webroot taking into account namespaces and hashes. +/datum/asset_transport/webroot/proc/save_asset_to_webroot(datum/asset_cache_item/ACI) + var/webroot = GLOB.configuration.asset_cache.asset_cdn_webroot + var/newpath = "[webroot][get_asset_suffex(ACI)]" + if(fexists(newpath)) + return + if(fexists("[newpath].gz")) //its a common pattern in webhosting to save gzip'ed versions of text files and let the webserver serve them up as gzip compressed normal files, sometimes without keeping the original version. + return + return fcopy(ACI.resource, newpath) + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/webroot/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if(!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + var/url = GLOB.configuration.asset_cache.asset_cdn_url //config loading will handle making sure this ends in a / + return "[url][get_asset_suffex(asset_cache_item)]" + +/datum/asset_transport/webroot/proc/get_asset_suffex(datum/asset_cache_item/asset_cache_item) + var/base = "" + var/filename = "asset.[asset_cache_item.hash][asset_cache_item.ext]" + if(length(asset_cache_item.namespace)) + base = "namespaces/[asset_cache_item.namespace]/" + if(!asset_cache_item.namespace_parent) + filename = "[asset_cache_item.name]" + return base + filename + + +/// webroot asset sending - does nothing unless passed legacy assets +/datum/asset_transport/webroot/send_assets(client/client, list/asset_list) + . = FALSE + var/list/legacy_assets = list() + if(!islist(asset_list)) + asset_list = list(asset_list) + for(var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if(!istype(ACI)) + ACI = SSassets.cache[asset_name] + if(!ACI) + legacy_assets += asset_name //pass it on to base send_assets so it can output an error + continue + if(ACI.legacy) + legacy_assets[asset_name] = ACI + if(length(legacy_assets)) + return ..(client, legacy_assets) + + +/// webroot slow asset sending - does nothing. +/datum/asset_transport/webroot/send_assets_slow(client/client, list/files, filerate) + return FALSE + +/datum/asset_transport/webroot/validate_config(log = TRUE) + if(!GLOB.configuration.asset_cache.asset_cdn_url) + if(log) + log_debug("ERROR: [type]: Invalid Config: asset_cdn_url") + return FALSE + if(!GLOB.configuration.asset_cache.asset_cdn_webroot) + if(log) + log_debug("ERROR: [type]: Invalid Config: asset_cdn_webroot") + return FALSE + return TRUE diff --git a/code/modules/asset_cache/validate_assets.html b/code/modules/asset_cache/validate_assets.html new file mode 100644 index 000000000000..9728bb5c285b --- /dev/null +++ b/code/modules/asset_cache/validate_assets.html @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index e3f102f4ee5f..266234b599df 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -215,12 +215,23 @@ else if(!air.check_turf(enemy_tile, adjacent_turfs_length)) - var/difference = air.mimic(enemy_tile, adjacent_turfs_length) - if(difference) - if(difference > 0) - consider_pressure_difference(enemy_tile, difference) - else - enemy_tile.consider_pressure_difference(src, difference) + // SS220 EDIT - START + var/current_moles = air.total_moles() + if(is_station_level(loc.z) && current_moles > 5 && isspaceturf(enemy_tile)) + handle_space(enemy_tile) + var/pressure_direction = get_dir(src, enemy_tile) + for(var/atom/movable/movable in enemy_tile) + if(!movable.anchored && !movable.pulledby) + movable.experience_pressure_difference(current_moles, pressure_direction) + else + var/difference = air.mimic(enemy_tile, adjacent_turfs_length) + if(difference) + if(difference > 0) + consider_pressure_difference(enemy_tile, difference) + else + enemy_tile.consider_pressure_difference(src, difference) + // SS220 EDIT - END + remove = 0 if(our_excited_group) last_share_check() @@ -260,6 +271,41 @@ if(!our_excited_group && remove == 1) SSair.remove_from_active(src) +// SS220 EDIT - START +/turf/simulated/proc/handle_space(turf/space/space_turf) + var/list/unchecked_turfs = GetAtmosAdjacentTurfs() + var/list/checked_turfs = list() + while(unchecked_turfs.len) + var/turf/current_turf = unchecked_turfs[1] + var/list/connected_turfs = current_turf.GetAtmosAdjacentTurfs() + if(checked_turfs.len < 30) + for(var/turf/simulated/turf in connected_turfs) + if(!unchecked_turfs.Find(turf) && !checked_turfs.Find(turf)) + unchecked_turfs.Add(connected_turfs) + checked_turfs.Add(current_turf) + unchecked_turfs.Remove(current_turf) + decompression(checked_turfs, space_turf) + +/turf/simulated/proc/decompression(list/turfs, turf/space/space_turf, turn = 0) + for(var/turf/simulated/turf in turfs) + var/difference = turf.air.total_moles() / 2 + + turf.air.oxygen /= 2 + turf.air.carbon_dioxide /= 2 + turf.air.nitrogen /= 2 + turf.air.toxins /= 2 + turf.air.sleeping_agent /= 2 + turf.air.agent_b /= 2 + turf.air.temperature /= 2 + turf.archive() + + if(difference) + var/decompression_direction = get_dir(turf, get_step_towards(turf, space_turf)) + if(!decompression_direction) + decompression_direction = get_dir(turf, space_turf) + turf.consider_pressure_difference(src, difference, decompression_direction) +// SS220 EDIT - END + /turf/simulated/proc/archive() if(air) //For open space like floors @@ -310,10 +356,10 @@ T.consider_pressure_difference(src, difference) last_share_check() -/turf/proc/consider_pressure_difference(turf/simulated/T, difference) +/turf/proc/consider_pressure_difference(turf/simulated/T, difference, direction = get_dir(src, T)) // SS220 - EDIT SSair.high_pressure_delta |= src if(difference > pressure_difference) - pressure_direction = get_dir(src, T) + pressure_direction = direction // SS220 - EDIT pressure_difference = difference /turf/simulated/proc/last_share_check() @@ -335,10 +381,6 @@ - -/atom/movable/var/pressure_resistance = 10 -/atom/movable/var/last_high_pressure_movement_air_cycle = 0 - /atom/movable/proc/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0) var/const/PROBABILITY_OFFSET = 25 var/const/PROBABILITY_BASE_PRECENT = 75 diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e4db8e8151d1..58c4b12f163d 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -334,7 +334,7 @@ var/datum/gas_mixture/gas = location.remove_air(0.25 * environment.total_moles()) if(!gas) return - if(!regulating_temperature && thermostat_state == TRUE) + if(!regulating_temperature && thermostat_state) regulating_temperature = TRUE visible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.", "You hear a click and a faint electronic hum.") @@ -344,7 +344,7 @@ if(target_temperature < MIN_TEMPERATURE) target_temperature = MIN_TEMPERATURE - if(thermostat_state == TRUE) + if(thermostat_state) var/heat_capacity = gas.heat_capacity() var/energy_used = max(abs(heat_capacity * (gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE) @@ -704,7 +704,7 @@ vent_info["id_tag"] = P.UID() vent_info["name"] = sanitize(P.name) vent_info["power"] = P.on - vent_info["direction"] = P.releasing ? "release" : "siphon" + vent_info["direction"] = P.releasing vent_info["checks"] = P.pressure_checks vent_info["external"] = P.external_pressure_bound vents += list(vent_info) @@ -776,16 +776,29 @@ return thresholds -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/alarm/ui_state(mob/user) + if(isAI(user)) + var/mob/living/silicon/ai/AI = user + if(!AI.lacks_power() || AI.apc_override) + return GLOB.always_state + + else if(ishuman(user)) + for(var/obj/machinery/computer/atmoscontrol/AC in range(1, user)) + if(!AC.stat) + return GLOB.always_state + + return GLOB.default_state + +/obj/machinery/alarm/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AirAlarm", name, 570, 410, master_ui, state) + ui = new(user, src, "AirAlarm", name) ui.open() -/obj/machinery/alarm/proc/is_authenticated(mob/user, datum/tgui/ui=null) +/obj/machinery/alarm/proc/is_authenticated(mob/user, datum/tgui/ui = null, bypass = FALSE) // Return true if they are connecting with a remote console - // DO NOT CHANGE THIS TO USE ISTYPE, IT WILL NOT WORK - if(ui?.master_ui?.src_object.type == /datum/ui_module/atmos_control) + // lol this is a wank hack, please don't shoot me + for(var/obj/machinery/computer/atmoscontrol/control in orange(1, user)) return TRUE if(user.can_admin_interact()) return TRUE @@ -796,13 +809,13 @@ /obj/machinery/alarm/ui_status(mob/user, datum/ui_state/state) if(buildstage != 2) - return STATUS_CLOSE + return UI_CLOSE if(aidisabled && (isAI(user) || isrobot(user))) to_chat(user, "AI control for \the [src] interface has been disabled.") - return STATUS_CLOSE + return UI_CLOSE - . = shorted ? STATUS_DISABLED : STATUS_INTERACTIVE + . = shorted ? UI_DISABLED : UI_INTERACTIVE return min(..(), .) @@ -849,18 +862,11 @@ "widenet", "scrubbing", "direction") - var/val - if(params["val"]) - val = text2num(params["val"]) - else - var/newval = input("Enter new value") as num|null + var/val = isnum(params["val"]) ? params["val"] : text2num(params["val"]) + if(isnull(val)) + var/newval = tgui_input_number(usr, "Enter new value", "New Value", ONE_ATMOSPHERE, 1000 + ONE_ATMOSPHERE, 0, round_value = FALSE) if(isnull(newval)) return - if(params["cmd"] == "set_external_pressure") - if(newval > 1000 + ONE_ATMOSPHERE) - newval = 1000 + ONE_ATMOSPHERE - if(newval < 0) - newval = 0 val = newval // Figure out what it is @@ -869,7 +875,7 @@ return if(!((U in alarm_area.vents) || (U in alarm_area.scrubbers))) - message_admins("[key_name_admin(usr)] attempted to href-exploit an air alarm to control another object!!!") + message_admins("[key_name_admin(usr)] attempted to href-exploit an air alarm to control another object!!!") return // Its a vent. Handle @@ -928,7 +934,7 @@ return var/datum/tlv/tlv = TLV[env] - var/newval = input("Enter [varname] for [env]", "Alarm triggers", tlv.vars[varname]) as num|null + var/newval = tgui_input_number(usr, "Enter [varname] for [env]", "Alarm triggers", tlv.vars[varname], round_value = FALSE) if(isnull(newval) || ..()) // No setting if you walked away return @@ -976,7 +982,7 @@ var/min_temperature = max(selected.min1, MIN_TEMPERATURE) var/max_temperature_c = max_temperature - T0C var/min_temperature_c = min_temperature - T0C - var/input_temperature = input("What temperature would you like the system to maintain? (Capped between [min_temperature_c]C and [max_temperature_c]C)", "Thermostat Controls") as num|null + var/input_temperature = tgui_input_number(usr, "What temperature would you like the system to maintain? (Capped between [min_temperature_c]C and [max_temperature_c]C)", "Thermostat Controls", target_temperature - T0C, max_temperature_c, min_temperature_c) if(isnull(input_temperature) || ..()) // No temp setting if you walked away return input_temperature = input_temperature + T0C @@ -994,7 +1000,7 @@ if(user) user.visible_message("Sparks fly out of \the [src]!", "You emag \the [src], disabling its safeties.") playsound(src.loc, 'sound/effects/sparks4.ogg', 50, TRUE) - return + return TRUE /obj/machinery/alarm/attackby(obj/item/I, mob/user, params) add_fingerprint(user) diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index 2ab54354bd13..578ae0eae3c2 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -342,7 +342,7 @@ Pipelines + Other Objects -> Pipe network ..() /obj/machinery/atmospherics/proc/can_crawl_through() - return 1 + return TRUE /obj/machinery/atmospherics/proc/change_color(new_color) //only pass valid pipe colors please ~otherwise your pipe will turn invisible diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index a2d8103b1145..f485d115db3b 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -13,6 +13,15 @@ var/id = null +/obj/machinery/atmospherics/binary/volume_pump/can_be_pulled(user, grab_state, force, show_message) + return FALSE + +/obj/machinery/atmospherics/binary/passive_gate/CtrlClick(mob/living/user) + if(can_use_shortcut(user)) + toggle(user) + investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", "atmos") + return ..() + /obj/machinery/atmospherics/binary/passive_gate/examine(mob/user) . = ..() . += "This is a one-way regulator, allowing gas to flow only at a specific pressure and flow rate. If the light is green, gas is flowing." @@ -76,10 +85,13 @@ /obj/machinery/atmospherics/binary/passive_gate/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/binary/passive_gate/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosPump", name, 310, 110, master_ui, state) + ui = new(user, src, "AtmosPump", name) ui.open() /obj/machinery/atmospherics/binary/passive_gate/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index e15a07cda7bd..3171bcf40dac 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -110,10 +110,13 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/pump/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/binary/pump/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosPump", name, 310, 110, master_ui, state) + ui = new(user, src, "AtmosPump", name) ui.open() /obj/machinery/atmospherics/binary/pump/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 5e24a87a7f6a..4dbcc32e4635 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -105,10 +105,13 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/volume_pump/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/binary/volume_pump/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosPump", name, 310, 110, master_ui, state) + ui = new(user, src, "AtmosPump", name) ui.open() /obj/machinery/atmospherics/binary/volume_pump/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 6aad4743a2b7..2d3f2c5bc61d 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -174,10 +174,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/atmospherics/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/trinary/filter/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/trinary/filter/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosFilter", name, 380, 140, master_ui, state) + ui = new(user, src, "AtmosFilter", name) ui.open() /obj/machinery/atmospherics/trinary/filter/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 353cc920387f..12d84586b9ca 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -145,10 +145,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/atmospherics/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/trinary/mixer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/trinary/mixer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosMixer", name, 330, 165, master_ui, state) + ui = new(user, src, "AtmosMixer", name) ui.open() /obj/machinery/atmospherics/trinary/mixer/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 495ed5d8eac4..f35ceb6ef5d7 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -156,6 +156,7 @@ add_attack_logs(user, L, "put into a cryo cell at [COORD(src)].", ATKLOG_ALL) if(user.pulling == L) user.stop_pulling() + QDEL_LIST_CONTENTS(L.grabbed_by) SStgui.update_uis(src) return TRUE @@ -212,10 +213,13 @@ ui_interact(user) -/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/unary/cryo_cell/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Cryo", "Cryo Cell", 520, 500) + ui = new(user, src, "Cryo", "Cryo Cell") ui.open() /obj/machinery/atmospherics/unary/cryo_cell/ui_data(mob/user) @@ -409,7 +413,7 @@ occupant.forceMove(get_step(loc, SOUTH)) // Doesn't account for walls - if(occupant.bodytemperature < occupant.dna.species.cold_level_1) // Hacky fix for people taking burn damage after being ejected + if(ishuman(occupant) && occupant.bodytemperature < occupant.dna.species.cold_level_1) // Hacky fix for people taking burn damage after being ejected. Xenos also fit in these and they don't have dna occupant.bodytemperature = occupant.dna.species.cold_level_1 occupant = null diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 898d1b221ec4..b92c95fd7135 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -140,7 +140,9 @@ to_chat(user, "Open the maintenance panel first.") return var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH) - var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices + var/selected = tgui_input_list(user, "Select a direction for the connector.", "Connector Direction", choices) + if(!selected) + return dir = choices[selected] var/node_connect = dir initialize_directions = dir @@ -163,10 +165,13 @@ return ui_interact(user) -/obj/machinery/atmospherics/unary/thermomachine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/unary/thermomachine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/unary/thermomachine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ThermoMachine", name, 300, 250) + ui = new(user, src, "ThermoMachine", name) ui.open() /obj/machinery/atmospherics/unary/thermomachine/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 4bcce55dd21b..7a4b3b77a12d 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -7,8 +7,6 @@ var/update = 1 - var/alert_pressure = 0 - /datum/pipeline/New() SSair.networks += src @@ -33,7 +31,6 @@ if(istype(base, /obj/machinery/atmospherics/pipe)) var/obj/machinery/atmospherics/pipe/E = base volume = E.volume - alert_pressure = E.alert_pressure members += E if(E.air_temporary) air = E.air_temporary @@ -62,8 +59,6 @@ volume += item.volume item.parent = src - alert_pressure = min(alert_pressure, item.alert_pressure) - if(item.air_temporary) air.merge(item.air_temporary) item.air_temporary = null diff --git a/code/modules/atmospherics/machinery/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm index d4cc70df67fb..e2d946cfc3cf 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe.dm @@ -6,8 +6,6 @@ power_state = NO_POWER_USE can_unwrench = TRUE damage_deflection = 12 - var/alert_pressure = 80*ONE_ATMOSPHERE //minimum pressure before check_pressure(...) should be called - can_be_undertile = TRUE //Buckling @@ -57,12 +55,6 @@ /obj/machinery/atmospherics/proc/pipeline_expansion() return null -/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) - //Return 1 if parent should continue checking other pipes - //Return null if parent should stop checking other pipes. Recall: qdel(src) will by default return null - - return 1 - /obj/machinery/atmospherics/pipe/proc/releaseAirToTurf() if(air_temporary) var/turf/T = loc diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm index c46515870a8d..fd63c21119fa 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm @@ -16,10 +16,6 @@ var/minimum_temperature_difference = 300 var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No - var/maximum_pressure = 70*ONE_ATMOSPHERE - var/fatigue_pressure = 55*ONE_ATMOSPHERE - alert_pressure = 55*ONE_ATMOSPHERE - level = 1 /obj/machinery/atmospherics/pipe/simple/New() @@ -72,21 +68,6 @@ hide(T.intact) update_icon() -/obj/machinery/atmospherics/pipe/simple/check_pressure(pressure) - var/datum/gas_mixture/environment = loc.return_air() - - var/pressure_difference = pressure - environment.return_pressure() - - if(pressure_difference > maximum_pressure) - burst() - - else if(pressure_difference > fatigue_pressure) - //TODO: leak to turf, doing pfshhhhh - if(prob(5)) - burst() - - else return 1 - /obj/machinery/atmospherics/pipe/simple/proc/burst() src.visible_message("\The [src] bursts!") playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm deleted file mode 100644 index e7e5ec55e909..000000000000 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/machinery/atmospherics/pipe/simple/insulated - icon = 'icons/obj/atmospherics/red_pipe.dmi' - icon_state = "intact" - - minimum_temperature_difference = 10000 - thermal_conductivity = 0 - maximum_pressure = 1000*ONE_ATMOSPHERE - fatigue_pressure = 900*ONE_ATMOSPHERE - alert_pressure = 900*ONE_ATMOSPHERE - - level = 2 diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index ce31c66b666f..c3851ae086bd 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -307,10 +307,13 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new()) /obj/machinery/atmospherics/portable/canister/attack_hand(mob/user) return ui_interact(user) -/obj/machinery/atmospherics/portable/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/portable/canister/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/atmospherics/portable/canister/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Canister", name, 600, 350, master_ui, state) + ui = new(user, src, "Canister", name) ui.open() /obj/machinery/atmospherics/portable/canister/ui_data() @@ -342,7 +345,7 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new()) switch(action) if("relabel") if(can_label) - var/T = sanitize(copytext_char(input("Choose canister label", "Name", name) as text|null, 1, MAX_NAME_LEN)) // SS220 EDIT - ORIGINAL: copytext + var/T = tgui_input_text(usr, "Choose canister label", "Name", name, max_length = MAX_NAME_LEN) if(can_label) //Exploit prevention if(T) name = T diff --git a/code/modules/atmospherics/machinery/portable/portable_pump.dm b/code/modules/atmospherics/machinery/portable/portable_pump.dm index b4601e55aeac..31b1c273215d 100644 --- a/code/modules/atmospherics/machinery/portable/portable_pump.dm +++ b/code/modules/atmospherics/machinery/portable/portable_pump.dm @@ -119,10 +119,13 @@ /obj/machinery/atmospherics/portable/pump/attack_hand(mob/user) ui_interact(user) -/obj/machinery/atmospherics/portable/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/portable/pump/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/portable/pump/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortablePump", "Portable Pump", 434, 377, master_ui, state) + ui = new(user, src, "PortablePump", "Portable Pump") ui.open() /obj/machinery/atmospherics/portable/pump/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 8b7a38cca7c0..e52ab86a0689 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -114,10 +114,13 @@ ui_interact(user) return -/obj/machinery/atmospherics/portable/scrubber/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/portable/scrubber/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/portable/scrubber/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortableScrubber", "Portable Scrubber", 433, 346, master_ui, state) + ui = new(user, src, "PortableScrubber", "Portable Scrubber") ui.open() ui.set_autoupdate(TRUE) diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index f2fbfe87b8f6..eec5f0faa7af 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -156,7 +156,7 @@ else has_owner = FALSE owner = null - var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") + var/transfer_choice = tgui_alert(user, "Transfer your soul to [src]? (Warning, your old body will die!)", "Respawn", list("Yes","No")) if(transfer_choice != "Yes") return if(QDELETED(src) || uses <= 0) @@ -171,7 +171,7 @@ if(!istype(I, /obj/item/slimepotion/transference)) return ..() if(iscarbon(user) && can_transfer) - var/human_transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)", null, "Yes", "No") + var/human_transfer_choice = tgui_alert(user, "Transfer your soul to [src]? (Warning, your old body will die!)", "Respawn", list("Yes", "No")) if(human_transfer_choice != "Yes") return if(QDELETED(src) || uses <= 0 || user.stat >= 1 || QDELETED(I)) diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm index 663a76f0cbf8..4b7dba8559b8 100644 --- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm +++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm @@ -42,7 +42,7 @@ /obj/item/card/id/away/old/apc name = "APC Access ID" desc = "A special ID card that allows access to APC terminals." - icon_state = "centcom_old" + icon_state = "retro_engineering" access = list(ACCESS_ENGINE_EQUIP) /obj/item/storage/backpack/old diff --git a/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm b/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm index 003c2b2da8d2..1bfb0792373b 100644 --- a/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm +++ b/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm @@ -16,7 +16,7 @@ #define WATCHER_EGG_ACTIVE_MOD 0.5 /// Egg which hatches into a helpful pet. Or you can eat it if you want. -/obj/item/reagent_containers/food/snacks/egg/watcher +/obj/item/food/snacks/egg/watcher name = "watcher egg" desc = "A lonely egg still pulsing with life, somehow untouched by the corruption of the Necropolis." icon_state = "egg_watcher" @@ -30,15 +30,15 @@ /// Datum used to measure our steps var/datum/movement_detector/pedometer -/obj/item/reagent_containers/food/snacks/egg/watcher/Initialize(mapload) +/obj/item/food/snacks/egg/watcher/Initialize(mapload) . = ..() pedometer = new(src, CALLBACK(src, PROC_REF(on_stepped))) -/obj/item/reagent_containers/food/snacks/egg/watcher/Destroy(force) +/obj/item/food/snacks/egg/watcher/Destroy(force) . = ..() QDEL_NULL(pedometer) -/obj/item/reagent_containers/food/snacks/egg/watcher/examine(mob/user) +/obj/item/food/snacks/egg/watcher/examine(mob/user) . = ..() if(steps_travelled < (steps_to_hatch * WATCHER_EGG_ACTIVE_MOD)) . += "Something stirs listlessly inside." @@ -50,7 +50,7 @@ /// Called when we are moved, whether inside an inventory or by ourself somehow -/obj/item/reagent_containers/food/snacks/egg/watcher/proc/on_stepped(atom/movable/egg, atom/mover, atom/old_loc, direction) +/obj/item/food/snacks/egg/watcher/proc/on_stepped(atom/movable/egg, atom/mover, atom/old_loc, direction) var/new_loc = get_turf(egg) if(isnull(new_loc) || new_loc == get_turf(old_loc)) return // Didn't actually go anywhere @@ -67,7 +67,7 @@ qdel(src) /// Animate the egg -/obj/item/reagent_containers/food/snacks/egg/watcher/proc/jiggle() +/obj/item/food/snacks/egg/watcher/proc/jiggle() var/animation = isturf(loc) ? rand(1, 3) : 1 // Pixel_x/y animations don't work in an inventory switch(animation) if(1) diff --git a/code/modules/awaymissions/mob_spawn.dm b/code/modules/awaymissions/mob_spawn.dm index 67f2af1e0ea0..98d0e519bfb5 100644 --- a/code/modules/awaymissions/mob_spawn.dm +++ b/code/modules/awaymissions/mob_spawn.dm @@ -43,10 +43,10 @@ /obj/effect/mob_spawn/attack_ghost(mob/user) if(!valid_to_spawn(user)) return - var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No") - if(ghost_role == "No") + var/ghost_role = tgui_alert(user, "Become [mob_name]? (Warning, You can no longer be cloned!)", "Respawn", list("Yes", "No")) + if(ghost_role != "Yes") return - if(!species_prompt()) + if(!species_prompt(user)) return if(!loc || !uses && !permanent || QDELETED(src) || QDELETED(user)) to_chat(user, "The [name] is no longer usable!") @@ -219,9 +219,9 @@ mob_name = id_job return ..() -/obj/effect/mob_spawn/human/species_prompt() +/obj/effect/mob_spawn/human/species_prompt(mob/user) if(allow_species_pick) - var/selected_species = input("Select a species", "Species Selection") as null|anything in pickable_species + var/selected_species = tgui_input_list(user, "Select a species", "Species Selection", pickable_species) if(!selected_species) return TRUE // You didn't pick, so just continue on with the spawning process as a human var/datum/species/S = GLOB.all_species[selected_species] @@ -331,8 +331,8 @@ assignedrole = "Space Bar Patron" /obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user) - var/despawn = alert("Return to cryosleep? (Warning, Your mob will be deleted!)",,"Yes","No") - if(despawn == "No" || !loc || !Adjacent(user)) + var/despawn = tgui_alert(user, "Return to cryosleep? (Warning, Your mob will be deleted!)", "Leave Bar", list("Yes", "No")) + if(despawn != "Yes" || !loc || !Adjacent(user)) return user.visible_message("[user.name] climbs back into cryosleep...") qdel(user) diff --git a/code/modules/client/2fa.dm b/code/modules/client/2fa.dm index c65d52f7c4c9..390c408193b0 100644 --- a/code/modules/client/2fa.dm +++ b/code/modules/client/2fa.dm @@ -65,7 +65,7 @@ // If we are here, they just want to change the mode - var/option = alert(usr, "Would you like to change 2FA mode or disable it entirely?", "2FA Mode", "Enable (Always)", "Enable (On IP Change)", "Deactivate") + var/option = tgui_alert(usr, "Would you like to change 2FA mode or disable it entirely?", "2FA Mode", list("Enable (Always)", "Enable (On IP Change)", "Deactivate")) switch(option) if("Enable (Always)") prefs._2fa_status = _2FA_ENABLED_ALWAYS @@ -76,7 +76,7 @@ prefs.save_preferences(src) prefs.ShowChoices(usr) if("Deactivate") - var/confirm = alert(usr, "Are you SURE you want to deactivate 2FA?", "WARNING", "Yes", "No") + var/confirm = tgui_alert(usr, "Are you SURE you want to deactivate 2FA?", "WARNING", list("Yes", "No")) if(confirm != "Yes") return diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm deleted file mode 100644 index ccde1dcb2d35..000000000000 --- a/code/modules/client/asset_cache.dm +++ /dev/null @@ -1,337 +0,0 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -//When passively preloading assets, how many to send at once? Too high creates noticable lag where as too low can flood the client's cache with "verify" files -#define ASSET_CACHE_PRELOAD_CONCURRENT 3 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(client/client, asset_name, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) - return 0 - - client << browse_rsc(SSassets.cache[asset_name], asset_name) - if(!verify) // Can't access the asset cache browser, rip. - client.cache += asset_name - return 1 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(client/client, list/asset_list, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !unreceived.len) - return 0 - if(unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") - for(var/asset in unreceived) - if(asset in SSassets.cache) - client << browse_rsc(SSassets.cache[asset], asset) - - if(!verify) // Can't access the asset cache browser, rip. - client.cache += unreceived - return 1 - - client.sending |= unreceived - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(client/client, list/files, register_asset = TRUE) - var/concurrent_tracker = 1 - for(var/file in files) - if(!client) - break - if(register_asset) - register_asset(file, files[file]) - if(concurrent_tracker >= ASSET_CACHE_PRELOAD_CONCURRENT) - concurrent_tracker = 1 - send_asset(client, file) - else - concurrent_tracker++ - send_asset(client, file, verify = FALSE) - sleep(0) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(asset_name, asset) - SSassets.cache[asset_name] = asset - -//These datums are used to populate the asset cache, the proc "register()" does this. - -//all of our asset datums, used for referring to these later -GLOBAL_LIST_EMPTY(asset_datums) - -//get a assetdatum or make a new one -/proc/get_asset_datum(type) - if(!(type in GLOB.asset_datums)) - return new type() - return GLOB.asset_datums[type] - -/datum/asset/New() - GLOB.asset_datums[type] = src - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - -//If you don't need anything complicated. -/datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - - -//DEFINITIONS FOR ASSET DATUMS START HERE. -/datum/asset/simple/tgui - assets = list( - "tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js', - "tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css' -) - -/datum/asset/simple/paper - assets = list( - "large_stamp-clown.png" = 'icons/paper_icons/large_stamp-clown.png', - "large_stamp-deny.png" = 'icons/paper_icons/large_stamp-deny.png', - "large_stamp-ok.png" = 'icons/paper_icons/large_stamp-ok.png', - "large_stamp-hop.png" = 'icons/paper_icons/large_stamp-hop.png', - "large_stamp-cmo.png" = 'icons/paper_icons/large_stamp-cmo.png', - "large_stamp-ce.png" = 'icons/paper_icons/large_stamp-ce.png', - "large_stamp-hos.png" = 'icons/paper_icons/large_stamp-hos.png', - "large_stamp-rd.png" = 'icons/paper_icons/large_stamp-rd.png', - "large_stamp-cap.png" = 'icons/paper_icons/large_stamp-cap.png', - "large_stamp-qm.png" = 'icons/paper_icons/large_stamp-qm.png', - "large_stamp-law.png" = 'icons/paper_icons/large_stamp-law.png', - "large_stamp-cent.png" = 'icons/paper_icons/large_stamp-cent.png', - "large_stamp-syndicate.png" = 'icons/paper_icons/large_stamp-syndicate.png', - "large_stamp-rep.png" = 'icons/paper_icons/large_stamp-rep.png', - "large_stamp-magistrate.png"= 'icons/paper_icons/large_stamp-magistrate.png', - "talisman.png" = 'icons/paper_icons/talisman.png', - "ntlogo.png" = 'icons/paper_icons/ntlogo.png', - "syndielogo.png" ='icons/paper_icons/syndielogo.png' - ) - -/datum/asset/simple/chess - assets = list( - "bishop_black.png" = 'icons/chess_pieces/bishop_black.png', - "bishop_white.png" = 'icons/chess_pieces/bishop_white.png', - "king_black.png" = 'icons/chess_pieces/king_black.png', - "king_white.png" = 'icons/chess_pieces/king_white.png', - "knight_black.png" = 'icons/chess_pieces/knight_black.png', - "knight_white.png" = 'icons/chess_pieces/knight_white.png', - "pawn_black.png" = 'icons/chess_pieces/pawn_black.png', - "pawn_white.png" = 'icons/chess_pieces/pawn_white.png', - "queen_black.png" = 'icons/chess_pieces/queen_black.png', - "queen_white.png" = 'icons/chess_pieces/queen_white.png', - "rook_black.png" = 'icons/chess_pieces/rook_black.png', - "rook_white.png" = 'icons/chess_pieces/rook_white.png', - "sprites.png" = 'icons/chess_pieces/sprites.png', - "blank.gif" = 'icons/chess_pieces/blank.gif', - "garbochess.js" = 'html/browser/garbochess.js', - "boardui.js" = 'html/browser/boardui.js' - ) - -//Pill sprites for UIs -/datum/asset/chem_master - var/assets = list() - var/verify = FALSE - -/datum/asset/chem_master/register() - for(var/i = 1 to 20) - assets["pill[i].png"] = icon('icons/obj/chemical.dmi', "pill[i]") - for(var/i in list("bottle", "small_bottle", "wide_bottle", "round_bottle", "reagent_bottle")) - assets["[i].png"] = icon('icons/obj/chemical.dmi', "[i]") - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/chem_master/send(client) - send_asset_list(client, assets, verify) - -//Cloning pod sprites for UIs -/datum/asset/cloning - var/assets = list() - var/verify = FALSE - -/datum/asset/cloning/register() - assets["pod_idle.gif"] = icon('icons/obj/cloning.dmi', "pod_idle") - assets["pod_cloning.gif"] = icon('icons/obj/cloning.dmi', "pod_cloning") - assets["pod_mess.gif"] = icon('icons/obj/cloning.dmi', "pod_mess") - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/cloning/send(client) - send_asset_list(client, assets, verify) - -//Pipe sprites for UIs -/datum/asset/rpd - var/assets = list() - var/verify = FALSE - -/datum/asset/rpd/register() - for(var/state in icon_states('icons/obj/pipe-item.dmi')) - if(!(state in list("cap", "connector", "dtvalve", "dvalve", "filter", "he", "heunary", "injector", "junction", "manifold", "mixer", "tvalve", "mvalve", "passive vent", "passivegate", "pump", "scrubber", "simple", "universal", "uvent", "volumepump"))) //Basically all the pipes we want sprites for - continue - if(state in list("he", "simple")) - for(var/D in GLOB.alldirs) - assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) - for(var/D in GLOB.cardinal) - assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) - for(var/state in icon_states('icons/obj/pipes/disposal.dmi')) - if(!(state in list("pipe-c", "pipe-j1", "pipe-s", "pipe-t", "pipe-y", "intake", "outlet", "pipe-j1s"))) //Pipes we want sprites for - continue - for(var/D in GLOB.cardinal) - assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipes/disposal.dmi', state, D) - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/rpd/send(client) - send_asset_list(client, assets, verify) - -//Mob Hunt sprites for UIs -/datum/asset/mob_hunt - var/assets = list() - var/verify = FALSE - -/datum/asset/mob_hunt/register() - for(var/state in icon_states('icons/effects/mob_hunt.dmi')) - if(state == "Placeholder") - continue - assets["[state].png"] = icon('icons/effects/mob_hunt.dmi', state) - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/mob_hunt/send(client) - send_asset_list(client, assets, verify) - -// Fontawesome -/datum/asset/simple/fontawesome - verify = FALSE - assets = list( - "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', - "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', - "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', - "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', - "font-awesome.css" = 'html/font-awesome/css/all.min.css', - "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' - ) - -// Nanomaps -/datum/asset/simple/nanomaps - // It REALLY doesnt matter too much if these arent up to date - // They are relatively big - verify = FALSE - assets = list( - "Cyberiad_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad_nanomap_z1.png', - "Delta_nanomap_z1.png" = 'icons/_nanomaps/Delta_nanomap_z1.png', - "MetaStation_nanomap_z1.png" = 'icons/_nanomaps/MetaStation_nanomap_z1.png', - "CereStation_nanomap_z1.png" = 'icons/_nanomaps/CereStation_nanomap_z1.png', - ) - -/datum/asset/simple/safe - verify = FALSE - assets = list( - "safe_dial.png" = 'icons/safe_dial.png' - ) - -// Materials (metal, glass...) -/datum/asset/simple/materials - verify = FALSE - -/datum/asset/simple/materials/register() - for(var/n in list("metal", "glass", "silver", "gold", "diamond", "uranium", "plasma", "bananium", "tranquillite", "titanium", "plastic", - "rglass", "plasteel", "plastitanium", "plasmaglass", "titaniumglass", "plastitaniumglass")) - assets["sheet-[n].png"] = icon('icons/obj/stacks/minerals.dmi', "sheet-[n]") - assets["sheet-bluespace.png"] = icon('icons/obj/stacks/minerals.dmi', "bluespace_crystal") - ..() diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index ed0268a61720..390f425611c9 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -71,10 +71,6 @@ /// Persistent storage for the flavour text of examined atoms. var/list/description_holders = list() - // Their chat window, sort of important. - // See /goon/code/datums/browserOutput.dm - var/datum/chatOutput/chatOutput - // Donator stuff. var/donator_level = 0 @@ -103,6 +99,9 @@ /// Last world/time that a PM was sent to the player by an admin var/received_discord_pm = -99999 // Yes this super low number is intentional + ///world.time they connected + var/connection_time + /// Has the client accepted the TOS about data collection and other stuff var/tos_consent = FALSE @@ -124,10 +123,18 @@ var/list/active_keybindings = list() /// The client's movement keybindings to directions, which work regardless of modifiers. var/list/movement_kb_dirs = list() + /// The client's currently moused over datum, limited to movable and stored as UID + var/atom/movable/moused_over - ///A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call [/atom/proc/examine_more] instead of [/atom/proc/examine] on them when examining + /// A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call [/atom/proc/examine_more] instead of [/atom/proc/examine] on them when examining var/list/recent_examines + /// When to next alert admins that mouse macro use was attempted + var/next_mouse_macro_warning + + /// Assigned say modal of the client + var/datum/tgui_say/tgui_say + /client/vv_edit_var(var_name, var_value) switch(var_name) // I know we will never be in a world where admins are editing client vars to let people bypass TOS diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 7db5a180004e..318674286b70 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -50,16 +50,15 @@ stack_trace("Got \\ref-based src in topic from [src] for [hsrc_info], should be UID: [href]") + // asset_cache + var/asset_cache_job if(href_list["asset_cache_confirm_arrival"]) - var/job = text2num(href_list["asset_cache_confirm_arrival"]) - completed_asset_jobs += job - return - - if(href_list["_src_"] == "chat") - return chatOutput.Topic(href, href_list) + asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"]) + if(!asset_cache_job) + return // Rate limiting - var/mtl = 100 // 100 topics per minute + var/mtl = 150 // 150 topics per minute if(!holder) // Admins are allowed to spam click, deal with it. var/minute = round(world.time, 600) if(!topiclimiter) @@ -139,7 +138,7 @@ return // prevents a recursive loop where the ..() 5 lines after this makes the proc endlessly re-call itself if(href_list["withdraw_consent"]) - var/choice = alert(usr, "Are you SURE you want to withdraw your consent to the Terms of Service?\nYou will be instantaneously removed from the server and will have to re-accept the Terms of Service.", "Warning", "Yes", "No") + var/choice = tgui_alert(usr, "Are you SURE you want to withdraw your consent to the Terms of Service?\nYou will be instantaneously removed from the server and will have to re-accept the Terms of Service.", "Warning", list("Yes", "No")) if(choice == "Yes") // Update the DB var/datum/db_query/query = SSdbcore.NewQuery("REPLACE INTO privacy (ckey, datetime, consent) VALUES (:ckey, Now(), 0)", list( @@ -152,22 +151,25 @@ // I know its a very rare occurance, but I wouldnt doubt people using this to withdraw consent right when sec captures them message_admins("[key_name_admin(usr)] was disconnected due to withdrawing their ToS consent.") - to_chat(usr, "Your ToS consent has been withdrawn. You have been kicked from the server") + to_chat(usr, "Your ToS consent has been withdrawn. You have been kicked from the server") qdel(src) return - if(href_list["__keydown"]) - var/keycode = href_list["__keydown"] - if(keycode) - Key_Down(keycode) + // Tgui Topic middleware + if(tgui_Topic(href_list)) return + if(href_list["reload_tguipanel"]) + nuke_chat() - if(href_list["__keyup"]) - var/keycode = href_list["__keyup"] - if(keycode) - Key_Up(keycode) + //byond bug ID:2256651 + if(asset_cache_job && (asset_cache_job in completed_asset_jobs)) + to_chat(src, " An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)") + src << browse("...", "window=asset_cache_browser") return + if(href_list["asset_cache_preload_data"]) + asset_cache_preload_data(href_list["asset_cache_preload_data"]) + return switch(href_list["action"]) if("openLink") @@ -252,7 +254,10 @@ /////////// /client/New(TopicData) var/tdata = TopicData //save this for later use - chatOutput = new /datum/chatOutput(src) // Right off the bat. + + tgui_panel = new(src, "browseroutput") + tgui_say = new(src, "tgui_say") + TopicData = null //Prevent calls to client.Topic from connect if(connection != "seeker") //Invalid connection type. @@ -276,7 +281,7 @@ to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.") GLOB.directory[ckey] = src - //Admin Authorisation + // Admin Authorisation // Automatically makes localhost connection an admin try_localhost_autoadmin() @@ -335,18 +340,17 @@ if(length(related_accounts_cid)) log_admin("[key_name(src)] Alts by CID: [jointext(related_accounts_cid, " ")]") + #ifdef MULTIINSTANCE // This sleeps so it has to go here. Dont fucking move it. SSinstancing.update_playercache(ckey) + #endif // This has to go here to avoid issues // If you sleep past this point, you will get SSinput errors as well as goonchat errors // DO NOT STUFF RANDOM SQL QUERIES BELOW THIS POINT WITHOUT USING `INVOKE_ASYNC()` OR SIMILAR // YOU WILL BREAK STUFF. SERIOUSLY. -aa07 GLOB.clients += src - - - spawn() // Goonchat does some non-instant checks in start() - chatOutput.start() + connection_time = world.time var/_2fa_alert = FALSE // This is so we can display the message where it will be seen if(holder) @@ -359,7 +363,6 @@ GLOB.de_admins += ckey else - on_holder_add() add_admin_verbs() // Must be async because any sleeps (happen in sql queries) will break connectings clients INVOKE_ASYNC(src, PROC_REF(admin_memo_output), "Show", FALSE, TRUE) @@ -389,15 +392,15 @@ if(SSinput.initialized) set_macros() - check_ip_intel() - send_resources() + // Initialize tgui panel + tgui_panel.initialize() - if(prefs.toggles & PREFTOGGLE_UI_DARKMODE) // activates dark mode if its flagged. -AA07 - activate_darkmode() + // Initialize tgui say + tgui_say.initialize() - else - // activate_darkmode() calls the CL update button proc, so we dont want it double called - SSchangelog.UpdatePlayerChangelogButton(src) + check_ip_intel() + send_resources() + SSchangelog.UpdatePlayerChangelogButton(src) if(show_update_prompt) show_update_notice() @@ -429,7 +432,7 @@ to_chat(src, "The queue server is currently [SSqueue.queue_enabled ? "enabled" : "disabled"], with a threshold of [SSqueue.queue_threshold]. This [SSqueue.persist_queue ? "will" : "will not"] persist through rounds.") if(_2fa_alert) - to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious + to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious // Tell client about their connection to_chat(src, "You are currently connected [prefs.server_region ? "via the [prefs.server_region] relay" : "directly"] to Paradise.") @@ -462,8 +465,9 @@ GLOB.directory -= ckey GLOB.clients -= src + #ifdef MULTIINSTANCE SSinstancing.update_playercache() // Clear us out - QDEL_NULL(chatOutput) + #endif QDEL_NULL(pai_save) if(movingmob) @@ -472,6 +476,7 @@ SSambience.ambience_listening_clients -= src SSinput.processing -= src + SSping.current_run -= src Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening return QDEL_HINT_HARDDEL_NOW @@ -731,7 +736,7 @@ if(fromban) url += "&fwd=appeal" to_chat(src, {"Now opening a window to verify your information with the forums, so that you can appeal your ban. If the window does not load, please copy/paste this link: [url]"}) - to_chat(src, "If you are screenshotting this screen for your ban appeal, please blur/draw over the token in the above link.") + to_chat(src, "If you are screenshotting this screen for your ban appeal, please blur/draw over the token in the above link.") else to_chat(src, {"Now opening a window to verify your information with the forums. If the window does not load, please go to: [url]"}) @@ -902,19 +907,17 @@ // Change the way they should download resources. if(length(GLOB.configuration.url.rsc_urls)) preload_rsc = pick(GLOB.configuration.url.rsc_urls) - else preload_rsc = 1 // If config.resource_urls is not set, preload like normal. - // Most assets are now handled through global_cache.dm - getFiles( - 'html/search.js', // Used in various non-TGUI HTML windows for search functionality - 'html/panels.css' // Used for styling certain panels, such as in the new player panel - ) - spawn (10) //removing this spawn causes all clients to not get verbs. + + //load info on what assets the client has + src << browse('code/modules/asset_cache/validate_assets.html', "window=asset_cache_browser") + //Precache the client with all other assets slowly, so as to not block other browse() calls - getFilesSlow(src, SSassets.preload, register_asset = FALSE) + if(GLOB.configuration.asset_cache.asset_simple_preload) + addtimer(CALLBACK(SSassets.transport, TYPE_PROC_REF(/datum/asset_transport, send_assets_slow), src, SSassets.transport.preload), 5 SECONDS) //For debugging purposes /client/proc/list_all_languages() @@ -933,72 +936,6 @@ /client/proc/on_varedit() var_edited = TRUE -///////////////// -// DARKMODE UI // -///////////////// -// IF YOU CHANGE ANYTHING IN ACTIVATE, MAKE SURE IT HAS A DEACTIVATE METHOD, -AA07 -/client/proc/activate_darkmode() - ///// BUTTONS ///// - SSchangelog.UpdatePlayerChangelogButton(src) - /* Rpane */ - 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.forumb", "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") - /* 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=#171717") - winset(src, "mainwindow.mainvsplit", "background-color=#202020") - winset(src, "mainwindow.tooltip", "background-color=#171717") - /* Outputwindow */ - winset(src, "outputwindow", "background-color=#202020") - winset(src, "outputwindow.browseroutput", "background-color=#202020") - /* Rpane */ - winset(src, "rpane", "background-color=#202020") - winset(src, "rpane.rpanewindow", "background-color=#202020") - /* Infowindow */ - 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") - // NOTIFY USER - to_chat(src, "Darkmode Enabled") - -/client/proc/deactivate_darkmode() - ///// BUTTONS ///// - SSchangelog.UpdatePlayerChangelogButton(src) - /* Rpane */ - 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.rulesb", "background-color=none;text-color=#000000") - winset(src, "rpane.githubb", "background-color=none;text-color=#000000") - winset(src, "rpane.webmap", "background-color=none;text-color=#000000") - /* 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.browseroutput", "background-color=none") - /* Rpane */ - winset(src, "rpane", "background-color=none") - winset(src, "rpane.rpanewindow", "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") - ///// NOTIFY USER ///// - to_chat(src, "Darkmode Disabled") // what a sick fuck - /client/proc/generate_clickcatcher() if(!void) void = new() @@ -1024,38 +961,6 @@ #undef SSD_WARNING_TIMER -/client/verb/resend_ui_resources() - set name = "Reload UI Resources" - set desc = "Reload your UI assets if they are not working" - set category = "Special Verbs" - - if(last_ui_resource_send > world.time) - to_chat(usr, "You requested your UI resource files too quickly. Please try again in [(last_ui_resource_send - world.time)/10] seconds.") - return - - var/choice = alert(usr, "This will reload your TGUI resources. If you have any open UIs this may break them. Are you sure?", "Resource Reloading", "Yes", "No") - if(choice == "Yes") - // 600 deciseconds = 1 minute - last_ui_resource_send = world.time + 60 SECONDS - - // Close their open UIs - SStgui.close_user_uis(usr) - - // Resend the resources - - var/datum/asset/tgui_assets = get_asset_datum(/datum/asset/simple/tgui) - tgui_assets.register() - - var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps) - nanomaps.register() - - // Clear the user's cache so they get resent. - // This is not fully clearing their BYOND cache, just their assets sent from the server this round - cache = list() - - to_chat(usr, "UI resource files resent successfully. If you are still having issues, please try manually clearing your BYOND cache. This can be achieved by opening your BYOND launcher, pressing the cog in the top right, selecting preferences, going to the Games tab, and pressing 'Clear Cache'.") - - /** * Retrieves the BYOND accounts data from the BYOND servers * diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm index 3cdb005db38e..e419cb80a54b 100644 --- a/code/modules/client/preference/character.dm +++ b/code/modules/client/preference/character.dm @@ -532,15 +532,15 @@ autohiss_mode = sanitize_integer(autohiss_mode, 0, 2, initial(autohiss_mode)) alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option)) - job_support_high = sanitize_integer(job_support_high, 0, 65535, initial(job_support_high)) - job_support_med = sanitize_integer(job_support_med, 0, 65535, initial(job_support_med)) - job_support_low = sanitize_integer(job_support_low, 0, 65535, initial(job_support_low)) - job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high)) - job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med)) - job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low)) - job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high)) - job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med)) - job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low)) + job_support_high = sanitize_integer(job_support_high, 0, get_datum_last_support(), initial(job_support_high)) // SS220 EDIT - EXTRA JOBS + job_support_med = sanitize_integer(job_support_med, 0, get_datum_last_support(), initial(job_support_med)) // SS220 EDIT - EXTRA JOBS + job_support_low = sanitize_integer(job_support_low, 0, get_datum_last_support(), initial(job_support_low)) // SS220 EDIT - EXTRA JOBS + job_medsci_high = sanitize_integer(job_medsci_high, 0, get_datum_last_medsci(), initial(job_medsci_high)) // SS220 EDIT - EXTRA JOBS + job_medsci_med = sanitize_integer(job_medsci_med, 0, get_datum_last_medsci(), initial(job_medsci_med)) // SS220 EDIT - EXTRA JOBS + job_medsci_low = sanitize_integer(job_medsci_low, 0, get_datum_last_medsci(), initial(job_medsci_low)) // SS220 EDIT - EXTRA JOBS + job_engsec_high = sanitize_integer(job_engsec_high, 0, get_datum_last_engsec(), initial(job_engsec_high)) // SS220 EDIT - EXTRA JOBS + job_engsec_med = sanitize_integer(job_engsec_med, 0, get_datum_last_engsec(), initial(job_engsec_med)) // SS220 EDIT - EXTRA JOBS + job_engsec_low = sanitize_integer(job_engsec_low, 0, get_datum_last_engsec(), initial(job_engsec_low)) // SS220 EDIT - EXTRA JOBS disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities)) socks = sanitize_text(socks, initial(socks)) @@ -1788,7 +1788,7 @@ /datum/character_save/proc/copy_to(mob/living/carbon/human/character) var/datum/species/S = GLOB.all_species[species] - character.set_species(S.type) // Yell at me if this causes everything to melt + character.set_species(S.type, delay_icon_update = TRUE) // Yell at me if this causes everything to melt if(be_random_name) real_name = random_name(gender, species) @@ -1889,7 +1889,7 @@ message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") character.change_gender(MALE) - character.change_eye_color(e_colour) + character.change_eye_color(e_colour, skip_icons = TRUE) character.original_eye_color = e_colour if(disabilities & DISABILITY_FLAG_FAT) @@ -1949,12 +1949,11 @@ character.dna.ready_dna(character, flatten_SE = FALSE) character.sync_organ_dna(assimilate = TRUE) - character.UpdateAppearance() // Do the initial caching of the player's body icons. character.force_update_limbs() character.update_eyes() - character.regenerate_icons() + character.UpdateAppearance() //Check if the user has ANY job selected. /datum/character_save/proc/check_any_job() @@ -1981,6 +1980,15 @@ html += "
        " html += "Choose occupation chances
        Unavailable occupations are crossed out.

        " html += "
        Save

        " // Easier to press up here. + + // ===== SS220 ADD - NEW JOBS ====== + // ============= START ============= + if(check_available_extra_job_prefs(user.client)) + html += "
        Показать [extra_jobs_check ? "основные" : "дополнительные"] работы

        " + if(extra_jobs_check) + splitJobs = get_split_extra_jobs() + // ============== END ============== + html += "
        Left-click to raise an occupation preference, right-click to lower it.
        " html += "" html += "
        " else dat += "" - var/img_src = "[mob_info.icon_state_normal].png" + var/img_src = SSassets.transport.get_asset_url("[mob_info.icon_state_normal].png") if(mob_info.is_shiny) - dat += "[mob_info.icon_state_shiny].png" + dat += SSassets.transport.get_asset_url("[mob_info.icon_state_shiny].png") dat += "" dat += "
        " // Table within a table for alignment, also allows you to easily add more colomns. @@ -2000,6 +2008,15 @@ if(job.hidden_from_job_prefs) continue + // ===== SS220 ADD - NEW JOBS ====== + // ============= START ============= + if(!job.is_donor_allowed(user.client)) + continue + + if(extra_jobs_check != job.is_extra_job) + continue + // ============== END ============== + index += 1 if((index >= limit) || (job.title in splitJobs)) if((index < limit) && (lastJob != null)) diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm index 266f9098890e..3289a12533e2 100644 --- a/code/modules/client/preference/link_processing.dm +++ b/code/modules/client/preference/link_processing.dm @@ -13,7 +13,7 @@ active_character.SetChoices(user) if("learnaboutselection") if(GLOB.configuration.url.wiki_url) - if(alert("Would you like to open the Job selection info in your browser?", "Open Job Selection", "Yes", "No") == "Yes") + if(tgui_alert(user, "Would you like to open the Job selection info in your browser?", "Open Job Selection", list("Yes", "No")) == "Yes") user << link("[GLOB.configuration.url.wiki_url]/index.php/Job_Selection_and_Assignment") else to_chat(user, "The Wiki URL is not set in the server configuration.") @@ -65,34 +65,25 @@ user << browse(null, "window=records") if(href_list["task"] == "med_record") - var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(active_character.med_record)) as message - - if(medmsg != null) - medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) - medmsg = html_encode(medmsg) - - active_character.med_record = medmsg - active_character.SetRecords(user) + var/medmsg = tgui_input_text(usr, "Set your medical notes here.", "Medical Records", active_character.med_record, max_length = MAX_PAPER_MESSAGE_LEN, multiline = TRUE) + if(!medmsg) + return + active_character.med_record = medmsg + active_character.SetRecords(user) if(href_list["task"] == "sec_record") - var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(active_character.sec_record)) as message - - if(secmsg != null) - secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) - secmsg = html_encode(secmsg) - - active_character.sec_record = secmsg - active_character.SetRecords(user) + var/secmsg = tgui_input_text(usr, "Set your security notes here.", "Security Records", active_character.sec_record, max_length = MAX_PAPER_MESSAGE_LEN, multiline = TRUE) + if(!secmsg) + return + active_character.sec_record = secmsg + active_character.SetRecords(user) if(href_list["task"] == "gen_record") - var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(active_character.gen_record)) as message - - if(genmsg != null) - genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) - genmsg = html_encode(genmsg) - - active_character.gen_record = genmsg - active_character.SetRecords(user) + var/genmsg = tgui_input_text(usr, "Set your employment notes here.", "Employment Records", active_character.gen_record, max_length = MAX_PAPER_MESSAGE_LEN, multiline = TRUE) + if(!genmsg) + return + active_character.gen_record = genmsg + active_character.SetRecords(user) if(href_list["preference"] == "gear") if(href_list["toggle_gear"]) @@ -212,9 +203,10 @@ to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") if("age") - var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference") as num|null - if(new_age) - active_character.age = max(min(round(text2num(new_age)), S.max_age), S.min_age) + var/new_age = tgui_input_number(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", active_character.age, S.max_age, S.min_age) + if(!new_age) + return + active_character.age = max(min(round(text2num(new_age)), S.max_age), S.min_age) if("species") var/list/new_species = list() var/prev_species = active_character.species @@ -326,9 +318,10 @@ active_character.autohiss_mode = autohiss_choice[new_autohiss_pref] if("metadata") - var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , active_character.metadata) as message|null - if(new_metadata) - active_character.metadata = sanitize(copytext_char(new_metadata,1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + var/new_metadata = tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference", active_character.metadata, multiline = TRUE, encode = FALSE) + if(!new_metadata) + return + active_character.metadata = new_metadata if("b_type") var/new_b_type = tgui_input_list(user, "Choose your character's blood-type", "Character Preference", list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")) @@ -388,11 +381,12 @@ if("h_grad_offset") var/result = input(user, "Enter your character's hair gradient offset as a comma-separated value (x,y). Example:\n0,0 (no offset)\n5,0 (5 pixels to the right)", "Character Preference") as null|text - if(result) - var/list/expl = splittext(result, ",") - if(length(expl) == 2) - active_character.h_grad_offset_x = clamp(text2num(expl[1]) || 0, -16, 16) - active_character.h_grad_offset_y = clamp(text2num(expl[2]) || 0, -16, 16) + if(!result) + return + var/list/expl = splittext(result, ",") + if(length(expl) == 2) + active_character.h_grad_offset_x = clamp(text2num(expl[1]) || 0, -16, 16) + active_character.h_grad_offset_y = clamp(text2num(expl[2]) || 0, -16, 16) if("h_grad_colour") var/result = input(user, "Choose your character's hair gradient colour:", "Character Preference", active_character.h_grad_colour) as color|null @@ -400,9 +394,10 @@ active_character.h_grad_colour = result if("h_grad_alpha") - var/result = input(user, "Choose your character's hair gradient alpha (0-255):", "Character Preference", active_character.h_grad_alpha) as num|null - if(!isnull(result)) - active_character.h_grad_alpha = clamp(result, 0, 255) + var/result = tgui_input_number(user, "Choose your character's hair gradient alpha (0-255):", "Character Preference", active_character.h_grad_alpha, 255) + if(isnull(result)) + return + active_character.h_grad_alpha = clamp(result, 0, 255) if("headaccessory") if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories. @@ -667,14 +662,16 @@ if("s_tone") if(S.bodyflags & HAS_SKIN_TONE) var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null - if(new_s_tone) - active_character.s_tone = 35 - max(min(round(new_s_tone), 220), 1) + if(!new_s_tone) + return + active_character.s_tone = 35 - max(min(round(new_s_tone), 220), 1) else if(S.bodyflags & HAS_ICON_SKIN_TONE) var/const/MAX_LINE_ENTRIES = 4 var/prompt = "Choose your character's skin tone: 1-[length(S.icon_skin_tones)]\n(Light to Dark)" - var/skin_c = input(user, prompt, "Character Preference") as num|null - if(isnum(skin_c)) - active_character.s_tone = max(min(round(skin_c), S.icon_skin_tones.len), 1) + var/skin_c = tgui_input_number(user, prompt, "Character Preference", active_character.s_tone, length(S.icon_skin_tones), 1) + if(!skin_c) + return + active_character.s_tone = skin_c if("skin") if((S.bodyflags & HAS_SKIN_COLOR) || GLOB.body_accessory_by_species[active_character.species] || check_rights(R_ADMIN, 0, user)) @@ -708,13 +705,10 @@ active_character.height = new_height if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance. SFW Drawn Art of your character is acceptable.","Flavor Text",html_decode(active_character.flavor_text)) as message - - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) - - active_character.flavor_text = msg + var/msg = tgui_input_text(usr, "Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance. SFW Drawn Art of your character is acceptable.", "Flavor Text", active_character.flavor_text, max_length = MAX_PAPER_MESSAGE_LEN, multiline = TRUE) + if(!msg) + return + active_character.flavor_text = msg // SS220 ADDITION START if("tts_seed") @@ -885,7 +879,7 @@ version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" if(world.byond_version < 511) version_message += "\nThis server does not currently support client side fps. You can set now for when it does." - var/desiredfps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num + var/desiredfps = tgui_input_number(user, "Choose your desired fps.[version_message]\n(Min = synced with server tick rate)", "Character Preference", clientfps, 120, world.fps) if(!isnull(desiredfps)) clientfps = desiredfps if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511) @@ -929,7 +923,7 @@ if("hear_adminhelps") sound ^= SOUND_ADMINHELP if("ui") - var/new_UI_style = tgui_input_list(user, "Choose your UI style", "UI style", list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "White")) + var/new_UI_style = tgui_input_list(user, "Choose your UI style", "UI style", list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "White", "Vaporwave", "Detective", "Trasenknox", "Clockwork")) // SS220 EDIT "Vaporwave, Detective, Trasenknox, Clockwork" if(!new_UI_style) return switch(new_UI_style) @@ -945,16 +939,16 @@ UI_style = "Operative" if("White") UI_style = "White" - // SS220 ADDITION START + // SS220 ADDITION - START if("Vaporwave") UI_style = "Vaporwave" if("Detective") UI_style = "Detective" - if("Trasen") - UI_style = "Trasen" + if("Trasenknox") + UI_style = "Trasenknox" if("Clockwork") UI_style = "Clockwork" - // SS220 ADDITION END + // SS220 ADDITION - END if(ishuman(usr)) //mid-round preference changes, for aesthetics var/mob/living/carbon/human/H = usr @@ -963,8 +957,18 @@ if("tgui") toggles2 ^= PREFTOGGLE_2_FANCYUI - if("input_lists") - toggles2 ^= PREFTOGGLE_2_DISABLE_TGUI_LISTS + if("tgui_input") + toggles2 ^= PREFTOGGLE_2_DISABLE_TGUI_INPUT + + if("tgui_input_large") + toggles2 ^= PREFTOGGLE_2_LARGE_INPUT_BUTTONS + + if("tgui_input_swap") + toggles2 ^= PREFTOGGLE_2_SWAP_INPUT_BUTTONS + + if("tgui_say_light_mode") + toggles2 ^= PREFTOGGLE_2_ENABLE_TGUI_SAY_LIGHT_MODE + user?.client?.tgui_say?.load() if("ghost_att_anim") toggles2 ^= PREFTOGGLE_2_ITEMATTACK @@ -1016,8 +1020,8 @@ H.remake_hud() if("UIalpha") - var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", UI_style_alpha) as num - if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) + var/UI_style_alpha_new = tgui_input_number(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", "UI Alpha", UI_style_alpha, 255, 50) + if(!UI_style_alpha_new) return UI_style_alpha = UI_style_alpha_new @@ -1131,9 +1135,10 @@ parent.mob?.hud_used?.update_parallax_pref() if("screentip_mode") - var/desired_screentip_mode = clamp(input(user, "Pick a screentip size, pick 0 to disable screentips. (We suggest a number between 8 and 15):", "Screentip Size") as null|num, 0, 20) - if(!isnull(desired_screentip_mode)) - screentip_mode = desired_screentip_mode + var/desired_screentip_mode = tgui_input_number(user, "Pick a screentip size, pick 0 to disable screentips. (We suggest a number between 8 and 15):", "Screentip Size", screentip_mode, 20, 0) + if(!desired_screentip_mode) + return + screentip_mode = desired_screentip_mode if("screentip_color") var/screentip_color_new = input(user, "Choose your screentip color", screentip_color) as color|null @@ -1251,7 +1256,7 @@ keybindings_overrides -= KB.name else if(href_list["all"]) - var/yes = alert(user, "Really [href_list["all"]] all key bindings?", "Confirm", "Yes", "No") == "Yes" + var/yes = tgui_alert(user, "Really [href_list["all"]] all key bindings?", "Confirm", list("Yes", "No")) == "Yes" if(yes) switch(href_list["all"]) if("reset") @@ -1265,7 +1270,7 @@ var/datum/keybinding/custom/custom_emote_keybind = locateUID(href_list["custom_emote_set"]) if(custom_emote_keybind) var/emote_text = active_character.custom_emotes[custom_emote_keybind.name] - var/desired_emote = stripped_input(user, "Enter your custom emote text, 128 character limit.", "Custom Emote Setter", emote_text, max_length = 128) + var/desired_emote = tgui_input_text(user, "Enter your custom emote text, 128 character limit.", "Custom Emote Setter", emote_text, max_length = 128) if(desired_emote && (desired_emote != custom_emote_keybind.default_emote_text)) //don't let them save the default custom emote text active_character.custom_emotes[custom_emote_keybind.name] = desired_emote active_character.save(user) diff --git a/code/modules/client/preference/loadout/loadout_general.dm b/code/modules/client/preference/loadout/loadout_general.dm index 4def22c447be..2549eff6d9c1 100644 --- a/code/modules/client/preference/loadout/loadout_general.dm +++ b/code/modules/client/preference/loadout/loadout_general.dm @@ -174,20 +174,20 @@ /datum/gear/mug display_name = "Coffee mug, random" description = "A randomly colored coffee mug. You'll need to supply your own beverage though." - path = /obj/item/reagent_containers/food/drinks/mug + path = /obj/item/reagent_containers/drinks/mug sort_category = "Mugs" /datum/gear/novelty_mug display_name = "Coffee mug, novelty" description = "A random novelty coffee mug. You'll need to supply your own beverage though." - path = /obj/item/reagent_containers/food/drinks/mug/novelty + path = /obj/item/reagent_containers/drinks/mug/novelty cost = 2 sort_category = "Mugs" /datum/gear/mug/flask display_name = "Flask" description = "A flask for drink transportation. You'll need to supply your own beverage though." - path = /obj/item/reagent_containers/food/drinks/flask/barflask + path = /obj/item/reagent_containers/drinks/flask/barflask /datum/gear/mug/department main_typepath = /datum/gear/mug/department @@ -198,30 +198,30 @@ display_name = "Coffee mug, engineering" description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department." allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist") - path = /obj/item/reagent_containers/food/drinks/mug/eng + path = /obj/item/reagent_containers/drinks/mug/eng /datum/gear/mug/department/med display_name = "Coffee mug, medical" description = "A doctor's coffee mug, emblazoned in the colors of the Medical department." allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner") - path = /obj/item/reagent_containers/food/drinks/mug/med + path = /obj/item/reagent_containers/drinks/mug/med /datum/gear/mug/department/sci display_name = "Coffee mug, science" description = "A scientist's coffee mug, emblazoned in the colors of the Science department." allowed_roles = list("Research Director", "Scientist", "Roboticist") - path = /obj/item/reagent_containers/food/drinks/mug/sci + path = /obj/item/reagent_containers/drinks/mug/sci /datum/gear/mug/department/sec display_name = "Coffee mug, security" description = "An officer's coffee mug, emblazoned in the colors of the Security department." allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Internal Affairs Agent") - path = /obj/item/reagent_containers/food/drinks/mug/sec + path = /obj/item/reagent_containers/drinks/mug/sec /datum/gear/mug/department/serv display_name = "Coffee mug, service" description = "A crewmember's coffee mug, emblazoned in the colors of the Service department." - path = /obj/item/reagent_containers/food/drinks/mug/serv + path = /obj/item/reagent_containers/drinks/mug/serv ////////////////////// diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index beffea1f9b2f..a0e739262de3 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -71,6 +71,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts /// Volume mixer, indexed by channel as TEXT (numerical indexes will not work). Volume goes from 0 to 100. var/list/volume_mixer = list( + "1012" = 100, // CHANNEL_GENERAL //Note: This should stay on top because order in this list defines order of sliders in mixer's interface. "1024" = 100, // CHANNEL_LOBBYMUSIC "1023" = 100, // CHANNEL_ADMIN "1022" = 100, // CHANNEL_VOX @@ -161,12 +162,13 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/list/dat = list() dat += "
        " - dat += "Character Settings" - dat += "Game Preferences" - dat += "Loadout" - dat += "Key Bindings" + dat += "Character Settings" + dat += "Game Preferences" + dat += "Antagonists" + dat += "Loadout" + dat += "Key Bindings" dat += "
        " - dat += "
        " + dat += "
        " switch(current_tab) if(TAB_CHAR) // Character Settings @@ -397,7 +399,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts if(TAB_GAME) // General Preferences // LEFT SIDE OF THE PAGE - dat += "
        " + dat += "
        " dat += "

        General Settings

        " dat += "2FA Setup: [_2fastatus_to_text()]
        " if(user.client.holder) @@ -409,14 +411,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "BYOND Membership Publicity: [(toggles & PREFTOGGLE_MEMBER_PUBLIC) ? "Public" : "Hidden"]
        " dat += "CKEY Anonymity: [toggles2 & PREFTOGGLE_2_ANON ? "Anonymous" : "Not Anonymous"]
        " dat += "Colourblind Mode: [colourblind_mode]
        " - dat += "Custom UI settings:
        " - dat += " - Alpha (transparency): [UI_style_alpha]
        " - dat += " - Color: [UI_style_color]    
        " - dat += " - UI Style: [UI_style]
        " if(user.client.donator_level > 0) dat += "Donator Publicity: [(toggles & PREFTOGGLE_DONATOR_PUBLIC) ? "Public" : "Hidden"]
        " - dat += "Fancy TGUI: [(toggles2 & PREFTOGGLE_2_FANCYUI) ? "Yes" : "No"]
        " - dat += "Input Lists: [(toggles2 & PREFTOGGLE_2_DISABLE_TGUI_LISTS) ? "Default" : "TGUI"]
        " dat += "FPS: [clientfps]
        " dat += "Ghost Ears: [(toggles & PREFTOGGLE_CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
        " dat += "Ghost Radio: [(toggles & PREFTOGGLE_CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
        " @@ -440,17 +436,32 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "High" dat += "
        " dat += "Parallax in darkness: [toggles2 & PREFTOGGLE_2_PARALLAX_IN_DARKNESS ? "Enabled" : "Disabled"]
        " - dat += "Set screentip mode: [(screentip_mode == 0) ? "Disabled" : "[screentip_mode]px"]
        " - dat += "Screentip color:     Change
        " dat += "Play Admin MIDIs: [(sound & SOUND_MIDI) ? "Yes" : "No"]
        " dat += "Play Lobby Music: [(sound & SOUND_LOBBY) ? "Yes" : "No"]
        " dat += "Randomized Character Slot: [toggles2 & PREFTOGGLE_2_RANDOMSLOT ? "Yes" : "No"]
        " - dat += "Thought Bubble: [(toggles2 & PREFTOGGLE_2_THOUGHT_BUBBLE) ? "Yes" : "No"]
        " dat += "View Range: [viewrange]
        " dat += "Window Flashing: [(toggles2 & PREFTOGGLE_2_WINDOWFLASHING) ? "Yes" : "No"]
        " dat += "Modsuit Activation Method: [(toggles2 & PREFTOGGLE_2_MOD_ACTIVATION_METHOD) ? "Middle Click" : "Alt Click"]
        " // RIGHT SIDE OF THE PAGE - dat += "
        " + dat += "" + dat += "

        Interface Settings

        " + dat += "Set screentip mode: [(screentip_mode == 0) ? "Disabled" : "[screentip_mode]px"]
        " + dat += "Screentip color:     Change
        " + dat += "Thought Bubble when pointing: [(toggles2 & PREFTOGGLE_2_THOUGHT_BUBBLE) ? "Yes" : "No"]
        " + dat += "Custom UI settings:
        " + dat += " - Alpha (transparency): [UI_style_alpha]
        " + dat += " - Color: [UI_style_color]    
        " + dat += " - UI Style: [UI_style]
        " + dat += "TGUI settings:
        " + dat += " - Fancy TGUI: [(toggles2 & PREFTOGGLE_2_FANCYUI) ? "Yes" : "No"]
        " + dat += " - TGUI Input: [(toggles2 & PREFTOGGLE_2_DISABLE_TGUI_INPUT) ? "No" : "Yes"]
        " + dat += " - TGUI Input - Large Buttons: [(toggles2 & PREFTOGGLE_2_LARGE_INPUT_BUTTONS) ? "Yes" : "No"]
        " + dat += " - TGUI Input - Swap Buttons: [(toggles2 & PREFTOGGLE_2_SWAP_INPUT_BUTTONS) ? "Yes" : "No"]
        " + dat += " - TGUI Say Theme: [(toggles2 & PREFTOGGLE_2_ENABLE_TGUI_SAY_LIGHT_MODE) ? "Light" : "Dark"]
        " + dat += "
        " + + if(TAB_ANTAG) // Antagonist's Preferences + dat += "
        " dat += "

        Special Role Settings

        " if(jobban_isbanned(user, ROLE_SYNDICATE)) dat += "You are banned from special roles." @@ -469,7 +480,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts else dat += "Be [capitalize(i)]: \[ERROR]
        " else - dat += "Be [capitalize(i)]: [(i in src.be_special) ? "Yes" : "No"]
        " + var/is_special = (i in src.be_special) + dat += "Be [capitalize(i)]:[(is_special) ? "Yes" : "No"]
        " dat += "
        " if(TAB_GEAR) diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 67e00f4661e3..50eb770d861a 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -35,7 +35,7 @@ //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) - UI_style = sanitize_inlist(UI_style, list("White", "Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Vaporwave", "Detective", "Trasen", "Clockwork"), initial(UI_style))// SS220 ADDITIONS "Vaporwave, Detective, Trasen, Clockwork" + UI_style = sanitize_inlist(UI_style, list("White", "Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Vaporwave", "Detective", "Trasenknox", "Clockwork"), initial(UI_style)) // SS220 EDIT "Vaporwave, Detective, Trasenknox, Clockwork" default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) toggles = sanitize_integer(toggles, 0, TOGGLES_TOTAL, initial(toggles)) toggles2 = sanitize_integer(toggles2, 0, TOGGLES_2_TOTAL, initial(toggles2)) diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index c252a2d8d1f9..c0f8f13281ac 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -227,12 +227,12 @@ SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Instruments") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggle_input() - set name = "Toggle TGUI Input Lists" + set name = "Toggle TGUI Input" set category = "Preferences" - set desc = "Switches input lists between the TGUI and the standard one" - prefs.toggles2 ^= PREFTOGGLE_2_DISABLE_TGUI_LISTS + set desc = "Switches inputs between the TGUI and the standard one" + prefs.toggles2 ^= PREFTOGGLE_2_DISABLE_TGUI_INPUT prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_LISTS) ? "no longer" : "now"] use TGUI Input Lists.") + to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_INPUT) ? "no longer" : "now"] use TGUI Inputs.") /client/verb/Toggle_disco() //to toggle off the disco machine locally, in case it gets too annoying set name = "Hear/Silence Dance Machine" @@ -254,30 +254,6 @@ prefs.current_tab = 1 prefs.ShowChoices(usr) -/client/verb/toggle_darkmode() - set name = "Toggle Darkmode" - set category = "Preferences" - set desc = "Toggles UI style between dark and light" - prefs.toggles ^= PREFTOGGLE_UI_DARKMODE - prefs.save_preferences(src) - if(prefs.toggles & PREFTOGGLE_UI_DARKMODE) - activate_darkmode() - else - deactivate_darkmode() - SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Darkmode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_popup_limiter() - set name = "Toggle Text Popup Limiter" - set category = "Preferences" - set desc = "Will let you limit the text input popups to one at a time." - prefs.toggles ^= PREFTOGGLE_TYPING_ONCE - prefs.save_preferences(src) - if(prefs.toggles & PREFTOGGLE_TYPING_ONCE) - to_chat(usr, "You have enabled text popup limiting.") - else - to_chat(usr, "You have disabled text popup limiting.") - return - /client/verb/toggle_ghost_pda() set name = "Show/Hide GhostPDA" set category = "Preferences" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3c3ceea9d347..d11bdd1e7412 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -313,14 +313,15 @@ return var/list/modes = list("Off", "Binary sensors", "Vitals tracker", "Tracking beacon") - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes + var/switchMode = tgui_input_list(user, "Select a sensor mode:", "Suit Sensor Mode", modes, modes[sensor_mode + 1]) if(!user.Adjacent(src)) to_chat(user, "You have moved too far away!") return if(!ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) to_chat(user, "You can't use your hands!") return - + if(!switchMode) + return sensor_mode = modes.Find(switchMode) - 1 if(loc == user) @@ -558,6 +559,19 @@ /// Maximum weight class of an item in the suit storage slot. var/max_suit_w = WEIGHT_CLASS_BULKY +/obj/item/clothing/suit/Initialize(mapload) + . = ..() + setup_shielding() + +/** + * Wrapper proc to apply shielding through AddComponent(). + * Called in /obj/item/clothing/Initialize(). + * Override with an AddComponent(/datum/component/shielded, args) call containing the desired shield statistics. + * See /datum/component/shielded documentation for a description of the arguments + **/ +/obj/item/clothing/suit/proc/setup_shielding() + return + //Proc that opens and closes jackets. /obj/item/clothing/suit/proc/adjustsuit(mob/user) if(ignore_suitadjust) @@ -731,7 +745,7 @@ var/mob/living/carbon/human/H = user if(H.get_item_by_slot(SLOT_HUD_JUMPSUIT) == src) for(var/obj/item/clothing/accessory/A in accessories) - A.attached_unequip() + A.attached_unequip(user) // SS220 EDIT - FIX /obj/item/clothing/under/equipped(mob/user, slot, initial) ..() @@ -739,7 +753,7 @@ return if(slot == SLOT_HUD_JUMPSUIT) for(var/obj/item/clothing/accessory/A in accessories) - A.attached_equip() + A.attached_equip(user) // SS220 EDIT - FIX /* * # can_attach_accessory diff --git a/code/modules/clothing/gloves/colored_gloves.dm b/code/modules/clothing/gloves/colored_gloves.dm index 27cee19987a1..c2b8ea24035a 100644 --- a/code/modules/clothing/gloves/colored_gloves.dm +++ b/code/modules/clothing/gloves/colored_gloves.dm @@ -11,50 +11,6 @@ item_color="yellow" resistance_flags = NONE -/obj/item/clothing/gloves/color/yellow/power - var/old_mclick_override - var/datum/middleClickOverride/power_gloves/mclick_override = new /datum/middleClickOverride/power_gloves - var/last_shocked = 0 - var/shock_delay = 3 SECONDS - var/unlimited_power = FALSE // Does this really need explanation? - var/shock_range = 7 - -/obj/item/clothing/gloves/color/yellow/power/examine(mob/user) - . = ..() - if(isAntag(user)) - . += "These are a pair of power gloves, and can be used to fire bolts of electricity while standing over powered power cables." - -/obj/item/clothing/gloves/color/yellow/power/equipped(mob/user, slot) - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(slot == SLOT_HUD_GLOVES) - if(H.middleClickOverride) - old_mclick_override = H.middleClickOverride - H.middleClickOverride = mclick_override - if(!unlimited_power) - to_chat(H, "You feel electricity begin to build up in [src].") - else - to_chat(H, "You feel like you have UNLIMITED POWER!!") - -/obj/item/clothing/gloves/color/yellow/power/dropped(mob/user, slot) - ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src && H.middleClickOverride == mclick_override) - if(old_mclick_override) - H.middleClickOverride = old_mclick_override - old_mclick_override = null - else - H.middleClickOverride = null - -/obj/item/clothing/gloves/color/yellow/power/unlimited - name = "UNLIMITED POWER gloves" - desc = "These gloves possess UNLIMITED POWER." - shock_delay = 0 - unlimited_power = TRUE - /obj/item/clothing/gloves/color/yellow/fake siemens_coefficient = 1 @@ -112,7 +68,7 @@ /obj/item/clothing/gloves/color/black/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/wirecutters)) 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") + var/confirm = tgui_alert(user, "Do you want to cut off the gloves fingertips? Warning: It might destroy their functionality.", "Cut tips?", list("Yes","No")) if(get_dist(user, src) > 1) to_chat(user, "You have moved too far away.") return diff --git a/code/modules/clothing/gloves/misc_gloves.dm b/code/modules/clothing/gloves/misc_gloves.dm index 8ccbd2546f86..87d7c9a2682b 100644 --- a/code/modules/clothing/gloves/misc_gloves.dm +++ b/code/modules/clothing/gloves/misc_gloves.dm @@ -197,7 +197,7 @@ else click_speed_modifier = initial(click_speed_modifier) // 2 - if((L.a_intent in accepted_intents)) + if(L.a_intent in accepted_intents) L.changeNext_move(click_speed_modifier) return FALSE diff --git a/code/modules/clothing/head/job_hats.dm b/code/modules/clothing/head/job_hats.dm index 3641624520c1..94d268d41108 100644 --- a/code/modules/clothing/head/job_hats.dm +++ b/code/modules/clothing/head/job_hats.dm @@ -120,7 +120,7 @@ name = "hat" desc = "Someone who wears this will look very smart." icon_state = "detective" - allowed = list(/obj/item/reagent_containers/food/snacks/candy/candy_corn, /obj/item/pen) + allowed = list(/obj/item/food/snacks/candy/candy_corn, /obj/item/pen) armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 0, RAD = 0, FIRE = 20, ACID = 50) dog_fashion = /datum/dog_fashion/head/detective diff --git a/code/modules/clothing/head/misc_hats.dm b/code/modules/clothing/head/misc_hats.dm index c4bf3681635f..501bfcb60b90 100644 --- a/code/modules/clothing/head/misc_hats.dm +++ b/code/modules/clothing/head/misc_hats.dm @@ -580,3 +580,58 @@ sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/head.dmi' ) + +/obj/item/clothing/head/flower_crown + name = "flower crown" + desc = "A colorful flower crown made out of lilies, sunflowers and poppies." + icon_state = "flower_crown" + item_state = "flower_crown" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Grey" = 'icons/mob/clothing/species/grey/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + +/obj/item/clothing/head/sunflower_crown + name = "sunflower crown" + desc = "A bright flower crown made out sunflowers that is sure to brighten up anyone's day!" + icon_state = "sunflower_crown" + item_state = "sunflower_crown" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Grey" = 'icons/mob/clothing/species/grey/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + +/obj/item/clothing/head/poppy_crown + name = "poppy crown" + desc = "A flower crown made out of a string of bright red poppies." + icon_state = "poppy_crown" + item_state = "poppy_crown" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Grey" = 'icons/mob/clothing/species/grey/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + +/obj/item/clothing/head/lily_crown + name = "lily crown" + desc = "A leafy flower crown with a cluster of large white lilies at the front." + icon_state = "lily_crown" + item_state = "lily_crown" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Grey" = 'icons/mob/clothing/species/grey/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + +/obj/item/clothing/head/geranium_crown + name = "geranium crown" + desc = "A flower crown made out of an array of rich purple geraniums." + icon_state = "geranium_crown" + item_state = "geranium_crown" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Grey" = 'icons/mob/clothing/species/grey/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index fbcab10b2064..0756c90bfc84 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -401,6 +401,7 @@ if(safety) safety = 0 to_chat(user, "You silently fry [src]'s vocal circuit with the cryptographic sequencer.") + return TRUE else return diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 4c5ab8de27f7..efa9c46bb50c 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -499,133 +499,3 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/singuloth sprite_sheets = null - -/////////////SHIELDED////////////////////////////////// - -/obj/item/clothing/suit/space/hardsuit/shielded - name = "shielded hardsuit" - desc = "A hardsuit with built in energy shielding. Will rapidly recharge when not under fire." - icon_state = "hardsuit-hos" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded - allowed = list(/obj/item/flashlight,/obj/item/tank/internals, /obj/item/gun,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs) - armor = list(MELEE = 20, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = INFINITY, ACID = INFINITY) - resistance_flags = FIRE_PROOF | ACID_PROOF - var/current_charges = 3 - var/max_charges = 3 //How many charges total the shielding has - var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here - var/recharge_cooldown = 0 //Time since we've last been shot - var/recharge_rate = 1 //How quickly the shield recharges once it starts charging - var/shield_state = "shield-old" - var/shield_on = "shield-old" - -/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - recharge_cooldown = world.time + recharge_delay - if(current_charges > 0) - do_sparks(2, 1, src) - owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") - current_charges-- - if(recharge_rate) - START_PROCESSING(SSobj, src) - if(istype(hitby, /obj/item/projectile)) - var/obj/item/projectile/P = hitby - if(P.shield_buster) - current_charges = max(0, current_charges - 3) - if(current_charges <= 0) - owner.visible_message("[owner]'s shield overloads!") - shield_state = "broken" - owner.update_inv_wear_suit() - return 1 - return 0 - - - -/obj/item/clothing/suit/space/hardsuit/shielded/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/suit/space/hardsuit/shielded/process() - if(world.time > recharge_cooldown && current_charges < max_charges) - current_charges = clamp((current_charges + recharge_rate), 0, max_charges) - playsound(loc, 'sound/magic/charge.ogg', 50, TRUE) - if(current_charges == max_charges) - playsound(loc, 'sound/machines/ding.ogg', 50, TRUE) - STOP_PROCESSING(SSobj, src) - shield_state = "[shield_on]" - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - C.update_inv_wear_suit() - -/obj/item/clothing/suit/space/hardsuit/shielded/special_overlays() - return mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) - -/obj/item/clothing/head/helmet/space/hardsuit/shielded - name = "shielded hardsuit helmet" - desc = "A hardsuit helmet with built in energy shielding. Will rapidly recharge when not under fire." - icon_state = "hardsuit0-sec" - item_state = "sec_helm" - item_color = "sec" - armor = list(MELEE = 20, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = INFINITY, ACID = INFINITY) - resistance_flags = FIRE_PROOF | ACID_PROOF - - -//////Syndicate Version - -/obj/item/clothing/suit/space/hardsuit/shielded/syndi - name = "blood-red hardsuit" - desc = "An advanced hardsuit with built in energy shielding." - icon_state = "hardsuit1-syndi" - item_state = "syndie_hardsuit" - item_color = "syndi" - armor = list(MELEE = 35, BULLET = 50, LASER = 20, ENERGY = 10, BOMB = 25, RAD = 50, FIRE = INFINITY, ACID = INFINITY) - allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank/internals) - slowdown = 0 - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi - jetpack = /obj/item/tank/jetpack/suit - -/obj/item/clothing/suit/space/hardsuit/shielded/syndi/multitool_act(mob/user, obj/item/I) - . = TRUE - if(!I.use_tool(src, user, 0, volume = I.tool_volume)) - return - if(shield_state == "broken") - to_chat(user, "You can't interface with the hardsuit's software if the shield's broken!") - return - - if(shield_state == "shield-red") - shield_state = "shield-old" - shield_on = "shield-old" - to_chat(user, "You roll back the hardsuit's software, changing the shield's color!") - - else - shield_state = "shield-red" - shield_on = "shield-red" - to_chat(user, "You update the hardsuit's hardware, changing back the shield's color to red.") - user.update_inv_wear_suit() - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi - name = "blood-red hardsuit helmet" - desc = "An advanced hardsuit helmet with built in energy shielding." - icon_state = "hardsuit1-syndi" - item_state = "syndie_helm" - item_color = "syndi" - armor = list(MELEE = 35, BULLET = 50, LASER = 20, ENERGY = 10, BOMB = 25, RAD = 50, FIRE = INFINITY, ACID = INFINITY) - - -//////Security Version (Gamma armory only) - -/obj/item/clothing/suit/space/hardsuit/shielded/gamma - name = "shielded security hardsuit" - desc = "A more advanced version of the normal security hardsuit. Comes with built in energy shielding." - icon_state = "hardsuit-sec" - item_state = "sec-hardsuit" - armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = 150, ACID = 150) - allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/gamma - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/gamma - name = "shielded security hardsuit helmet" - desc = "A more advanced version of the normal security hardsuit helmet. Comes with built in energy shielding." - icon_state = "hardsuit0-sec" - item_state = "sec_helm" - item_color = "sec" - armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = 150, ACID = 150) - diff --git a/code/modules/clothing/suits/armor_suits.dm b/code/modules/clothing/suits/armor_suits.dm index 846b5d033e9d..47c2b602ff78 100644 --- a/code/modules/clothing/suits/armor_suits.dm +++ b/code/modules/clothing/suits/armor_suits.dm @@ -190,7 +190,7 @@ armor = list(MELEE = 50, BULLET = 35, LASER = 50, ENERGY = 5, BOMB = 15, RAD = 0, FIRE = INFINITY, ACID = 450) dog_fashion = null resistance_flags = FIRE_PROOF - allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/flash, /obj/item/storage/fancy/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/gun/energy, /obj/item/gun/projectile) + allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/flash, /obj/item/storage/fancy/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/gun/energy, /obj/item/gun/projectile) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', diff --git a/code/modules/clothing/suits/job_suits.dm b/code/modules/clothing/suits/job_suits.dm index 4b3232679f5b..db2fcc1981de 100644 --- a/code/modules/clothing/suits/job_suits.dm +++ b/code/modules/clothing/suits/job_suits.dm @@ -44,7 +44,7 @@ item_state = "chaplain_hoodie" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/chaplain_hood - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' @@ -59,7 +59,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT hoodtype = /obj/item/clothing/head/hooded/nun_hood - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' @@ -74,7 +74,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT hoodtype = /obj/item/clothing/head/hooded/monk_hood - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/witchhunter name = "witchhunter garb" @@ -82,7 +82,7 @@ icon_state = "witchhunter" item_state = "witchhunter" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) //Chef diff --git a/code/modules/clothing/suits/misc_suits.dm b/code/modules/clothing/suits/misc_suits.dm index bfa4b04a399a..1165ab500570 100644 --- a/code/modules/clothing/suits/misc_suits.dm +++ b/code/modules/clothing/suits/misc_suits.dm @@ -153,7 +153,7 @@ item_state = "imperium_monk" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/chickensuit name = "chicken suit" @@ -220,7 +220,7 @@ item_state = "holidaypriest" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/cardborg name = "cardborg suit" @@ -756,6 +756,9 @@ actions_types = list() adjust_flavour = null allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy,/obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/projectile/automatic/pistol, /obj/item/gun/projectile/revolver, /obj/item/gun/energy/detective) + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' + ) /obj/item/clothing/suit/jacket/miljacket/navy name = "navy military jacket" @@ -978,6 +981,9 @@ actions_types = list() adjust_flavour = null resistance_flags = NONE + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' + ) /obj/item/clothing/suit/jacket/motojacket name = "leather motorcycle jacket" @@ -1001,6 +1007,9 @@ icon_state = "leathercoat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' + ) /obj/item/clothing/suit/officercoat name = "clown officer's coat" @@ -1261,7 +1270,7 @@ icon_state = "abaya" item_state = "abaya" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) hoodtype = /obj/item/clothing/head/hooded/screened_niqab flags_inv = HIDEJUMPSUIT var/list/options = list( diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index f46c4f290f61..29c33bd0a46a 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -184,38 +184,32 @@ //Shielded Armour -/obj/item/clothing/suit/space/hardsuit/shielded/wizard +/obj/item/clothing/suit/space/hardsuit/wizard name = "battlemage armor" desc = "Not all wizards are afraid of getting up close and personal." icon_state = "hardsuit-wiz" item_state = "wiz_hardsuit" - recharge_rate = 0 - ///The amount of charges the suit currently has - current_charges = 15 - ///The max number of charges the suit can hold - max_charges = 15 - shield_state = "shield-red" - shield_on = "shield-red" min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard armor = list(MELEE = 35, BULLET = 50, LASER = 20, ENERGY = 10, BOMB = 25, RAD = 50, FIRE = INFINITY, ACID = INFINITY) slowdown = 0 resistance_flags = FIRE_PROOF | ACID_PROOF magical = TRUE -/obj/item/clothing/suit/space/hardsuit/shielded/wizard/arch +/obj/item/clothing/suit/space/hardsuit/wizard/setup_shielding() + AddComponent(/datum/component/shielded, max_charges = 15, recharge_start_delay = 0 SECONDS) + +/obj/item/clothing/suit/space/hardsuit/wizard/arch desc = "For the arch wizard in need of additional protection." - recharge_rate = 5 - recharge_cooldown = 0 SECONDS - current_charges = 15 - max_charges = 15 - recharge_delay = 1 SECONDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/arch + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard/arch + +/obj/item/clothing/suit/space/hardsuit/wizard/arch/setup_shielding() + AddComponent(/datum/component/shielded, max_charges = 15, recharge_start_delay = 1 SECONDS, charge_increment_delay = 1 SECONDS) -/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard +/obj/item/clothing/head/helmet/space/hardsuit/wizard name = "battlemage helmet" desc = "A suitably impressive helmet." icon_state = "hardsuit0-wiz" @@ -228,10 +222,10 @@ resistance_flags = FIRE_PROOF | ACID_PROOF magical = TRUE -/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/attack_self(mob/user) +/obj/item/clothing/head/helmet/space/hardsuit/wizard/attack_self(mob/user) return -/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/arch +/obj/item/clothing/head/helmet/space/hardsuit/wizard/arch desc = "A truly protective helmet." min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index cc8c0cc27012..a2f3d90fb155 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -156,8 +156,10 @@ user.visible_message("[user] places [src] against [user.p_their()] chest and listens attentively.", "You place [src] against your chest...") else user.visible_message("[user] places \the [src] against [M]'s chest and listens attentively.", "You place \the [src] against [M]'s chest...") - var/obj/item/organ/internal/H = M.get_int_organ(/obj/item/organ/internal/heart) - var/obj/item/organ/internal/L = M.get_int_organ(/obj/item/organ/internal/lungs) + var/datum/organ/heart/heart_datum = M.get_int_organ_datum(ORGAN_DATUM_HEART) + var/obj/item/organ/internal/H = heart_datum.linked_organ + var/datum/organ/lungs/lung_datum = M.get_int_organ_datum(ORGAN_DATUM_LUNGS) + var/obj/item/organ/internal/L = lung_datum.linked_organ if(M.pulse && (H || (L && !HAS_TRAIT(M, TRAIT_NOBREATH)))) var/color = "notice" if(H) @@ -450,6 +452,7 @@ else emagged = TRUE to_chat(user, "You swipe the card and crack the holobadge security checks.") + return TRUE /obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/H, mob/living/user) if(isliving(user)) diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 2916882460aa..a520f476bc87 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -285,10 +285,13 @@ return parts_returned -/datum/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/personal_crafting/ui_state(mob/user) + return GLOB.not_incapacitated_turf_state + +/datum/personal_crafting/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state) + ui = new(user, src, "PersonalCrafting", "Crafting Menu") ui.open() /datum/personal_crafting/proc/close(mob/user) diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index 794446de44cc..2b41fbf63bee 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -29,7 +29,7 @@ /obj/item/weaponcrafting/gunkit/nuclear name = "\improper advanced energy gun parts kit" - desc = "A suitcase containing the necessary gun parts to tranform a standard energy gun into an advaned energy gun." + desc = "A suitcase containing the necessary gun parts to transform a standard energy gun into an advanced energy gun." origin_tech = "combat=4;magnets=4;powerstorage=4" outcome = /obj/item/gun/energy/gun/nuclear @@ -53,7 +53,7 @@ /obj/item/weaponcrafting/gunkit/temperature name = "\improper temperature gun parts kit" - desc = "A suitcase containing the necessary gun parts to tranform a standard energy gun into a temperature gun. Fantastic at birthday parties and killing indigenious populations of Ash Walkers." + desc = "A suitcase containing the necessary gun parts to transform a standard energy gun into a temperature gun. Fantastic at birthday parties and killing indigenious populations of Ash Walkers." origin_tech = "combat=4;materials=4;powerstorage=3;magnets=2" outcome = /obj/item/gun/energy/temperature diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index d61c901d1e5f..27a767271d6f 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -31,19 +31,19 @@ reqs = list(/datum/reagent/fuel = 50, /obj/item/stack/cable_coil = 1, /obj/item/assembly/igniter = 1, - /obj/item/reagent_containers/food/drinks/cans = 1) - parts = list(/obj/item/reagent_containers/food/drinks/cans = 1) + /obj/item/reagent_containers/drinks/cans = 1) + parts = list(/obj/item/reagent_containers/drinks/cans = 1) time = 15 category = CAT_WEAPONRY subcategory = CAT_WEAPON /datum/crafting_recipe/molotov name = "Molotov" - result = list(/obj/item/reagent_containers/food/drinks/bottle/molotov) + result = list(/obj/item/reagent_containers/drinks/bottle/molotov) reqs = list(/obj/item/reagent_containers/glass/rag = 1, - /obj/item/reagent_containers/food/drinks/bottle = 1) - blacklist = list(/obj/item/reagent_containers/food/drinks/bottle/molotov) - parts = list(/obj/item/reagent_containers/food/drinks/bottle = 1) + /obj/item/reagent_containers/drinks/bottle = 1) + blacklist = list(/obj/item/reagent_containers/drinks/bottle/molotov) + parts = list(/obj/item/reagent_containers/drinks/bottle = 1) time = 40 category = CAT_WEAPONRY subcategory = CAT_WEAPON @@ -91,10 +91,10 @@ /datum/crafting_recipe/throwing_croissant name = "Throwing croissant" reqs = list( - /obj/item/reagent_containers/food/snacks/croissant = 1, + /obj/item/food/snacks/croissant = 1, /obj/item/stack/rods = 1 ) - result = list(/obj/item/reagent_containers/food/snacks/croissant/throwing) + result = list(/obj/item/food/snacks/croissant/throwing) category = CAT_WEAPONRY subcategory = CAT_WEAPON always_available = FALSE @@ -421,29 +421,6 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/improvisedslug - name = "Improvised Shotgun Shell" - result = list(/obj/item/ammo_casing/shotgun/improvised) - reqs = list(/obj/item/grenade/chem_grenade = 1, - /obj/item/stack/sheet/metal = 1, - /obj/item/stack/cable_coil = 1, - /datum/reagent/fuel = 10) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/improvisedslugoverload - name = "Overload Improvised Shell" - result = list(/obj/item/ammo_casing/shotgun/improvised/overload) - reqs = list(/obj/item/ammo_casing/shotgun/improvised = 1, - /datum/reagent/blackpowder = 10, - /datum/reagent/plasma_dust = 20) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - /datum/crafting_recipe/lasershot name = "Lasershot Shell" result = list(/obj/item/ammo_casing/shotgun/lasershot) @@ -911,7 +888,7 @@ name = "Snowman" result = list(/obj/structure/snowman/built) reqs = list(/obj/item/snowball = 10, - /obj/item/reagent_containers/food/snacks/grown/carrot = 1, + /obj/item/food/snacks/grown/carrot = 1, /obj/item/grown/log = 2) time = 50 category = CAT_MISC @@ -1369,7 +1346,7 @@ time = 3 SECONDS result = list(/obj/item/stack/medical/bruise_pack) reqs = list(/obj/item/stack/medical/bruise_pack/improvised = 6, - /datum/reagent/medicine/styptic_powder = 30, + /datum/reagent/medicine/heal_on_apply/styptic_powder = 30, /datum/reagent/medicine/sterilizine = 10) category = CAT_MISC @@ -1379,6 +1356,6 @@ result = list(/obj/item/stack/medical/ointment) reqs = list(/obj/item/stack/sheet/plastic = 2, /datum/reagent/water = 10, - /datum/reagent/medicine/silver_sulfadiazine = 30, + /datum/reagent/medicine/heal_on_apply/silver_sulfadiazine = 30, /datum/reagent/medicine/sterilizine = 10) category = CAT_MISC diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm index 5ce8299daee3..b072b0424880 100644 --- a/code/modules/crafting/tailoring.dm +++ b/code/modules/crafting/tailoring.dm @@ -280,3 +280,41 @@ /obj/item/assembly/voice = 1, /obj/item/stack/cable_coil = 5) category = CAT_CLOTHING + +/datum/crafting_recipe/flower_crown + name = "Flower Crown" + result = list(/obj/item/clothing/head/flower_crown) + reqs = list(/obj/item/food/snacks/grown/poppy = 3, + /obj/item/food/snacks/grown/poppy/lily = 3, + /obj/item/grown/sunflower = 3 + ) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/sunflower_crown + name = "Sunflower Crown" + result = list(/obj/item/clothing/head/sunflower_crown) + reqs = list(/obj/item/grown/sunflower = 5) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/poppy_crown + name = "Poppy Crown" + result = list(/obj/item/clothing/head/poppy_crown) + reqs = list(/obj/item/food/snacks/grown/poppy = 5) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/lily_crown + name = "Lily Crown" + result = list(/obj/item/clothing/head/lily_crown) + reqs = list(/obj/item/food/snacks/grown/poppy/lily = 5) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/geranium_crown + name = "Geranium Crown" + result = list(/obj/item/clothing/head/geranium_crown) + reqs = list(/obj/item/food/snacks/grown/poppy/geranium = 5) + time = 2 SECONDS + category = CAT_CLOTHING diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index cc753c4d261b..3331ee4d8fd5 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -269,9 +269,9 @@ storage_slots = 3 /obj/item/storage/toolbox/fluff/lunchbox/populate_contents() - new /obj/item/reagent_containers/food/snacks/sandwich(src) - new /obj/item/reagent_containers/food/snacks/chips(src) - new /obj/item/reagent_containers/food/drinks/cans/cola(src) + new /obj/item/food/snacks/sandwich(src) + new /obj/item/food/snacks/chips(src) + new /obj/item/reagent_containers/drinks/cans/cola(src) /obj/item/fluff/wingler_comb @@ -851,7 +851,6 @@ /obj/item/clothing/suit/fluff/kluys/verb/toggle() set name = "Toggle Nanofibre Mode" set category = "Object" - set src in usr if(usr.stat || usr.restrained()) return 0 @@ -1058,6 +1057,7 @@ cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS actions_types = list(/datum/action/item_action/zipper) adjust_flavour = "unzip" + sprite_sheets = null //////////// Uniforms //////////// @@ -1148,7 +1148,6 @@ /obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper() set name = "Toggle Jumpsuit Zipper" set category = "Object" - set src in usr if(usr.stat || usr.restrained()) return 0 diff --git a/code/modules/detective_work/detective_work.dm b/code/modules/detective_work/detective_work.dm index 98e119402f1a..0ea5bcefb2dd 100644 --- a/code/modules/detective_work/detective_work.dm +++ b/code/modules/detective_work/detective_work.dm @@ -1,7 +1,5 @@ //CONTAINS: Suit fibers and Detective's Scanning Computer -/atom/var/list/suit_fibers - /atom/proc/add_fibers(mob/living/carbon/human/M) if(M.gloves && isclothing(M.gloves)) var/obj/item/clothing/gloves/G = M.gloves diff --git a/code/modules/detective_work/evidence.dm b/code/modules/detective_work/evidence.dm index e5954b0e1b2f..104e1130d23e 100644 --- a/code/modules/detective_work/evidence.dm +++ b/code/modules/detective_work/evidence.dm @@ -41,11 +41,7 @@ if(isstorage(I.loc)) //in a container. var/obj/item/storage/U = I.loc U.remove_from_storage(I, src) - else if(user.l_hand == I) //in a hand - user.drop_l_hand() - else if(user.r_hand == I) //in a hand - user.drop_r_hand() - else + else if(!user.is_holding(I) || !user.unEquip(I)) //in a hand return user.visible_message("[user] puts [I] into [src].", "You put [I] inside [src].",\ diff --git a/code/modules/detective_work/scanner.dm b/code/modules/detective_work/scanner.dm index 31563fa02b8f..dfe08ce1fa1e 100644 --- a/code/modules/detective_work/scanner.dm +++ b/code/modules/detective_work/scanner.dm @@ -17,7 +17,7 @@ actions_types = list(/datum/action/item_action/print_forensic_report, /datum/action/item_action/clear_records) /obj/item/detective_scanner/attack_self(mob/user) - var/search = input(user, "Enter name, fingerprint or blood DNA.", "Find record", "") + var/search = tgui_input_text(user, "Enter name, fingerprint or blood DNA.", "Find record") if(!search || user.stat || user.incapacitated()) return diff --git a/code/modules/economy/economy_admin.dm b/code/modules/economy/economy_admin.dm index f33af855c66d..186a36b4af98 100644 --- a/code/modules/economy/economy_admin.dm +++ b/code/modules/economy/economy_admin.dm @@ -12,10 +12,13 @@ /datum/ui_module/economy_manager name = "Economy Manager" -/datum/ui_module/economy_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/economy_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/economy_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EconomyManager", name, 600, 350, master_ui, state) + ui = new(user, src, "EconomyManager", name) ui.autoupdate = TRUE ui.open() diff --git a/code/modules/economy/economy_machinery/account_terminal.dm b/code/modules/economy/economy_machinery/account_terminal.dm index 282aa26a4df8..d8b1ec285641 100644 --- a/code/modules/economy/economy_machinery/account_terminal.dm +++ b/code/modules/economy/economy_machinery/account_terminal.dm @@ -32,10 +32,13 @@ /obj/machinery/computer/account_database/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/account_database/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/account_database/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AccountsUplinkTerminal", name, 800, 600, master_ui, state) + ui = new(user, src, "AccountsUplinkTerminal", name) ui.open() /obj/machinery/computer/account_database/ui_data(mob/user) diff --git a/code/modules/economy/economy_machinery/atm.dm b/code/modules/economy/economy_machinery/atm.dm index 8d75ef68f40c..99d8dc2f687b 100644 --- a/code/modules/economy/economy_machinery/atm.dm +++ b/code/modules/economy/economy_machinery/atm.dm @@ -129,10 +129,13 @@ UnregisterSignal(authenticated_account, COMSIG_PARENT_QDELETING) authenticated_account = null -/obj/machinery/economy/atm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/atm/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/atm/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ATM", name, 550, 650) + ui = new(user, src, "ATM", name) ui.open() /obj/machinery/economy/atm/ui_data(mob/user) diff --git a/code/modules/economy/economy_machinery/eftpos.dm b/code/modules/economy/economy_machinery/eftpos.dm index 5826d1db063a..9df87f8d06e2 100644 --- a/code/modules/economy/economy_machinery/eftpos.dm +++ b/code/modules/economy/economy_machinery/eftpos.dm @@ -55,10 +55,13 @@ else return ..() -/obj/item/eftpos/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/eftpos/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/eftpos/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EFTPOS", name, 500, 250, master_ui, state) + ui = new(user, src, "EFTPOS", name) ui.open() /obj/item/eftpos/ui_data(mob/user) @@ -90,14 +93,12 @@ switch(action) if("change_code") - var/attempt_code = input("Re-enter the current EFTPOS access code", "Confirm old EFTPOS code") as num + var/attempt_code = tgui_input_number(user, "Re-enter the current EFTPOS access code:", "Confirm old EFTPOS code", max_value = 9999, min_value = 1000) if(attempt_code == access_code) - var/trycode = input("Enter a new access code for this device (4 digits, numbers only)", "Enter new EFTPOS code") as num - if(trycode < 1000 || trycode > 9999) - alert("That is not a valid code!") + var/trycode = tgui_input_number(user, "Enter a new access code for this device:", "Enter new EFTPOS code", max_value = 9999, min_value = 1000) + if(!trycode) return access_code = trycode - print_reference() else to_chat(user, "[bicon(src)]Incorrect code entered.") @@ -105,9 +106,11 @@ if(!account_database) reconnect_database() if(account_database) - var/attempt_account_num = input("Enter account number to pay EFTPOS charges into", "New account number") as num - var/attempt_pin = input("Enter pin code", "Account pin") as num - if(!check_user_position(user) || !account_database) + var/attempt_account_num = tgui_input_number(user, "Enter account number to pay EFTPOS charges into:", "New account number", max_value = 9999999, min_value = 1000000) + if(!attempt_account_num) + return + var/attempt_pin = tgui_input_number(user, "Enter pin code", "Account pin", max_value = 99999, min_value = 10000) + if(!check_user_position(user) || !account_database || !attempt_pin) return var/datum/money_account/target_account = GLOB.station_money_database.find_user_account(attempt_account_num, include_departments = TRUE) if(!target_account) @@ -119,6 +122,7 @@ linked_account = target_account else to_chat(user, "[bicon(src)]Unable to connect to inputed account.") + return else to_chat(user, "[bicon(src)]Unable to connect to accounts database.") return @@ -130,25 +134,18 @@ linked_account = target_account to_chat(user, "[bicon(src)]Linked account successfully set to [target_account.account_name]") if("trans_purpose") - var/purpose = clean_input("Enter reason for EFTPOS transaction", "Transaction purpose", transaction_purpose) - if(!check_user_position(user)) + var/purpose = tgui_input_text(user, "Enter reason for EFTPOS transaction", "Transaction purpose", transaction_purpose, encode = FALSE) + if(!check_user_position(user) || !purpose) return - if(purpose) - transaction_purpose = purpose + transaction_purpose = purpose if("trans_value") - var/try_num = input("Enter amount for EFTPOS transaction", "Transaction amount", transaction_amount) as num - if(!check_user_position(user)) - return - if(try_num < 0) - alert("That is not a valid amount!") - return - if(try_num > MAX_EFTPOS_CHARGE) - alert("You cannot charge more than [MAX_EFTPOS_CHARGE] per transaction!") + var/try_num = tgui_input_number(user, "Enter amount for EFTPOS transaction", "Transaction amount", transaction_amount, MAX_EFTPOS_CHARGE) + if(!check_user_position(user) || !try_num) return transaction_amount = try_num if("toggle_lock") if(transaction_locked) - var/attempt_code = input("Enter EFTPOS access code", "Reset Transaction") as num + var/attempt_code = tgui_input_number(user, "Enter EFTPOS access code", "Reset Transaction", max_value = 9999, min_value = 1000) if(!check_user_position(user)) return if(attempt_code == access_code) @@ -188,14 +185,14 @@ //if security level high enough, prompt for pin var/attempt_pin if(D.security_level != ACCOUNT_SECURITY_ID) - attempt_pin = input("Enter pin code", "EFTPOS transaction") as num + attempt_pin = tgui_input_number(user, "Enter pin code", "EFTPOS transaction", max_value = 9999, min_value = 1000) if(!attempt_pin || !Adjacent(user)) return //given the credentials, can the associated account be accessed right now? if(!GLOB.station_money_database.try_authenticate_login(D, attempt_pin, restricted_bypass = FALSE)) to_chat(user, "[bicon(src)]Unable to access account, insufficient access.") return - if(alert("Are you sure you want to pay $[transaction_amount] to: [linked_account.account_name] ", "Confirm transaction", "Yes", "No") != "Yes") + if(tgui_alert(user, "Are you sure you want to pay $[transaction_amount] to: [linked_account.account_name]", "Confirm transaction", list("Yes", "No")) != "Yes") return if(!Adjacent(user)) return @@ -278,10 +275,13 @@ to_chat(user, "You need to be behind [src] to use it!") return add_fingerprint(user) - ui_interact(user, state = GLOB.human_adjacent_state) + ui_interact(user) return TRUE return ..() +/obj/item/eftpos/register/ui_state(mob/user) + return GLOB.human_adjacent_state + /obj/item/eftpos/register/attack_self(mob/user) to_chat(user, "[src] has to be set down and secured to be used.") diff --git a/code/modules/events/blob/blob_mobs.dm b/code/modules/events/blob/blob_mobs.dm index 0b9fca72d0f0..afc6d5f6d81a 100644 --- a/code/modules/events/blob/blob_mobs.dm +++ b/code/modules/events/blob/blob_mobs.dm @@ -231,7 +231,7 @@ flick("blobbernaut_death", src) /mob/living/simple_animal/hostile/blob/blobbernaut/proc/blob_talk() - var/message = input(src, "Announce to the overmind", "Blob Telepathy") + var/message = tgui_input_text(usr, "Announce to the overmind", "Blob Telepathy") var/rendered var/follow_text if(message) diff --git a/code/modules/events/blob/blob_powers.dm b/code/modules/events/blob/blob_powers.dm index 0dc7c75625a7..e52ea432f828 100644 --- a/code/modules/events/blob/blob_powers.dm +++ b/code/modules/events/blob/blob_powers.dm @@ -27,7 +27,7 @@ for(var/i = 1; i <= GLOB.blob_nodes.len; i++) var/obj/structure/blob/node/B = GLOB.blob_nodes[i] nodes["Blob Node #[i] ([get_location_name(B)])"] = B - var/node_name = input(src, "Choose a node to jump to.", "Node Jump") in nodes + var/node_name = tgui_input_list(src, "Choose a node to jump to.", "Node Jump", nodes) var/obj/structure/blob/node/chosen_node = nodes[node_name] if(chosen_node) src.loc = chosen_node.loc @@ -414,7 +414,6 @@ for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs) if(blob_minion.stat == CONSCIOUS) blob_minion.say(speak_text) - return /mob/camera/blob/verb/create_storage() set category = "Blob" diff --git a/code/modules/events/meaty_ores.dm b/code/modules/events/meaty_ores.dm index 76d7fac990ee..751f8dbe3343 100644 --- a/code/modules/events/meaty_ores.dm +++ b/code/modules/events/meaty_ores.dm @@ -32,7 +32,7 @@ if(prob(80)) gibs(where) if(prob(45)) - new /obj/item/reagent_containers/food/snacks/meat(where) + new /obj/item/food/snacks/meat(where) else if(prob(10)) explosion(where, 0, pick(0,1), pick(2,3), 0) else diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 74b27ad51344..2bacfbac9646 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -17,7 +17,11 @@ /datum/event/vent_clog/tick() if(activeFor % interval == 0) - var/obj/vent = pick_n_take(vents) + var/obj/machinery/atmospherics/unary/vent_scrubber/vent = pick_n_take(vents) + + if(!vent || vent.welded) + endWhen++ + return var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","psilocybin","lube", "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index 758a36ebb1af..707eb46ca9c7 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -66,7 +66,7 @@ can_hold = list( /obj/item/fish, /obj/item/fish_eggs, - /obj/item/reagent_containers/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, ) resistance_flags = FLAMMABLE @@ -74,7 +74,7 @@ // Fish Items // ////////////////////////////////////////////// -/obj/item/reagent_containers/food/snacks/shrimp +/obj/item/food/snacks/shrimp name = "shrimp" desc = "A single raw shrimp." icon = 'icons/obj/food/seafood.dmi' @@ -82,12 +82,12 @@ filling_color = "#FF1C1C" bitesize = 1 -/obj/item/reagent_containers/food/snacks/shrimp/Initialize(mapload) +/obj/item/food/snacks/shrimp/Initialize(mapload) . = ..() desc = pick("Anyway, like I was sayin', shrimp is the fruit of the sea.", "You can barbecue it, boil it, broil it, bake it, saute it.") reagents.add_reagent("protein", 1) -/obj/item/reagent_containers/food/snacks/feederfish +/obj/item/food/snacks/feederfish name = "feeder fish" desc = "A tiny feeder fish. Sure doesn't look very filling..." icon = 'icons/obj/food/seafood.dmi' @@ -95,7 +95,7 @@ filling_color = "#FF1C1C" bitesize = 1 -/obj/item/reagent_containers/food/snacks/feederfish/Initialize(mapload) +/obj/item/food/snacks/feederfish/Initialize(mapload) . = ..() reagents.add_reagent("protein", 1) @@ -170,8 +170,8 @@ /obj/item/fish/catfish/attackby(obj/item/O, mob/user as mob) if(is_sharp(O)) to_chat(user, "You carefully clean and gut \the [src.name].") - new /obj/item/reagent_containers/food/snacks/catfishmeat(get_turf(src)) - new /obj/item/reagent_containers/food/snacks/catfishmeat(get_turf(src)) + new /obj/item/food/snacks/catfishmeat(get_turf(src)) + new /obj/item/food/snacks/catfishmeat(get_turf(src)) qdel(src) return ..() @@ -189,8 +189,8 @@ /obj/item/fish/salmon/attackby(obj/item/O, mob/user as mob) if(is_sharp(O)) to_chat(user, "You carefully clean and gut \the [src.name].") - new /obj/item/reagent_containers/food/snacks/salmonmeat(get_turf(src)) - new /obj/item/reagent_containers/food/snacks/salmonmeat(get_turf(src)) + new /obj/item/food/snacks/salmonmeat(get_turf(src)) + new /obj/item/food/snacks/salmonmeat(get_turf(src)) qdel(src) return ..() @@ -205,7 +205,7 @@ /obj/item/fish/babycarp/attackby(obj/item/O, mob/user as mob) if(is_sharp(O)) to_chat(user, "You carefully clean and gut \the [src.name].") - new /obj/item/reagent_containers/food/snacks/carpmeat(get_turf(src)) //just one fillet; this is a baby, afterall. + new /obj/item/food/snacks/carpmeat(get_turf(src)) //just one fillet; this is a baby, afterall. qdel(src) return ..() diff --git a/code/modules/fish/fish_types.dm b/code/modules/fish/fish_types.dm index f7c2e6659cc2..f90cda4efc90 100644 --- a/code/modules/fish/fish_types.dm +++ b/code/modules/fish/fish_types.dm @@ -52,13 +52,13 @@ /datum/fish/shrimp fish_name = "shrimp" egg_item = /obj/item/fish_eggs/shrimp - fish_item = /obj/item/reagent_containers/food/snacks/shrimp + fish_item = /obj/item/food/snacks/shrimp crossbreeder = 0 /datum/fish/feederfish fish_name = "feeder fish" egg_item = /obj/item/fish_eggs/feederfish - fish_item = /obj/item/reagent_containers/food/snacks/feederfish + fish_item = /obj/item/food/snacks/feederfish /datum/fish/feederfish/special_interact(obj/machinery/fishtank/my_tank) if(!my_tank || !istype(my_tank)) diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 10f1065f444f..60672679bea5 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -28,8 +28,8 @@ available_recipes = list() acceptable_items = list() //These are going to be acceptable even if they aren't in a recipe - acceptable_items |= /obj/item/reagent_containers/food/snacks - acceptable_items |= /obj/item/reagent_containers/food/drinks/cans + acceptable_items |= /obj/item/food/snacks + acceptable_items |= /obj/item/reagent_containers/drinks/cans //the rest is based on what is used in recipes so we don't have people destroying the nuke disc for(var/type in subtypesof(/datum/bottler_recipe)) var/datum/bottler_recipe/recipe = new type @@ -45,8 +45,8 @@ to_chat(user, "[O] is stuck to your hand, you can't seem to put it down!") return 0 if(is_type_in_list(O,acceptable_items)) - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = O + if(istype(O, /obj/item/food/snacks)) + var/obj/item/food/snacks/S = O user.unEquip(S) if(S.reagents && !S.reagents.total_volume) //This prevents us from using empty foods, should one occur due to some sort of error to_chat(user, "[S] is gone, oh no!") @@ -54,8 +54,8 @@ else insert_item(S, user) return 1 - else if(istype(O, /obj/item/reagent_containers/food/drinks/cans)) - var/obj/item/reagent_containers/food/drinks/cans/C = O + else if(istype(O, /obj/item/reagent_containers/drinks/cans)) + var/obj/item/reagent_containers/drinks/cans/C = O if(C.reagents) if(C.can_opened && C.reagents.total_volume) //This prevents us from using opened cans that still have something in them to_chat(user, "Only unopened cans and bottles can be processed to ensure product integrity.") @@ -141,8 +141,8 @@ else con_type = "metal can" max_define = MAX_METAL - else if(istype(O, /obj/item/reagent_containers/food/drinks/cans)) - var/obj/item/reagent_containers/food/drinks/cans/C = O + else if(istype(O, /obj/item/reagent_containers/drinks/cans)) + var/obj/item/reagent_containers/drinks/cans/C = O if(C.is_glass) con_type = "glass bottle" max_define = MAX_GLASS @@ -215,17 +215,17 @@ /obj/machinery/bottler/proc/dispense_empty_container(container) var/con_type - var/obj/item/reagent_containers/food/drinks/cans/bottler/drink_container + var/obj/item/reagent_containers/drinks/cans/bottler/drink_container switch(container) if(1) //glass bottle con_type = "glass bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/glass_bottle if(2) //plastic bottle con_type = "plastic bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/plastic_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/plastic_bottle if(3) //metal can con_type = "metal can" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/metal_can + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/metal_can if(containers[con_type]) //empties aren't sealed, so let's open it quietly drink_container = new drink_container() @@ -240,18 +240,18 @@ visible_message("There are no ingredients to process! Please insert some first.") return //prep a container - var/obj/item/reagent_containers/food/drinks/cans/bottler/drink_container + var/obj/item/reagent_containers/drinks/cans/bottler/drink_container var/con_type switch(container) if(1) //glass bottle con_type = "glass bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/glass_bottle if(2) //plastic bottle con_type = "plastic bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/plastic_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/plastic_bottle if(3) //metal can con_type = "metal can" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/metal_can + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/metal_can if(!con_type) visible_message("Error 404: Drink Container Not Found.") diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm b/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm index 5f13f5938929..3a923c5428ad 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm @@ -22,48 +22,48 @@ There is no excuse to do this wrong now that there is an example for you. --Fals /datum/bottler_recipe/Paradise_Punch name = "Paradise Punch" description = "Tastes just how you'd think Paradise would if you could bottle it." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/grapes, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/cherries) + ingredients = list(/obj/item/food/snacks/grown/grapes, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/cherries) result = "paradise_punch" /datum/bottler_recipe/Applepocalypse name = "Apple-pocalypse" description = "If doomsday came in fruit form, it'd probably be apples." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/apple) + ingredients = list(/obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/apple) result = "apple-pocalypse" /datum/bottler_recipe/Berry_Banned name = "Berry Banned" description = "Reason for ban: Excessive Flavor." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/berries, - /obj/item/reagent_containers/food/snacks/grown/berries, - /obj/item/reagent_containers/food/snacks/grown/berries) + ingredients = list(/obj/item/food/snacks/grown/berries, + /obj/item/food/snacks/grown/berries, + /obj/item/food/snacks/grown/berries) result = "berry_banned" /datum/bottler_recipe/Berry_Banned2 name = "Berry Banned" description = "Reason for ban: Excessive Flavor." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/berries/poison, - /obj/item/reagent_containers/food/snacks/grown/berries/poison, - /obj/item/reagent_containers/food/snacks/grown/berries/poison) + ingredients = list(/obj/item/food/snacks/grown/berries/poison, + /obj/item/food/snacks/grown/berries/poison, + /obj/item/food/snacks/grown/berries/poison) result = "berry_banned2" /datum/bottler_recipe/Blackeye_Brew name = "Blackeye Brew" description = "Creamy, smooth flavor, just like the bald heads of the masses. Supposedly aged for 30 years." - ingredients = list(/obj/item/reagent_containers/food/drinks/cans/cola, - /obj/item/reagent_containers/food/snacks/grown/sugarcane, - /obj/item/reagent_containers/food/snacks/frozen/icecream) + ingredients = list(/obj/item/reagent_containers/drinks/cans/cola, + /obj/item/food/snacks/grown/sugarcane, + /obj/item/food/snacks/frozen/icecream) result = "blackeye_brew" /datum/bottler_recipe/Grape_Granade name = "Grape Granade" description = "Exploding with grape flavor and a favorite among ERT members system-wide." - ingredients = list(/obj/item/reagent_containers/food/drinks/cans/grape_juice, - /obj/item/reagent_containers/food/snacks/grown/grapes, + ingredients = list(/obj/item/reagent_containers/drinks/cans/grape_juice, + /obj/item/food/snacks/grown/grapes, /obj/item/flash) result = "grape_granade" @@ -71,6 +71,6 @@ There is no excuse to do this wrong now that there is an example for you. --Fals name = "Meteor Malt" description = "Soft drinks have been detected on collision course with your tastebuds." ingredients = list(/obj/item/stack/ore, - /obj/item/reagent_containers/food/snacks/grown/wheat, + /obj/item/food/snacks/grown/wheat, /obj/item/stack/ore) result = "meteor_malt" diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 5307f00752dc..88d923bb4458 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -4,7 +4,7 @@ //Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem //Bottles now weaken and break when smashed on people's heads. - Giacom -/obj/item/reagent_containers/food/drinks/bottle +/obj/item/reagent_containers/drinks/bottle amount_per_transfer_from_this = 10 volume = 100 throwforce = 15 @@ -12,7 +12,7 @@ var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets) var/is_glass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it -/obj/item/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = FALSE) +/obj/item/reagent_containers/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = FALSE) //Creates a shattering noise and replaces the bottle with a broken_bottle var/new_location = get_turf(loc) @@ -42,7 +42,7 @@ qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user) +/obj/item/reagent_containers/drinks/bottle/attack(mob/living/target, mob/living/user) if(!target) return @@ -119,18 +119,18 @@ //Finally, smash the bottle. This kills (qdel) the bottle. smash(target, user) -/obj/item/reagent_containers/food/drinks/bottle/proc/SplashReagents(mob/M) +/obj/item/reagent_containers/drinks/bottle/proc/SplashReagents(mob/M) if(reagents && reagents.total_volume) M.visible_message("The contents of \the [src] splashes all over [M]!") reagents.reaction(M, REAGENT_TOUCH) reagents.clear_reagents() -/obj/item/reagent_containers/food/drinks/bottle/throw_impact(atom/target,mob/thrower) +/obj/item/reagent_containers/drinks/bottle/throw_impact(atom/target,mob/thrower) ..() SplashReagents(target) smash(target, thrower, ranged = TRUE) -/obj/item/reagent_containers/food/drinks/bottle/decompile_act(obj/item/matter_decompiler/C, mob/user) +/obj/item/reagent_containers/drinks/bottle/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!reagents.total_volume) C.stored_comms["glass"] += 3 qdel(src) @@ -159,119 +159,119 @@ qdel(src) return TRUE -/obj/item/reagent_containers/food/drinks/bottle/gin +/obj/item/reagent_containers/drinks/bottle/gin name = "Griffeater Gin" desc = "A bottle of high quality gin, produced in the New London Space Station." icon_state = "ginbottle" list_reagents = list("gin" = 100) -/obj/item/reagent_containers/food/drinks/bottle/whiskey +/obj/item/reagent_containers/drinks/bottle/whiskey name = "Uncle Git's Special Reserve" desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." icon_state = "whiskeybottle" list_reagents = list("whiskey" = 100) -/obj/item/reagent_containers/food/drinks/bottle/vodka +/obj/item/reagent_containers/drinks/bottle/vodka name = "Tunguska Triple Distilled" desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide." icon_state = "vodkabottle" list_reagents = list("vodka" = 100) -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka +/obj/item/reagent_containers/drinks/bottle/vodka/badminka name = "Badminka Vodka" desc = "The label's written in Cyrillic. All you can make out is the name and a word that looks vaguely like 'Vodka'." icon_state = "badminka" list_reagents = list("vodka" = 100) -/obj/item/reagent_containers/food/drinks/bottle/tequila +/obj/item/reagent_containers/drinks/bottle/tequila name = "Caccavo Guaranteed Quality Tequila" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" icon_state = "tequilabottle" list_reagents = list("tequila" = 100) -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing +/obj/item/reagent_containers/drinks/bottle/bottleofnothing name = "Bottle of Nothing" desc = "A bottle filled with nothing." icon_state = "bottleofnothing" list_reagents = list("nothing" = 100) -/obj/item/reagent_containers/food/drinks/bottle/bottleofbanana +/obj/item/reagent_containers/drinks/bottle/bottleofbanana name = "Jolly Jug" desc = "A jug filled with banana juice." icon_state = "bottleofjolly" list_reagents = list("banana" = 100) -/obj/item/reagent_containers/food/drinks/bottle/patron +/obj/item/reagent_containers/drinks/bottle/patron name = "Wrapp Artiste Patron" desc = "Silver laced tequila, served in space night clubs across the galaxy." icon_state = "patronbottle" list_reagents = list("patron" = 100) -/obj/item/reagent_containers/food/drinks/bottle/rum +/obj/item/reagent_containers/drinks/bottle/rum name = "Captain Pete's Cuban Spiced Rum" desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." icon_state = "rumbottle" list_reagents = list("rum" = 100) -/obj/item/reagent_containers/food/drinks/bottle/holywater +/obj/item/reagent_containers/drinks/bottle/holywater name = "flask of holy water" desc = "A flask of the chaplain's holy water." icon_state = "holyflask" list_reagents = list("holywater" = 100) -/obj/item/reagent_containers/food/drinks/bottle/holywater/hell +/obj/item/reagent_containers/drinks/bottle/holywater/hell desc = "A flask of holy water...it's been sitting in the Necropolis a while though." list_reagents = list("hell_water" = 100) -/obj/item/reagent_containers/food/drinks/bottle/vermouth +/obj/item/reagent_containers/drinks/bottle/vermouth name = "Goldeneye Vermouth" desc = "Sweet, sweet dryness~" icon_state = "vermouthbottle" list_reagents = list("vermouth" = 100) -/obj/item/reagent_containers/food/drinks/bottle/kahlua +/obj/item/reagent_containers/drinks/bottle/kahlua name = "Robert Robust's Coffee Liqueur" desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK." icon_state = "kahluabottle" list_reagents = list("kahlua" = 100) -/obj/item/reagent_containers/food/drinks/bottle/goldschlager +/obj/item/reagent_containers/drinks/bottle/goldschlager name = "College Girl Goldschlager" desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." icon_state = "goldschlagerbottle" list_reagents = list("goldschlager" = 100) -/obj/item/reagent_containers/food/drinks/bottle/cognac +/obj/item/reagent_containers/drinks/bottle/cognac name = "Chateau De Baton Premium Cognac" desc = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time." icon_state = "cognacbottle" list_reagents = list("cognac" = 100) -/obj/item/reagent_containers/food/drinks/bottle/wine +/obj/item/reagent_containers/drinks/bottle/wine name = "Doublebeard Bearded Special Wine" desc = "A faint aura of unease and asspainery surrounds the bottle." icon_state = "winebottle" list_reagents = list("wine" = 100) -/obj/item/reagent_containers/food/drinks/bottle/absinthe +/obj/item/reagent_containers/drinks/bottle/absinthe name = "Yellow Marquee Absinthe" desc = "A strong alcoholic drink brewed and distributed by Yellow Marquee." icon_state = "absinthebottle" list_reagents = list("absinthe" = 100) -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium +/obj/item/reagent_containers/drinks/bottle/absinthe/premium name = "Gwyn's Premium Absinthe" desc = "A potent alcoholic beverage, almost makes you forget the ash in your lungs." icon_state = "absinthepremium" -/obj/item/reagent_containers/food/drinks/bottle/hcider +/obj/item/reagent_containers/drinks/bottle/hcider name = "Jian Hard Cider" desc = "Apple juice for adults." icon_state = "hcider" volume = 50 list_reagents = list("suicider" = 50) -/obj/item/reagent_containers/food/drinks/bottle/fernet +/obj/item/reagent_containers/drinks/bottle/fernet name = "Fernet Bronca" desc = "A bottle of pure Fernet Bronca, produced in Cordoba Space Station" icon_state = "fernetbottle" @@ -279,7 +279,7 @@ //////////////////////////JUICES AND STUFF /////////////////////// -/obj/item/reagent_containers/food/drinks/bottle/orangejuice +/obj/item/reagent_containers/drinks/bottle/orangejuice name = "orange juice" desc = "Full of vitamins and deliciousness!" icon_state = "orangejuice" @@ -288,7 +288,7 @@ is_glass = FALSE list_reagents = list("orangejuice" = 100) -/obj/item/reagent_containers/food/drinks/bottle/cream +/obj/item/reagent_containers/drinks/bottle/cream name = "milk cream" desc = "It's cream. Made from milk. What else did you think you'd find in there?" icon_state = "cream" @@ -297,7 +297,7 @@ is_glass = FALSE list_reagents = list("cream" = 100) -/obj/item/reagent_containers/food/drinks/bottle/tomatojuice +/obj/item/reagent_containers/drinks/bottle/tomatojuice name = "tomato juice" desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." icon_state = "tomatojuice" @@ -306,7 +306,7 @@ is_glass = FALSE list_reagents = list("tomatojuice" = 100) -/obj/item/reagent_containers/food/drinks/bottle/limejuice +/obj/item/reagent_containers/drinks/bottle/limejuice name = "lime juice" desc = "Sweet-sour goodness." icon_state = "limejuice" @@ -315,7 +315,7 @@ is_glass = FALSE list_reagents = list("limejuice" = 100) -/obj/item/reagent_containers/food/drinks/bottle/milk +/obj/item/reagent_containers/drinks/bottle/milk name = "milk" desc = "Soothing milk." icon_state = "milk" @@ -325,7 +325,7 @@ list_reagents = list("milk" = 100) ////////////////////////// MOLOTOV /////////////////////// -/obj/item/reagent_containers/food/drinks/bottle/molotov +/obj/item/reagent_containers/drinks/bottle/molotov name = "molotov cocktail" desc = "A throwing weapon used to ignite things, typically filled with an accelerant. Recommended highly by rioters and revolutionaries. Light and toss." icon_state = "vodkabottle" @@ -334,32 +334,32 @@ /datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust) var/active = FALSE -/obj/item/reagent_containers/food/drinks/bottle/molotov/update_desc() +/obj/item/reagent_containers/drinks/bottle/molotov/update_desc() . = ..() desc = initial(desc) if(!is_glass) 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/B = locate() in contents +/obj/item/reagent_containers/drinks/bottle/molotov/update_icon_state() + var/obj/item/reagent_containers/drinks/bottle/B = locate() in contents if(B) icon_state = B.icon_state -/obj/item/reagent_containers/food/drinks/bottle/molotov/update_overlays() +/obj/item/reagent_containers/drinks/bottle/molotov/update_overlays() . = ..() if(active) . += GLOB.fire_overlay -/obj/item/reagent_containers/food/drinks/bottle/molotov/CheckParts(list/parts_list) +/obj/item/reagent_containers/drinks/bottle/molotov/CheckParts(list/parts_list) ..() - var/obj/item/reagent_containers/food/drinks/bottle/B = locate() in contents + var/obj/item/reagent_containers/drinks/bottle/B = locate() in contents if(B) B.reagents.copy_to(src, 100) if(!B.is_glass) is_glass = FALSE update_appearance(UPDATE_DESC|UPDATE_ICON) -/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower) +/obj/item/reagent_containers/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower) var/firestarter = FALSE for(var/datum/reagent/R in reagents.reagent_list) for(var/A in accelerants) @@ -371,7 +371,7 @@ target.fire_act() new /obj/effect/hotspot(get_turf(target)) -/obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) if(I.get_heat() && !active) active = TRUE var/turf/bombturf = get_turf(src) @@ -395,7 +395,7 @@ A.fire_act() qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/molotov/attack_self(mob/user) +/obj/item/reagent_containers/drinks/bottle/molotov/attack_self(mob/user) if(active) if(!is_glass) to_chat(user, "The flame's spread too far on it!") diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index f3125e60df1c..c98487ba69c8 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/drinks/cans +/obj/item/reagent_containers/drinks/cans container_type = NONE var/can_opened = FALSE var/is_glass = FALSE @@ -8,14 +8,14 @@ var/can_burst = FALSE var/burst_chance = 0 -/obj/item/reagent_containers/food/drinks/cans/examine(mob/user) +/obj/item/reagent_containers/drinks/cans/examine(mob/user) . = ..() if(can_opened) . += "It has been opened." else . += "Ctrl-click to shake it up!" -/obj/item/reagent_containers/food/drinks/cans/attack_self(mob/user) +/obj/item/reagent_containers/drinks/cans/attack_self(mob/user) if(can_opened) return ..() if(times_shaken) @@ -27,7 +27,7 @@ to_chat(user, "You open the drink with an audible pop!") return ..() -/obj/item/reagent_containers/food/drinks/cans/proc/crush(mob/user) +/obj/item/reagent_containers/drinks/cans/proc/crush(mob/user) var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(user.loc) crushed_can.icon_state = icon_state //inherit material vars for recycling purposes @@ -41,7 +41,7 @@ qdel(src) return crushed_can -/obj/item/reagent_containers/food/drinks/cans/CtrlClick(mob/user) +/obj/item/reagent_containers/drinks/cans/CtrlClick(mob/user) var/mob/living/carbon/human/H if(!can_shake || !ishuman(user)) return ..() @@ -67,7 +67,7 @@ else return ..() -/obj/item/reagent_containers/food/drinks/cans/attack(mob/M, mob/user, proximity) +/obj/item/reagent_containers/drinks/cans/attack(mob/M, mob/user, proximity) if(!can_opened) to_chat(user, "You need to open the drink!") return @@ -77,7 +77,7 @@ return return ..() -/obj/item/reagent_containers/food/drinks/cans/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/drinks/cans/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/storage/bag/trash/cyborg)) user.visible_message("[user] crushes [src] in [user.p_their()] trash compactor.", "You crush [src] in your trash compactor.") var/obj/can = crush(user) @@ -85,7 +85,7 @@ return TRUE ..() -/obj/item/reagent_containers/food/drinks/cans/afterattack(obj/target, mob/user, proximity) +/obj/item/reagent_containers/drinks/cans/afterattack(obj/target, mob/user, proximity) if(!proximity) return if(istype(target, /obj/structure/reagent_dispensers) && !can_opened) @@ -97,14 +97,14 @@ else return ..(target, user, proximity) -/obj/item/reagent_containers/food/drinks/cans/throw_impact(atom/A) +/obj/item/reagent_containers/drinks/cans/throw_impact(atom/A) . = ..() if(times_shaken < 5) times_shaken++ else handle_bursting() -/obj/item/reagent_containers/food/drinks/cans/proc/fizzy_open(mob/user, burstopen = FALSE) +/obj/item/reagent_containers/drinks/cans/proc/fizzy_open(mob/user, burstopen = FALSE) playsound(loc, 'sound/effects/canopenfizz.ogg', rand(10, 50), 1) can_opened = TRUE container_type |= OPENCONTAINER @@ -130,7 +130,7 @@ reagents.remove_any(times_shaken / 5 * reagents.total_volume) -/obj/item/reagent_containers/food/drinks/cans/proc/handle_bursting(mob/user) +/obj/item/reagent_containers/drinks/cans/proc/handle_bursting(mob/user) if(times_shaken != 5 || can_opened) return @@ -148,10 +148,10 @@ else fizzy_open(burstopen = TRUE) -/obj/item/reagent_containers/food/drinks/cans/proc/reset_shakable() +/obj/item/reagent_containers/drinks/cans/proc/reset_shakable() can_shake = TRUE -/obj/item/reagent_containers/food/drinks/cans/proc/reset_shaken() +/obj/item/reagent_containers/drinks/cans/proc/reset_shaken() times_shaken-- if(can_burst) can_burst = FALSE @@ -159,41 +159,41 @@ if(times_shaken) addtimer(CALLBACK(src, PROC_REF(reset_shaken)), (70 - (times_shaken * 10)) SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) -/obj/item/reagent_containers/food/drinks/cans/cola +/obj/item/reagent_containers/drinks/cans/cola name = "space cola" desc = "Cola. In space." icon_state = "cola" list_reagents = list("cola" = 30) -/obj/item/reagent_containers/food/drinks/cans/beer +/obj/item/reagent_containers/drinks/cans/beer name = "space beer" desc = "Contains only water, malt and hops." icon_state = "beer" is_glass = TRUE list_reagents = list("beer" = 30) -/obj/item/reagent_containers/food/drinks/cans/adminbooze +/obj/item/reagent_containers/drinks/cans/adminbooze name = "admin booze" desc = "Bottled Griffon tears. Drink with caution." icon_state = "adminbooze" is_glass = TRUE list_reagents = list("adminordrazine" = 5, "capsaicin" = 5, "methamphetamine"= 20, "thirteenloko" = 20) -/obj/item/reagent_containers/food/drinks/cans/madminmalt +/obj/item/reagent_containers/drinks/cans/madminmalt name = "madmin malt" desc = "Bottled essence of angry admins. Drink with EXTREME caution." icon_state = "madminmalt" is_glass = TRUE list_reagents = list("hell_water" = 20, "neurotoxin" = 15, "thirteenloko" = 15) -/obj/item/reagent_containers/food/drinks/cans/badminbrew +/obj/item/reagent_containers/drinks/cans/badminbrew name = "badmin brew" desc = "Bottled trickery and terrible admin work. Probably shouldn't drink this one at all." icon_state = "badminbrew" is_glass = TRUE list_reagents = list("mutagen" = 25, "charcoal" = 10, "thirteenloko" = 15) -/obj/item/reagent_containers/food/drinks/cans/ale +/obj/item/reagent_containers/drinks/cans/ale name = "Magm-Ale" desc = "A true dorf's drink of choice." icon_state = "alebottle" @@ -201,82 +201,82 @@ is_glass = TRUE list_reagents = list("ale" = 30) -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind +/obj/item/reagent_containers/drinks/cans/space_mountain_wind name = "Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" list_reagents = list("spacemountainwind" = 30) -/obj/item/reagent_containers/food/drinks/cans/thirteenloko +/obj/item/reagent_containers/drinks/cans/thirteenloko name = "Thirteen Loko" desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly." icon_state = "thirteen_loko" list_reagents = list("thirteenloko" = 25, "psilocybin" = 5) -/obj/item/reagent_containers/food/drinks/cans/dr_gibb +/obj/item/reagent_containers/drinks/cans/dr_gibb name = "Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" list_reagents = list("dr_gibb" = 30) -/obj/item/reagent_containers/food/drinks/cans/starkist +/obj/item/reagent_containers/drinks/cans/starkist name = "Star-kist" desc = "The taste of a star in liquid form. And, a bit of tuna...?" icon_state = "starkist" list_reagents = list("brownstar" = 30) -/obj/item/reagent_containers/food/drinks/cans/space_up +/obj/item/reagent_containers/drinks/cans/space_up name = "Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" list_reagents = list("space_up" = 30) -/obj/item/reagent_containers/food/drinks/cans/lemon_lime +/obj/item/reagent_containers/drinks/cans/lemon_lime name = "Lemon-Lime" desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" list_reagents = list("lemon_lime" = 30) -/obj/item/reagent_containers/food/drinks/cans/iced_tea +/obj/item/reagent_containers/drinks/cans/iced_tea name = "Vrisk Serket Iced Tea" desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?" icon_state = "ice_tea_can" list_reagents = list("icetea" = 30) -/obj/item/reagent_containers/food/drinks/cans/grape_juice +/obj/item/reagent_containers/drinks/cans/grape_juice name = "Grapel Juice" desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" icon_state = "purple_can" list_reagents = list("grapejuice" = 30) -/obj/item/reagent_containers/food/drinks/cans/tonic +/obj/item/reagent_containers/drinks/cans/tonic name = "T-Borg's Tonic Water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" list_reagents = list("tonic" = 50) -/obj/item/reagent_containers/food/drinks/cans/sodawater +/obj/item/reagent_containers/drinks/cans/sodawater name = "soda water" desc = "A can of soda water. Still water's more refreshing cousin." icon_state = "sodawater" list_reagents = list("sodawater" = 50) -/obj/item/reagent_containers/food/drinks/cans/synthanol +/obj/item/reagent_containers/drinks/cans/synthanol name = "Beep's Classic Synthanol" desc = "A can of IPC booze, however that works." icon_state = "synthanolcan" list_reagents = list("synthanol" = 50) -/obj/item/reagent_containers/food/drinks/cans/bottler +/obj/item/reagent_containers/drinks/cans/bottler name = "generic beverage container" 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() +/obj/item/reagent_containers/drinks/cans/bottler/on_reagent_change() update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/cans/bottler/update_overlays() +/obj/item/reagent_containers/drinks/cans/bottler/update_overlays() . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") @@ -298,19 +298,19 @@ filling.icon += mix_color_from_reagents(reagents.reagent_list) . += filling -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle name = "glass bottle" desc = "A glass bottle suitable for beverages." icon_state = "glass_bottle" is_glass = TRUE -/obj/item/reagent_containers/food/drinks/cans/bottler/plastic_bottle +/obj/item/reagent_containers/drinks/cans/bottler/plastic_bottle name = "plastic bottle" desc = "A plastic bottle suitable for beverages." icon_state = "plastic_bottle" is_plastic = TRUE -/obj/item/reagent_containers/food/drinks/cans/bottler/metal_can +/obj/item/reagent_containers/drinks/cans/bottler/metal_can name = "metal can" desc = "A metal can suitable for beverages." icon_state = "metal_can" diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 5ba474cf76e5..35f67923976e 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -1,6 +1,6 @@ -/obj/item/reagent_containers/food/drinks/drinkingglass +/obj/item/reagent_containers/drinks/drinkingglass name = "glass" desc = "Your standard drinking glass." icon_state = "glass_empty" @@ -15,9 +15,9 @@ drop_sound = 'sound/items/handling/drinkglass_drop.ogg' pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg' -/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs - var/obj/item/reagent_containers/food/snacks/egg/E = I +/obj/item/reagent_containers/drinks/drinkingglass/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/food/snacks/egg)) //breaking eggs + var/obj/item/food/snacks/egg/E = I if(reagents) if(reagents.total_volume >= reagents.maximum_volume) to_chat(user, "[src] is full.") @@ -29,16 +29,16 @@ else ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) +/obj/item/reagent_containers/drinks/drinkingglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(!reagents.total_volume) return ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/burn() +/obj/item/reagent_containers/drinks/drinkingglass/burn() reagents.clear_reagents() extinguish() -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() +/obj/item/reagent_containers/drinks/drinkingglass/on_reagent_change() overlays.Cut() if(reagents.reagent_list.len) var/datum/reagent/R = reagents.get_master_reagent() @@ -56,15 +56,15 @@ desc = "Your standard drinking glass." // for /obj/machinery/economy/vending/sovietsoda -/obj/item/reagent_containers/food/drinks/drinkingglass/soda +/obj/item/reagent_containers/drinks/drinkingglass/soda list_reagents = list("sodawater" = 50) -/obj/item/reagent_containers/food/drinks/drinkingglass/cola +/obj/item/reagent_containers/drinks/drinkingglass/cola list_reagents = list("cola" = 50) -/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss +/obj/item/reagent_containers/drinks/drinkingglass/devilskiss list_reagents = list("devilskiss" = 50) -/obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail +/obj/item/reagent_containers/drinks/drinkingglass/alliescocktail list_reagents = list("alliescocktail" = 25, "omnizine" = 25) diff --git a/code/modules/food_and_drinks/drinks/drinks/mugs.dm b/code/modules/food_and_drinks/drinks/drinks/mugs.dm index 5238d8a88742..637ed8ec646d 100644 --- a/code/modules/food_and_drinks/drinks/drinks/mugs.dm +++ b/code/modules/food_and_drinks/drinks/drinks/mugs.dm @@ -1,5 +1,5 @@ -/obj/item/reagent_containers/food/drinks/mug +/obj/item/reagent_containers/drinks/mug name = "coffee mug" desc = "A mug for sipping hot beverages out of." icon = 'icons/obj/mugs.dmi' @@ -7,7 +7,7 @@ var/novelty = FALSE var/preset = FALSE -/obj/item/reagent_containers/food/drinks/mug/novelty +/obj/item/reagent_containers/drinks/mug/novelty name = "novelty coffee mug" desc = "A fun mug for your coffee or other hot beverage!" novelty = TRUE @@ -86,7 +86,7 @@ description = "So mesmerizing!" state = "mug_rainbow" -/obj/item/reagent_containers/food/drinks/mug/Initialize(mapload) +/obj/item/reagent_containers/drinks/mug/Initialize(mapload) . = ..() if(preset) return @@ -99,73 +99,73 @@ else icon_state = pick("mug_black", "mug_white", "mug_red", "mug_blue", "mug_green", "mug_pink") -/obj/item/reagent_containers/food/drinks/mug/eng +/obj/item/reagent_containers/drinks/mug/eng name = "engineer's mug" desc = "A mug engineered to hold your beverage... IN SPACE!" icon_state = "mug_eng" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/med +/obj/item/reagent_containers/drinks/mug/med name = "doctor's mug" desc = "A mug that can hold the cure for what ails you!" icon_state = "mug_med" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/sci +/obj/item/reagent_containers/drinks/mug/sci name = "scientist's mug" desc = "Nothing fuels research like a coffee mug... or grant money!" icon_state = "mug_sci" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/sec +/obj/item/reagent_containers/drinks/mug/sec name = "officer's mug" desc = "The perfect partner for a sprinkled donut or stunbaton!" icon_state = "mug_sec" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/serv +/obj/item/reagent_containers/drinks/mug/serv name = "crewmember's mug" desc = "Serve your thirst better than you serve the rest of the crew!" icon_state = "mug_serv" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/ce +/obj/item/reagent_containers/drinks/mug/ce name = "chief engineer's mug" desc = "Broken and welded back together countless times, just like the station! Probably microwave safe." icon_state = "mug_ce" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/hos +/obj/item/reagent_containers/drinks/mug/hos name = "head of security's mug" desc = "If only your officers were as robust as this coffee's flavor!" icon_state = "mug_hos" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/rd +/obj/item/reagent_containers/drinks/mug/rd name = "research director's mug" desc = "Energy tech level: 99" icon_state = "mug_rd" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/cmo +/obj/item/reagent_containers/drinks/mug/cmo name = "chief medical officer's mug" desc = "Fill it with something to keep you awake while you try to keep the crew alive." icon_state = "mug_cmo" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/qm +/obj/item/reagent_containers/drinks/mug/qm name = "quartermaster's mug" desc = "A newly imported mug, express delivery." icon_state = "mug_qm" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/hop +/obj/item/reagent_containers/drinks/mug/hop name = "head of personnel's mug" desc = "Are the stains on the bottom coffee or ink?" icon_state = "mug_hop" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/cap +/obj/item/reagent_containers/drinks/mug/cap name = "captain's mug" desc = "An inscription on the side reads \"Best Captain 2559\"... The last time the station had a worthy captain." icon_state = "mug_cap" diff --git a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm index c181349498b1..5947abb4a527 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass +/obj/item/reagent_containers/drinks/drinkingglass/shotglass name = "shot glass" desc = "No glasses were shot in the making of this glass." icon_state = "shotglass" @@ -10,14 +10,14 @@ light_color = LIGHT_COLOR_LIGHTBLUE resistance_flags = FLAMMABLE -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace name = "bluespace shot glass" desc = "For when you need to make the Bartender's life extra hell." amount_per_transfer_from_this = 50 volume = 50 icon_state = "bluespaceshotglass" -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace/update_name() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace/update_name() . = ..() if(reagents.total_volume) name = "bluespace 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. @@ -26,12 +26,12 @@ else name = "bluespace shot glass" -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/on_reagent_change() if(!isShotFlammable() && (resistance_flags & ON_FIRE)) extinguish() update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_name() +/obj/item/reagent_containers/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. @@ -40,7 +40,7 @@ else name = "shot glass" -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_overlays() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/update_overlays() . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1") @@ -56,7 +56,7 @@ filling.icon += mix_color_from_reagents(reagents.reagent_list) . += filling -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware if(!(resistance_flags & ON_FIRE)) return user.visible_message("[user] pours [src] all over [user.p_themselves()]!", "You pour [src] all over yourself!", "You hear a 'whoompf' and a sizzle.") @@ -65,14 +65,14 @@ reagents.clear_reagents() user.IgniteMob() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/proc/isShotFlammable() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/proc/isShotFlammable() var/datum/reagent/R = reagents.get_master_reagent() if(istype(R, /datum/reagent/consumable/ethanol)) var/datum/reagent/consumable/ethanol/A = R if(A.volume >= 5 && A.alcohol_perc >= 0.35) //Only an approximation to if something's flammable but it will do return TRUE -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = FALSE) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = FALSE) if(!isShotFlammable() || (resistance_flags & ON_FIRE)) //You can't light a shot that's not flammable! return ..() @@ -80,31 +80,31 @@ visible_message("[src] begins to burn with a blue hue!") update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/extinguish(silent = FALSE) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/extinguish(silent = FALSE) ..() set_light(0) if(!silent) visible_message("The dancing flame on [src] dies out.") 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 +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/burn() //Let's override fire deleting the reagents inside the shot return -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack(mob/living/carbon/human/user) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attack(mob/living/carbon/human/user) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50) && (resistance_flags & ON_FIRE)) clumsilyDrink(user) else ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attackby(obj/item/W) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attackby(obj/item/W) ..() if(W.get_heat()) fire_act() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack_hand(mob/user, pickupfireoverride = TRUE) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attack_hand(mob/user, pickupfireoverride = TRUE) ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack_self(mob/living/carbon/human/user) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attack_self(mob/living/carbon/human/user) ..() if(!(resistance_flags & ON_FIRE)) return @@ -114,7 +114,7 @@ user.visible_message("[user] places [user.p_their()] hand over [src] to put it out!", "You use your hand to extinguish [src]!") extinguish() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) if(!ishuman(user)) return if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50) && (resistance_flags & ON_FIRE)) diff --git a/code/modules/food_and_drinks/drinks/drinks_base.dm b/code/modules/food_and_drinks/drinks/drinks_base.dm index bb7d7365c629..fc9e0a75aa26 100644 --- a/code/modules/food_and_drinks/drinks/drinks_base.dm +++ b/code/modules/food_and_drinks/drinks/drinks_base.dm @@ -1,30 +1,23 @@ //////////////////////////////////////////////////////////////////////////////// /// Drinks. //////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/drinks +/obj/item/reagent_containers/drinks name = "drink" desc = "yummy" icon = 'icons/obj/drinks.dmi' icon_state = null container_type = OPENCONTAINER - consume_sound = 'sound/items/drink.ogg' possible_transfer_amounts = list(5,10,15,20,25,30,50) visible_transfer_rate = TRUE volume = 50 resistance_flags = NONE - antable = FALSE + var/consume_sound = 'sound/items/drink.ogg' var/chugging = FALSE -/obj/item/reagent_containers/food/drinks/Initialize(mapload) - . = ..() - bitesize = amount_per_transfer_from_this - if(bitesize < 5) - bitesize = 5 - -/obj/item/reagent_containers/food/drinks/attack_self(mob/user) +/obj/item/reagent_containers/drinks/attack_self(mob/user) return -/obj/item/reagent_containers/food/drinks/attack(mob/M, mob/user, def_zone) +/obj/item/reagent_containers/drinks/attack(mob/M, mob/user, def_zone) if(!reagents || !reagents.total_volume) to_chat(user, " None of [src] left, oh no!") return FALSE @@ -35,11 +28,11 @@ if(iscarbon(M)) var/mob/living/carbon/C = M - if(C.eat(src, user)) + if(C.drink(src, user)) return TRUE return FALSE -/obj/item/reagent_containers/food/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG! +/obj/item/reagent_containers/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG! if(!iscarbon(over_object)) return var/mob/living/carbon/chugger = over_object @@ -52,7 +45,7 @@ "You hear what sounds like gulping.") chugging = TRUE while(do_after_once(chugger, 4 SECONDS, TRUE, chugger, null, "You stop chugging [src].")) - chugger.eat(src, chugger, 25) //Half of a glass, quarter of a bottle. + chugger.drink(src, chugger, 25) //Half of a glass, quarter of a bottle. if(!reagents.total_volume) //Finish in style. chugger.emote("gasp") chugger.visible_message("[chugger] [pick("finishes","downs","polishes off","slams")] the entire [src], what a [pick("savage","monster","champ","beast")]!", @@ -61,7 +54,7 @@ break chugging = FALSE -/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity) +/obj/item/reagent_containers/drinks/afterattack(obj/target, mob/user, proximity) if(!proximity) return if(chugging) @@ -96,7 +89,7 @@ return FALSE -/obj/item/reagent_containers/food/drinks/examine(mob/user) +/obj/item/reagent_containers/drinks/examine(mob/user) . = ..() if(in_range(user, src)) if(!reagents || reagents.total_volume == 0) @@ -115,7 +108,7 @@ /// Drinks. END //////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/drinks/trophy +/obj/item/reagent_containers/drinks/trophy name = "pewter cup" desc = "Everyone gets a trophy." icon_state = "pewter_cup" @@ -130,7 +123,7 @@ container_type = OPENCONTAINER resistance_flags = FIRE_PROOF -/obj/item/reagent_containers/food/drinks/trophy/gold_cup +/obj/item/reagent_containers/drinks/trophy/gold_cup name = "gold cup" desc = "You're winner!" icon_state = "golden_cup" @@ -141,7 +134,7 @@ materials = list(MAT_GOLD=1000) volume = 150 -/obj/item/reagent_containers/food/drinks/trophy/silver_cup +/obj/item/reagent_containers/drinks/trophy/silver_cup name = "silver cup" desc = "Best loser!" icon_state = "silver_cup" @@ -152,7 +145,7 @@ materials = list(MAT_SILVER=800) volume = 100 -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup +/obj/item/reagent_containers/drinks/trophy/bronze_cup name = "bronze cup" desc = "At least you ranked!" icon_state = "bronze_cup" @@ -163,7 +156,7 @@ materials = list(MAT_METAL=400) volume = 25 -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup/toolbox_win //2023 toolbox tournament 3rd place went to paradise station. +/obj/item/reagent_containers/drinks/trophy/bronze_cup/toolbox_win //2023 toolbox tournament 3rd place went to paradise station. name = "3rd place toolbox tournament 2567" desc = "Awarded to centcomms elite toolbox warriors raising money for the GBS research institute." icon_state = "reward_cup" @@ -176,39 +169,39 @@ // Formatting is the same as food. -/obj/item/reagent_containers/food/drinks/coffee +/obj/item/reagent_containers/drinks/coffee name = "Robust Coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" list_reagents = list("coffee" = 30) resistance_flags = FREEZE_PROOF -/obj/item/reagent_containers/food/drinks/ice +/obj/item/reagent_containers/drinks/ice name = "ice cup" desc = "Careful, cold ice, do not chew." icon_state = "icecup" list_reagents = list("ice" = 30) -/obj/item/reagent_containers/food/drinks/tea +/obj/item/reagent_containers/drinks/tea name = "Duke Purple tea" desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea." icon_state = "teacup" item_state = "coffee" list_reagents = list("tea" = 30) -/obj/item/reagent_containers/food/drinks/tea/Initialize(mapload) +/obj/item/reagent_containers/drinks/tea/Initialize(mapload) . = ..() if(prob(20)) reagents.add_reagent("mugwort", 3) -/obj/item/reagent_containers/food/drinks/mugwort +/obj/item/reagent_containers/drinks/mugwort name = "mugwort tea" desc = "A bitter herbal tea." icon_state = "manlydorfglass" item_state = "coffee" list_reagents = list("mugwort" = 30) -/obj/item/reagent_containers/food/drinks/h_chocolate +/obj/item/reagent_containers/drinks/h_chocolate name = "Dutch hot coco" desc = "Made in Space South America." icon_state = "hot_coco" @@ -216,7 +209,7 @@ list_reagents = list("hot_coco" = 30, "sugar" = 5) resistance_flags = FREEZE_PROOF -/obj/item/reagent_containers/food/drinks/chocolate +/obj/item/reagent_containers/drinks/chocolate name = "hot chocolate" desc = "Made in Space Switzerland." icon_state = "hot_coco" @@ -224,32 +217,32 @@ list_reagents = list("hot_coco" = 15, "chocolate" = 6, "water" = 9) resistance_flags = FREEZE_PROOF -/obj/item/reagent_containers/food/drinks/weightloss +/obj/item/reagent_containers/drinks/weightloss name = "weight-loss shake" desc = "A shake designed to cause weight loss, now in a berry-flavored formulation. The package proudly proclaims that it is 'tapeworm free.'" icon_state = "weightshake" list_reagents = list("lipolicide" = 30, "berryjuice" = 5) -/obj/item/reagent_containers/food/drinks/dry_ramen +/obj/item/reagent_containers/drinks/dry_ramen name = "cup ramen" desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years." icon_state = "ramen" item_state = "ramen" list_reagents = list("dry_ramen" = 30) -/obj/item/reagent_containers/food/drinks/dry_ramen/Initialize(mapload) +/obj/item/reagent_containers/drinks/dry_ramen/Initialize(mapload) . = ..() if(prob(20)) reagents.add_reagent("enzyme", 3) -/obj/item/reagent_containers/food/drinks/chicken_soup +/obj/item/reagent_containers/drinks/chicken_soup name = "canned chicken soup" desc = "A delicious and soothing can of chicken noodle soup; just like spessmom used to microwave it." icon_state = "soupcan" item_state = "soupcan" list_reagents = list("chicken_soup" = 30) -/obj/item/reagent_containers/food/drinks/sillycup +/obj/item/reagent_containers/drinks/sillycup name = "paper cup" desc = "A paper water cup." icon_state = "water_cup_e" @@ -257,7 +250,7 @@ possible_transfer_amounts = null volume = 10 -/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change() +/obj/item/reagent_containers/drinks/sillycup/on_reagent_change() if(reagents.total_volume) icon_state = "water_cup" else @@ -268,7 +261,7 @@ // itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass // icon states. -/obj/item/reagent_containers/food/drinks/shaker +/obj/item/reagent_containers/drinks/shaker name = "shaker" desc = "A metal shaker to mix drinks in." icon_state = "shaker" @@ -279,11 +272,11 @@ COOLDOWN_DECLARE(shaking_cooldown) -/obj/item/reagent_containers/food/drinks/shaker/Initialize(mapload) +/obj/item/reagent_containers/drinks/shaker/Initialize(mapload) . = ..() reagents.set_reacting(FALSE) -/obj/item/reagent_containers/food/drinks/shaker/attack_self(mob/user) +/obj/item/reagent_containers/drinks/shaker/attack_self(mob/user) if(!reagents.total_volume) to_chat(user, "You won't shake an empty shaker now, will you?") return @@ -313,54 +306,54 @@ shaking = FALSE reagents.set_reacting(FALSE) -/obj/item/reagent_containers/food/drinks/shaker/dropped(mob/user) +/obj/item/reagent_containers/drinks/shaker/dropped(mob/user) . = ..() icon_state = "shaker" -/obj/item/reagent_containers/food/drinks/flask +/obj/item/reagent_containers/drinks/flask name = "flask" desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go." icon_state = "flask" materials = list(MAT_METAL=250) volume = 60 -/obj/item/reagent_containers/food/drinks/flask/barflask +/obj/item/reagent_containers/drinks/flask/barflask name = "flask" desc = "For those who can't be bothered to hang out at the bar to drink." icon_state = "barflask" -/obj/item/reagent_containers/food/drinks/flask/gold +/obj/item/reagent_containers/drinks/flask/gold name = "captain's flask" desc = "A gold flask belonging to the captain." icon_state = "flask_gold" materials = list(MAT_GOLD=500) -/obj/item/reagent_containers/food/drinks/flask/detflask +/obj/item/reagent_containers/drinks/flask/detflask name = "detective's flask" desc = "The detective's only true friend." icon_state = "detflask" list_reagents = list("whiskey" = 30) -/obj/item/reagent_containers/food/drinks/flask/hand_made +/obj/item/reagent_containers/drinks/flask/hand_made name = "handmade flask" desc = "A wooden flask with a silver lid and bottom. It has a matte, dark blue paint on it with the initials \"W.H.\" etched in black." icon = 'icons/obj/custom_items.dmi' icon_state = "williamhackett" materials = list() -/obj/item/reagent_containers/food/drinks/flask/thermos +/obj/item/reagent_containers/drinks/flask/thermos name = "vintage thermos" desc = "An older thermos with a faint shine." icon_state = "thermos" volume = 50 -/obj/item/reagent_containers/food/drinks/flask/shiny +/obj/item/reagent_containers/drinks/flask/shiny name = "shiny flask" desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it." icon_state = "shinyflask" volume = 50 -/obj/item/reagent_containers/food/drinks/flask/lithium +/obj/item/reagent_containers/drinks/flask/lithium name = "lithium flask" desc = "A flask with a Lithium Atom symbol on it." icon = 'icons/obj/custom_items.dmi' @@ -368,30 +361,30 @@ volume = 50 -/obj/item/reagent_containers/food/drinks/britcup +/obj/item/reagent_containers/drinks/britcup name = "cup" desc = "A cup with the british flag emblazoned on it." icon_state = "britcup" volume = 30 -/obj/item/reagent_containers/food/drinks/bag +/obj/item/reagent_containers/drinks/bag name = "drink bag" desc = "Normally put in wine boxes, or down pants at stadium events." icon_state = "goonbag" volume = 70 -/obj/item/reagent_containers/food/drinks/bag/goonbag +/obj/item/reagent_containers/drinks/bag/goonbag name = "goon from a Blue Toolbox special edition" desc = "Wine from the land down under, where the dingos roam and the roos do wander." icon_state = "goonbag" list_reagents = list("wine" = 70) -/obj/item/reagent_containers/food/drinks/oilcan +/obj/item/reagent_containers/drinks/oilcan name = "oil can" desc = "Contains oil intended for use on cyborgs, robots, and other synthetics." icon = 'icons/goonstation/objects/oil.dmi' icon_state = "oilcan" volume = 100 -/obj/item/reagent_containers/food/drinks/oilcan/full +/obj/item/reagent_containers/drinks/oilcan/full list_reagents = list("oil" = 100) diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 69128c5d568b..01c99264ebf0 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -5,7 +5,7 @@ // to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code. //Food items that aren't eaten normally and leave an empty container behind. -/obj/item/reagent_containers/food/condiment +/obj/item/reagent_containers/condiment name = "condiment container" desc = "Just your average condiment container." icon = 'icons/obj/food/containers.dmi' @@ -38,10 +38,10 @@ "rice" = list("rice", "rice sack", "A big bag of rice. Good for cooking!")) var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters. -/obj/item/reagent_containers/food/condiment/attack_self(mob/user) +/obj/item/reagent_containers/condiment/attack_self(mob/user) return -/obj/item/reagent_containers/food/condiment/attack(mob/M, mob/user, def_zone) +/obj/item/reagent_containers/condiment/attack(mob/M, mob/user, def_zone) if(!reagents || !reagents.total_volume) to_chat(user, "None of [src] left, oh no!") @@ -68,7 +68,7 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) return 1 -/obj/item/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity) +/obj/item/reagent_containers/condiment/afterattack(obj/target, mob/user , proximity) if(!proximity) return if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. @@ -85,7 +85,7 @@ to_chat(user, "You fill [src] with [trans] units of the contents of [target].") //Something like a glass or a food item. Player probably wants to transfer TO it. - else if(target.is_drainable() || istype(target, /obj/item/reagent_containers/food/snacks)) + else if(target.is_drainable() || istype(target, /obj/item/food/snacks)) if(!reagents.total_volume) to_chat(user, "[src] is empty!") return @@ -95,7 +95,7 @@ var/trans = reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, "You transfer [trans] units of the condiment to [target].") -/obj/item/reagent_containers/food/condiment/on_reagent_change() +/obj/item/reagent_containers/condiment/on_reagent_change() if(!possible_states.len) return if(reagents.reagent_list.len > 0) @@ -118,16 +118,16 @@ name = "condiment bottle" desc = "An empty condiment bottle." -/obj/item/reagent_containers/food/condiment/enzyme +/obj/item/reagent_containers/condiment/enzyme name = "universal enzyme" desc = "Used in cooking various dishes." icon_state = "enzyme" list_reagents = list("enzyme" = 50) -/obj/item/reagent_containers/food/condiment/enzyme/cyborg_recharge(coeff, emagged) +/obj/item/reagent_containers/condiment/enzyme/cyborg_recharge(coeff, emagged) reagents.check_and_add("enzyme", volume, 2 * coeff) // Only recharge if the current amount of enzyme is under `volume`. -/obj/item/reagent_containers/food/condiment/sugar +/obj/item/reagent_containers/condiment/sugar name = "sugar sack" desc = "Tasty spacey sugar!" icon_state = "sugar" @@ -135,7 +135,7 @@ list_reagents = list("sugar" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then +/obj/item/reagent_containers/condiment/saltshaker //Seperate from above since it's a small shaker rather then name = "salt shaker" // a large one. desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" @@ -145,7 +145,7 @@ list_reagents = list("sodiumchloride" = 20) possible_states = list() -/obj/item/reagent_containers/food/condiment/saltshaker/suicide_act(mob/user) +/obj/item/reagent_containers/condiment/saltshaker/suicide_act(mob/user) user.visible_message("[user] begins to swap forms with the salt shaker! It looks like [user.p_theyre()] trying to commit suicide.") var/newname = "[name]" name = "[user.name]" @@ -154,7 +154,7 @@ desc = "Salt. From dead crew, presumably." return BRUTELOSS -/obj/item/reagent_containers/food/condiment/peppermill +/obj/item/reagent_containers/condiment/peppermill name = "pepper mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" @@ -164,7 +164,7 @@ list_reagents = list("blackpepper" = 20) possible_states = list() -/obj/item/reagent_containers/food/condiment/milk +/obj/item/reagent_containers/condiment/milk name = "space milk" desc = "It's milk. White and nutritious goodness!" icon_state = "milk" @@ -172,7 +172,7 @@ list_reagents = list("milk" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/flour +/obj/item/reagent_containers/condiment/flour name = "flour sack" desc = "A big bag of flour. Good for baking!" icon_state = "flour" @@ -180,14 +180,14 @@ list_reagents = list("flour" = 30) possible_states = list() -/obj/item/reagent_containers/food/condiment/bbqsauce +/obj/item/reagent_containers/condiment/bbqsauce name = "BBQ sauce" desc = "Sweet, smoky, savory, and gets everywhere. Perfect for grilling." icon_state = "bbqsauce" list_reagents = list("bbqsauce" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/soymilk +/obj/item/reagent_containers/condiment/soymilk name = "soy milk" desc = "It's soy milk. White and nutritious goodness!" icon_state = "soymilk" @@ -195,7 +195,7 @@ list_reagents = list("soymilk" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/rice +/obj/item/reagent_containers/condiment/rice name = "rice sack" desc = "A big bag of rice. Good for cooking!" icon_state = "rice" @@ -203,83 +203,83 @@ list_reagents = list("rice" = 30) possible_states = list() -/obj/item/reagent_containers/food/condiment/soysauce +/obj/item/reagent_containers/condiment/soysauce name = "soy sauce" desc = "A salty soy-based flavoring." icon_state = "soysauce" list_reagents = list("soysauce" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/syndisauce +/obj/item/reagent_containers/condiment/syndisauce name = "\improper Chef Excellence's Special Sauce" desc = "A potent sauce extracted from the potent amanita mushrooms. Death never tasted quite so delicious." list_reagents = list("amanitin" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/mayonnaise +/obj/item/reagent_containers/condiment/mayonnaise name = "mayonnaise" desc = "An oily condiment made from egg yolks." icon_state = "mayonnaise" list_reagents = list("mayonnaise" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/cherryjelly +/obj/item/reagent_containers/condiment/cherryjelly name = "cherry jelly" desc = "A sweet jelly made out of red cherries." icon_state = "cherryjelly" list_reagents = list("cherryjelly" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/peanutbutter +/obj/item/reagent_containers/condiment/peanutbutter name = "peanut butter" desc = "A smooth, nutty spread. Perfect for sandwiches." icon_state = "peanutbutter" list_reagents = list("peanutbutter" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/honey +/obj/item/reagent_containers/condiment/honey name = "honey" desc = "A sweet substance produced by bees." icon_state = "honey" list_reagents = list("honey" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/oliveoil +/obj/item/reagent_containers/condiment/oliveoil name = "olive oil" desc = "A high quality oil derived from olives." icon_state = "oliveoil" list_reagents = list("oliveoil" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/frostoil +/obj/item/reagent_containers/condiment/frostoil name = "cold sauce" desc = "A special oil that noticably chills the body. Extraced from Icepeppers." icon_state = "coldsauce" list_reagents = list("frostoil" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/capsaicin +/obj/item/reagent_containers/condiment/capsaicin name = "hot sauce" desc = "You can almost TASTE the stomach ulcers now!" icon_state = "hotsauce" list_reagents = list("capsaicin" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/wasabi +/obj/item/reagent_containers/condiment/wasabi name = "wasabi" desc= "A pungent paste commonly served in tiny amounts with sushi. Spicy!" icon_state = "wasabibottle" list_reagents = list("wasabi" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/vinegar +/obj/item/reagent_containers/condiment/vinegar name = "vinegar" desc = "Useful for pickling, or putting on chips." icon_state = "vinegar" list_reagents = list("vinegar" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/ketchup +/obj/item/reagent_containers/condiment/ketchup name = "ketchup" desc = "You feel more American already." icon_state = "ketchup" @@ -288,7 +288,7 @@ //Food packs. To easily apply deadly toxi... delicious sauces to your food! -/obj/item/reagent_containers/food/condiment/pack +/obj/item/reagent_containers/condiment/pack name = "condiment pack" desc = "A small plastic pack with condiments to put on your food." icon_state = "condi_empty" @@ -306,14 +306,14 @@ "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"), "vinegar" =list("condi_mixed", "vinegar", "Perfect for chips, if you're feeling Space British.")) -/obj/item/reagent_containers/food/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. +/obj/item/reagent_containers/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. return -/obj/item/reagent_containers/food/condiment/pack/afterattack(obj/target, mob/user , proximity) +/obj/item/reagent_containers/condiment/pack/afterattack(obj/target, mob/user , proximity) if(!proximity) return //You can tear the bag open above food to put the condiments on it, obviously. - if(istype(target, /obj/item/reagent_containers/food/snacks)) + if(istype(target, /obj/item/food/snacks)) if(!reagents.total_volume) to_chat(user, "You tear open [src], but there's nothing in it.") qdel(src) @@ -327,7 +327,7 @@ reagents.trans_to(target, amount_per_transfer_from_this) qdel(src) -/obj/item/reagent_containers/food/condiment/pack/on_reagent_change() +/obj/item/reagent_containers/condiment/pack/on_reagent_change() if(reagents.reagent_list.len > 0) var/main_reagent = reagents.get_master_reagent_id() if(main_reagent in possible_states) @@ -342,13 +342,13 @@ desc = "A small condiment pack. It is empty." //Ketchup -/obj/item/reagent_containers/food/condiment/pack/ketchup +/obj/item/reagent_containers/condiment/pack/ketchup name = "ketchup pack" originalname = "ketchup" list_reagents = list("ketchup" = 10) //Hot sauce -/obj/item/reagent_containers/food/condiment/pack/hotsauce +/obj/item/reagent_containers/condiment/pack/hotsauce name = "hotsauce pack" originalname = "hotsauce" list_reagents = list("capsaicin" = 10) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 4dd12564d29e..8d22dd0d9db3 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -1,40 +1,40 @@ #define MAKE_CUSTOM_FOOD(snack_to_add, user, type) \ do {\ - var/obj/item/reagent_containers/food/snacks/customizable/custom_snack = new type(get_turf(user));\ + var/obj/item/food/snacks/customizable/custom_snack = new type(get_turf(user));\ custom_snack.add_ingredient(snack_to_add, user); \ user.put_in_active_hand(custom_snack); \ qdel(src);\ } while(FALSE) -/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)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/sandwich) +/obj/item/food/snacks/breadslice/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/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)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/burger) +/obj/item/food/snacks/bun/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/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)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/pizza) +/obj/item/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/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)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/pasta) +/obj/item/food/snacks/boiledspaghetti/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/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)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/fullycustom) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/food/snacks/customizable/fullycustom) return ..() @@ -47,14 +47,14 @@ do {\ icon_state = "soup" /obj/item/trash/bowl/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks) && !(I.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user)) + if(istype(I, /obj/item/food/snacks) && !(I.flags & NODROP)) + var/obj/item/food/snacks/customizable/soup/S = new(get_turf(user)) S.attackby(I, user, params) qdel(src) else ..() -/obj/item/reagent_containers/food/snacks/customizable +/obj/item/food/snacks/customizable name = "sandwich" desc = "A sandwich! A timeless classic." icon = 'icons/obj/food/custom.dmi' @@ -74,20 +74,20 @@ do {\ var/list/ingredients = list() list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/customizable/Initialize(mapload) +/obj/item/food/snacks/customizable/Initialize(mapload) . = ..() if(top) top_image = new(icon, "[baseicon]_top") add_overlay(top_image) -/obj/item/reagent_containers/food/snacks/customizable/sandwich +/obj/item/food/snacks/customizable/sandwich name = "sandwich" desc = "A sandwich! A timeless classic." icon_state = "sandwichcustom" baseicon = "sandwichcustom" basename = "sandwich" -/obj/item/reagent_containers/food/snacks/customizable/pizza +/obj/item/food/snacks/customizable/pizza name = "personal pizza" desc = "A personalized pan pizza meant for only one person." icon_state = "personal_pizza" @@ -97,7 +97,7 @@ do {\ top = 0 tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/customizable/pasta +/obj/item/food/snacks/customizable/pasta name = "spaghetti" desc = "Noodles. With stuff. Delicious." icon_state = "pasta_bot" @@ -106,7 +106,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/cook/bread +/obj/item/food/snacks/customizable/cook/bread name = "bread" desc = "Tasty bread." icon_state = "breadcustom" @@ -116,7 +116,7 @@ do {\ top = 0 tastes = list("bread" = 10) -/obj/item/reagent_containers/food/snacks/customizable/cook/pie +/obj/item/food/snacks/customizable/cook/pie name = "pie" desc = "Tasty pie." icon_state = "piecustom" @@ -126,7 +126,7 @@ do {\ top = 0 tastes = list("pie" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/cake +/obj/item/food/snacks/customizable/cook/cake name = "cake" desc = "A popular band." icon_state = "cakecustom" @@ -136,7 +136,7 @@ do {\ top = 0 tastes = list("cake" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/jelly +/obj/item/food/snacks/customizable/cook/jelly name = "jelly" desc = "Totally jelly." icon_state = "jellycustom" @@ -145,7 +145,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/cook/donkpocket +/obj/item/food/snacks/customizable/cook/donkpocket name = "donk pocket" desc = "You wanna put a bangin-Oh nevermind." icon_state = "donkcustom" @@ -154,7 +154,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/cook/kebab +/obj/item/food/snacks/customizable/cook/kebab name = "kebab" desc = "Kebab or Kabab?" icon_state = "kababcustom" @@ -164,7 +164,7 @@ do {\ top = 0 tastes = list("meat" = 3, "metal" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/salad +/obj/item/food/snacks/customizable/cook/salad name = "salad" desc = "Very tasty." icon_state = "saladcustom" @@ -174,7 +174,7 @@ do {\ top = 0 tastes = list("leaves" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/waffles +/obj/item/food/snacks/customizable/cook/waffles name = "waffles" desc = "Made with love." icon_state = "wafflecustom" @@ -184,7 +184,7 @@ do {\ top = 0 tastes = list("waffles" = 1) -/obj/item/reagent_containers/food/snacks/customizable/candy/cookie +/obj/item/food/snacks/customizable/candy/cookie name = "cookie" desc = "COOKIE!!1!" icon_state = "cookiecustom" @@ -194,7 +194,7 @@ do {\ top = 0 tastes = list("cookie" = 1) -/obj/item/reagent_containers/food/snacks/customizable/candy/cotton +/obj/item/food/snacks/customizable/candy/cotton name = "flavored cotton candy" desc = "Who can take a sunrise, sprinkle it with dew," icon_state = "cottoncandycustom" @@ -203,7 +203,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/gummybear +/obj/item/food/snacks/customizable/candy/gummybear name = "flavored giant gummy bear" desc = "Cover it in chocolate and a miracle or two," icon_state = "gummybearcustom" @@ -212,7 +212,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/gummyworm +/obj/item/food/snacks/customizable/candy/gummyworm name = "flavored giant gummy worm" desc = "The Candy Man can 'cause he mixes it with love," icon_state = "gummywormcustom" @@ -221,7 +221,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/jellybean +/obj/item/food/snacks/customizable/candy/jellybean name = "flavored giant jelly bean" desc = "And makes the world taste good." icon_state = "jellybeancustom" @@ -230,7 +230,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/jawbreaker +/obj/item/food/snacks/customizable/candy/jawbreaker name = "flavored jawbreaker" desc = "Who can take a rainbow, Wrap it in a sigh," icon_state = "jawbreakercustom" @@ -239,7 +239,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/candycane +/obj/item/food/snacks/customizable/candy/candycane name = "flavored candy cane" desc = "Soak it in the sun and make strawberry-lemon pie," icon_state = "candycanecustom" @@ -248,7 +248,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/gum +/obj/item/food/snacks/customizable/candy/gum name = "flavored gum" desc = "The Candy Man can 'cause he mixes it with love and makes the world taste good. And the world tastes good 'cause the Candy Man thinks it should..." icon_state = "gumcustom" @@ -257,7 +257,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/donut +/obj/item/food/snacks/customizable/candy/donut name = "filled donut" desc = "Donut eat this!" // kill me icon_state = "donutcustom" @@ -266,7 +266,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/bar +/obj/item/food/snacks/customizable/candy/bar name = "flavored chocolate bar" desc = "Made in a factory downtown." icon_state = "barcustom" @@ -275,7 +275,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/sucker +/obj/item/food/snacks/customizable/candy/sucker name = "flavored sucker" desc = "Suck suck suck." icon_state = "suckercustom" @@ -284,7 +284,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/cash +/obj/item/food/snacks/customizable/candy/cash name = "flavored chocolate cash" desc = "I got piles!" icon_state = "cashcustom" @@ -293,7 +293,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/coin +/obj/item/food/snacks/customizable/candy/coin name = "flavored chocolate coin" desc = "Clink, clink, clink." icon_state = "coincustom" @@ -302,7 +302,7 @@ do {\ 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. +/obj/item/food/snacks/customizable/fullycustom // In the event you fuckers find something I forgot to add a customizable food for. name = "on a plate" desc = "A unique dish." icon_state = "fullycustom" @@ -313,7 +313,7 @@ do {\ ingredient_limit = 20 fullycustom = 1 -/obj/item/reagent_containers/food/snacks/customizable/soup +/obj/item/food/snacks/customizable/soup name = "soup" desc = "A bowl with liquid and... stuff in it." icon_state = "soup" @@ -325,7 +325,7 @@ do {\ top = 0 tastes = list("soup" = 1) -/obj/item/reagent_containers/food/snacks/customizable/burger +/obj/item/food/snacks/customizable/burger name = "burger bun" desc = "A bun for a burger. Delicious." icon_state = "burgercustom" @@ -334,8 +334,8 @@ do {\ tastes = list("bun" = 4) -/obj/item/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params) - if(!istype(I, /obj/item/reagent_containers/food/snacks)) +/obj/item/food/snacks/customizable/attackby(obj/item/I, mob/user, params) + if(!istype(I, /obj/item/food/snacks)) to_chat(user, "[I] isn't exactly something that you would want to eat.") return @@ -347,14 +347,14 @@ do {\ * Arguments: * * snack - The ingredient that will be added */ -/obj/item/reagent_containers/food/snacks/customizable/proc/add_ingredient(obj/item/reagent_containers/food/snacks/snack, mob/user) +/obj/item/food/snacks/customizable/proc/add_ingredient(obj/item/food/snacks/snack, mob/user) if(length(ingredients) > ingredient_limit) to_chat(user, "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 - if(!fullycustom && istype(snack, /obj/item/reagent_containers/food/snacks/customizable)) - var/obj/item/reagent_containers/food/snacks/customizable/origin = snack + if(!fullycustom && istype(snack, /obj/item/food/snacks/customizable)) + var/obj/item/food/snacks/customizable/origin = snack if(length(ingredients) + length(origin.ingredients) > ingredient_limit) to_chat(user, "Merging [snack] and [src] together is going to make a mess.") return @@ -369,8 +369,8 @@ do {\ var/list/added_ingredients = list(snack) // Only merge when it is not fullycustom. Else it looks weird - if(!fullycustom && istype(snack, /obj/item/reagent_containers/food/snacks/customizable)) - var/obj/item/reagent_containers/food/snacks/customizable/origin = snack + if(!fullycustom && istype(snack, /obj/item/food/snacks/customizable)) + var/obj/item/food/snacks/customizable/origin = snack added_ingredients += origin.ingredients origin.ingredients.Cut() origin.name = initial(origin.name) // Reset the name for the examine text @@ -387,12 +387,12 @@ do {\ * Arguments: * * new_ingredients - The new ingredients to be added */ -/obj/item/reagent_containers/food/snacks/customizable/proc/add_ingredients(list/new_ingredients) +/obj/item/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) + for(var/obj/item/food/snacks/food as anything in new_ingredients) ingredient_num++ var/image/ingredient_image if(!fullycustom) @@ -418,20 +418,20 @@ do {\ add_overlay(top_image) -/obj/item/reagent_containers/food/snacks/customizable/Destroy() +/obj/item/food/snacks/customizable/Destroy() QDEL_LIST_CONTENTS(ingredients) qdel(top_image) return ..() -/obj/item/reagent_containers/food/snacks/customizable/examine(mob/user) +/obj/item/food/snacks/customizable/examine(mob/user) . = ..() if(LAZYLEN(ingredients)) var/whatsinside = pick(ingredients) . += " You think you can see [whatsinside] in there." -/obj/item/reagent_containers/food/snacks/customizable/proc/newname() +/obj/item/food/snacks/customizable/proc/newname() var/unsorteditems[0] var/sorteditems[0] var/unsortedtypes[0] @@ -449,8 +449,8 @@ do {\ continue - if(istype(ing, /obj/item/reagent_containers/food/snacks/customizable)) // split the ingredients into ones with basenames (sandwich, burger, etc) and ones without, keeping track of how many of each there are - var/obj/item/reagent_containers/food/snacks/customizable/gettype = ing + if(istype(ing, /obj/item/food/snacks/customizable)) // split the ingredients into ones with basenames (sandwich, burger, etc) and ones without, keeping track of how many of each there are + var/obj/item/food/snacks/customizable/gettype = ing if(unsortedtypes[gettype.basename]) unsortedtypes[gettype.basename]++ if(unsortedtypes[gettype.basename] > ct) @@ -511,7 +511,7 @@ do {\ 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) +/obj/item/food/snacks/customizable/proc/sortlist(list/unsorted, highest) var/sorted[0] for(var/i = 1, i<= highest, i++) for(var/it in unsorted) 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 3cb816deaf6b..a4ab2d626ba3 100644 --- a/code/modules/food_and_drinks/food/foods/baked_goods.dm +++ b/code/modules/food_and_drinks/food/foods/baked_goods.dm @@ -5,19 +5,19 @@ // Cakes // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/carrotcake +/obj/item/food/snacks/sliceable/carrotcake name = "carrot cake" desc = "A favorite desert of a certain wascally wabbit. Not a lie." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "carrotcake" - slice_path = /obj/item/reagent_containers/food/snacks/carrotcakeslice + slice_path = /obj/item/food/snacks/carrotcakeslice slices_num = 5 bitesize = 3 filling_color = "#FFD675" list_reagents = list("nutriment" = 20, "oculine" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) -/obj/item/reagent_containers/food/snacks/carrotcakeslice +/obj/item/food/snacks/carrotcakeslice name = "carrot cake slice" desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." icon = 'icons/obj/food/bakedgoods.dmi' @@ -27,19 +27,19 @@ tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/braincake +/obj/item/food/snacks/sliceable/braincake name = "brain cake" desc = "A squishy cake-thing." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "braincake" - slice_path = /obj/item/reagent_containers/food/snacks/braincakeslice + slice_path = /obj/item/food/snacks/braincakeslice slices_num = 5 filling_color = "#E6AEDB" bitesize = 3 list_reagents = list("protein" = 10, "nutriment" = 10, "mannitol" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) -/obj/item/reagent_containers/food/snacks/braincakeslice +/obj/item/food/snacks/braincakeslice name = "brain cake slice" desc = "Lemme tell you something about brains. THEY'RE DELICIOUS." icon = 'icons/obj/food/bakedgoods.dmi' @@ -48,19 +48,19 @@ filling_color = "#E6AEDB" tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/cheesecake +/obj/item/food/snacks/sliceable/cheesecake name = "cheese cake" desc = "DANGEROUSLY cheesy." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "cheesecake" - slice_path = /obj/item/reagent_containers/food/snacks/cheesecakeslice + slice_path = /obj/item/food/snacks/cheesecakeslice slices_num = 5 filling_color = "#FAF7AF" bitesize = 3 list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 4, "cream cheese" = 3) -/obj/item/reagent_containers/food/snacks/cheesecakeslice +/obj/item/food/snacks/cheesecakeslice name = "cheese cake slice" desc = "Slice of pure cheestisfaction." icon = 'icons/obj/food/bakedgoods.dmi' @@ -69,19 +69,19 @@ filling_color = "#FAF7AF" tastes = list("cake" = 4, "cream cheese" = 3) -/obj/item/reagent_containers/food/snacks/sliceable/plaincake +/obj/item/food/snacks/sliceable/plaincake name = "vanilla cake" desc = "A plain cake, not a lie." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "plaincake" - slice_path = /obj/item/reagent_containers/food/snacks/plaincakeslice + slice_path = /obj/item/food/snacks/plaincakeslice slices_num = 5 bitesize = 3 filling_color = "#F7EDD5" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "vanilla" = 1, "sweetness" = 2) -/obj/item/reagent_containers/food/snacks/plaincakeslice +/obj/item/food/snacks/plaincakeslice name = "vanilla cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -90,19 +90,19 @@ filling_color = "#F7EDD5" tastes = list("cake" = 5, "vanilla" = 1, "sweetness" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/orangecake +/obj/item/food/snacks/sliceable/orangecake name = "orange cake" desc = "A cake with added orange." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "orangecake" - slice_path = /obj/item/reagent_containers/food/snacks/orangecakeslice + slice_path = /obj/item/food/snacks/orangecakeslice slices_num = 5 bitesize = 3 filling_color = "#FADA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) -/obj/item/reagent_containers/food/snacks/orangecakeslice +/obj/item/food/snacks/orangecakeslice name = "orange cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -111,19 +111,19 @@ filling_color = "#FADA8E" tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/bananacake +/obj/item/food/snacks/sliceable/bananacake name = "banana cake" desc = "A cake with added bananas." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "bananacake" - slice_path = /obj/item/reagent_containers/food/snacks/bananacakeslice + slice_path = /obj/item/food/snacks/bananacakeslice slices_num = 5 bitesize = 3 filling_color = "#FADA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "banana" = 2) -/obj/item/reagent_containers/food/snacks/bananacakeslice +/obj/item/food/snacks/bananacakeslice name = "banana cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -132,19 +132,19 @@ filling_color = "#FADA8E" tastes = list("cake" = 5, "sweetness" = 2, "banana" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/limecake +/obj/item/food/snacks/sliceable/limecake name = "lime cake" desc = "A cake with added lime." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "limecake" bitesize = 3 - slice_path = /obj/item/reagent_containers/food/snacks/limecakeslice + slice_path = /obj/item/food/snacks/limecakeslice slices_num = 5 filling_color = "#CBFA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) -/obj/item/reagent_containers/food/snacks/limecakeslice +/obj/item/food/snacks/limecakeslice name = "lime cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -153,19 +153,19 @@ filling_color = "#CBFA8E" tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/lemoncake +/obj/item/food/snacks/sliceable/lemoncake name = "lemon cake" desc = "A cake with added lemon." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "lemoncake" - slice_path = /obj/item/reagent_containers/food/snacks/lemoncakeslice + slice_path = /obj/item/food/snacks/lemoncakeslice slices_num = 5 bitesize = 3 filling_color = "#FAFA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) -/obj/item/reagent_containers/food/snacks/lemoncakeslice +/obj/item/food/snacks/lemoncakeslice name = "lemon cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -174,19 +174,19 @@ filling_color = "#FAFA8E" tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/chocolatecake +/obj/item/food/snacks/sliceable/chocolatecake name = "chocolate cake" desc = "A cake with added chocolate." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "chocolatecake" - slice_path = /obj/item/reagent_containers/food/snacks/chocolatecakeslice + slice_path = /obj/item/food/snacks/chocolatecakeslice slices_num = 5 bitesize = 3 filling_color = "#805930" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) -/obj/item/reagent_containers/food/snacks/chocolatecakeslice +/obj/item/food/snacks/chocolatecakeslice name = "chocolate cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -195,19 +195,19 @@ filling_color = "#805930" tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake +/obj/item/food/snacks/sliceable/birthdaycake name = "birthday cake" desc = "Happy Birthday..." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "birthdaycake" - slice_path = /obj/item/reagent_containers/food/snacks/birthdaycakeslice + slice_path = /obj/item/food/snacks/birthdaycakeslice slices_num = 5 filling_color = "#FFD6D6" bitesize = 3 list_reagents = list("nutriment" = 20, "sprinkles" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/birthdaycakeslice +/obj/item/food/snacks/birthdaycakeslice name = "birthday cake slice" desc = "A slice of your birthday" icon = 'icons/obj/food/bakedgoods.dmi' @@ -216,19 +216,19 @@ filling_color = "#FFD6D6" tastes = list("cake" = 5, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/applecake +/obj/item/food/snacks/sliceable/applecake name = "apple cake" desc = "A cake centered with Apple." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "applecake" - slice_path = /obj/item/reagent_containers/food/snacks/applecakeslice + slice_path = /obj/item/food/snacks/applecakeslice slices_num = 5 bitesize = 3 filling_color = "#EBF5B8" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) -/obj/item/reagent_containers/food/snacks/applecakeslice +/obj/item/food/snacks/applecakeslice name = "apple cake slice" desc = "A slice of heavenly cake." icon = 'icons/obj/food/bakedgoods.dmi' @@ -242,7 +242,7 @@ // Cookies // ////////////////////// -/obj/item/reagent_containers/food/snacks/cookie +/obj/item/food/snacks/cookie name = "cookie" desc = "COOKIE!!!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -252,7 +252,7 @@ list_reagents = list("nutriment" = 1, "sugar" = 3, "hot_coco" = 5 ) tastes = list("cookie" = 1, "crunchy chocolate" = 1) -/obj/item/reagent_containers/food/snacks/fortunecookie +/obj/item/food/snacks/fortunecookie name = "fortune cookie" desc = "A true prophecy in each cookie!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -262,7 +262,7 @@ trash = /obj/item/paper/fortune tastes = list("cookie" = 1) -/obj/item/reagent_containers/food/snacks/sugarcookie +/obj/item/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." icon = 'icons/obj/food/bakedgoods.dmi' @@ -275,7 +275,7 @@ // Pies // ////////////////////// -/obj/item/reagent_containers/food/snacks/pie +/obj/item/food/snacks/pie name = "banana cream pie" desc = "One of the five essential food groups of clowns." icon = 'icons/obj/food/bakedgoods.dmi' @@ -286,13 +286,13 @@ list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) tastes = list("pie" = 1) -/obj/item/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) +/obj/item/food/snacks/pie/throw_impact(atom/hit_atom) ..() new/obj/effect/decal/cleanable/pie_smudge(loc) visible_message("[src] splats.","You hear a splat.") qdel(src) -/obj/item/reagent_containers/food/snacks/meatpie +/obj/item/food/snacks/meatpie name = "meat-pie" icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "meatpie" @@ -303,7 +303,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/tofupie +/obj/item/food/snacks/tofupie name = "tofu-pie" icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "meatpie" @@ -314,7 +314,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/amanita_pie +/obj/item/food/snacks/amanita_pie name = "amanita pie" desc = "Sweet and tasty poison pie." icon = 'icons/obj/food/bakedgoods.dmi' @@ -324,7 +324,7 @@ list_reagents = list("nutriment" = 6, "amanitin" = 3, "psilocybin" = 1, "vitamin" = 4) tastes = list("pie" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/plump_pie +/obj/item/food/snacks/plump_pie name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -334,14 +334,14 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/plump_pie/Initialize(mapload) +/obj/item/food/snacks/plump_pie/Initialize(mapload) . = ..() if(prob(10)) name = "exceptional plump pie" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" // What reagents.add_reagent("omnizine", 5) -/obj/item/reagent_containers/food/snacks/xemeatpie +/obj/item/food/snacks/xemeatpie name = "xeno-pie" icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "xenomeatpie" @@ -352,7 +352,7 @@ tastes = list("pie" = 1, "meat" = 1, "acid" = 1) -/obj/item/reagent_containers/food/snacks/applepie +/obj/item/food/snacks/applepie name = "apple pie" desc = "A pie containing sweet sweet love... or apple." icon = 'icons/obj/food/bakedgoods.dmi' @@ -363,7 +363,7 @@ tastes = list("pie" = 1, "apple" = 1) -/obj/item/reagent_containers/food/snacks/cherrypie +/obj/item/food/snacks/cherrypie name = "cherry pie" desc = "Taste so good, make a grown man cry." icon = 'icons/obj/food/bakedgoods.dmi' @@ -373,19 +373,19 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "cherries" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie +/obj/item/food/snacks/sliceable/pumpkinpie name = "pumpkin pie" desc = "A delicious treat for the autumn months." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "pumpkinpie" - slice_path = /obj/item/reagent_containers/food/snacks/pumpkinpieslice + slice_path = /obj/item/food/snacks/pumpkinpieslice slices_num = 5 bitesize = 3 filling_color = "#F5B951" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("pie" = 1, "pumpkin" = 1) -/obj/item/reagent_containers/food/snacks/pumpkinpieslice +/obj/item/food/snacks/pumpkinpieslice name = "pumpkin pie slice" desc = "A slice of pumpkin pie, with whipped cream on top. Perfection." icon = 'icons/obj/food/bakedgoods.dmi' @@ -398,7 +398,7 @@ // Donuts // ////////////////////// -/obj/item/reagent_containers/food/snacks/donut +/obj/item/food/snacks/donut name = "donut" desc = "Goes great with Robust Coffee." icon = 'icons/obj/food/bakedgoods.dmi' @@ -411,7 +411,7 @@ var/donut_sprite_type = DONUT_NORMAL tastes = list("donut" = 1) -/obj/item/reagent_containers/food/snacks/donut/Initialize(mapload) +/obj/item/food/snacks/donut/Initialize(mapload) . = ..() if(randomized_sprinkles && prob(30)) icon_state = "donut2" @@ -420,7 +420,7 @@ donut_sprite_type = DONUT_FROSTED filling_color = "#FF69B4" -/obj/item/reagent_containers/food/snacks/donut/sprinkles +/obj/item/food/snacks/donut/sprinkles name = "frosted donut" icon_state = "donut2" list_reagents = list("nutriment" = 3, "sugar" = 2, "sprinkles" = 2) @@ -428,13 +428,13 @@ donut_sprite_type = DONUT_FROSTED randomized_sprinkles = 0 -/obj/item/reagent_containers/food/snacks/donut/chaos +/obj/item/food/snacks/donut/chaos name = "chaos donut" desc = "Like life, it never quite tastes the same." bitesize = 10 tastes = list("donut" = 3, "chaos" = 1) -/obj/item/reagent_containers/food/snacks/donut/chaos/Initialize(mapload) +/obj/item/food/snacks/donut/chaos/Initialize(mapload) . = ..() extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "cocoa", "slimejelly", "banana", "berryjuice", "omnizine") reagents.add_reagent("[extra_reagent]", 3) @@ -444,14 +444,14 @@ reagents.add_reagent("sprinkles", 2) filling_color = "#FF69B4" -/obj/item/reagent_containers/food/snacks/donut/jelly +/obj/item/food/snacks/donut/jelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" extra_reagent = "berryjuice" tastes = list("jelly" = 1, "donut" = 3) -/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize(mapload) +/obj/item/food/snacks/donut/jelly/Initialize(mapload) . = ..() if(extra_reagent) reagents.add_reagent("[extra_reagent]", 3) @@ -462,13 +462,13 @@ reagents.add_reagent("sprinkles", 2) filling_color = "#FF69B4" -/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly +/obj/item/food/snacks/donut/jelly/slimejelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" extra_reagent = "slimejelly" -/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly +/obj/item/food/snacks/donut/jelly/cherryjelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" @@ -478,7 +478,7 @@ // Pancakes // ////////////////////// -/obj/item/reagent_containers/food/snacks/pancake +/obj/item/food/snacks/pancake name = "pancake" desc = "A plain pancake." icon = 'icons/obj/food/breakfast.dmi' @@ -488,7 +488,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 3) tastes = list("sweet cake" = 1) -/obj/item/reagent_containers/food/snacks/pancake/attack_tk(mob/user) +/obj/item/food/snacks/pancake/attack_tk(mob/user) if(src in user.tkgrabbed_objects) to_chat(user, "You start channeling psychic energy into [src].") visible_message("The syrup on [src] starts to boil...") @@ -503,14 +503,14 @@ return return ..() -/obj/item/reagent_containers/food/snacks/pancake/berry_pancake +/obj/item/food/snacks/pancake/berry_pancake name = "berry pancake" desc = "A pancake loaded with berries." icon_state = "berry_pancake" list_reagents = list("nutriment" = 3, "sugar" = 3, "berryjuice" = 3) tastes = list("sweet cake" = 2, "berries" = 2) -/obj/item/reagent_containers/food/snacks/pancake/choc_chip_pancake +/obj/item/food/snacks/pancake/choc_chip_pancake name = "choc-chip pancake" desc = "A pancake loaded with chocolate chips." icon_state = "choc_chip_pancake" @@ -521,7 +521,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/muffin +/obj/item/food/snacks/muffin name = "muffin" desc = "A delicious and spongy little cake." icon = 'icons/obj/food/breakfast.dmi' @@ -530,7 +530,7 @@ list_reagents = list("nutriment" = 6) tastes = list("muffin" = 1) -/obj/item/reagent_containers/food/snacks/berryclafoutis +/obj/item/food/snacks/berryclafoutis name = "berry clafoutis" desc = "No black birds, this is a good sign." icon = 'icons/obj/food/bakedgoods.dmi' @@ -541,7 +541,7 @@ tastes = list("pie" = 1, "blackberries" = 1) -/obj/item/reagent_containers/food/snacks/poppypretzel +/obj/item/food/snacks/poppypretzel name = "poppy pretzel" desc = "A large soft pretzel full of POP! It's all twisted up!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -550,7 +550,7 @@ list_reagents = list("nutriment" = 5) tastes = list("pretzel" = 1) -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit +/obj/item/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." icon = 'icons/obj/food/breakfast.dmi' @@ -559,14 +559,14 @@ list_reagents = list("nutriment" = 5) tastes = list("mushroom" = 1, "biscuit" = 1) -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize(mapload) +/obj/item/food/snacks/plumphelmetbiscuit/Initialize(mapload) . = ..() if(prob(10)) name = "exceptional plump helmet biscuit" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" // Is this a reference? reagents.add_reagent("omnizine", 5) -/obj/item/reagent_containers/food/snacks/appletart +/obj/item/food/snacks/appletart name = "golden apple streusel tart" desc = "A tasty dessert that won't make it through a metal detector." icon = 'icons/obj/food/bakedgoods.dmi' @@ -578,7 +578,7 @@ tastes = list("pie" = 1, "apple" = 1, "expensive metal" = 1) -/obj/item/reagent_containers/food/snacks/cracker +/obj/item/food/snacks/cracker name = "cracker" desc = "It's a salted cracker." icon = 'icons/obj/food/bakedgoods.dmi' @@ -588,7 +588,7 @@ list_reagents = list("nutriment" = 1) tastes = list("cracker" = 1) -/obj/item/reagent_containers/food/snacks/croissant +/obj/item/food/snacks/croissant name = "croissant" desc = "Once a pastry reserved for the bourgeois, this flaky goodness is now on your table." icon = 'icons/obj/food/bakedgoods.dmi' @@ -598,13 +598,13 @@ list_reagents = list("nutriment" = 4, "sugar" = 2) tastes = list("croissant" = 1) -/obj/item/reagent_containers/food/snacks/croissant/throwing +/obj/item/food/snacks/croissant/throwing throwforce = 20 throw_range = 9 //now with extra throwing action tastes = list("croissant" = 2, "butter" = 1, "metal" = 1) list_reagents = list("nutriment" = 4, "sugar" = 2, "iron" = 1) -/obj/item/reagent_containers/food/snacks/croissant/throwing/Initialize(mapload) +/obj/item/food/snacks/croissant/throwing/Initialize(mapload) . = ..() AddComponent(/datum/component/boomerang, throw_range, TRUE) diff --git a/code/modules/food_and_drinks/food/foods/bread.dm b/code/modules/food_and_drinks/food/foods/bread.dm index f3b30727f140..c2cfd50226b8 100644 --- a/code/modules/food_and_drinks/food/foods/bread.dm +++ b/code/modules/food_and_drinks/food/foods/bread.dm @@ -3,53 +3,53 @@ // Breads // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/meatbread +/obj/item/food/snacks/sliceable/meatbread name = "meatbread loaf" desc = "The culinary base of every self-respecting eloquen/tg/entleman." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "meatbread" - slice_path = /obj/item/reagent_containers/food/snacks/meatbreadslice + slice_path = /obj/item/food/snacks/meatbreadslice slices_num = 5 filling_color = "#FF7575" list_reagents = list("protein" = 20, "nutriment" = 10, "vitamin" = 5) tastes = list("bread" = 10, "meat" = 10) -/obj/item/reagent_containers/food/snacks/meatbreadslice +/obj/item/food/snacks/meatbreadslice name = "meatbread slice" desc = "A slice of delicious meatbread." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "meatbreadslice" filling_color = "#FF7575" -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread +/obj/item/food/snacks/sliceable/xenomeatbread name = "xenomeatbread loaf" desc = "The culinary base of every self-respecting eloquent gentleman. Extra Heretical." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "xenomeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/xenomeatbreadslice + slice_path = /obj/item/food/snacks/xenomeatbreadslice slices_num = 5 filling_color = "#8AFF75" list_reagents = list("protein" = 20, "nutriment" = 10, "vitamin" = 5) tastes = list("bread" = 10, "acid" = 10) -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice +/obj/item/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" desc = "A slice of delicious meatbread. Extra Heretical." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "xenobreadslice" filling_color = "#8AFF75" -/obj/item/reagent_containers/food/snacks/sliceable/spidermeatbread +/obj/item/food/snacks/sliceable/spidermeatbread name = "spider meat loaf" desc = "Reassuringly green meatloaf made from spider meat." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "spidermeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/spidermeatbreadslice + slice_path = /obj/item/food/snacks/spidermeatbreadslice slices_num = 5 list_reagents = list("protein" = 20, "nutriment" = 10, "toxin" = 15, "vitamin" = 5) tastes = list("bread" = 10, "cobwebs" = 5) -/obj/item/reagent_containers/food/snacks/spidermeatbreadslice +/obj/item/food/snacks/spidermeatbreadslice name = "spider meat bread slice" desc = "A slice of meatloaf made from an animal that most likely still wants you dead." icon = 'icons/obj/food/burgerbread.dmi' @@ -57,18 +57,18 @@ tastes = list("bread" = 10, "cobwebs" = 5) list_reagents = list("toxin" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/bananabread +/obj/item/food/snacks/sliceable/bananabread name = "banana-nut bread" desc = "A heavenly and filling treat." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "bananabread" - slice_path = /obj/item/reagent_containers/food/snacks/bananabreadslice + slice_path = /obj/item/food/snacks/bananabreadslice slices_num = 5 filling_color = "#EDE5AD" list_reagents = list("banana" = 20, "nutriment" = 20) tastes = list("bread" = 10, "banana" = 5) -/obj/item/reagent_containers/food/snacks/bananabreadslice +/obj/item/food/snacks/bananabreadslice name = "banana-nut bread slice" desc = "A slice of delicious banana bread." icon = 'icons/obj/food/burgerbread.dmi' @@ -76,36 +76,36 @@ filling_color = "#EDE5AD" tastes = list("bread" = 10, "banana" = 5) -/obj/item/reagent_containers/food/snacks/sliceable/tofubread +/obj/item/food/snacks/sliceable/tofubread name = "tofubread" desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "tofubread" - slice_path = /obj/item/reagent_containers/food/snacks/tofubreadslice + slice_path = /obj/item/food/snacks/tofubreadslice slices_num = 5 filling_color = "#F7FFE0" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("bread" = 10, "tofu" = 10) -/obj/item/reagent_containers/food/snacks/tofubreadslice +/obj/item/food/snacks/tofubreadslice name = "tofubread slice" desc = "A slice of delicious tofubread." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "tofubreadslice" filling_color = "#F7FFE0" -/obj/item/reagent_containers/food/snacks/sliceable/bread +/obj/item/food/snacks/sliceable/bread name = "bread" desc = "Some plain old Earthen bread." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "bread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice + slice_path = /obj/item/food/snacks/breadslice slices_num = 6 filling_color = "#FFE396" list_reagents = list("nutriment" = 10) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/breadslice +/obj/item/food/snacks/breadslice name = "bread slice" desc = "A slice of home." icon = 'icons/obj/food/burgerbread.dmi' @@ -114,18 +114,18 @@ list_reagents = list("nutriment" = 2, "bread" = 5) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread +/obj/item/food/snacks/sliceable/creamcheesebread name = "cream cheese bread" desc = "Yum yum yum!" icon = 'icons/obj/food/burgerbread.dmi' icon_state = "creamcheesebread" - slice_path = /obj/item/reagent_containers/food/snacks/creamcheesebreadslice + slice_path = /obj/item/food/snacks/creamcheesebreadslice slices_num = 5 filling_color = "#FFF896" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("bread" = 10, "cheese" = 10) -/obj/item/reagent_containers/food/snacks/creamcheesebreadslice +/obj/item/food/snacks/creamcheesebreadslice name = "cream cheese bread slice" desc = "A slice of yum!" icon = 'icons/obj/food/burgerbread.dmi' @@ -134,18 +134,18 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) tastes = list("bread" = 10, "cheese" = 10) -/obj/item/reagent_containers/food/snacks/sliceable/banarnarbread +/obj/item/food/snacks/sliceable/banarnarbread name = "banarnarbread loaf" desc = "A loaf of delicious mah'weyh pleggh at e'ntrath!" icon = 'icons/obj/food/burgerbread.dmi' icon_state = "banarnarbread" - slice_path = /obj/item/reagent_containers/food/snacks/banarnarbreadslice + slice_path = /obj/item/food/snacks/banarnarbreadslice slices_num = 5 filling_color = "#6F0000" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("heresy" = 10, "banana" = 10) -/obj/item/reagent_containers/food/snacks/banarnarbreadslice +/obj/item/food/snacks/banarnarbreadslice name = "banarnarbread slice" desc = "A slice of delicious mah'weyh pleggh at e'ntrath!" icon = 'icons/obj/food/burgerbread.dmi' @@ -159,7 +159,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/bun +/obj/item/food/snacks/bun name = "bun" desc = "The base for any self-respecting burger." icon = 'icons/obj/food/food_ingredients.dmi' @@ -168,7 +168,7 @@ tastes = list("bun" = 1) -/obj/item/reagent_containers/food/snacks/flatbread +/obj/item/food/snacks/flatbread name = "flatbread" desc = "Bland but filling." icon = 'icons/obj/food/food_ingredients.dmi' @@ -176,7 +176,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/baguette +/obj/item/food/snacks/baguette name = "baguette" desc = "Bon appetit!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -188,15 +188,15 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/baguette/combat +/obj/item/food/snacks/baguette/combat sharp = TRUE force = 20 -/obj/item/reagent_containers/food/snacks/baguette/combat/Initialize(mapload) +/obj/item/food/snacks/baguette/combat/Initialize(mapload) . = ..() AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES) -/obj/item/reagent_containers/food/snacks/twobread +/obj/item/food/snacks/twobread name = "two bread" desc = "It is very bitter and winy." icon = 'icons/obj/food/burgerbread.dmi' @@ -206,7 +206,7 @@ list_reagents = list("nutriment" = 2, "vitamin" = 2) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/toast +/obj/item/food/snacks/toast name = "toast" desc = "Yeah! Toast!" icon = 'icons/obj/food/burgerbread.dmi' @@ -216,7 +216,7 @@ list_reagents = list("nutriment" = 3) tastes = list("toast" = 1) -/obj/item/reagent_containers/food/snacks/jelliedtoast +/obj/item/food/snacks/jelliedtoast name = "jellied toast" desc = "A slice of bread covered with delicious jam." icon = 'icons/obj/food/burgerbread.dmi' @@ -225,13 +225,13 @@ bitesize = 3 tastes = list("toast" = 1, "jelly" = 1) -/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry +/obj/item/food/snacks/jelliedtoast/cherry list_reagents = list("nutriment" = 1, "cherryjelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/jelliedtoast/slime +/obj/item/food/snacks/jelliedtoast/slime list_reagents = list("nutriment" = 1, "slimejelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/rofflewaffles +/obj/item/food/snacks/rofflewaffles name = "roffle waffles" desc = "Waffles from Roffle. Co." icon = 'icons/obj/food/breakfast.dmi' @@ -242,7 +242,7 @@ list_reagents = list("nutriment" = 8, "psilocybin" = 2, "vitamin" = 2) tastes = list("waffle" = 1, "mushrooms" = 1) -/obj/item/reagent_containers/food/snacks/waffles +/obj/item/food/snacks/waffles name = "waffles" desc = "Mmm, waffles." icon = 'icons/obj/food/breakfast.dmi' diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm index fb4d3c2fc86a..fe3fe0ac48a6 100644 --- a/code/modules/food_and_drinks/food/foods/candy.dm +++ b/code/modules/food_and_drinks/food/foods/candy.dm @@ -7,7 +7,7 @@ //Candy / Candy Ingredients //Subclass so we can pass on values -/obj/item/reagent_containers/food/snacks/candy +/obj/item/food/snacks/candy name = "generic candy" desc = "It's placeholder flavored. This shouldn't be seen." icon = 'icons/obj/food/candy.dmi' @@ -18,7 +18,7 @@ // Candy Ingredients / Flavorings / Byproduct // *********************************************************** -/obj/item/reagent_containers/food/snacks/chocolatebar +/obj/item/food/snacks/chocolatebar name = "chocolate bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" @@ -26,7 +26,7 @@ list_reagents = list("nutriment" = 2, "chocolate" = 4) tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/caramel +/obj/item/food/snacks/candy/caramel name = "caramel" desc = "Chewy and dense, yet it practically melts in your mouth!" icon_state = "caramel" @@ -34,32 +34,32 @@ list_reagents = list("cream" = 2, "sugar" = 2) -/obj/item/reagent_containers/food/snacks/candy/toffee +/obj/item/food/snacks/candy/toffee name = "toffee" desc = "A hard, brittle candy with a distinctive taste." icon_state = "toffee" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/nougat +/obj/item/food/snacks/candy/nougat name = "nougat" desc = "A soft, chewy candy commonly found in candybars." icon_state = "nougat" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/taffy +/obj/item/food/snacks/candy/taffy name = "saltwater taffy" desc = "Old fashioned saltwater taffy. Chewy!" icon_state = "candy1" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/taffy/Initialize(mapload) +/obj/item/food/snacks/candy/taffy/Initialize(mapload) . = ..() icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5") -/obj/item/reagent_containers/food/snacks/candy/fudge +/obj/item/food/snacks/candy/fudge name = "fudge" desc = "Chocolate fudge, a timeless classic treat." icon_state = "fudge" @@ -67,26 +67,26 @@ bitesize = 3 list_reagents = list("cream" = 3, "chocolate" = 6) -/obj/item/reagent_containers/food/snacks/candy/fudge/peanut +/obj/item/food/snacks/candy/fudge/peanut name = "peanut fudge" desc = "Chocolate fudge, with bits of peanuts mixed in. People with nut allergies shouldn't eat this." icon_state = "fudge_peanut" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/fudge/cherry +/obj/item/food/snacks/candy/fudge/cherry name = "chocolate cherry fudge" desc = "Chocolate fudge surrounding sweet cherries. Good for tricking kids into eating some fruit." icon_state = "fudge_cherry" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream +/obj/item/food/snacks/candy/fudge/cookies_n_cream name = "cookies 'n' cream fudge" desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!" icon_state = "fudge_cookies_n_cream" filling_color = "#7D5F46" list_reagents = list("cream" = 6, "chocolate" = 6) -/obj/item/reagent_containers/food/snacks/candy/fudge/turtle +/obj/item/food/snacks/candy/fudge/turtle name = "turtle fudge" desc = "Chocolate fudge with caramel and nuts. It doesn't contain real turtles, thankfully." icon_state = "fudge_turtle" @@ -96,14 +96,14 @@ // Candy Products (Pre-existing) // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/donor +/obj/item/food/snacks/candy/donor name = "donor candy" desc = "A little treat for blood donors." trash = /obj/item/trash/candy bitesize = 5 list_reagents = list("nutriment" = 10, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/candy_corn +/obj/item/food/snacks/candy/candy_corn name = "candy corn" desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." icon_state = "candycorn" @@ -115,7 +115,7 @@ // Candy Products (plain / unflavored) // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/cotton +/obj/item/food/snacks/candy/cotton name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_plain" @@ -124,7 +124,7 @@ bitesize = 4 list_reagents = list("sugar" = 15) -/obj/item/reagent_containers/food/snacks/candy/candybar +/obj/item/food/snacks/candy/candybar name = "candy" desc = "A chocolate candybar, wrapped in a bit of foil." icon_state = "candy" @@ -137,14 +137,14 @@ tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/candycane +/obj/item/food/snacks/candy/candycane name = "candy cane" desc = "A festive mint candy cane." icon_state = "candycane" filling_color = "#F2F2F2" list_reagents = list("minttoxin" = 1, "sugar" = 5) -/obj/item/reagent_containers/food/snacks/candy/gummybear +/obj/item/food/snacks/candy/gummybear name = "gummy bear" desc = "A small edible bear. It's squishy and chewy!" icon_state = "gbear" @@ -152,7 +152,7 @@ bitesize = 3 list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/gummyworm +/obj/item/food/snacks/candy/gummyworm name = "gummy worm" desc = "An edible worm, made from gelatin." icon_state = "gworm" @@ -160,7 +160,7 @@ bitesize = 3 list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/jellybean +/obj/item/food/snacks/candy/jellybean name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas." icon_state = "jbean" @@ -168,7 +168,7 @@ bitesize = 3 list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/jawbreaker +/obj/item/food/snacks/candy/jawbreaker name = "jawbreaker" desc = "An unbelievably hard candy. The name is fitting." icon_state = "jawbreaker" @@ -176,7 +176,7 @@ bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift. list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/cash +/obj/item/food/snacks/candy/cash name = "candy cash" desc = "Not legal tender. Tasty though." icon_state = "candy_cash" @@ -185,7 +185,7 @@ tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/coin +/obj/item/food/snacks/candy/coin name = "chocolate coin" desc = "Probably won't work in the vending machines." icon_state = "choc_coin" @@ -195,7 +195,7 @@ tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/gum +/obj/item/food/snacks/candy/gum name = "bubblegum" desc = "Chewy!" icon_state = "bubblegum" @@ -204,7 +204,7 @@ bitesize = 0.2 list_reagents = list("sugar" = 5) -/obj/item/reagent_containers/food/snacks/candy/sucker +/obj/item/food/snacks/candy/sucker name = "sucker" desc = "For being such a good sport!" icon_state = "sucker" @@ -215,56 +215,56 @@ // Gummy Bear Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/gummybear/red +/obj/item/food/snacks/candy/gummybear/red name = "gummy bear" desc = "A small edible bear. It's red!" icon_state = "gbear_red" filling_color = "#801E28" list_reagents = list("sugar" = 10, "cherryjelly" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/blue +/obj/item/food/snacks/candy/gummybear/blue name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863333" list_reagents = list("sugar" = 10, "berryjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/poison +/obj/item/food/snacks/candy/gummybear/poison name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863353" list_reagents = list("poisonberryjuice" = 12) -/obj/item/reagent_containers/food/snacks/candy/gummybear/green +/obj/item/food/snacks/candy/gummybear/green name = "gummy bear" desc = "A small edible bear. It's green!" icon_state = "gbear_green" filling_color = "#365E30" list_reagents = list("sugar" = 10, "limejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/yellow +/obj/item/food/snacks/candy/gummybear/yellow name = "gummy bear" desc = "A small edible bear. It's yellow!" icon_state = "gbear_yellow" filling_color = "#863333" list_reagents = list("sugar" = 10, "lemonjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/orange +/obj/item/food/snacks/candy/gummybear/orange name = "gummy bear" desc = "A small edible bear. It's orange!" icon_state = "gbear_orange" filling_color = "#E78108" list_reagents = list("sugar" = 10, "orangejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/purple +/obj/item/food/snacks/candy/gummybear/purple name = "gummy bear" desc = "A small edible bear. It's purple!" icon_state = "gbear_purple" filling_color = "#993399" list_reagents = list("sugar" = 10, "grapejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/wtf +/obj/item/food/snacks/candy/gummybear/wtf name = "gummy bear" desc = "A small bear. Wait... what?" icon_state = "gbear_rainbow" @@ -275,56 +275,56 @@ // Gummy Worm Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/gummyworm/red +/obj/item/food/snacks/candy/gummyworm/red name = "gummy worm" desc = "An edible worm, made from gelatin. It's red!" icon_state = "gworm_red" filling_color = "#801E28" list_reagents = list("sugar" = 10, "cherryjelly" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/blue +/obj/item/food/snacks/candy/gummyworm/blue name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863333" list_reagents = list("sugar" = 10, "berryjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/poison +/obj/item/food/snacks/candy/gummyworm/poison name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863353" list_reagents = list("poisonberryjuice" = 12) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/green +/obj/item/food/snacks/candy/gummyworm/green name = "gummy worm" desc = "An edible worm, made from gelatin. It's green!" icon_state = "gworm_green" filling_color = "#365E30" list_reagents = list("sugar" = 10, "limejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/yellow +/obj/item/food/snacks/candy/gummyworm/yellow name = "gummy worm" desc = "An edible worm, made from gelatin. It's yellow!" icon_state = "gworm_yellow" filling_color = "#863333" list_reagents = list("sugar" = 10, "lemonjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/orange +/obj/item/food/snacks/candy/gummyworm/orange name = "gummy worm" desc = "An edible worm, made from gelatin. It's orange!" icon_state = "gworm_orange" filling_color = "#E78108" list_reagents = list("sugar" = 10, "orangejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/purple +/obj/item/food/snacks/candy/gummyworm/purple name = "gummy worm" desc = "An edible worm, made from gelatin. It's purple!" icon_state = "gworm_purple" filling_color = "#993399" list_reagents = list("sugar" = 10, "grapejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf +/obj/item/food/snacks/candy/gummyworm/wtf name = "gummy worm" desc = "An edible worm. Did it just move?" icon_state = "gworm_rainbow" @@ -335,91 +335,91 @@ // Jelly Bean Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/jellybean/red +/obj/item/food/snacks/candy/jellybean/red name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's red!" icon_state = "jbean_red" filling_color = "#801E28" list_reagents = list("sugar" = 10, "cherryjelly" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/blue +/obj/item/food/snacks/candy/jellybean/blue name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863333" list_reagents = list("sugar" = 10, "berryjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/poison +/obj/item/food/snacks/candy/jellybean/poison name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863353" list_reagents = list("poisonberryjuice" = 12) -/obj/item/reagent_containers/food/snacks/candy/jellybean/green +/obj/item/food/snacks/candy/jellybean/green name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's green!" icon_state = "jbean_green" filling_color = "#365E30" list_reagents = list("sugar" = 10, "limejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/yellow +/obj/item/food/snacks/candy/jellybean/yellow name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's yellow!" icon_state = "jbean_yellow" filling_color = "#863333" list_reagents = list("sugar" = 10, "lemonjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/orange +/obj/item/food/snacks/candy/jellybean/orange name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's orange!" icon_state = "jbean_orange" filling_color = "#E78108" list_reagents = list("sugar" = 10, "orangejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/purple +/obj/item/food/snacks/candy/jellybean/purple name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's purple!" icon_state = "jbean_purple" filling_color = "#993399" list_reagents = list("sugar" = 10, "grapejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/chocolate +/obj/item/food/snacks/candy/jellybean/chocolate name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's chocolate!" icon_state = "jbean_choc" filling_color = "#302000" list_reagents = list("sugar" = 10, "chocolate" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/popcorn +/obj/item/food/snacks/candy/jellybean/popcorn name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's popcorn flavored!" icon_state = "jbean_popcorn" filling_color = "#664330" list_reagents = list("sugar" = 10, "nutriment" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/cola +/obj/item/food/snacks/candy/jellybean/cola name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's Cola flavored!" icon_state = "jbean_cola" filling_color = "#102000" list_reagents = list("sugar" = 10, "cola" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/drgibb +/obj/item/food/snacks/candy/jellybean/drgibb name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's Dr. Gibb flavored!" icon_state = "jbean_cola" filling_color = "#102000" list_reagents = list("sugar" = 10, "dr_gibb" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/coffee +/obj/item/food/snacks/candy/jellybean/coffee name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's Coffee flavored!" icon_state = "jbean_choc" filling_color = "#482000" list_reagents = list("sugar" = 10, "coffee" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/wtf +/obj/item/food/snacks/candy/jellybean/wtf name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. You aren't sure what color it is." icon_state = "jbean_rainbow" @@ -430,7 +430,7 @@ // Cotton Candy Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/cotton/red +/obj/item/food/snacks/candy/cotton/red name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_red" @@ -438,7 +438,7 @@ filling_color = "#801E28" list_reagents = list("sugar" = 15, "cherryjelly" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/blue +/obj/item/food/snacks/candy/cotton/blue name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_blue" @@ -446,7 +446,7 @@ filling_color = "#863333" list_reagents = list("sugar" = 15, "berryjuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/poison +/obj/item/food/snacks/candy/cotton/poison name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_blue" @@ -454,7 +454,7 @@ filling_color = "#863353" list_reagents = list("poisonberryjuice" = 20) -/obj/item/reagent_containers/food/snacks/candy/cotton/green +/obj/item/food/snacks/candy/cotton/green name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_green" @@ -462,7 +462,7 @@ filling_color = "#365E30" list_reagents = list("sugar" = 15, "limejuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/yellow +/obj/item/food/snacks/candy/cotton/yellow name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_yellow" @@ -470,7 +470,7 @@ filling_color = "#863333" list_reagents = list("sugar" = 15, "lemonjuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/orange +/obj/item/food/snacks/candy/cotton/orange name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_orange" @@ -478,7 +478,7 @@ filling_color = "#E78108" list_reagents = list("sugar" = 15, "orangejuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/purple +/obj/item/food/snacks/candy/cotton/purple name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_purple" @@ -486,7 +486,7 @@ filling_color = "#993399" list_reagents = list("sugar" = 15, "grapejuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/pink +/obj/item/food/snacks/candy/cotton/pink name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_pink" @@ -494,7 +494,7 @@ filling_color = "#863333" list_reagents = list("sugar" = 15, "watermelonjuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/rainbow +/obj/item/food/snacks/candy/cotton/rainbow name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_rainbow" @@ -502,7 +502,7 @@ filling_color = "#C8A5DC" list_reagents = list("omnizine" = 20) -/obj/item/reagent_containers/food/snacks/candy/cotton/bad_rainbow +/obj/item/food/snacks/candy/cotton/bad_rainbow name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_rainbow" @@ -514,35 +514,35 @@ // Candybar Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/confectionery +/obj/item/food/snacks/candy/confectionery list_reagents = list("nutriment" = 1, "chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/confectionery/rice +/obj/item/food/snacks/candy/confectionery/rice name = "Asteroid Crunch Bar" desc = "Crunchy rice deposits in delicious chocolate! A favorite of miners galaxy-wide." icon_state = "asteroidcrunch" trash = /obj/item/trash/candy filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/toffee +/obj/item/food/snacks/candy/confectionery/toffee name = "Yum-Baton Bar" desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!" icon_state = "yumbaton" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/caramel +/obj/item/food/snacks/candy/confectionery/caramel name = "Malper Bar" desc = "A chocolate syringe filled with a caramel injection. Just what the doctor ordered!" icon_state = "malper" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat +/obj/item/food/snacks/candy/confectionery/caramel_nougat name = "Toxins Test Bar" desc = "An explosive combination of chocolate, caramel, and nougat. Research has never been so tasty!" icon_state = "toxinstest" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/nougat +/obj/item/food/snacks/candy/confectionery/nougat name = "Tool-erone Bar" desc = "Chocolate-covered nougat, shaped like a wrench. Great for an engineer on the go!" icon_state = "toolerone" diff --git a/code/modules/food_and_drinks/food/foods/desserts.dm b/code/modules/food_and_drinks/food/foods/desserts.dm index 692c8c06208b..c68b8bc55f17 100644 --- a/code/modules/food_and_drinks/food/foods/desserts.dm +++ b/code/modules/food_and_drinks/food/foods/desserts.dm @@ -2,13 +2,13 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/friedbanana +/obj/item/food/snacks/friedbanana name = "fried banana" desc = "Goreng Pisang, also known as fried bananas." icon_state = "friedbanana" list_reagents = list("sugar" = 5, "nutriment" = 8, "cornoil" = 4) -/obj/item/reagent_containers/food/snacks/ricepudding +/obj/item/food/snacks/ricepudding name = "rice pudding" desc = "Where's the Jam!" icon_state = "rpudding" @@ -17,7 +17,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("rice" = 1, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/spacylibertyduff +/obj/item/food/snacks/spacylibertyduff name = "spacy liberty duff" desc = "Jello gelatin, from Alfred Hubbard's cookbook." icon_state = "spacylibertyduff" @@ -27,7 +27,7 @@ list_reagents = list("nutriment" = 6, "psilocybin" = 6) tastes = list("jelly" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/amanitajelly +/obj/item/food/snacks/amanitajelly name = "amanita jelly" desc = "Looks curiously toxic." icon_state = "amanitajelly" @@ -37,7 +37,7 @@ list_reagents = list("nutriment" = 6, "amanitin" = 6, "psilocybin" = 3) tastes = list("jelly" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/candiedapple +/obj/item/food/snacks/candiedapple name = "candied apple" desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" @@ -46,7 +46,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 2) tastes = list("apple" = 2, "sweetness" = 2) -/obj/item/reagent_containers/food/snacks/mint +/obj/item/food/snacks/mint name = "mint" desc = "it is only wafer thin." icon_state = "mint" diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm index d57032656c3e..153dc2b7407c 100644 --- a/code/modules/food_and_drinks/food/foods/ethnic.dm +++ b/code/modules/food_and_drinks/food/foods/ethnic.dm @@ -3,7 +3,7 @@ // Mexican // ////////////////////// -/obj/item/reagent_containers/food/snacks/taco +/obj/item/food/snacks/taco name = "taco" desc = "Take a bite!" icon_state = "taco" @@ -11,7 +11,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 1) tastes = list("taco" = 4, "meat" = 2, "cheese" = 2, "lettuce" = 1) -/obj/item/reagent_containers/food/snacks/burrito +/obj/item/food/snacks/burrito name = "burrito" desc = "Meat, beans, cheese, and rice wrapped up as an easy-to-hold meal." icon_state = "burrito" @@ -21,7 +21,7 @@ tastes = list("torilla" = 2, "meat" = 3) -/obj/item/reagent_containers/food/snacks/chimichanga +/obj/item/food/snacks/chimichanga name = "chimichanga" desc = "Time to eat a chimi-f***ing-changa." icon_state = "chimichanga" @@ -29,7 +29,7 @@ filling_color = "#A36A1F" list_reagents = list("omnizine" = 4, "cheese" = 2) //Deadpool reference. Deal with it. -/obj/item/reagent_containers/food/snacks/enchiladas +/obj/item/food/snacks/enchiladas name = "enchiladas" desc = "Viva la Mexico!" icon_state = "enchiladas" @@ -39,7 +39,7 @@ list_reagents = list("nutriment" = 8, "capsaicin" = 6) tastes = list("hot peppers" = 1, "meat" = 3, "cheese" = 1, "sour cream" = 1) -/obj/item/reagent_containers/food/snacks/cornchips +/obj/item/food/snacks/cornchips name = "corn chips" desc = "Goes great with salsa! OLE!" icon_state = "chips" @@ -53,7 +53,7 @@ // Chinese // ////////////////////// -/obj/item/reagent_containers/food/snacks/chinese/chowmein +/obj/item/food/snacks/chinese/chowmein name = "chow mein" desc = "What is in this anyways?" icon_state = "chinese1" @@ -62,7 +62,7 @@ list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2) tastes = list("noodle" = 1, "vegetables" = 1) -/obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball +/obj/item/food/snacks/chinese/sweetsourchickenball name = "sweet & sour chicken balls" desc = "Is this chicken cooked? The odds are better than wok paper scissors." icon = 'icons/obj/food/meat.dmi' @@ -72,7 +72,7 @@ list_reagents = list("nutriment" = 2, "msg" = 4, "sugar" = 2) tastes = list("chicken" = 1, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/chinese/tao +/obj/item/food/snacks/chinese/tao name = "Admiral Yamamoto carp" desc = "Tastes like chicken." icon_state = "chinese2" @@ -81,7 +81,7 @@ list_reagents = list("nutriment" = 1, "protein" = 1, "msg" = 4, "sugar" = 4) tastes = list("chicken" = 1) -/obj/item/reagent_containers/food/snacks/chinese/newdles +/obj/item/food/snacks/chinese/newdles name = "chinese newdles" desc = "Made fresh, weekly!" icon_state = "chinese3" @@ -90,7 +90,7 @@ list_reagents = list("nutriment" = 1, "msg" = 4, "sugar" = 3) tastes = list("noodles" = 1) -/obj/item/reagent_containers/food/snacks/chinese/rice +/obj/item/food/snacks/chinese/rice name = "fried rice" desc = "A timeless classic." icon_state = "chinese4" @@ -105,7 +105,7 @@ // Japanese // ////////////////////// -/obj/item/reagent_containers/food/snacks/chawanmushi +/obj/item/food/snacks/chawanmushi name = "chawanmushi" desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." icon_state = "chawanmushi" @@ -114,7 +114,7 @@ list_reagents = list("nutriment" = 5) tastes = list("custard" = 1) -/obj/item/reagent_containers/food/snacks/yakiimo +/obj/item/food/snacks/yakiimo name = "yaki imo" desc = "Made with roasted sweet potatoes!" icon_state = "yakiimo" @@ -128,7 +128,7 @@ // Middle Eastern // ////////////////////// -/obj/item/reagent_containers/food/snacks/human/kabob +/obj/item/food/snacks/human/kabob name = "-kabob" icon_state = "kabob" desc = "Human meat, on a stick." @@ -136,7 +136,7 @@ filling_color = "#A85340" list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/monkeykabob +/obj/item/food/snacks/monkeykabob name = "meat-kabob" icon_state = "kabob" desc = "Delicious meat, on a stick." @@ -144,7 +144,7 @@ filling_color = "#A85340" list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/tofukabob +/obj/item/food/snacks/tofukabob name = "tofu-kabob" icon_state = "kabob" desc = "Vegan meat, on a stick." @@ -152,7 +152,7 @@ filling_color = "#FFFEE0" list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/picoss_kabob +/obj/item/food/snacks/picoss_kabob name = "picoss-kabob" desc = "A popular Moghes streetfood consisting of vinegar-marinated space carp on a skewer with onion and chillis." icon_state = "picoss_skewer" diff --git a/code/modules/food_and_drinks/food/foods/frozen.dm b/code/modules/food_and_drinks/food/foods/frozen.dm index 069dfa297111..d00db915ed0a 100644 --- a/code/modules/food_and_drinks/food/foods/frozen.dm +++ b/code/modules/food_and_drinks/food/foods/frozen.dm @@ -5,24 +5,24 @@ //Abstract item for inheritence. -/obj/item/reagent_containers/food/snacks/frozen +/obj/item/food/snacks/frozen name = "frozen treat" desc = "If you got this, something broke! Contact a coder if this somehow spawns." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "flavorless_sc" -/obj/item/reagent_containers/food/snacks/sliceable/clowncake +/obj/item/food/snacks/sliceable/clowncake name = "clown cake" desc = "A funny cake with a clown face on it." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "clowncake" - slice_path = /obj/item/reagent_containers/food/snacks/frozen/clowncakeslice + slice_path = /obj/item/food/snacks/frozen/clowncakeslice slices_num = 5 bitesize = 3 list_reagents = list("nutriment" = 20, "sugar" = 5, "vitamin" = 5, "banana" = 15) tastes = list("cake" = 5, "sweetness" = 2, "banana" = 1, "sad clowns" = 1, "ice-cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/clowncakeslice +/obj/item/food/snacks/frozen/clowncakeslice name = "clown cake slice" desc = "A slice of bad jokes, and silly props." icon_state = "clowncake_slice" @@ -31,7 +31,7 @@ list_reagents = list("nutriment" = 4, "sugar" = 1, "vitamin" = 1, "banana" = 3) tastes = list("cake" = 5, "sweetness" = 2, "sad clowns" = 1, "ice-cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/sundae +/obj/item/food/snacks/frozen/sundae name = "sundae" desc = "Portable ice cream in its own packaging." icon_state = "sundae" @@ -42,7 +42,7 @@ // Ice Cream // ////////////////// -/obj/item/reagent_containers/food/snacks/frozen/icecream +/obj/item/food/snacks/frozen/icecream name = "ice cream" desc = "Delicious ice cream." icon_state = "icecream_cone" @@ -50,11 +50,11 @@ list_reagents = list("nutriment" = 1, "sugar" = 1) tastes = list("ice cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/icecream/Initialize(mapload) +/obj/item/food/snacks/frozen/icecream/Initialize(mapload) . = ..() update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/snacks/frozen/icecream/update_overlays() +/obj/item/food/snacks/frozen/icecream/update_overlays() . = ..() var/mutable_appearance/filling = mutable_appearance('icons/obj/food/frozen_treats.dmi', "icecream_color") var/list/reagent_colors = rgb2num(mix_color_from_reagents(reagents.reagent_list), COLORSPACE_HSV) //switching to HSV colorspace lets us easily manipulate the saturation and brightness independently @@ -62,7 +62,7 @@ filling.color = rgb(reagent_colors[1], ((1.5 * reagent_colors[2]) - 10), (clamp(reagent_colors[3], 85, 100) - 10), space = COLORSPACE_HSV) . += filling -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone +/obj/item/food/snacks/frozen/icecream/icecreamcone name = "ice cream cone" desc = "Delicious ice cream." icon_state = "icecream_cone" @@ -70,7 +70,7 @@ bitesize = 3 list_reagents = list("nutriment" = 3, "sugar" = 7, "ice" = 2) -/obj/item/reagent_containers/food/snacks/frozen/icecream/wafflecone +/obj/item/food/snacks/frozen/icecream/wafflecone name = "ice cream in a waffle cone" desc = "Delicious ice cream." icon_state = "icecream_cone_waffle" @@ -78,7 +78,7 @@ bitesize = 3 list_reagents = list("nutriment" = 3, "sugar" = 7, "ice" = 2) -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcup +/obj/item/food/snacks/frozen/icecream/icecreamcup name = "chocolate ice cream cone" desc = "Delicious ice cream." icon_state = "icecream_cone_chocolate" @@ -86,7 +86,7 @@ bitesize = 3 list_reagents = list("nutriment" = 5, "chocolate" = 8, "ice" = 2) -/obj/item/reagent_containers/food/snacks/wafflecone +/obj/item/food/snacks/wafflecone name = "waffle cone" desc = "Delicious waffle cone, but no ice cream." icon = 'icons/obj/food/frozen_treats.dmi' @@ -94,49 +94,49 @@ list_reagents = list("nutriment" = 5) tastes = list("cream" = 2, "waffle" = 1) -/obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich +/obj/item/food/snacks/frozen/icecreamsandwich name = "icecream sandwich" desc = "Portable ice cream in its own packaging." icon_state = "icecreamsandwich" list_reagents = list("nutriment" = 2, "ice" = 2) tastes = list("ice cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/berryicecreamsandwich +/obj/item/food/snacks/frozen/berryicecreamsandwich name = "strawberry icecream sandwich" desc = "Portable ice cream in its own packaging." icon_state = "strawberryicecreamsandwich" list_reagents = list("nutriment" = 2, "ice" = 2) tastes = list("ice cream" = 1, "strawberry" = 1) -/obj/item/reagent_containers/food/snacks/frozen/sundae +/obj/item/food/snacks/frozen/sundae name = "sundae" desc = "A classic dessert." icon_state = "sundae" list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) tastes = list("ice cream" = 1, "banana" = 1) -/obj/item/reagent_containers/food/snacks/frozen/honkdae +/obj/item/food/snacks/frozen/honkdae name = "honkdae" desc = "The clown's favorite dessert." icon_state = "honkdae" list_reagents = list("nutriment" = 6, "banana" = 10, "vitamin" = 4) tastes = list("ice cream" = 1, "banana" = 1, "a bad joke" = 1) -/obj/item/reagent_containers/food/snacks/frozen/cornuto +/obj/item/food/snacks/frozen/cornuto name = "cornuto" desc = "A neapolitan vanilla and chocolate ice cream cone. It menaces with a sprinkling of caramelized nuts." icon_state = "cornuto" list_reagents = list("nutriment" = 6, "hot_coco" = 4, "cream" = 2, "vanilla" = 4, "sugar" = 2) tastes = list("chopped hazelnuts" = 3, "waffle" = 5) -/obj/item/reagent_containers/food/snacks/frozen/peanutbuttermochi +/obj/item/food/snacks/frozen/peanutbuttermochi name = "peanut butter ice cream mochi" desc = "A classic dessert at the Arabia Street Night Market in Prospect, peanut butter ice cream mochi is made with a peanut-butter flavoured ice cream as the main filling, and coated in crushed peanuts in the Taiwanese tradition." icon_state = "pb_ice_cream_mochi" list_reagents = list("nutriment" = 4, "sugar" = 6, "peanutbutter" = 4, "milk" = 2) tastes = list("peanut butter" = 1, "mochi" = 1) -/obj/item/reagent_containers/food/snacks/frozen/spacefreezy +/obj/item/food/snacks/frozen/spacefreezy name = "spacefreezy" desc = "The best ice cream in space." icon_state = "spacefreezy" @@ -147,113 +147,113 @@ // Snow Cones // ////////////////// -/obj/item/reagent_containers/food/snacks/frozen/snowcone +/obj/item/food/snacks/frozen/snowcone name = "flavorless snowcone" desc = "It's just shaved ice. Still fun to chew on." icon_state = "flavorless_sc" - trash = /obj/item/reagent_containers/food/drinks/sillycup + trash = /obj/item/reagent_containers/drinks/sillycup list_reagents = list("water" = 10, "ice" = 5) tastes = list("cold water" = 1) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/apple +/obj/item/food/snacks/frozen/snowcone/apple name = "apple snowcone" desc = "Apple syrup drizzled over a snowball in a paper cup." icon_state = "amber_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "applejuice" = 5) tastes = list("ice" = 1, "water" = 1, "apples" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/berry +/obj/item/food/snacks/frozen/snowcone/berry name = "berry snowcone" desc = "Berry syrup drizzled over a snowball in a paper cup." icon_state = "berry_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "berryjuice" = 5) tastes = list("ice" = 1, "water" = 1, "berries" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/bluecherry +/obj/item/food/snacks/frozen/snowcone/bluecherry name = "bluecherry snowcone" desc = "Bluecherry syrup drizzled over a snowball in a paper cup, how rare!" icon_state = "blue_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "bluecherryjelly" = 5) tastes = list("ice" = 1, "water" = 1, "bluecherries" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/cherry +/obj/item/food/snacks/frozen/snowcone/cherry name = "cherry snowcone" desc = "Cherry syrup drizzled over a snowball in a paper cup." icon_state = "red_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "cherryjelly" = 5) tastes = list("ice" = 1, "water" = 1, "cherries" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/fruitsalad +/obj/item/food/snacks/frozen/snowcone/fruitsalad name = "fruit salad snowcone" desc = "A delightful mix of citrus syrups drizzled over a snowball in a paper cup." icon_state = "fruitsalad_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5) tastes = list("ice" = 1, "water" = 1, "oranges" = 5, "lemons" = 5, "limes" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/grape +/obj/item/food/snacks/frozen/snowcone/grape name = "grape snowcone" desc = "Grape syrup drizzled over a snowball in a paper cup." icon_state = "grape_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "grapejuice" = 5) tastes = list("ice" = 1, "water" = 1, "grapes" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/honey +/obj/item/food/snacks/frozen/snowcone/honey name = "honey snowcone" desc = "Honey drizzled over a snowball in a paper cup." icon_state = "amber_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "honey" = 5) tastes = list("ice" = 1, "water" = 1, "honey" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/lemon +/obj/item/food/snacks/frozen/snowcone/lemon name = "lemon snowcone" desc = "Lemon syrup drizzled over a snowball in a paper cup." icon_state = "lemon_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "lemonjuice" = 5) tastes = list("ice" = 1, "water" = 1, "lemons" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/lime +/obj/item/food/snacks/frozen/snowcone/lime name = "lime snowcone" desc = "Lime syrup drizzled over a snowball in a paper cup." icon_state = "lime_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "limejuice" = 5) tastes = list("ice" = 1, "water" = 1, "limes" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/mime +/obj/item/food/snacks/frozen/snowcone/mime name = "mime snowcone" desc = "..." icon_state = "mime_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "nothing" = 5) tastes = list("ice" = 1, "water" = 1, "silence" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/orange +/obj/item/food/snacks/frozen/snowcone/orange name = "orange snowcone" desc = "Orange syrup drizzled over a snowball in a paper cup." icon_state = "orange_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "orangejuice" = 5) tastes = list("ice" = 1, "water" = 1, "oranges" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/pineapple +/obj/item/food/snacks/frozen/snowcone/pineapple name = "pineapple snowcone" desc = "Pineapple syrup drizzled over a snowball in a paper cup." icon_state = "pineapple_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "pineapplejuice" = 5) tastes = list("ice" = 1, "water" = 1, "pineapple" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/rainbow +/obj/item/food/snacks/frozen/snowcone/rainbow name = "rainbow snowcone" desc = "A very colorful snowball in a paper cup." icon_state = "rainbow_sc" list_reagents = list("water" = 10, "ice" = 5, "colorful_reagent" = 5) tastes = list("ice" = 1, "water" = 1, "rainbows" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/cola +/obj/item/food/snacks/frozen/snowcone/cola name = "space cola snowcone" desc = "Space Cola drizzled over a snowball in a paper cup." icon_state = "soda_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "cola" = 5) tastes = list("ice" = 1, "water" = 1, "soda" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/spacemountain +/obj/item/food/snacks/frozen/snowcone/spacemountain name = "space mountain wind snowcone" desc = "Space Mountain Wind drizzled over a snowball in a paper cup." icon_state = "mountainwind_sc" @@ -264,7 +264,7 @@ // Popsicles // ///////////////// -/obj/item/reagent_containers/food/snacks/frozen/popsicle +/obj/item/food/snacks/frozen/popsicle name = "jumbo icecream" desc = "A luxurious ice cream covered in rich chocolate. It seems smaller than you remember it being." icon_state = "jumbo" @@ -272,63 +272,63 @@ list_reagents = list("nutriment" = 4, "sugar" = 4, "chocolate" = 3) tastes = list("ice cream" = 1, "chocolate" = 1, "vanilla" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/bananatop +/obj/item/food/snacks/frozen/popsicle/bananatop name = "banana topsicle" desc = "A frozen treat made from tofu and banana juice blended smooth, then frozen. Popular in rural Japan in the summer." icon_state = "topsicle_banana" list_reagents = list("vitamin" = 4, "sugar" = 6, "banana" = 4) tastes = list("bananas" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/berrytop +/obj/item/food/snacks/frozen/popsicle/berrytop name = "berry topsicle" desc = "A frozen treat made from tofu and berry juice blended smooth, then frozen. Supposedly a favourite of bears, but that makes no sense..." icon_state = "topsicle_berry" list_reagents = list("vitamin" = 4, "sugar" = 6, "berryjuice" = 4) tastes = list("berries" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/pineappletop +/obj/item/food/snacks/frozen/popsicle/pineappletop name = "pineapple topsicle" desc = "A frozen treat made from tofu and pineapple juice blended smooth, then frozen. As seen on TV." icon_state = "topsicle_pineapple" list_reagents = list("vitamin" = 4, "sugar" = 6, "pineapplejuice" = 4) tastes = list("pineapples" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/licoricecream +/obj/item/food/snacks/frozen/popsicle/licoricecream name = "licorice creamsicle" desc = "A salty licorice ice cream. A salty frozen treat." icon_state = "licorice_creamsicle" list_reagents = list("nutriment" = 4, "cream" = 2, "vanilla" = 1, "sugar" = 4, "salt" = 1) tastes = list("salty licorice" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/orangecream +/obj/item/food/snacks/frozen/popsicle/orangecream name = "orange creamsicle" desc = "A classic orange creamsicle. A sunny frozen treat." icon_state = "creamsicle_o" list_reagents = list("orangejuice" = 4, "cream" = 2, "vanilla" = 2, "sugar" = 4) tastes = list("ice cream" = 1, "oranges" = 1, "vanilla" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/berrycream +/obj/item/food/snacks/frozen/popsicle/berrycream name = "berry creamsicle" desc = "A vibrant berry creamsicle. A berry good frozen treat." icon_state = "creamsicle_m" list_reagents = list("berryjuice" = 4, "cream" = 2, "vanilla" = 2, "sugar" = 4) tastes = list("ice cream" = 1, "berries" = 1, "vanilla" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/frozenpineapple +/obj/item/food/snacks/frozen/popsicle/frozenpineapple name = "frozen pineapple pop" desc = "Few cultures love pineapple as much as the Martians, and this dessert proves that- frozen pineapple, on a stick, with just a little dunk of dark chocolate." icon_state = "pineapple_pop" list_reagents = list("pineapplejuice" = 4, "sugar" = 4, "nutriment" = 2, "vitamin" = 2) tastes = list("cold pineapple" = 1, "chocolate" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/sea_salt +/obj/item/food/snacks/frozen/popsicle/sea_salt name = "sea salt ice-cream bar" desc = "This sky-blue ice-cream bar is flavoured with only the finest imported sea salt. Salty... no, sweet!" icon_state = "sea_salt_pop" list_reagents = list("salt" = 1, "nutriment" = 2, "cream" = 2, "vanilla" = 2, "sugar"= 4,) tastes = list("salt" = 1, "sweet" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/ant +/obj/item/food/snacks/frozen/popsicle/ant name = "ant popsicle" desc = "A colony of ants suspended in hardened sugar. Those things are dead, right?" icon_state = "ant_pop" diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm index b6b9baa121b3..a0cf80c61b6a 100644 --- a/code/modules/food_and_drinks/food/foods/ingredients.dm +++ b/code/modules/food_and_drinks/food/foods/ingredients.dm @@ -3,7 +3,7 @@ // Tofu & Soy // ////////////////////// -/obj/item/reagent_containers/food/snacks/tofu +/obj/item/food/snacks/tofu name = "tofu" icon_state = "tofu" desc = "We all love tofu." @@ -13,7 +13,7 @@ tastes = list("tofu" = 1) ingredient_name = "tofu chunk" -/obj/item/reagent_containers/food/snacks/fried_tofu +/obj/item/food/snacks/fried_tofu name = "fried tofu" icon_state = "tofu" desc = "Proof that even vegetarians crave unhealthy foods." @@ -22,7 +22,7 @@ list_reagents = list("plantmatter" = 3) tastes = list("tofu" = 1) -/obj/item/reagent_containers/food/snacks/soydope +/obj/item/food/snacks/soydope name = "soy dope" icon_state = "soydope" desc = "Like regular dope, but for the health conscious consumer." @@ -36,27 +36,27 @@ // Cheese // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/cheesewheel +/obj/item/food/snacks/sliceable/cheesewheel name = "cheese wheel" desc = "A big wheel of delicious Cheddar." icon_state = "cheesewheel" - slice_path = /obj/item/reagent_containers/food/snacks/cheesewedge + slice_path = /obj/item/food/snacks/cheesewedge slices_num = 5 filling_color = "#FFF700" list_reagents = list("nutriment" = 15, "vitamin" = 5, "cheese" = 20) tastes = list("cheese" = 1) -/obj/item/reagent_containers/food/snacks/cheesewedge +/obj/item/food/snacks/cheesewedge name = "cheese wedge" desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." icon_state = "cheesewedge" filling_color = "#FFF700" tastes = list("cheese" = 1) -/obj/item/reagent_containers/food/snacks/cheesewedge/presliced +/obj/item/food/snacks/cheesewedge/presliced list_reagents = list("nutriment" = 3, "vitamin" = 1, "cheese" = 4) - -/obj/item/reagent_containers/food/snacks/weirdcheesewedge + +/obj/item/food/snacks/weirdcheesewedge name = "weird cheese" desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the broad sense of the word." icon_state = "weirdcheesewedge" @@ -68,7 +68,7 @@ // Plants // ////////////////////// -/obj/item/reagent_containers/food/snacks/hugemushroomslice +/obj/item/food/snacks/hugemushroomslice name = "huge mushroom slice" desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" @@ -77,14 +77,14 @@ list_reagents = list("plantmatter" = 3, "vitamin" = 1) tastes = list("mushroom" = 1) -/obj/item/reagent_containers/food/snacks/watermelonslice +/obj/item/food/snacks/watermelonslice name = "watermelon slice" desc = "A slice of watery goodness." icon_state = "watermelonslice" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. filling_color = "#FF3867" tastes = list("watermelon" = 1) -/obj/item/reagent_containers/food/snacks/tomatoslice +/obj/item/food/snacks/tomatoslice name = "tomato slice" desc = "A fresh slice of tomato." icon_state = "tomatoslice" @@ -92,7 +92,7 @@ list_reagents = list("plantmatter" = 2) tastes = list("tomato" = 1) -/obj/item/reagent_containers/food/snacks/pineappleslice +/obj/item/food/snacks/pineappleslice name = "pineapple slices" desc = "Rings of pineapple." icon_state = "pineappleslice" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. @@ -104,7 +104,7 @@ // Dough // ////////////////////// -/obj/item/reagent_containers/food/snacks/dough +/obj/item/food/snacks/dough name = "dough" desc = "A piece of dough." icon = 'icons/obj/food/food_ingredients.dmi' @@ -113,10 +113,10 @@ tastes = list("dough" = 1) // Dough + rolling pin = flat dough -/obj/item/reagent_containers/food/snacks/dough/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/dough/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/rollingpin)) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/sliceable/flatdough(loc) + new /obj/item/food/snacks/sliceable/flatdough(loc) to_chat(user, "You flatten [src].") qdel(src) else @@ -125,18 +125,18 @@ ..() // slicable into 3xdoughslices -/obj/item/reagent_containers/food/snacks/sliceable/flatdough +/obj/item/food/snacks/sliceable/flatdough name = "flat dough" desc = "Some flattened dough." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "flat dough" - slice_path = /obj/item/reagent_containers/food/snacks/doughslice + slice_path = /obj/item/food/snacks/doughslice slices_num = 3 list_reagents = list("nutriment" = 6) tastes = list("dough" = 1) -/obj/item/reagent_containers/food/snacks/doughslice +/obj/item/food/snacks/doughslice name = "dough slice" desc = "The building block of an impressive dish." icon = 'icons/obj/food/food_ingredients.dmi' @@ -147,7 +147,7 @@ ///cookies by Ume -/obj/item/reagent_containers/food/snacks/cookiedough +/obj/item/food/snacks/cookiedough var/flat = FALSE name = "pastry dough" icon = 'icons/obj/food/food_ingredients.dmi' @@ -156,19 +156,19 @@ list_reagents = list("nutriment" = 5, "sugar" = 5) tastes = list("dough" = 1, "sugar" = 1) -/obj/item/reagent_containers/food/snacks/cookiedough/update_name() +/obj/item/food/snacks/cookiedough/update_name() . = ..() if(flat) name = "flat pastry dough" -/obj/item/reagent_containers/food/snacks/cookiedough/update_icon_state() +/obj/item/food/snacks/cookiedough/update_icon_state() if(flat) icon_state = "cookiedough_flat" else 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) +/obj/item/food/snacks/cookiedough/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/rollingpin) && !flat) if(isturf(loc)) to_chat(user, "You flatten [src].") @@ -178,7 +178,7 @@ to_chat(user, "You need to put [src] on a surface to roll it out!") else if(istype(I, /obj/item/kitchen/cutter) && flat) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/rawcookies(loc) + new /obj/item/food/snacks/rawcookies(loc) to_chat(user, "You cut [src] into cookies.") qdel(src) else @@ -187,17 +187,17 @@ return ..() -/obj/item/reagent_containers/food/snacks/rawcookies +/obj/item/food/snacks/rawcookies name = "raw cookies" desc = "Ready for oven!" icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "unbaked_cookies" list_reagents = list("nutriment" = 5, "sugar" = 5) -/obj/item/reagent_containers/food/snacks/rawcookies/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/choc_pile)) +/obj/item/food/snacks/rawcookies/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/food/snacks/choc_pile)) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/rawcookies/chocochips(loc) + new /obj/item/food/snacks/rawcookies/chocochips(loc) to_chat(user, "You sprinkle [I] all over the cookies.") qdel(src) qdel(I) @@ -206,7 +206,7 @@ else return ..() -/obj/item/reagent_containers/food/snacks/rawcookies/chocochips +/obj/item/food/snacks/rawcookies/chocochips name = "raw cookies" desc = "Ready for oven! They have little pieces of chocolate all over them" icon = 'icons/obj/food/food_ingredients.dmi' @@ -218,7 +218,7 @@ // Chocolate // ////////////////////// -/obj/item/reagent_containers/food/snacks/chocolatebar +/obj/item/food/snacks/chocolatebar name = "chocolate bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" @@ -227,10 +227,10 @@ tastes = list("chocolate" = 1) ///Chocolate crumbles/pile -/obj/item/reagent_containers/food/snacks/chocolatebar/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/chocolatebar/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/knife)) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/choc_pile(loc) + new /obj/item/food/snacks/choc_pile(loc) to_chat(user, "You cut [src] into little crumbles.") qdel(src) else @@ -239,7 +239,7 @@ return ..() -/obj/item/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs +/obj/item/food/snacks/choc_pile //for reagent chocolate being spilled on turfs name = "pile of chocolate" desc = "A pile of pure chocolate pieces." icon_state = "cocoa" @@ -252,7 +252,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/ectoplasm +/obj/item/food/snacks/ectoplasm name = "ectoplasm" desc = "A luminescent blob of what scientists refer to as 'ghost goo'." icon = 'icons/obj/wizard.dmi' diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm index 3c3397fa0c92..f410d2db2ff6 100644 --- a/code/modules/food_and_drinks/food/foods/junkfood.dm +++ b/code/modules/food_and_drinks/food/foods/junkfood.dm @@ -3,7 +3,7 @@ // Vendor // ////////////////////// -/obj/item/reagent_containers/food/snacks/chips +/obj/item/food/snacks/chips name = "chips" desc = "Commander Riker's What-The-Crisps." icon_state = "chips" @@ -15,7 +15,7 @@ list_reagents = list("nutriment" = 1, "sodiumchloride" = 1, "sugar" = 3) tastes = list("crisps" = 1) -/obj/item/reagent_containers/food/snacks/sosjerky +/obj/item/food/snacks/sosjerky name = "Scaredy's Private Reserve Beef Jerky" icon_state = "sosjerky" desc = "Beef jerky made from the finest space cows." @@ -26,7 +26,7 @@ list_reagents = list("protein" = 1, "sugar" = 3) tastes = list("chewy beef" = 1) -/obj/item/reagent_containers/food/snacks/pistachios +/obj/item/food/snacks/pistachios name = "pistachios" icon_state = "pistachios" desc = "Deliciously salted pistachios. A perfectly valid choice..." @@ -37,7 +37,7 @@ list_reagents = list("plantmatter" = 2, "sodiumchloride" = 1, "sugar" = 4) tastes = list("pistachios" = 1) -/obj/item/reagent_containers/food/snacks/no_raisin +/obj/item/food/snacks/no_raisin name = "4no Raisins" icon_state = "4no_raisins" desc = "Best raisins in the universe. Not sure why." @@ -48,7 +48,7 @@ list_reagents = list("plantmatter" = 2, "sugar" = 4) tastes = list("dried raisins" = 1) -/obj/item/reagent_containers/food/snacks/spacetwinkie +/obj/item/food/snacks/spacetwinkie name = "Space Twinkie" icon_state = "space_twinkie" desc = "Guaranteed to survive longer then you will." @@ -58,7 +58,7 @@ list_reagents = list("sugar" = 4) tastes = list("twinkies" = 1) -/obj/item/reagent_containers/food/snacks/cheesiehonkers +/obj/item/food/snacks/cheesiehonkers name = "Cheesie Honkers" icon_state = "cheesie_honkers" desc = "Bite sized cheesie snacks that will honk all over your mouth." @@ -69,7 +69,7 @@ list_reagents = list("nutriment" = 1, "fake_cheese" = 2, "sugar" = 3) tastes = list("cheese" = 1, "crisps" = 2) -/obj/item/reagent_containers/food/snacks/syndicake +/obj/item/food/snacks/syndicake name = "Syndi-Cakes" icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." @@ -80,7 +80,7 @@ list_reagents = list("nutriment" = 4, "salglu_solution" = 5) tastes = list("sweetness" = 3, "cake" = 1) -/obj/item/reagent_containers/food/snacks/tastybread +/obj/item/food/snacks/tastybread name = "bread tube" desc = "Bread in a tube. Chewy and surprisingly tasty." icon_state = "tastybread" @@ -91,7 +91,7 @@ list_reagents = list("nutriment" = 2, "sugar" = 4) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/stroopwafel +/obj/item/food/snacks/stroopwafel name = "stroopwafel" desc = "Straight from the snack factories of Space Den Haag comes a classic dutch treat!" icon_state = "stroopwafel" @@ -100,7 +100,7 @@ list_reagents = list("nutriment" = 10, "sugar" = 4) tastes = list("syrup" = 3, "waffle" = 2) -/obj/item/reagent_containers/food/snacks/twimsts +/obj/item/food/snacks/twimsts name = "Twimsts" desc = "Sweet twisted sticks made of liquorice, can be used to make edible handcuffs!" icon_state = "twimsts" @@ -111,7 +111,7 @@ list_reagents = list("nutriment" = 2, "sugar" = 10) tastes = list("sweetness" = 3, "liquorice" = 2) -/obj/item/reagent_containers/food/snacks/twimsts/attack_self(mob/user) +/obj/item/food/snacks/twimsts/attack_self(mob/user) var/obj/item/restraints/handcuffs/twimsts/L = new /obj/item/restraints/handcuffs/twimsts L.create_reagents(100) reagents.copy_to(L, reagents.total_volume) @@ -125,13 +125,13 @@ // Homemade // ////////////////////// -/obj/item/reagent_containers/food/snacks/sosjerky/healthy +/obj/item/food/snacks/sosjerky/healthy name = "homemade beef jerky" desc = "Homemade beef jerky made from the finest space cows." list_reagents = list("nutriment" = 3, "vitamin" = 1) junkiness = 0 -/obj/item/reagent_containers/food/snacks/no_raisin/healthy +/obj/item/food/snacks/no_raisin/healthy name = "homemade raisins" desc = "homemade raisins, the best in all of spess." list_reagents = list("nutriment" = 3, "vitamin" = 2) diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 921a42adf7d8..f03044731ce8 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -3,7 +3,7 @@ // Raw Meat // ////////////////////// -/obj/item/reagent_containers/food/snacks/meat +/obj/item/food/snacks/meat name = "meat" desc = "A slab of meat." icon = 'icons/obj/food/meat.dmi' @@ -15,11 +15,11 @@ ingredient_name = "slab of meat" ingredient_name_plural = "slabs of meat" -/obj/item/reagent_containers/food/snacks/meat/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/meat/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/kitchen/knife) || istype(W, /obj/item/scalpel)) - new /obj/item/reagent_containers/food/snacks/rawcutlet(src) - new /obj/item/reagent_containers/food/snacks/rawcutlet(src) - new /obj/item/reagent_containers/food/snacks/rawcutlet(src) + new /obj/item/food/snacks/rawcutlet(src) + new /obj/item/food/snacks/rawcutlet(src) + new /obj/item/food/snacks/rawcutlet(src) user.visible_message( \ "[user] cuts [src] with [W]!", \ "You cut [src] with [W]!" \ @@ -28,42 +28,42 @@ else ..() -/obj/item/reagent_containers/food/snacks/meat/syntiflesh +/obj/item/food/snacks/meat/syntiflesh name = "synthetic meat" desc = "A synthetic slab of flesh." -/obj/item/reagent_containers/food/snacks/meat/human +/obj/item/food/snacks/meat/human name = "-meat" var/subjectname = "" var/subjectjob = null tastes = list("salty meat" = 1) -/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct +/obj/item/food/snacks/meat/slab/meatproduct name = "meat product" desc = "A slab of reclaimed and chemically processed meat product." -/obj/item/reagent_containers/food/snacks/meat/slab/gorilla +/obj/item/food/snacks/meat/slab/gorilla name = "gorilla meat" desc = "Much meatier than monkey meat." list_reagents = list("nutriment" = 5, "vitamin" = 1) -/obj/item/reagent_containers/food/snacks/meat/monkey +/obj/item/food/snacks/meat/monkey //same as plain meat -/obj/item/reagent_containers/food/snacks/meat/corgi +/obj/item/food/snacks/meat/corgi name = "corgi meat" desc = "Tastes like the Head of Personnel's hopes and dreams." -/obj/item/reagent_containers/food/snacks/meat/pug +/obj/item/food/snacks/meat/pug name = "pug meat" desc = "Slightly less adorable in sliced form." -/obj/item/reagent_containers/food/snacks/meat/ham +/obj/item/food/snacks/meat/ham name = "ham" desc = "For when you need to go ham." list_reagents = list("protein" = 3, "porktonium" = 10) -/obj/item/reagent_containers/food/snacks/meat/meatwheat +/obj/item/food/snacks/meat/meatwheat name = "meatwheat clump" desc = "This doesn't look like meat, but your standards aren't that high to begin with." list_reagents = list("nutriment" = 3, "vitamin" = 2, "blood" = 5) @@ -71,7 +71,7 @@ icon_state = "meatwheat_clump" bitesize = 4 -/obj/item/reagent_containers/food/snacks/meat/tomatomeat +/obj/item/food/snacks/meat/tomatomeat name = "tomato meat slice" desc = "A slice from a huge tomato." icon_state = "tomatomeat" @@ -80,7 +80,7 @@ list_reagents = list("protein" = 2) tastes = list("tomato" = 1) -/obj/item/reagent_containers/food/snacks/rawcutlet +/obj/item/food/snacks/rawcutlet name = "raw cutlet" desc = "A thin strip of raw meat." icon = 'icons/obj/food/food_ingredients.dmi' @@ -88,13 +88,13 @@ bitesize = 1 list_reagents = list("protein" = 1) -/obj/item/reagent_containers/food/snacks/rawcutlet/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/rawcutlet/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/kitchen/knife) || istype(W, /obj/item/scalpel)) user.visible_message( \ "[user] cuts the raw cutlet with [W]!", \ "You cut the raw cutlet with [W]!" \ ) - var/obj/item/reagent_containers/food/snacks/raw_bacon/bacon = new(get_turf(src)) + var/obj/item/food/snacks/raw_bacon/bacon = new(get_turf(src)) if(ishuman(loc)) var/mob/living/carbon/human/H = loc qdel(src) @@ -108,7 +108,7 @@ // Cannot be used in the usual meat-based food recipies but can be used as cloning pod biomass. -/obj/item/reagent_containers/food/snacks/monstermeat +/obj/item/food/snacks/monstermeat // Abstract object used for inheritance. I don't see why you would want one. // It's just a convenience to set all monstermeats as biomass-able at once, // in the GLOB.cloner_biomass_items list. @@ -118,7 +118,7 @@ icon = 'icons/obj/food/meat.dmi' icon_state = "bearmeat" -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat +/obj/item/food/snacks/monstermeat/bearmeat name = "bear meat" desc = "A very manly slab of meat." icon_state = "bearmeat" @@ -127,7 +127,7 @@ list_reagents = list("protein" = 12, "morphine" = 5, "vitamin" = 2) tastes = list("meat" = 1, "salmon" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat +/obj/item/food/snacks/monstermeat/xenomeat name = "meat" desc = "A slab of meat. It's green!" icon_state = "xenomeat" @@ -136,7 +136,7 @@ list_reagents = list("protein" = 3, "vitamin" = 1) tastes = list("meat" = 1, "acid" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat +/obj/item/food/snacks/monstermeat/spidermeat name = "spider meat" desc = "A slab of spider meat. Not very appetizing." icon_state = "spidermeat" @@ -144,7 +144,7 @@ list_reagents = list("protein" = 3, "toxin" = 3, "vitamin" = 1) tastes = list("cobwebs" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat +/obj/item/food/snacks/monstermeat/lizardmeat name = "mutant lizard meat" desc = "A peculiar slab of meat. It looks scaly and radioactive." icon_state = "xenomeat" @@ -153,14 +153,14 @@ list_reagents = list("protein" = 3, "toxin" = 3) tastes = list("tough meat" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg +/obj/item/food/snacks/monstermeat/spiderleg name = "spider leg" desc = "A still twitching leg of a giant spider. You don't really want to eat this, do you?" icon_state = "spiderleg" list_reagents = list("protein" = 2, "toxin" = 2) tastes = list("cobwebs" = 1, "creepy motion" = 1) -/obj/item/reagent_containers/food/snacks/raw_bacon +/obj/item/food/snacks/raw_bacon name = "raw bacon" desc = "God's gift to man in uncooked form." icon = 'icons/obj/food/meat.dmi' @@ -168,30 +168,30 @@ list_reagents = list("nutriment" = 1, "porktonium" = 10) tastes = list("bacon" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/spidereggs +/obj/item/food/snacks/monstermeat/spidereggs name = "spider eggs" desc = "A cluster of juicy spider eggs. A great side dish for when you don't care about your health." icon_state = "spidereggs" list_reagents = list("protein" = 2, "toxin" = 2) tastes = list("cobwebs" = 1, "spider juice" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/goliath +/obj/item/food/snacks/monstermeat/goliath name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." icon_state = "goliathmeat" list_reagents = list("protein" = 3, "toxin" = 5) tastes = list("tough meat" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/goliath/burn() +/obj/item/food/snacks/monstermeat/goliath/burn() visible_message("[src] finishes cooking!") - new /obj/item/reagent_containers/food/snacks/goliath_steak(loc) + new /obj/item/food/snacks/goliath_steak(loc) qdel(src) ////////////////////// // Cooked Meat // ////////////////////// -/obj/item/reagent_containers/food/snacks/meatsteak +/obj/item/food/snacks/meatsteak name = "meat steak" desc = "A piece of hot spicy meat." icon = 'icons/obj/food/meat.dmi' @@ -202,7 +202,7 @@ list_reagents = list("nutriment" = 5) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/bacon +/obj/item/food/snacks/bacon name = "bacon" desc = "It looks crispy and tastes amazing! Mmm... Bacon." icon = 'icons/obj/food/meat.dmi' @@ -210,7 +210,7 @@ list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4) tastes = list("bacon" = 1) -/obj/item/reagent_containers/food/snacks/telebacon +/obj/item/food/snacks/telebacon name = "tele bacon" desc = "It tastes a little odd but it's still delicious." icon = 'icons/obj/food/meat.dmi' @@ -219,21 +219,21 @@ list_reagents = list("nutriment" = 4, "porktonium" = 10) tastes = list("bacon" = 1) -/obj/item/reagent_containers/food/snacks/telebacon/Initialize(mapload) +/obj/item/food/snacks/telebacon/Initialize(mapload) . = ..() baconbeacon = new /obj/item/radio/beacon/bacon(src) -/obj/item/reagent_containers/food/snacks/telebacon/Destroy() +/obj/item/food/snacks/telebacon/Destroy() QDEL_NULL(baconbeacon) return ..() -/obj/item/reagent_containers/food/snacks/telebacon/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/telebacon/On_Consume(mob/M, mob/user) if(!reagents.total_volume) baconbeacon.forceMove(user) baconbeacon.digest_delay() baconbeacon = null -/obj/item/reagent_containers/food/snacks/meatball +/obj/item/food/snacks/meatball name = "meatball" desc = "A great meal all round." icon = 'icons/obj/food/meat.dmi' @@ -242,7 +242,7 @@ list_reagents = list("protein" = 4, "vitamin" = 1) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/sausage +/obj/item/food/snacks/sausage name = "sausage" desc = "A piece of mixed and cased meat." icon = 'icons/obj/food/meat.dmi' @@ -251,7 +251,7 @@ list_reagents = list("protein" = 6, "vitamin" = 1, "porktonium" = 10) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/cutlet +/obj/item/food/snacks/cutlet name = "cutlet" desc = "A tasty meat slice." icon = 'icons/obj/food/food_ingredients.dmi' @@ -259,7 +259,7 @@ list_reagents = list("protein" = 2) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/spidereggsham +/obj/item/food/snacks/spidereggsham name = "green eggs and ham" desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" icon = 'icons/obj/food/meat.dmi' @@ -269,7 +269,7 @@ list_reagents = list("nutriment" = 6) tastes = list("cobwebs" = 1, "the colour green" = 1) -/obj/item/reagent_containers/food/snacks/boiledspiderleg +/obj/item/food/snacks/boiledspiderleg name = "boiled spider leg" desc = "A giant spider's leg that's still twitching after being cooked. Gross!" icon = 'icons/obj/food/meat.dmi' @@ -279,7 +279,7 @@ list_reagents = list("nutriment" = 3, "capsaicin" = 2) tastes = list("cobwebs" = 1, "hot peppers" = 1) -/obj/item/reagent_containers/food/snacks/wingfangchu +/obj/item/food/snacks/wingfangchu name = "wing fang chu" desc = "A savory dish of alien wing wang in soy. Wait, what?" icon = 'icons/obj/food/soupsalad.dmi' @@ -289,7 +289,7 @@ list_reagents = list("nutriment" = 6, "soysauce" = 5, "vitamin" = 2) tastes = list("soy" = 1) -/obj/item/reagent_containers/food/snacks/goliath_steak +/obj/item/food/snacks/goliath_steak name = "goliath steak" desc = "A delicious, lava cooked steak." resistance_flags = LAVA_PROOF | FIRE_PROOF @@ -299,7 +299,7 @@ list_reagents = list("protein" = 6, "vitamin" = 2) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/fried_vox +/obj/item/food/snacks/fried_vox name = "Kentucky Fried Vox" desc = "Bucket of voxxy, yaya!" icon = 'icons/obj/food/meat.dmi' @@ -312,7 +312,7 @@ // Cubes // ////////////////////// -/obj/item/reagent_containers/food/snacks/monkeycube +/obj/item/food/snacks/monkeycube name = "monkey cube" desc = "Just add water!" icon_state = "monkeycube" @@ -323,17 +323,17 @@ list_reagents = list("nutriment" = 2) tastes = list("the jungle" = 1, "bananas" = 1) -/obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature, source, method = REAGENT_TOUCH) +/obj/item/food/snacks/monkeycube/water_act(volume, temperature, source, method = REAGENT_TOUCH) . = ..() if(volume >= 1) return Expand() -/obj/item/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source) +/obj/item/food/snacks/monkeycube/wash(mob/user, atom/source) user.drop_item() forceMove(get_turf(source)) return 1 -/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() +/obj/item/food/snacks/monkeycube/proc/Expand() if(LAZYLEN(SSmobs.cubemonkeys) >= GLOB.configuration.general.monkey_cube_cap) if(fingerprintslast) to_chat(get_mob_by_ckey(fingerprintslast), "Bluespace harmonics prevent the spawning of more than [GLOB.configuration.general.monkey_cube_cap] monkeys on the station at one time!") @@ -355,22 +355,22 @@ SSmobs.cubemonkeys += creature qdel(src) -/obj/item/reagent_containers/food/snacks/monkeycube/syndicate +/obj/item/food/snacks/monkeycube/syndicate faction = list("neutral", "syndicate") -/obj/item/reagent_containers/food/snacks/monkeycube/farwacube +/obj/item/food/snacks/monkeycube/farwacube name = "farwa cube" monkey_type = /datum/species/monkey/tajaran -/obj/item/reagent_containers/food/snacks/monkeycube/wolpincube +/obj/item/food/snacks/monkeycube/wolpincube name = "wolpin cube" monkey_type = /datum/species/monkey/vulpkanin -/obj/item/reagent_containers/food/snacks/monkeycube/stokcube +/obj/item/food/snacks/monkeycube/stokcube name = "stok cube" monkey_type = /datum/species/monkey/unathi -/obj/item/reagent_containers/food/snacks/monkeycube/neaeracube +/obj/item/food/snacks/monkeycube/neaeracube name = "neaera cube" monkey_type = /datum/species/monkey/skrell @@ -379,7 +379,7 @@ // Eggs // ////////////////////// -/obj/item/reagent_containers/food/snacks/egg +/obj/item/food/snacks/egg name = "egg" desc = "An egg!" icon = 'icons/obj/food/breakfast.dmi' @@ -387,8 +387,9 @@ filling_color = "#FDFFD1" list_reagents = list("protein" = 1, "egg" = 5) tastes = list("egg" = 1) + var/amount_grown = 0 -/obj/item/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) +/obj/item/food/snacks/egg/throw_impact(atom/hit_atom) ..() var/turf/T = get_turf(hit_atom) new/obj/effect/decal/cleanable/egg_smudge(T) @@ -396,7 +397,7 @@ reagents.reaction(hit_atom, REAGENT_TOUCH) qdel(src) -/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/egg/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = W var/clr = C.colourName @@ -411,49 +412,49 @@ else ..() -/obj/item/reagent_containers/food/snacks/egg/blue +/obj/item/food/snacks/egg/blue icon_state = "egg-blue" item_color = "blue" -/obj/item/reagent_containers/food/snacks/egg/green +/obj/item/food/snacks/egg/green icon_state = "egg-green" item_color = "green" -/obj/item/reagent_containers/food/snacks/egg/mime +/obj/item/food/snacks/egg/mime icon_state = "egg-mime" item_color = "mime" -/obj/item/reagent_containers/food/snacks/egg/orange +/obj/item/food/snacks/egg/orange icon_state = "egg-orange" item_color = "orange" -/obj/item/reagent_containers/food/snacks/egg/purple +/obj/item/food/snacks/egg/purple icon_state = "egg-purple" item_color = "purple" -/obj/item/reagent_containers/food/snacks/egg/rainbow +/obj/item/food/snacks/egg/rainbow icon_state = "egg-rainbow" item_color = "rainbow" -/obj/item/reagent_containers/food/snacks/egg/red +/obj/item/food/snacks/egg/red icon_state = "egg-red" item_color = "red" -/obj/item/reagent_containers/food/snacks/egg/yellow +/obj/item/food/snacks/egg/yellow icon_state = "egg-yellow" item_color = "yellow" -/obj/item/reagent_containers/food/snacks/egg/gland +/obj/item/food/snacks/egg/gland desc = "An egg! It looks weird..." -/obj/item/reagent_containers/food/snacks/egg/gland/Initialize(mapload) +/obj/item/food/snacks/egg/gland/Initialize(mapload) . = ..() reagents.add_reagent(get_random_reagent_id(), 15) var/reagent_color = mix_color_from_reagents(reagents.reagent_list) color = reagent_color -/obj/item/reagent_containers/food/snacks/friedegg +/obj/item/food/snacks/friedegg name = "fried egg" desc = "A fried egg, with a touch of salt and pepper." icon = 'icons/obj/food/breakfast.dmi' @@ -463,7 +464,7 @@ list_reagents = list("nutriment" = 3, "egg" = 5) tastes = list("egg" = 1, "salt" = 1, "pepper" = 1) -/obj/item/reagent_containers/food/snacks/boiledegg +/obj/item/food/snacks/boiledegg name = "boiled egg" desc = "A hard boiled egg." icon = 'icons/obj/food/breakfast.dmi' @@ -471,7 +472,7 @@ filling_color = "#FFFFFF" list_reagents = list("nutriment" = 2, "egg" = 5, "vitamin" = 1) -/obj/item/reagent_containers/food/snacks/chocolateegg +/obj/item/food/snacks/chocolateegg name = "chocolate egg" desc = "Such sweet, fattening food." icon = 'icons/obj/food/breakfast.dmi' @@ -479,7 +480,7 @@ filling_color = "#7D5F46" list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2) -/obj/item/reagent_containers/food/snacks/omelette +/obj/item/food/snacks/omelette name = "omelette du fromage" desc = "That's all you can say!" icon = 'icons/obj/food/breakfast.dmi' @@ -490,7 +491,7 @@ bitesize = 1 tastes = list("egg" = 1, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/benedict +/obj/item/food/snacks/benedict name = "eggs benedict" desc = "There is only one egg on this, how rude." icon = 'icons/obj/food/breakfast.dmi' @@ -504,7 +505,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/hotdog +/obj/item/food/snacks/hotdog name = "hotdog" desc = "Not made with actual dogs. Hopefully." icon = 'icons/obj/food/burgerbread.dmi' @@ -513,7 +514,7 @@ list_reagents = list("nutriment" = 6, "ketchup" = 3, "vitamin" = 3) tastes = list("bun" = 3, "meat" = 2) -/obj/item/reagent_containers/food/snacks/meatbun +/obj/item/food/snacks/meatbun name = "meat bun" desc = "Has the potential to not be dog." icon = 'icons/obj/food/meat.dmi' @@ -522,17 +523,17 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) tastes = list("bun" = 3, "meat" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/turkey +/obj/item/food/snacks/sliceable/turkey name = "turkey" desc = "A traditional turkey served with stuffing." icon = 'icons/obj/food/meat.dmi' icon_state = "turkey" - slice_path = /obj/item/reagent_containers/food/snacks/turkeyslice + slice_path = /obj/item/food/snacks/turkeyslice slices_num = 6 list_reagents = list("protein" = 24, "nutriment" = 18, "vitamin" = 5) tastes = list("turkey" = 2, "stuffing" = 2) -/obj/item/reagent_containers/food/snacks/turkeyslice +/obj/item/food/snacks/turkeyslice name = "turkey serving" desc = "A serving of some tender and delicious turkey." icon = 'icons/obj/food/meat.dmi' @@ -541,7 +542,7 @@ filling_color = "#B97A57" tastes = list("turkey" = 1) -/obj/item/reagent_containers/food/snacks/organ +/obj/item/food/snacks/organ name = "organ" desc = "Technically qualifies as organic." icon = 'icons/obj/surgery.dmi' @@ -550,7 +551,7 @@ bitesize = 3 list_reagents = list("protein" = 4, "vitamin" = 4) -/obj/item/reagent_containers/food/snacks/appendix +/obj/item/food/snacks/appendix //yes, this is the same as meat. I might do something different in future name = "appendix" desc = "An appendix which looks perfectly healthy." @@ -560,13 +561,13 @@ bitesize = 3 list_reagents = list("protein" = 3, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/appendix/inflamed +/obj/item/food/snacks/appendix/inflamed name = "inflamed appendix" desc = "An appendix which appears to be inflamed." icon_state = "appendixinflamed" filling_color = "#E00D7A" -/obj/item/reagent_containers/food/snacks/bbqribs +/obj/item/food/snacks/bbqribs name = "BBQ ribs" desc = "Sweet, smokey, savory, and gets everywhere. Perfect for Grilling." icon = 'icons/obj/food/meat.dmi' diff --git a/code/modules/food_and_drinks/food/foods/misc_food.dm b/code/modules/food_and_drinks/food/foods/misc_food.dm index 870fa54b00bf..26624dbd595e 100644 --- a/code/modules/food_and_drinks/food/foods/misc_food.dm +++ b/code/modules/food_and_drinks/food/foods/misc_food.dm @@ -3,7 +3,7 @@ // Meals // ////////////////////// -/obj/item/reagent_containers/food/snacks/eggplantparm +/obj/item/food/snacks/eggplantparm name = "eggplant parmigiana" desc = "The only good recipe for eggplant." icon_state = "eggplantparm" @@ -12,7 +12,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) tastes = list("eggplant" = 2, "cheese" = 2) -/obj/item/reagent_containers/food/snacks/soylentgreen +/obj/item/food/snacks/soylentgreen name = "soylent green" desc = "Not made of people. Honest." //Totally people. icon_state = "soylent_green" @@ -21,7 +21,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) tastes = list("waffles" = 7, "people" = 1) -/obj/item/reagent_containers/food/snacks/soylentviridians +/obj/item/food/snacks/soylentviridians name = "soylent virdians" desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" @@ -30,7 +30,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) tastes = list("waffles" = 1) -/obj/item/reagent_containers/food/snacks/monkeysdelight +/obj/item/food/snacks/monkeysdelight name = "monkey's delight" desc = "Eeee Eee!" icon_state = "monkeysdelight" @@ -40,7 +40,7 @@ list_reagents = list("nutriment" = 10, "banana" = 5, "vitamin" = 5) tastes = list("banana" = 1, "the jungle" = 1) -/obj/item/reagent_containers/food/snacks/dionaroast +/obj/item/food/snacks/dionaroast name = "roast diona" desc = "It's like an enormous leathery carrot... With an eye." icon_state = "dionaroast" @@ -49,7 +49,7 @@ list_reagents = list("plantmatter" = 4, "nutriment" = 2, "radium" = 2, "vitamin" = 4) tastes = list("chewy vegetables" = 1) -/obj/item/reagent_containers/food/snacks/tofurkey +/obj/item/food/snacks/tofurkey name = "tofurkey" desc = "A fake turkey made from tofu." icon_state = "tofurkey" @@ -63,7 +63,7 @@ // Salads // ////////////////////// -/obj/item/reagent_containers/food/snacks/salad +/obj/item/food/snacks/salad name = "salad" desc = "This salad is blander than the jokes of the clown, but is also low in carbohydrates!" icon = 'icons/obj/food/soupsalad.dmi' @@ -74,70 +74,70 @@ list_reagents = list("nutriment" = 6,"vitamin" = 4) tastes = list("lettuce" = 1) -/obj/item/reagent_containers/food/snacks/salad/aesir +/obj/item/food/snacks/salad/aesir name = "aesir salad" desc = "Probably too incredible for mortal men to fully enjoy." icon_state = "aesirsalad" list_reagents = list("nutriment" = 8, "omnizine" = 8, "vitamin" = 6) tastes = list("divinity" = 1, "lettuce" = 1) -/obj/item/reagent_containers/food/snacks/salad/antipasto +/obj/item/food/snacks/salad/antipasto name = "antipasto salad" desc = "A traditional Italian salad made of salami, mozzarella cheese, olives, and tomatoes. Often served as a first course meal." icon_state = "antipasto_salad" list_reagents = list("nutriment" = 12, "protein" = 6, "vitamin" = 6) tastes = list("lettuce" = 2, "salami" = 2, "mozzarella cheese" = 2, "tomatoes" = 2, "dressing" = 1) -/obj/item/reagent_containers/food/snacks/salad/caesar +/obj/item/food/snacks/salad/caesar name = "Caesar salad" desc = "A simple yet flavorful salad of onions, lettuce, croutons, and shreds of cheese dressed in oil. Comes with a slice of pita bread!" icon_state = "caesar_salad" list_reagents = list("nutriment" = 12, "vitamin" = 6) tastes = list("healthy greens" = 2, "olive dressing" = 2, "feta cheese" = 2, "pita bread" = 1) -/obj/item/reagent_containers/food/snacks/salad/fruit +/obj/item/food/snacks/salad/fruit name = "fruit salad" desc = "Your standard fruit salad." icon_state = "fruitsalad" list_reagents = list("nutriment" = 9, "vitamin" = 4) tastes = list("fruit" = 1) -/obj/item/reagent_containers/food/snacks/salad/greek +/obj/item/food/snacks/salad/greek name = "Greek salad" desc = "A popular salad made of tomatoes, onions, feta cheese, and olives all drizzled in olive oil. Though it feels like it's missing something..." icon_state = "greek_salad" list_reagents = list("nutriment" = 13, "vitamin" = 14) tastes = list("healthy greens" = 2, "olive dressing" = 1, "feta cheese" = 1) -/obj/item/reagent_containers/food/snacks/salad/citrusdelight +/obj/item/food/snacks/salad/citrusdelight name = "citrus delight" desc = "Citrus overload!" icon_state = "citrusdelight" list_reagents = list("nutriment" = 11, "vitamin" = 7) tastes = list("sourness" = 1, "leaves" = 1) -/obj/item/reagent_containers/food/snacks/salad/jungle +/obj/item/food/snacks/salad/jungle name = "jungle salad" desc = "Exotic fruits in a bowl." icon_state = "junglesalad" list_reagents = list("banana" = 5, "nutriment" = 11, "vitamin" = 7) tastes = list("fruit" = 1, "the jungle" = 1) -/obj/item/reagent_containers/food/snacks/salad/kale +/obj/item/food/snacks/salad/kale name = "kale salad" desc = "A healthy kale salad drizzled in oil, perfect for warm summer months." icon_state = "kale_salad" list_reagents = list("nutriment" = 12, "vitamin" = 12) tastes = list("healthy greens" = 2, "olive dressing" = 1) -/obj/item/reagent_containers/food/snacks/salad/potato +/obj/item/food/snacks/salad/potato name = "potato salad" desc = "A dish of boiled potatoes mixed with boiled eggs, onions, and mayonnaise. A staple of every self-respecting barbeque." icon_state = "potato_salad" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("potato" = 2, "egg" = 2, "mayonnaise" = 2) -/obj/item/reagent_containers/food/snacks/salad/melonfruitbowl +/obj/item/food/snacks/salad/melonfruitbowl name = "melon fruit bowl" desc = "For people who wants edible fruit bowls." icon_state = "melonfruitbowl" @@ -145,7 +145,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 4) tastes = list("melon" = 1) -/obj/item/reagent_containers/food/snacks/salad/herb +/obj/item/food/snacks/salad/herb name = "herb salad" desc = "A tasty salad with apples on top." icon_state = "herbsalad" @@ -153,7 +153,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 2) tastes = list("lettuce" = 1, "apple" = 1) -/obj/item/reagent_containers/food/snacks/salad/valid +/obj/item/food/snacks/salad/valid name = "valid salad" desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it." icon_state = "validsalad" @@ -166,7 +166,7 @@ // Donk Pockets // ////////////////////// -/obj/item/reagent_containers/food/snacks/donkpocket +/obj/item/food/snacks/donkpocket name = "Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" @@ -175,7 +175,7 @@ tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) ingredient_name = "turnover" -/obj/item/reagent_containers/food/snacks/warmdonkpocket +/obj/item/food/snacks/warmdonkpocket name = "warm Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" @@ -191,20 +191,20 @@ /// This tracks how much time the donk pocket has already been cooling for when its timer is paused var/subtracted_time = 0 -/obj/item/reagent_containers/food/snacks/warmdonkpocket/Initialize(mapload) +/obj/item/food/snacks/warmdonkpocket/Initialize(mapload) . = ..() donk_heat() -/obj/item/reagent_containers/food/snacks/warmdonkpocket/proc/donk_heat() +/obj/item/food/snacks/warmdonkpocket/proc/donk_heat() heated_at = world.time cool_timer = addtimer(CALLBACK(src, PROC_REF(donk_cool)), 7 MINUTES - subtracted_time, TIMER_UNIQUE|TIMER_STOPPABLE) -/obj/item/reagent_containers/food/snacks/warmdonkpocket/proc/donk_cool() +/obj/item/food/snacks/warmdonkpocket/proc/donk_cool() name = "cold Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is cold." warm = FALSE -/obj/item/reagent_containers/food/snacks/warmdonkpocket/on_enter_storage(obj/item/storage/S) +/obj/item/food/snacks/warmdonkpocket/on_enter_storage(obj/item/storage/S) . = ..() if(!cool_timer) return @@ -213,25 +213,25 @@ subtracted_time += (world.time - heated_at) cool_timer = null -/obj/item/reagent_containers/food/snacks/warmdonkpocket/on_exit_storage(obj/item/storage/S) +/obj/item/food/snacks/warmdonkpocket/on_exit_storage(obj/item/storage/S) . = ..() if(warm) donk_heat() -/obj/item/reagent_containers/food/snacks/warmdonkpocket/Post_Consume(mob/living/M) +/obj/item/food/snacks/warmdonkpocket/Post_Consume(mob/living/M) if(warm) M.reagents.add_reagent("omnizine", 15) return M.reagents.add_reagent("weak_omnizine", 5) -/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak +/obj/item/food/snacks/warmdonkpocket_weak name = "lukewarm Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is lukewarm." icon_state = "donkpocket" filling_color = "#DEDEAB" list_reagents = list("nutriment" = 4, "weak_omnizine" = 3) -/obj/item/reagent_containers/food/snacks/syndidonkpocket +/obj/item/food/snacks/syndidonkpocket name = "Donk-pocket" desc = "This donk-pocket is emitting a small amount of heat." icon_state = "donkpocket" @@ -239,7 +239,7 @@ bitesize = 100 //nom the whole thing at once. list_reagents = list("nutriment" = 1) -/obj/item/reagent_containers/food/snacks/syndidonkpocket/Post_Consume(mob/living/M) +/obj/item/food/snacks/syndidonkpocket/Post_Consume(mob/living/M) M.reagents.add_reagent("omnizine", 15) M.reagents.add_reagent("teporone", 15) M.reagents.add_reagent("synaptizine", 15) @@ -252,7 +252,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/boiledslimecore +/obj/item/food/snacks/boiledslimecore name = "boiled slime core" desc = "A boiled red thing." icon_state = "boiledrorocore" @@ -260,7 +260,7 @@ list_reagents = list("slimejelly" = 5) tastes = list("jelly" = 1) -/obj/item/reagent_containers/food/snacks/popcorn +/obj/item/food/snacks/popcorn name = "popcorn" desc = "Now let's find some cinema." icon_state = "popcorn" @@ -271,17 +271,17 @@ list_reagents = list("nutriment" = 2) tastes = list("popcorn" = 3, "butter" = 1) -/obj/item/reagent_containers/food/snacks/popcorn/Initialize(mapload) +/obj/item/food/snacks/popcorn/Initialize(mapload) . = ..() unpopped = rand(1,10) -/obj/item/reagent_containers/food/snacks/popcorn/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/popcorn/On_Consume(mob/M, mob/user) if(prob(unpopped)) //lol ...what's the point? to_chat(user, "You bite down on an un-popped kernel!") unpopped = max(0, unpopped-1) ..() -/obj/item/reagent_containers/food/snacks/liquidfood +/obj/item/food/snacks/liquidfood name = "\improper LiquidFood ration" desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?" icon_state = "liquidfood" diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index bd6be224225c..984fb60c1a8e 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -3,7 +3,7 @@ // Raw Pasta // ////////////////////// -/obj/item/reagent_containers/food/snacks/spaghetti +/obj/item/food/snacks/spaghetti name = "spaghetti" desc = "A bundle of raw spaghetti." icon = 'icons/obj/food/pasta.dmi' @@ -12,7 +12,7 @@ list_reagents = list("nutriment" = 1, "vitamin" = 1) tastes = list("raw pasta" = 1) -/obj/item/reagent_containers/food/snacks/macaroni +/obj/item/food/snacks/macaroni name = "macaroni twists" desc = "These are little twists of raw macaroni." icon = 'icons/obj/food/pasta.dmi' @@ -26,7 +26,7 @@ // Pasta Dishes // ////////////////////// -/obj/item/reagent_containers/food/snacks/boiledspaghetti +/obj/item/food/snacks/boiledspaghetti name = "boiled spaghetti" desc = "A plain dish of noodles. This sucks." icon = 'icons/obj/food/pasta.dmi' @@ -36,7 +36,7 @@ list_reagents = list("nutriment" = 2, "vitamin" = 1) tastes = list("pasta" = 1) -/obj/item/reagent_containers/food/snacks/pastatomato +/obj/item/food/snacks/pastatomato name = "spaghetti" desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" icon = 'icons/obj/food/pasta.dmi' @@ -47,7 +47,7 @@ list_reagents = list("nutriment" = 6, "tomatojuice" = 10, "vitamin" = 4) tastes = list("pasta" = 1, "tomato" = 1) -/obj/item/reagent_containers/food/snacks/meatballspaghetti +/obj/item/food/snacks/meatballspaghetti name = "spaghetti & meatballs" desc = "Now that's a nice'a meatball!" icon = 'icons/obj/food/pasta.dmi' @@ -57,7 +57,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 5, "vitamin" = 4) tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/spesslaw +/obj/item/food/snacks/spesslaw name = "spesslaw" desc = "A lawyer's favourite." icon = 'icons/obj/food/pasta.dmi' @@ -66,7 +66,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6) tastes = list("pasta" = 1, "tomato" = 1, "meat" = 2) -/obj/item/reagent_containers/food/snacks/macncheese +/obj/item/food/snacks/macncheese name = "mac 'n' cheese" desc = "One of the most comforting foods in the world. Apparently." trash = /obj/item/trash/snack_bowl @@ -76,7 +76,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 2, "cheese" = 4) tastes = list("pasta" = 1, "cheese" = 1, "comfort" = 1) -/obj/item/reagent_containers/food/snacks/lasagna +/obj/item/food/snacks/lasagna name = "lasagna" desc = "Tajara love to eat this, for some reason." icon = 'icons/obj/food/pasta.dmi' diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index 4b3e20b08808..d37e3f058435 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -3,21 +3,21 @@ // Pizzas // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/pizza +/obj/item/food/snacks/sliceable/pizza icon = 'icons/obj/food/pizza.dmi' slices_num = 6 filling_color = "#BAA14C" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) // Margherita -/obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza +/obj/item/food/snacks/sliceable/pizza/margheritapizza name = "margherita pizza" desc = "The golden standard of pizzas." icon_state = "margheritapizza" - slice_path = /obj/item/reagent_containers/food/snacks/margheritapizzaslice + slice_path = /obj/item/food/snacks/margheritapizzaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5) -/obj/item/reagent_containers/food/snacks/margheritapizzaslice +/obj/item/food/snacks/margheritapizzaslice name = "margherita slice" desc = "A slice of the classic pizza." icon = 'icons/obj/food/pizza.dmi' @@ -26,15 +26,15 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) // Meat Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza +/obj/item/food/snacks/sliceable/pizza/meatpizza name = "meat pizza" desc = "A pizza with meat topping." icon_state = "meatpizza" - slice_path = /obj/item/reagent_containers/food/snacks/meatpizzaslice + slice_path = /obj/item/food/snacks/meatpizzaslice list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8) tastes = list("crust" = 1, "cheese" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/meatpizzaslice +/obj/item/food/snacks/meatpizzaslice name = "meat pizza slice" desc = "A slice of a meaty pizza." icon = 'icons/obj/food/pizza.dmi' @@ -43,15 +43,15 @@ tastes = list("crust" = 1, "cheese" = 1, "meat" = 1) // Mushroom Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza +/obj/item/food/snacks/sliceable/pizza/mushroompizza name = "mushroom pizza" desc = "Very special pizza." icon_state = "mushroompizza" - slice_path = /obj/item/reagent_containers/food/snacks/mushroompizzaslice + slice_path = /obj/item/food/snacks/mushroompizzaslice list_reagents = list("plantmatter" = 30, "vitamin" = 5) tastes = list("crust" = 1, "cheese" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/mushroompizzaslice +/obj/item/food/snacks/mushroompizzaslice name = "mushroom pizza slice" desc = "Maybe it is the last slice of pizza in your life." icon = 'icons/obj/food/pizza.dmi' @@ -60,15 +60,15 @@ tastes = list("crust" = 1, "cheese" = 1, "mushroom" = 1) // Vegetable Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza +/obj/item/food/snacks/sliceable/pizza/vegetablepizza name = "vegetable pizza" desc = "No Tomato Sapiens were harmed during the making of this pizza." icon_state = "vegetablepizza" - slice_path = /obj/item/reagent_containers/food/snacks/vegetablepizzaslice + slice_path = /obj/item/food/snacks/vegetablepizzaslice list_reagents = list("plantmatter" = 25, "tomatojuice" = 6, "oculine" = 12, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "carrot" = 1, "vegetables" = 1) -/obj/item/reagent_containers/food/snacks/vegetablepizzaslice +/obj/item/food/snacks/vegetablepizzaslice name = "vegetable pizza slice" desc = "A slice of the most green pizza of all pizzas not containing green ingredients." icon = 'icons/obj/food/pizza.dmi' @@ -77,15 +77,15 @@ tastes = list("crust" = 1, "tomato" = 1, "carrot" = 1, "vegetables" = 1) // Hawaiian Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza +/obj/item/food/snacks/sliceable/pizza/hawaiianpizza name = "hawaiian pizza" desc = "Love it or hate it, this pizza divides opinions. Complete with juicy pineapple." icon_state = "hawaiianpizza" - slice_path = /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice + slice_path = /obj/item/food/snacks/hawaiianpizzaslice list_reagents = list("protein" = 15, "tomatojuice" = 6, "plantmatter" = 20, "pineapplejuice" = 6, "vitamin" = 5) tastes = list("crust" = 1, "cheese" = 1, "pineapple" = 1) -/obj/item/reagent_containers/food/snacks/hawaiianpizzaslice +/obj/item/food/snacks/hawaiianpizzaslice name = "hawaiian pizza slice" desc = "A slice of polarising pizza." icon = 'icons/obj/food/pizza.dmi' @@ -94,16 +94,16 @@ tastes = list("crust" = 1, "cheese" = 1, "pineapple" = 1) // Mac 'n' Cheese Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza +/obj/item/food/snacks/sliceable/pizza/macpizza name = "mac 'n' cheese pizza" desc = "Gastronomists have yet to classify this dish as 'pizza'." icon_state = "macpizza" - slice_path = /obj/item/reagent_containers/food/snacks/macpizzaslice + slice_path = /obj/item/food/snacks/macpizzaslice list_reagents = list("nutriment" = 40, "vitamin" = 5) //More nutriment because carbs, but it's not any more vitaminicious filling_color = "#ffe45d" tastes = list("crust" = 1, "cheese" = 2, "pasta" = 1) -/obj/item/reagent_containers/food/snacks/macpizzaslice +/obj/item/food/snacks/macpizzaslice name = "mac 'n' cheese pizza slice" desc = "A delicious slice of pizza topped with macaroni & cheese... wait, what the hell? Who would do this?!" icon = 'icons/obj/food/pizza.dmi' @@ -112,16 +112,16 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 2, "pasta" = 1) // Pepperoni Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza +/obj/item/food/snacks/sliceable/pizza/pepperonipizza name = "pepperoni pizza" desc = "What did the pepperoni say to the pizza?" icon_state = "pepperonipizza" - slice_path = /obj/item/reagent_containers/food/snacks/pepperonipizzaslice + slice_path = /obj/item/food/snacks/pepperonipizzaslice list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8) filling_color = "#ffe45d" tastes = list("cheese" = 3, "pepperoni" = 3, "grease" = 1) -/obj/item/reagent_containers/food/snacks/pepperonipizzaslice +/obj/item/food/snacks/pepperonipizzaslice name = "pepperoni pizza slice" desc = "Nice to meat you!" icon = 'icons/obj/food/pizza.dmi' @@ -130,14 +130,14 @@ tastes = list("cheese" = 3, "pepperoni" = 3, "grease" = 1) // Cheese Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/cheesepizza +/obj/item/food/snacks/sliceable/pizza/cheesepizza name = "cheese pizza" desc = "Cheese, bread, cheese, tomato, and cheese." icon_state = "cheesepizza" - slice_path = /obj/item/reagent_containers/food/snacks/cheesepizzaslice + slice_path = /obj/item/food/snacks/cheesepizzaslice list_reagents = list("nutriment" = 40, "tomatojuice" = 6, "vitamin" = 5) -/obj/item/reagent_containers/food/snacks/cheesepizzaslice +/obj/item/food/snacks/cheesepizzaslice name = "cheese pizza slice" desc = "Dangerously cheesy?" icon = 'icons/obj/food/pizza.dmi' @@ -146,15 +146,15 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 3) // Donk-pocket Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/donkpocketpizza +/obj/item/food/snacks/sliceable/pizza/donkpocketpizza name = "donk-pocket pizza" desc = "Who thought this would be a good idea?" icon_state = "donkpocketpizza" - slice_path = /obj/item/reagent_containers/food/snacks/donkpocketpizzaslice + slice_path = /obj/item/food/snacks/donkpocketpizzaslice list_reagents = list("nutriment" = 35, "tomatojuice" = 6, "vitamin" = 2, "weak_omnizine" = 6) tastes = list("crust" = 1, "meat" = 1, "laziness" = 1) -/obj/item/reagent_containers/food/snacks/donkpocketpizzaslice +/obj/item/food/snacks/donkpocketpizzaslice name = "donk-pocket pizza slice" desc = "Smells like lukewarm donk-pocket." icon = 'icons/obj/food/pizza.dmi' @@ -163,15 +163,15 @@ tastes = list("crust" = 1, "meat" = 1, "laziness" = 1) // Dank Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/dankpizza +/obj/item/food/snacks/sliceable/pizza/dankpizza name = "dank pizza" desc = "The hippie's pizza of choice." icon_state = "dankpizza" - slice_path = /obj/item/reagent_containers/food/snacks/dankpizzaslice + slice_path = /obj/item/food/snacks/dankpizzaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5, "cbd" = 6, "thc" = 6) tastes = list("crust" = 1, "cheese" = 1, "special herbs" = 2) -/obj/item/reagent_containers/food/snacks/dankpizzaslice +/obj/item/food/snacks/dankpizzaslice name = "dank pizza slice" desc = "So good, man..." icon = 'icons/obj/food/pizza.dmi' @@ -180,15 +180,15 @@ tastes = list("crust" = 1, "cheese" = 1, "special herbs" = 2) // Firecracker Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza +/obj/item/food/snacks/sliceable/pizza/firecrackerpizza name = "firecracker pizza" desc = "Tastes HOT HOT HOT!" icon_state = "firecrackerpizza" - slice_path = /obj/item/reagent_containers/food/snacks/firecrackerpizzaslice + slice_path = /obj/item/food/snacks/firecrackerpizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 5, "capsaicin" = 12) tastes = list("crust" = 1, "cheese" = 1, "HOTNESS" = 1) -/obj/item/reagent_containers/food/snacks/firecrackerpizzaslice +/obj/item/food/snacks/firecrackerpizzaslice name = "firecracker pizza slice" desc = "A spicy slice of something quite nice" icon = 'icons/obj/food/pizza.dmi' @@ -197,15 +197,15 @@ tastes = list("crust" = 1, "cheese" = 1, "HOTNESS" = 1) // "Pesto" Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/pestopizza +/obj/item/food/snacks/sliceable/pizza/pestopizza name = "\"pesto\" pizza" desc = "Wait a second...this doesn't taste like pesto!" icon_state = "pestopizza" - slice_path = /obj/item/reagent_containers/food/snacks/pestopizzaslice + slice_path = /obj/item/food/snacks/pestopizzaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 12, "vitamin" = 5, "wasabi" = 12) tastes = list("tomato" = 1, "cheese" = 1, "wasabi" = 1) -/obj/item/reagent_containers/food/snacks/pestopizzaslice +/obj/item/food/snacks/pestopizzaslice name = "\"pesto\" pizza slice" desc = "Delicious and suspicious(ly green)." icon = 'icons/obj/food/pizza.dmi' @@ -214,15 +214,15 @@ tastes = list("tomato" = 1, "cheese" = 1, "wasabi" = 1) // Garlic Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza +/obj/item/food/snacks/sliceable/pizza/garlicpizza name = "garlic pizza" desc = "Ahh, garlic. A universally loved ingredient, except possibly by vampires." icon_state = "garlicpizza" - slice_path = /obj/item/reagent_containers/food/snacks/garlicpizzaslice + slice_path = /obj/item/food/snacks/garlicpizzaslice list_reagents = list("plantmatter" = 30, "vitamin" = 5, "garlic" = 12) tastes = list("crust" = 1, "cheese" = 1, "garlic" = 1) -/obj/item/reagent_containers/food/snacks/garlicpizzaslice +/obj/item/food/snacks/garlicpizzaslice name = "garlic pizza slice" desc = "What's not to love?" icon = 'icons/obj/food/pizza.dmi' @@ -243,7 +243,7 @@ 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/obj/item/food/snacks/sliceable/pizza/pizza // Content pizza var/list/boxes = list() // If the boxes are stacked, they come here var/box_tag = "" @@ -322,7 +322,7 @@ ..() if(length(boxes) || !Adjacent(user)) return - open = !open + open = !open update_appearance(UPDATE_DESC|UPDATE_ICON) /obj/item/pizzabox/attack_self(mob/user) @@ -356,7 +356,7 @@ to_chat(user, "Close [box] first!") return - if(istype(I, /obj/item/reagent_containers/food/snacks/sliceable/pizza/)) // Long ass fucking object name + if(istype(I, /obj/item/food/snacks/sliceable/pizza)) // Long ass fucking object name if(open) user.drop_item() I.loc = src @@ -372,7 +372,9 @@ if(is_pen(I)) if(open) return - var/t = clean_input("Enter what you want to set the tag to:", "Write", null) + var/t = tgui_input_text(usr, "Enter what you want to set the tag to:", "Write") + if(!t) + return var/obj/item/pizzabox/boxtotagto = src if(boxes.len > 0) boxtotagto = boxes[boxes.len] @@ -383,42 +385,42 @@ /obj/item/pizzabox/margherita/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/margheritapizza(src) box_tag = "margherita deluxe" . = ..() /obj/item/pizzabox/vegetable/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/vegetablepizza(src) box_tag = "gourmet vegetable" . = ..() /obj/item/pizzabox/mushroom/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/mushroompizza(src) box_tag = "mushroom special" . = ..() /obj/item/pizzabox/meat/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/meatpizza(src) box_tag = "meatlover's supreme" . = ..() /obj/item/pizzabox/hawaiian/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/hawaiianpizza(src) box_tag = "Hawaiian feast" . = ..() /obj/item/pizzabox/pepperoni/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/pepperonipizza(src) box_tag = "classic pepperoni" . = ..() /obj/item/pizzabox/garlic/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/garlicpizza(src) box_tag = "triple garlic" . = ..() /obj/item/pizzabox/firecracker/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/firecrackerpizza(src) box_tag = "extra spicy pie" . = ..() @@ -458,14 +460,16 @@ desc = "It seems inactive." icon_state = "pizzabox_bomb" timer_set = TRUE - timer = (input(user, "Set a timer, from one second to ten seconds.", "Timer", "[timer]") as num) SECONDS + var/new_timer = tgui_input_number(user, "Set a timer, from one second to ten seconds.", "Timer", timer / 10, 10, 1) + if(!new_timer) + return if(!in_range(src, user) || issilicon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained()) timer_set = FALSE name = "pizza box" desc = "A box suited for pizzas." icon_state = "pizzabox1" return - timer = clamp(timer, 1 SECONDS, 10 SECONDS) + timer = new_timer SECONDS icon_state = "pizzabox1" to_chat(user, "You set the timer to [timer / 10] before activating the payload and closing [src].") message_admins("[key_name_admin(usr)] has set a timer on a pizza bomb to [timer/10] seconds at (JMP).") @@ -515,8 +519,8 @@ /obj/item/pizzabox/pizza_bomb/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/wirecutters) && primed) to_chat(user, "Oh God, what wire do you cut?!") - var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires - if(!in_range(src, user) || issilicon(usr) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained()) + var/chosen_wire = tgui_input_list(user, "OH GOD OH GOD", "WHAT WIRE?!", wires) + if(!in_range(src, user) || issilicon(usr) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained() || !chosen_wire) return playsound(src, I.usesound, 50, 1, 1) user.visible_message("[user] cuts the [chosen_wire] wire!", "You cut the [chosen_wire] wire!") diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index e912b6fbafca..05d584229845 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -5,13 +5,13 @@ // Abstract object used for inheritance. Should never spawn. Needed to not break recipes that use plain burgers; recipes that use "burger" would accept any burger and transfer reagents otherwise. -/obj/item/reagent_containers/food/snacks/burger +/obj/item/food/snacks/burger name = "burger" desc = "If you got this, something broke! Contact a coder if this somehow spawns." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "burger" -/obj/item/reagent_containers/food/snacks/burger/plain +/obj/item/food/snacks/burger/plain name = "burger" desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" @@ -20,7 +20,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "meat" = 1) -/obj/item/reagent_containers/food/snacks/burger/brain +/obj/item/food/snacks/burger/brain name = "brainburger" desc = "A strange looking burger. It appears almost sentient." icon_state = "brainburger" @@ -29,7 +29,7 @@ list_reagents = list("nutriment" = 6, "prions" = 10, "vitamin" = 1) tastes = list("bun" = 4, "brains" = 2) -/obj/item/reagent_containers/food/snacks/burger/ghost +/obj/item/food/snacks/burger/ghost name = "ghost burger" desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" @@ -38,12 +38,12 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "ectoplasm" = 2) -/obj/item/reagent_containers/food/snacks/human +/obj/item/food/snacks/human var/hname = "" var/job = null filling_color = "#D63C3C" -/obj/item/reagent_containers/food/snacks/human/burger +/obj/item/food/snacks/human/burger name = "-burger" desc = "A bloody burger." icon = 'icons/obj/food/burgerbread.dmi' @@ -52,7 +52,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "tender meat" = 2) -/obj/item/reagent_containers/food/snacks/burger/cheese +/obj/item/food/snacks/burger/cheese name = "cheeseburger" desc = "The cheese adds a good flavor." icon_state = "cheeseburger" @@ -60,7 +60,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "meat" = 1, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/burger/tofu +/obj/item/food/snacks/burger/tofu name = "tofu burger" desc = "Making this should probably be a criminal offense." icon_state = "tofuburger" @@ -69,7 +69,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "tofu" = 4) -/obj/item/reagent_containers/food/snacks/burger/hamborger +/obj/item/food/snacks/burger/hamborger name = "hamborger" desc = "Looking at this makes your flesh feel like a weakness." icon_state = "roburger" @@ -78,11 +78,11 @@ list_reagents = list("nutriment" = 6, "nanomachines" = 10, "vitamin" = 1) tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) -/obj/item/reagent_containers/food/snacks/burger/hamborger/Initialize(mapload) +/obj/item/food/snacks/burger/hamborger/Initialize(mapload) . = ..() message_admins("A [name] has been created at [ADMIN_COORDJMP(src)].") -/obj/item/reagent_containers/food/snacks/burger/xeno +/obj/item/food/snacks/burger/xeno name = "xenoburger" desc = "Smells caustic and tastes like heresy." icon_state = "xburger" @@ -91,7 +91,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "acid" = 4) -/obj/item/reagent_containers/food/snacks/burger/clown +/obj/item/food/snacks/burger/clown name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" @@ -100,7 +100,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "banana" = 1, "magic" = 2) -/obj/item/reagent_containers/food/snacks/burger/mime +/obj/item/food/snacks/burger/mime name = "mime burger" desc = "Its taste defies language." icon_state = "mimeburger" @@ -109,7 +109,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "silence" = 2) -/obj/item/reagent_containers/food/snacks/burger/baseball +/obj/item/food/snacks/burger/baseball name = "home run baseball burger" desc = "It's still warm. Batter up!" icon_state = "baseball" @@ -118,7 +118,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "a homerun" = 3) -/obj/item/reagent_containers/food/snacks/burger/spell +/obj/item/food/snacks/burger/spell name = "spell burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" @@ -127,7 +127,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "magic" = 2) -/obj/item/reagent_containers/food/snacks/burger/bigbite +/obj/item/food/snacks/burger/bigbite name = "BigBite burger" desc = "Forget the Big Mac, THIS is the future!" icon_state = "bigbiteburger" @@ -136,7 +136,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("bun" = 4, "meat" = 2, "cheese" = 2, "type two diabetes" = 10) -/obj/item/reagent_containers/food/snacks/burger/superbite +/obj/item/food/snacks/burger/superbite name = "SuperBite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" @@ -145,7 +145,7 @@ list_reagents = list("nutriment" = 40, "vitamin" = 5) tastes = list("bun" = 4, "meat" = 2, "cheese" = 2, "type two diabetes" = 10) -/obj/item/reagent_containers/food/snacks/burger/crazy +/obj/item/food/snacks/burger/crazy name = "crazy hamburger" desc = "This looks like the sort of food that a demented clown in a trenchcoat would make." icon_state = "crazyburger" @@ -154,7 +154,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2, "capsaicin" = 3, "condensedcapsaicin" = 2) tastes = list("bun" = 2, "meat" = 4, "cheese" = 2, "beef soaked in chili" = 3, "a smoking flare" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/white +/obj/item/food/snacks/burger/ppatty/white name = "white pretty patty" desc = "Delicious titanium!" icon_state = "ppatty-mime" @@ -163,7 +163,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "white" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/red +/obj/item/food/snacks/burger/ppatty/red name = "red pretty patty" desc = "Perfect for hiding the fact that it's burnt to a crisp." icon_state = "ppatty-red" @@ -172,7 +172,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "red" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/orange +/obj/item/food/snacks/burger/ppatty/orange name = "orange pretty patty" desc = "Contains 0% juice." icon_state = "ppatty-orange" @@ -181,7 +181,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "orange" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/yellow +/obj/item/food/snacks/burger/ppatty/yellow name = "yellow pretty patty" desc = "Bright to the last bite." icon_state = "ppatty-yellow" @@ -190,7 +190,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "yellow" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/green +/obj/item/food/snacks/burger/ppatty/green name = "green pretty patty" desc = "It's not tainted meat, it's painted meat!" icon_state = "ppatty-green" @@ -199,7 +199,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "green" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/blue +/obj/item/food/snacks/burger/ppatty/blue name = "blue pretty patty" desc = "Is this blue rare?" icon_state = "ppatty-blue" @@ -208,7 +208,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "blue" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/purple +/obj/item/food/snacks/burger/ppatty/purple name = "purple pretty patty" desc = "Regal and low class at the same time." icon_state = "ppatty-purple" @@ -217,7 +217,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "purple" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/rainbow +/obj/item/food/snacks/burger/ppatty/rainbow name = "rainbow pretty patty" desc = "Taste the rainbow, eat the rainbow." icon_state = "ppatty-rainbow" @@ -226,7 +226,7 @@ list_reagents = list("nutriment" = 14, "protein" = 5, "omnizine" = 10) tastes = list("bun" = 2, "meat" = 2, "rainbow" = 5) -/obj/item/reagent_containers/food/snacks/burger/elec +/obj/item/food/snacks/burger/elec name = "empowered burger" desc = "It's shockingly good, if you live off of electricity that is." icon_state = "empoweredburger" @@ -235,7 +235,7 @@ list_reagents = list("nutriment" = 5, "protein" = 1, "plasma" = 2) tastes = list("bun" = 2, "pure electricity" = 5) -/obj/item/reagent_containers/food/snacks/burger/rat +/obj/item/food/snacks/burger/rat name = "mouse burger" desc = "Pretty much what you'd expect..." icon_state = "ratburger" @@ -244,7 +244,7 @@ list_reagents = list("nutriment" = 5, "protein" = 1) tastes = list("bun" = 2, "dead rat" = 5) -/obj/item/reagent_containers/food/snacks/burger/appendix +/obj/item/food/snacks/burger/appendix name = "appendix burger" desc = "Tastes like appendicitis." icon_state = "appendixburger" @@ -253,7 +253,7 @@ list_reagents = list("nutriment" = 2, "protein" = 6, "vitamin" = 6) tastes = list("bun" = 1, "grass" = 1) -/obj/item/reagent_containers/food/snacks/burger/bacon +/obj/item/food/snacks/burger/bacon name = "bacon burger" desc = "The perfect combination of all things American." icon_state = "baconburger" @@ -263,7 +263,7 @@ tastes = list("bun" = 1, "bacon" = 1) -/obj/item/reagent_containers/food/snacks/burger/bearger +/obj/item/food/snacks/burger/bearger name = "bearger" desc = "Best served rawr." icon_state = "bearger" @@ -272,7 +272,7 @@ list_reagents = list("nutriment" = 3, "protein" = 6, "vitamin" = 2) tastes = list("bun" = 1, "meat" = 1, "salmon" = 1) -/obj/item/reagent_containers/food/snacks/burger/fivealarm +/obj/item/food/snacks/burger/fivealarm name = "five alarm burger" desc = "HOT! HOT!" icon_state = "fivealarmburger" @@ -281,7 +281,7 @@ list_reagents = list("nutriment" = 4, "protein" = 6, "condensedcapsaicin" = 5, "capsaicin" = 5) tastes = list("bun" = 1, "extreme heat" = 1) -/obj/item/reagent_containers/food/snacks/burger/mcguffin +/obj/item/food/snacks/burger/mcguffin name = "mcGuffin" desc = "A cheap and greasy imitation of an eggs benedict." icon_state = "mcguffin" @@ -290,7 +290,7 @@ list_reagents = list("nutriment" = 2, "protein" = 7, "vitamin" = 1) tastes = list("muffin" = 1, "bacon" = 1) -/obj/item/reagent_containers/food/snacks/burger/mcrib +/obj/item/food/snacks/burger/mcrib name = "mcRib" desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it." icon_state = "mcrib" @@ -299,7 +299,7 @@ list_reagents = list("nutriment" = 2, "protein" = 7, "vitamin" = 4, "bbqsauce" = 1) tastes = list("bun" = 1, "pork" = 1, "patty" = 1) -/obj/item/reagent_containers/food/snacks/burger/jelly +/obj/item/food/snacks/burger/jelly name = "jelly burger" desc = "Culinary delight...?" icon_state = "jellyburger" @@ -307,10 +307,10 @@ bitesize = 3 tastes = list("bun" = 4, "jelly" = 2) -/obj/item/reagent_containers/food/snacks/burger/jelly/slime +/obj/item/food/snacks/burger/jelly/slime list_reagents = list("nutriment" = 6, "slimejelly" = 5, "vitamin" = 1) -/obj/item/reagent_containers/food/snacks/burger/jelly/cherry +/obj/item/food/snacks/burger/jelly/cherry list_reagents = list("nutriment" = 6, "cherryjelly" = 5, "vitamin" = 1) @@ -318,7 +318,7 @@ // Sandwiches // ////////////////////// -/obj/item/reagent_containers/food/snacks/sandwich +/obj/item/food/snacks/sandwich name = "sandwich" desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud." icon = 'icons/obj/food/burgerbread.dmi' @@ -327,7 +327,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1) -/obj/item/reagent_containers/food/snacks/toastedsandwich +/obj/item/food/snacks/toastedsandwich name = "toasted sandwich" desc = "Now if you only had a pepper bar." icon = 'icons/obj/food/burgerbread.dmi' @@ -336,7 +336,7 @@ list_reagents = list("nutriment" = 6, "carbon" = 2) tastes = list("toast" = 1) -/obj/item/reagent_containers/food/snacks/grilledcheese +/obj/item/food/snacks/grilledcheese name = "grilled cheese sandwich" desc = "Goes great with tomato soup!" icon = 'icons/obj/food/burgerbread.dmi' @@ -345,7 +345,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 1) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value? tastes = list("toast" = 1, "grilled cheese" = 1) -/obj/item/reagent_containers/food/snacks/jellysandwich +/obj/item/food/snacks/jellysandwich name = "jelly sandwich" desc = "You wish you had some peanut butter to go with this..." icon = 'icons/obj/food/burgerbread.dmi' @@ -354,13 +354,13 @@ bitesize = 3 tastes = list("toast" = 1, "jelly" = 1) -/obj/item/reagent_containers/food/snacks/jellysandwich/slime +/obj/item/food/snacks/jellysandwich/slime list_reagents = list("nutriment" = 2, "slimejelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/jellysandwich/cherry +/obj/item/food/snacks/jellysandwich/cherry list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/notasandwich +/obj/item/food/snacks/notasandwich name = "not-a-sandwich" desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache." icon = 'icons/obj/food/burgerbread.dmi' @@ -368,7 +368,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 6) tastes = list("nothing suspicious" = 1) -/obj/item/reagent_containers/food/snacks/wrap +/obj/item/food/snacks/wrap name = "egg wrap" desc = "The precursor to Pigs in a Blanket." icon = 'icons/obj/food/food.dmi' @@ -376,7 +376,7 @@ list_reagents = list("nutriment" = 5) tastes = list("egg" = 1) -/obj/item/reagent_containers/food/snacks/blt +/obj/item/food/snacks/blt name = "\improper BLT" desc = "A classic bacon, lettuce, and tomato sandwich." icon = 'icons/obj/food/burgerbread.dmi' @@ -386,7 +386,7 @@ list_reagents = list("nutriment" = 5, "protein" = 2) tastes = list("bacon" = 3, "lettuce" = 2, "tomato" = 2, "bread" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_jelly +/obj/item/food/snacks/peanut_butter_jelly name = "peanut butter and jelly sandwich" desc = "A classic PB&J sandwich, just like your mom used to make." icon = 'icons/obj/food/burgerbread.dmi' @@ -395,13 +395,13 @@ bitesize = 2 tastes = list("peanut butter" = 3, "jelly" = 3, "bread" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_jelly/slime +/obj/item/food/snacks/peanut_butter_jelly/slime list_reagents = list("peanutbutter" = 2, "slimejelly" = 5, "nutriment" = 5, "protein" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_jelly/cherry +/obj/item/food/snacks/peanut_butter_jelly/cherry list_reagents = list("peanutbutter" = 2, "cherryjelly" = 5, "nutriment" = 5, "protein" = 2) -/obj/item/reagent_containers/food/snacks/philly_cheesesteak +/obj/item/food/snacks/philly_cheesesteak name = "Philly cheesesteak" desc = "A popular sandwich made of sliced meat, onions, melted cheese in a long hoagie roll. Mouthwatering doesn't even begin to describe it." icon = 'icons/obj/food/burgerbread.dmi' @@ -411,7 +411,7 @@ list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("steak" = 3, "melted cheese" = 3, "onions" = 2, "bread" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_banana +/obj/item/food/snacks/peanut_butter_banana name = "peanut butter and banana sandwich" desc = "A peanut butter sandwich with banana slices mixed in, a good high protein treat." icon = 'icons/obj/food/burgerbread.dmi' diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm index 72114a5d5549..629886de6b54 100644 --- a/code/modules/food_and_drinks/food/foods/seafood.dm +++ b/code/modules/food_and_drinks/food/foods/seafood.dm @@ -1,5 +1,5 @@ -/obj/item/reagent_containers/food/snacks/carpmeat +/obj/item/food/snacks/carpmeat name = "carp fillet" desc = "A fillet of spess carp meat." icon = 'icons/obj/food/seafood.dmi' @@ -11,7 +11,7 @@ ingredient_name = "fillet of meat" ingredient_name_plural = "fillets of meat" -/obj/item/reagent_containers/food/snacks/salmonmeat +/obj/item/food/snacks/salmonmeat name = "raw salmon" desc = "A fillet of raw salmon." icon = 'icons/obj/food/seafood.dmi' @@ -21,7 +21,7 @@ list_reagents = list("protein" = 3, "vitamin" = 2) tastes = list("raw salmon" = 1) -/obj/item/reagent_containers/food/snacks/salmonsteak +/obj/item/food/snacks/salmonsteak name = "salmon steak" desc = "A fillet of freshly-grilled salmon meat." icon = 'icons/obj/food/seafood.dmi' @@ -32,7 +32,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 2) tastes = list("cooked salmon" = 1) -/obj/item/reagent_containers/food/snacks/catfishmeat +/obj/item/food/snacks/catfishmeat name = "raw catfish" desc = "A fillet of raw catfish." icon = 'icons/obj/food/seafood.dmi' @@ -42,7 +42,7 @@ list_reagents = list("protein" = 3, "vitamin" = 2) tastes = list("catfish" = 1) -/obj/item/reagent_containers/food/snacks/fishfingers +/obj/item/food/snacks/fishfingers name = "fish fingers" desc = "A finger of fish." icon = 'icons/obj/food/seafood.dmi' @@ -52,7 +52,7 @@ list_reagents = list("nutriment" = 4) tastes = list("fish" = 1, "bread" = 1) -/obj/item/reagent_containers/food/snacks/fishburger +/obj/item/food/snacks/fishburger name = "Fillet-O-Carp sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon = 'icons/obj/food/seafood.dmi' @@ -62,7 +62,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "fish" = 4) -/obj/item/reagent_containers/food/snacks/cubancarp +/obj/item/food/snacks/cubancarp name = "cuban carp" desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" icon = 'icons/obj/food/seafood.dmi' @@ -73,7 +73,7 @@ list_reagents = list("nutriment" = 6, "capsaicin" = 1) tastes = list("fish" = 4, "batter" = 1, "hot peppers" = 1) -/obj/item/reagent_containers/food/snacks/fishandchips +/obj/item/food/snacks/fishandchips name = "fish and chips" desc = "I do say so myself old chap. Indubitably!" icon = 'icons/obj/food/seafood.dmi' @@ -83,7 +83,7 @@ list_reagents = list("nutriment" = 6) tastes = list("fish" = 1, "chips" = 1) -/obj/item/reagent_containers/food/snacks/sashimi +/obj/item/food/snacks/sashimi name = "carp sashimi" desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." icon = 'icons/obj/food/seafood.dmi' @@ -92,7 +92,7 @@ list_reagents = list("nutriment" = 6, "capsaicin" = 5) tastes = list("raw carp" = 1, "hot peppers" = 1) -/obj/item/reagent_containers/food/snacks/fried_shrimp +/obj/item/food/snacks/fried_shrimp name = "fried shrimp" desc = "Just one of the many things you can do with shrimp!" icon = 'icons/obj/food/seafood.dmi' @@ -101,7 +101,7 @@ list_reagents = list("nutriment" = 2) tastes = list("shrimp" = 1, "bread crumbs" = 1) -/obj/item/reagent_containers/food/snacks/boiled_shrimp +/obj/item/food/snacks/boiled_shrimp name = "boiled shrimp" desc = "Just one of the many things you can do with shrimp!" icon = 'icons/obj/food/seafood.dmi' @@ -110,7 +110,7 @@ list_reagents = list("nutriment" = 2) tastes = list("shrimp" = 1) -/obj/item/reagent_containers/food/snacks/shrimp_skewer +/obj/item/food/snacks/shrimp_skewer name = "shrimp skewer" desc = "Four shrimp lightly grilled on a skewer. Yummy!" trash = /obj/item/stack/rods @@ -120,7 +120,7 @@ list_reagents = list("nutriment" = 8) tastes = list("shrimp" = 4) -/obj/item/reagent_containers/food/snacks/fish_skewer +/obj/item/food/snacks/fish_skewer name = "fish skewer" desc = "A whole fish battered and grilled on a skewer. Hope you're hungry!" trash = /obj/item/stack/rods @@ -130,18 +130,18 @@ list_reagents = list("protein" = 6, "vitamin" = 4) tastes = list("shrimp" = 1, "batter" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki +/obj/item/food/snacks/sliceable/Ebi_maki name = "ebi maki roll" desc = "A large unsliced roll of Ebi Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Ebi_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Ebi + slice_path = /obj/item/food/snacks/sushi_Ebi slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("shrimp" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Ebi +/obj/item/food/snacks/sushi_Ebi name = "ebi sushi" desc = "A simple sushi consisting of cooked shrimp and rice." icon = 'icons/obj/food/seafood.dmi' @@ -150,18 +150,18 @@ list_reagents = list("nutriment" = 2) tastes = list("shrimp" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki +/obj/item/food/snacks/sliceable/Ikura_maki name = "ikura maki roll" desc = "A large unsliced roll of Ikura Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Ikura_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Ikura + slice_path = /obj/item/food/snacks/sushi_Ikura slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("salmon roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Ikura +/obj/item/food/snacks/sushi_Ikura name = "ikura sushi" desc = "A simple sushi consisting of salmon roe." icon = 'icons/obj/food/seafood.dmi' @@ -170,18 +170,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("salmon roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Sake_maki +/obj/item/food/snacks/sliceable/Sake_maki name = "sake maki roll" desc = "A large unsliced roll of Sake Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Sake_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Sake + slice_path = /obj/item/food/snacks/sushi_Sake slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("raw salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Sake +/obj/item/food/snacks/sushi_Sake name = "sake sushi" desc = "A simple sushi consisting of raw salmon and rice." icon = 'icons/obj/food/seafood.dmi' @@ -190,18 +190,18 @@ list_reagents = list("nutriment" = 2) tastes = list("raw salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki +/obj/item/food/snacks/sliceable/SmokedSalmon_maki name = "smoked salmon maki roll" desc = "A large unsliced roll of Smoked Salmon Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "SmokedSalmon_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon + slice_path = /obj/item/food/snacks/sushi_SmokedSalmon slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("smoked salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon +/obj/item/food/snacks/sushi_SmokedSalmon name = "smoked salmon sushi" desc = "A simple sushi consisting of cooked salmon and rice." icon = 'icons/obj/food/seafood.dmi' @@ -210,18 +210,18 @@ list_reagents = list("nutriment" = 2) tastes = list("smoked salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Tamago_maki +/obj/item/food/snacks/sliceable/Tamago_maki name = "tamago maki roll" desc = "A large unsliced roll of Tamago Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tamago_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Tamago + slice_path = /obj/item/food/snacks/sushi_Tamago slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("egg" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Tamago +/obj/item/food/snacks/sushi_Tamago name = "tamago sushi" desc = "A simple sushi consisting of egg and rice." icon = 'icons/obj/food/seafood.dmi' @@ -230,18 +230,18 @@ list_reagents = list("nutriment" = 2) tastes = list("egg" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Inari_maki +/obj/item/food/snacks/sliceable/Inari_maki name = "inari maki roll" desc = "A large unsliced roll of Inari Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Inari_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Inari + slice_path = /obj/item/food/snacks/sushi_Inari slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("fried tofu" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Inari +/obj/item/food/snacks/sushi_Inari name = "inari sushi" desc = "A piece of fried tofu stuffed with rice." icon = 'icons/obj/food/seafood.dmi' @@ -250,18 +250,18 @@ list_reagents = list("nutriment" = 2) tastes = list("fried tofu" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Masago_maki +/obj/item/food/snacks/sliceable/Masago_maki name = "masago maki roll" desc = "A large unsliced roll of Masago Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Masago_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Masago + slice_path = /obj/item/food/snacks/sushi_Masago slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("goldfish roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Masago +/obj/item/food/snacks/sushi_Masago name = "masago sushi" desc = "A simple sushi consisting of goldfish roe." icon = 'icons/obj/food/seafood.dmi' @@ -270,18 +270,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("goldfish roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki +/obj/item/food/snacks/sliceable/Tobiko_maki name = "tobiko maki roll" desc = "A large unsliced roll of Tobkio Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tobiko_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Tobiko + slice_path = /obj/item/food/snacks/sushi_Tobiko slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("shark roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Tobiko +/obj/item/food/snacks/sushi_Tobiko name = "tobiko sushi" desc = "A simple sushi consisting of shark roe." icon = 'icons/obj/food/seafood.dmi' @@ -290,18 +290,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("shark roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki +/obj/item/food/snacks/sliceable/TobikoEgg_maki name = "tobiko and egg maki roll" desc = "A large unsliced roll of Tobkio and Egg Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "TobikoEgg_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_TobikoEgg + slice_path = /obj/item/food/snacks/sushi_TobikoEgg slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("shark roe" = 1, "rice" = 1, "egg" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_TobikoEgg +/obj/item/food/snacks/sushi_TobikoEgg name = "tobiko and egg sushi" desc = "A sushi consisting of shark roe and an egg." icon = 'icons/obj/food/seafood.dmi' @@ -310,18 +310,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("shark roe" = 1, "rice" = 1, "egg" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Tai_maki +/obj/item/food/snacks/sliceable/Tai_maki name = "tai maki roll" desc = "A large unsliced roll of Tai Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tai_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Tai + slice_path = /obj/item/food/snacks/sushi_Tai slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("catfish" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Tai +/obj/item/food/snacks/sushi_Tai name = "tai sushi" desc = "A simple sushi consisting of catfish and rice." icon = 'icons/obj/food/seafood.dmi' @@ -330,7 +330,7 @@ list_reagents = list("nutriment" = 2) tastes = list("catfish" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Unagi +/obj/item/food/snacks/sushi_Unagi name = "unagi sushi" desc = "A simple sushi consisting of eel and rice." icon = 'icons/obj/food/seafood.dmi' diff --git a/code/modules/food_and_drinks/food/foods/side_dishes.dm b/code/modules/food_and_drinks/food/foods/side_dishes.dm index ec73c20f8123..fbfdf0394622 100644 --- a/code/modules/food_and_drinks/food/foods/side_dishes.dm +++ b/code/modules/food_and_drinks/food/foods/side_dishes.dm @@ -3,7 +3,7 @@ // Raw // ////////////////////// -/obj/item/reagent_containers/food/snacks/rawsticks +/obj/item/food/snacks/rawsticks name = "raw potato sticks" desc = "Raw fries, not very tasty." icon = 'icons/obj/food/food_ingredients.dmi' @@ -16,7 +16,7 @@ // Fried // ////////////////////// -/obj/item/reagent_containers/food/snacks/fries +/obj/item/food/snacks/fries name = "space fries" desc = "AKA: French Fries, Freedom Fries, etc." icon_state = "fries" @@ -25,7 +25,7 @@ list_reagents = list("nutriment" = 4) tastes = list("fries" = 3, "salt" = 1) -/obj/item/reagent_containers/food/snacks/cheesyfries +/obj/item/food/snacks/cheesyfries name = "cheesy fries" desc = "Fries. Covered in cheese. Duh." icon_state = "cheesyfries" @@ -34,7 +34,7 @@ list_reagents = list("nutriment" = 6) tastes = list("fries" = 3, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/tatortot +/obj/item/food/snacks/tatortot name = "tator tot" desc = "A large fried potato nugget that may or may not try to valid you." icon_state = "tatortot" @@ -42,7 +42,7 @@ filling_color = "FFD700" tastes = list("fried potato" = 3, "valids" = 1) -/obj/item/reagent_containers/food/snacks/onionrings +/obj/item/food/snacks/onionrings name = "onion rings" desc = "Onion slices coated in batter." icon_state = "onionrings" @@ -51,7 +51,7 @@ gender = PLURAL tastes = list("onion" = 3, "batter" = 1) -/obj/item/reagent_containers/food/snacks/carrotfries +/obj/item/food/snacks/carrotfries name = "carrot fries" desc = "Tasty fries from fresh carrots." icon_state = "carrotfries" @@ -65,14 +65,14 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/beans +/obj/item/food/snacks/beans name = "tin of beans" desc = "Musical fruit in a slightly less musical container." icon_state = "beans" list_reagents = list("nutriment" = 10, "beans" = 10, "vitamin" = 3) tastes = list("beans" = 1) -/obj/item/reagent_containers/food/snacks/mashed_potatoes //mashed taters +/obj/item/food/snacks/mashed_potatoes //mashed taters name = "mashed potatoes" desc = "Some soft, creamy, and irresistible mashed potatoes." icon_state = "mashedtaters" @@ -81,7 +81,7 @@ list_reagents = list("nutriment" = 5, "gravy" = 5, "mashedpotatoes" = 10, "vitamin" = 2) tastes = list("mashed potato" = 3, "gravy" = 1) -/obj/item/reagent_containers/food/snacks/stuffing +/obj/item/food/snacks/stuffing name = "stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" @@ -89,7 +89,7 @@ list_reagents = list("nutriment" = 3) tastes = list("bread crumbs" = 1, "herbs" = 1) -/obj/item/reagent_containers/food/snacks/loadedbakedpotato +/obj/item/food/snacks/loadedbakedpotato name = "loaded baked potato" desc = "Totally baked." icon_state = "loadedbakedpotato" @@ -97,7 +97,7 @@ list_reagents = list("nutriment" = 6) tastes = list("potato" = 1, "cheese" = 1, "herbs" = 1) -/obj/item/reagent_containers/food/snacks/boiledrice +/obj/item/food/snacks/boiledrice name = "boiled rice" desc = "A boring dish of boring rice." icon_state = "boiledrice" @@ -107,7 +107,7 @@ tastes = list("rice" = 1) -/obj/item/reagent_containers/food/snacks/roastparsnip +/obj/item/food/snacks/roastparsnip name = "roast parsnip" desc = "Sweet and crunchy." icon_state = "roastparsnip" diff --git a/code/modules/food_and_drinks/food/foods/soups.dm b/code/modules/food_and_drinks/food/foods/soups.dm index efe2cc630fe2..d60b10a0d6e8 100644 --- a/code/modules/food_and_drinks/food/foods/soups.dm +++ b/code/modules/food_and_drinks/food/foods/soups.dm @@ -4,7 +4,7 @@ ////////////////////// // Base object for soups, should never appear ingame. -/obj/item/reagent_containers/food/snacks/soup +/obj/item/food/snacks/soup name = "impossible soup" desc = "This soup is so good, it shouldn't even exist!" icon = 'icons/obj/food/soupsalad.dmi' @@ -13,7 +13,7 @@ trash = /obj/item/trash/snack_bowl bitesize = 5 -/obj/item/reagent_containers/food/snacks/soup/meatballsoup +/obj/item/food/snacks/soup/meatballsoup name = "meatball soup" desc = "You've got balls kid, BALLS!" icon_state = "meatballsoup" @@ -21,7 +21,7 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("meatball" = 1) -/obj/item/reagent_containers/food/snacks/soup/slimesoup +/obj/item/food/snacks/soup/slimesoup name = "slime soup" desc = "If no water is available, you may substitute tears." icon_state = "slimesoup" @@ -29,7 +29,7 @@ list_reagents = list("nutriment" = 5, "slimejelly" = 5, "water" = 5, "vitamin" = 4) tastes = list("slime" = 1) -/obj/item/reagent_containers/food/snacks/soup/bloodsoup +/obj/item/food/snacks/soup/bloodsoup name = "tomato soup" desc = "Smells like copper." icon_state = "tomatosoup" @@ -37,7 +37,7 @@ list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5, "vitamin" = 4) tastes = list("iron" = 1) -/obj/item/reagent_containers/food/snacks/soup/clownstears +/obj/item/food/snacks/soup/clownstears name = "clown's tears" desc = "Not very funny." icon_state = "clownstears" @@ -45,7 +45,7 @@ list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 5, "vitamin" = 8) tastes = list("a bad joke" = 1) -/obj/item/reagent_containers/food/snacks/soup/vegetablesoup +/obj/item/food/snacks/soup/vegetablesoup name = "vegetable soup" desc = "A true vegan meal." //TODO icon_state = "vegetablesoup" @@ -53,7 +53,7 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("vegetables" = 1) -/obj/item/reagent_containers/food/snacks/soup/nettlesoup +/obj/item/food/snacks/soup/nettlesoup name = "nettle soup" desc = "To think, the botanist would've beaten you to death with one of these." icon_state = "nettlesoup" @@ -61,7 +61,7 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("nettles" = 1) -/obj/item/reagent_containers/food/snacks/soup/mysterysoup +/obj/item/food/snacks/soup/mysterysoup name = "mystery soup" desc = "The mystery is, why aren't you eating it?" icon_state = "mysterysoup" @@ -69,12 +69,12 @@ list_reagents = list("nutriment" = 6) tastes = list("chaos" = 1) -/obj/item/reagent_containers/food/snacks/soup/mysterysoup/Initialize(mapload) +/obj/item/food/snacks/soup/mysterysoup/Initialize(mapload) . = ..() extra_reagent = pick("capsaicin", "frostoil", "omnizine", "banana", "blood", "slimejelly", "toxin", "banana", "carbon", "oculine") reagents.add_reagent("[extra_reagent]", 5) -/obj/item/reagent_containers/food/snacks/soup/wishsoup +/obj/item/food/snacks/soup/wishsoup name = "wish soup" desc = "I wish this was soup." icon_state = "wishsoup" @@ -82,14 +82,14 @@ list_reagents = list("water" = 10) tastes = list("wishes" = 1) -/obj/item/reagent_containers/food/snacks/soup/wishsoup/Initialize(mapload) +/obj/item/food/snacks/soup/wishsoup/Initialize(mapload) . = ..() if(prob(25)) desc = "A wish come true!" // hue reagents.add_reagent("nutriment", 9) reagents.add_reagent("vitamin", 1) -/obj/item/reagent_containers/food/snacks/soup/tomatosoup +/obj/item/food/snacks/soup/tomatosoup name = "tomato soup" desc = "Drinking this feels like being a vampire! A tomato vampire..." icon_state = "tomatosoup" @@ -97,14 +97,14 @@ list_reagents = list("nutriment" = 5, "tomatojuice" = 10, "vitamin" = 3) tastes = list("tomato" = 1) -/obj/item/reagent_containers/food/snacks/soup/misosoup +/obj/item/food/snacks/soup/misosoup name = "miso soup" desc = "The universe's best soup! Yum!!!" icon_state = "misosoup" list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("miso" = 1) -/obj/item/reagent_containers/food/snacks/soup/mushroomsoup +/obj/item/food/snacks/soup/mushroomsoup name = "chantrelle soup" desc = "A delicious and hearty mushroom soup." icon_state = "mushroomsoup" @@ -112,7 +112,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 4) tastes = list("mushroom" = 1) -/obj/item/reagent_containers/food/snacks/soup/beetsoup +/obj/item/food/snacks/soup/beetsoup name = "beet soup" desc = "Wait, how do you spell it again..?" icon_state = "beetsoup" @@ -120,11 +120,11 @@ list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("beet" = 1) -/obj/item/reagent_containers/food/snacks/soup/beetsoup/Initialize(mapload) +/obj/item/food/snacks/soup/beetsoup/Initialize(mapload) . = ..() name = pick("borsch", "bortsch", "borstch", "borsh", "borshch", "borscht") -/obj/item/reagent_containers/food/snacks/soup/eyesoup +/obj/item/food/snacks/soup/eyesoup name = "eyeball soup" desc = "It looks back at you..." icon_state = "eyeballsoup" @@ -132,63 +132,63 @@ list_reagents = list("nutriment" = 7, "protein" = 2) tastes = list("squirming" = 2, "tomato" = 2) -/obj/item/reagent_containers/food/snacks/soup/sweetpotatosoup +/obj/item/food/snacks/soup/sweetpotatosoup name = "sweet potato soup" desc = "Delicious sweet potato in soup form." icon_state = "sweetpotatosoup" list_reagents = list("nutriment" = 5) tastes = list("sweet potato" = 1) -/obj/item/reagent_containers/food/snacks/soup/redbeetsoup +/obj/item/food/snacks/soup/redbeetsoup name = "red beet soup" desc = "Quite a delicacy." icon_state = "redbeetsoup" list_reagents = list("nutriment" = 5) tastes = list("red beet" = 1) -/obj/item/reagent_containers/food/snacks/soup/frenchonionsoup +/obj/item/food/snacks/soup/frenchonionsoup name = "french onion soup" desc = "Good enough to make a grown mime cry." icon_state = "onionsoup" list_reagents = list("nutriment" = 8) tastes = list("caramelized onions" = 3, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/soup/zurek +/obj/item/food/snacks/soup/zurek name = "zurek" desc = "A traditional Polish soup composed of vegetables, meat, and an egg. Goes great with bread." icon_state = "zurek" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("creamy vegetables" = 3, "sausage" = 2) -/obj/item/reagent_containers/food/snacks/soup/cullenskink +/obj/item/food/snacks/soup/cullenskink name = "cullen skink" desc = "A thick Scottish soup made of smoked fish, potatoes and onions." icon_state = "cullen_skink" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("creamy broth" = 2, "fish" = 2, "vegetables" = 2) -/obj/item/reagent_containers/food/snacks/soup/chicken_noodle_soup +/obj/item/food/snacks/soup/chicken_noodle_soup name = "chicken noodle soup" desc = "A hearty bowl of chicken noodle soup, perfect for when you're stuck at home and sick." icon_state = "chicken_noodle_soup" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("broth" = 1, "chicken" = 1, "carrots" = 1, "noodles" = 1) -/obj/item/reagent_containers/food/snacks/soup/cornchowder +/obj/item/food/snacks/soup/cornchowder name = "corn chowder" desc = "A creamy bowl of corn chowder, with bacon bits and mixed vegetables. One bowl is never enough." icon_state = "corn_chowder" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("creamy broth" = 1, "bacon" = 1, "mixed vegetables" = 1) -/obj/item/reagent_containers/food/snacks/soup/meatball_noodles +/obj/item/food/snacks/soup/meatball_noodles name = "meatball noodle soup" desc = "A hearty noodle soup made from meatballs and pasta in a rich broth. Commonly topped with a handful of chopped nuts." icon_state = "meatball_noodles" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("bone broth" = 1, "meat" = 1, "gnocchi" = 1, "peanuts" = 1) -/obj/item/reagent_containers/food/snacks/soup/seedsoup +/obj/item/food/snacks/soup/seedsoup name = "Misklmæsch" //miskl = seed, mæsch = soup desc = "A seed based soup, made by germinating seeds and then boiling them. \ Produces a particularly bitter broth which is usually balanced by the addition of vinegar." @@ -200,7 +200,7 @@ // Stews // ////////////////////// -/obj/item/reagent_containers/food/snacks/soup/stew +/obj/item/food/snacks/soup/stew name = "stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" @@ -209,7 +209,7 @@ list_reagents = list("nutriment" = 10, "oculine" = 5, "tomatojuice" = 5, "vitamin" = 5) tastes = list("tomato" = 1, "carrot" = 1) -/obj/item/reagent_containers/food/snacks/stewedsoymeat +/obj/item/food/snacks/stewedsoymeat name = "stewed soy meat" desc = "Even non-vegetarians will LOVE this!" icon = 'icons/obj/food/soupsalad.dmi' @@ -218,28 +218,28 @@ list_reagents = list("nutriment" = 8) tastes = list("soy" = 1, "vegetables" = 1) -/obj/item/reagent_containers/food/snacks/soup/beanstew +/obj/item/food/snacks/soup/beanstew name = "Prickeldröndolhaskl" //prickeld = spicy, röndol = bean, haskl = stew desc = "A spicy bean stew with lots of veggies, commonly served aboard the fleet as a filling and satisfying meal with rice or bread." icon_state = "moth_bean_stew" list_reagents = list("nutriment" = 10) tastes = list("beans" = 1, "cabbage" = 1, "spicy sauce" = 1) -/obj/item/reagent_containers/food/snacks/soup/oatstew +/obj/item/food/snacks/soup/oatstew name = "Häfmisklhaskl" //häfmiskl = oat (häf from German hafer meaning oat, miskl meaning seed), haskl = stew desc = "A spicy bean stew with lots of veggies, commonly served aboard the fleet as a filling and satisfying meal with rice or bread." icon_state = "moth_oat_stew" list_reagents = list("nutriment" = 10) tastes = list("oats" = 1, "sweet potato" = 1, "carrot" = 1, "pumpkin" = 1, "parsnip" = 1) -/obj/item/reagent_containers/food/snacks/soup/hong_kong_borscht +/obj/item/food/snacks/soup/hong_kong_borscht name = "hong kong borscht" desc = "Also known as luo song tang or Russian soup, this dish bears little to no resemblance to Eastern European borscht- indeed, it's a tomato-based soup with no beets in sight." icon_state = "hong_kong_borscht" list_reagents = list("nutriment" = 10, "protein" = 2) tastes = list("tomato" = 1, "cabbage" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/soup/hong_kong_macaroni +/obj/item/food/snacks/soup/hong_kong_macaroni name = "hong kong macaroni" desc = "A favourite from Hong Kong's Cha Chaan Tengs, this macaroni soup came to Mars with Cantonese settlers under Cybersun Industries, and has become as much of a breakfast staple there as it is in its homeland." icon_state = "hong_kong_macaroni" @@ -250,7 +250,7 @@ // Chili // ////////////////////// -/obj/item/reagent_containers/food/snacks/soup/hotchili +/obj/item/food/snacks/soup/hotchili name = "hot chili" desc = "A five alarm Texan Chili!" icon_state = "hotchili" @@ -258,7 +258,7 @@ list_reagents = list("nutriment" = 5, "capsaicin" = 1, "tomatojuice" = 2, "vitamin" = 2) tastes = list("hot peppers" = 1, "tomato" = 1) -/obj/item/reagent_containers/food/snacks/soup/coldchili +/obj/item/food/snacks/soup/coldchili name = "cold chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" @@ -266,7 +266,7 @@ list_reagents = list("nutriment" = 5, "frostoil" = 1, "tomatojuice" = 2, "vitamin" = 2) tastes = list("tomato" = 1, "mint" = 1) -/obj/item/reagent_containers/food/snacks/soup/clownchili +/obj/item/food/snacks/soup/clownchili name = "chili con carnival" desc = "A delicious stew of meat, chiles, and salty, salty clown tears." icon_state = "clownchili" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index db1d85d77ed3..52d69b2eaa84 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1,6 +1,6 @@ #define MAX_WEIGHT_CLASS WEIGHT_CLASS_SMALL //Food items that are eaten normally and don't leave anything behind. -/obj/item/reagent_containers/food/snacks +/obj/item/food/snacks name = "snack" desc = "yummy" icon = 'icons/obj/food/food.dmi' @@ -16,8 +16,8 @@ var/total_w_class = 0 //for the total weight an item of food can carry var/list/tastes // for example list("crisps" = 2, "salt" = 1) -/obj/item/reagent_containers/food/snacks/add_initial_reagents() - if(tastes && tastes.len) +/obj/item/food/snacks/add_initial_reagents() + if(tastes && length(tastes)) if(list_reagents) for(var/rid in list_reagents) var/amount = list_reagents[rid] @@ -29,13 +29,13 @@ ..() //Placeholder for effect that trigger on eating that aren't tied to reagents. -/obj/item/reagent_containers/food/snacks/proc/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/proc/On_Consume(mob/M, mob/user) if(!user) return if(!reagents.total_volume) if(M == user) - to_chat(user, "You finish eating \the [src].") - user.visible_message("[M] finishes eating \the [src].") + to_chat(user, "You finish eating [src].") + user.visible_message("[M] finishes eating [src].") user.unEquip(src) //so icons update :[ Post_Consume(M) var/obj/item/trash_item = generate_trash(usr) @@ -43,13 +43,15 @@ qdel(src) return -/obj/item/reagent_containers/food/snacks/proc/Post_Consume(mob/living/M) +/obj/item/food/snacks/proc/Post_Consume(mob/living/M) return -/obj/item/reagent_containers/food/snacks/attack_self(mob/user) +/obj/item/food/snacks/attack_self(mob/user) return -/obj/item/reagent_containers/food/snacks/attack(mob/M, mob/user, def_zone) +/obj/item/food/snacks/attack(mob/M, mob/user, def_zone) + if(user.a_intent == INTENT_HARM && force) + return ..() if(reagents && !reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. to_chat(user, "None of [src] left, oh no!") M.unEquip(src) //so icons update :[ @@ -64,10 +66,10 @@ return TRUE return FALSE -/obj/item/reagent_containers/food/snacks/afterattack(obj/target, mob/user, proximity) +/obj/item/food/snacks/afterattack(obj/target, mob/user, proximity) return -/obj/item/reagent_containers/food/snacks/examine(mob/user) +/obj/item/food/snacks/examine(mob/user) . = ..() if(in_range(user, src)) if(bitecount > 0) @@ -79,7 +81,7 @@ . += "[src] was bitten multiple times!" -/obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/attackby(obj/item/W, mob/user, params) if(is_pen(W)) rename_interactive(user, W, use_prefix = FALSE, prompt = "What would you like to name this dish?") return @@ -105,7 +107,7 @@ I.color = filling_color U.overlays += I - var/obj/item/reagent_containers/food/snacks/collected = new type + var/obj/item/food/snacks/collected = new type collected.name = name collected.loc = U collected.reagents.remove_any(collected.reagents.total_volume) @@ -126,7 +128,7 @@ else return ..() -/obj/item/reagent_containers/food/snacks/proc/generate_trash(atom/location) +/obj/item/food/snacks/proc/generate_trash(atom/location) if(trash) if(ispath(trash, /obj/item)) . = new trash(location) @@ -139,13 +141,13 @@ trash = null return -/obj/item/reagent_containers/food/snacks/Destroy() +/obj/item/food/snacks/Destroy() if(contents) for(var/atom/movable/something in contents) something.loc = get_turf(src) return ..() -/obj/item/reagent_containers/food/snacks/attack_animal(mob/M) +/obj/item/food/snacks/attack_animal(mob/M) if(isanimal(M)) M.changeNext_move(CLICK_CD_MELEE) if(isdog(M)) @@ -173,11 +175,11 @@ N.adjustHealth(-2) N.taste(reagents) -/obj/item/reagent_containers/food/snacks/sliceable/examine(mob/user) +/obj/item/food/snacks/sliceable/examine(mob/user) . = ..() . += "Alt-click to put something small inside." -/obj/item/reagent_containers/food/snacks/sliceable/AltClick(mob/user) +/obj/item/food/snacks/sliceable/AltClick(mob/user) var/obj/item/I = user.get_active_hand() if(!I) return @@ -199,7 +201,7 @@ add_fingerprint(user) I.forceMove(src) -/obj/item/reagent_containers/food/snacks/sliceable/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/sliceable/attackby(obj/item/I, mob/user, params) if((slices_num <= 0 || !slices_num) || !slice_path) return FALSE @@ -259,25 +261,14 @@ // bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all // the bites. No more contained reagents = no more bites. -//Here is an example of the new formatting for anyone who wants to add more food items. -///obj/item/reagent_containers/food/snacks/xenoburger //Identification path for the object. -// name = "Xenoburger" //Name that displays in the UI. -// desc = "Smells caustic. Tastes like heresy." //Duh -// icon_state = "xburger" //Refers to an icon in food/food.dmi -// New() //Don't mess with this. -// ..() //Same here. -// reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste -// reagents.add_reagent("nutriment", 2) // this line of code for all the contents. -// bitesize = 3 //This is the amount each bite consumes. - -/obj/item/reagent_containers/food/snacks/badrecipe +/obj/item/food/snacks/badrecipe name = "burned mess" desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" filling_color = "#211F02" list_reagents = list("????" = 30) -/obj/item/reagent_containers/food/snacks/badrecipe/Initialize(mapload) +/obj/item/food/snacks/badrecipe/Initialize(mapload) . = ..() // it's burned! it should start off being classed as any cooktype that burns cooktype["grilled"] = TRUE @@ -285,14 +276,14 @@ // MISC -/obj/item/reagent_containers/food/snacks/cereal +/obj/item/food/snacks/cereal name = "box of cereal" desc = "A box of cereal." icon = 'icons/obj/food/food.dmi' icon_state = "cereal_box" list_reagents = list("nutriment" = 3) -/obj/item/reagent_containers/food/snacks/deepfryholder +/obj/item/food/snacks/deepfryholder name = "Deep Fried Foods Holder Obj" desc = "If you can see this description the code for the deep fryer fucked up." icon = 'icons/obj/food/food.dmi' diff --git a/code/modules/food_and_drinks/food_base.dm b/code/modules/food_and_drinks/food_base.dm index 51bca61fe51c..64facc6b031f 100644 --- a/code/modules/food_and_drinks/food_base.dm +++ b/code/modules/food_and_drinks/food_base.dm @@ -1,19 +1,18 @@ //////////////////////////////////////////////////////////////////////////////// /// Food. //////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food - possible_transfer_amounts = null - visible_transfer_rate = FALSE - volume = 50 - /// Used by sandwiches - var/filling_color = "#FFFFFF" - /// Used by junk food to lower satiety - var/junkiness = 0 + +/obj/item/food + resistance_flags = FLAMMABLE + container_type = INJECTABLE + w_class = WEIGHT_CLASS_TINY + var/filling_color = "#FFFFFF" //Used by sandwiches. + var/junkiness = 0 //for junk food. used to lower human satiety. var/bitesize = 2 var/consume_sound = 'sound/items/eatfood.ogg' - /// Will ants infest it? + /// Will ants come near it? var/antable = TRUE - /// Location checked every 5 minutes. If its the same place, the food has a chance to spawn ants + /// location checked every 5 minutes. If its the same place, the food has a chance to spawn ants var/ant_location /// Things that suppress food from being infested by ants when on the same turf var/static/list/ant_suppressors @@ -22,11 +21,21 @@ /// Name of the food to show up in kitchen machines (microwaves, ovens, etc) var/ingredient_name var/ingredient_name_plural - resistance_flags = FLAMMABLE - container_type = INJECTABLE + /// Sets the default container amount for all food items. + var/volume = 50 + /// The list of reagents to create on Initialize() + var/list/list_reagents = list() -/obj/item/reagent_containers/food/Initialize(mapload) + var/temperature_min = 0 // To limit the temperature of a reagent container can attain when exposed to heat/cold + var/temperature_max = 10000 + +/obj/item/food/Initialize(mapload) . = ..() + + if(!reagents) // Some subtypes create their own reagents + create_reagents(volume, temperature_min, temperature_max) + add_initial_reagents() + if(!antable) return @@ -40,19 +49,23 @@ ant_location = get_turf(src) last_ant_time = world.time -/obj/item/reagent_containers/food/Destroy() +/obj/item/food/Destroy() ant_location = null if(isprocessing) STOP_PROCESSING(SSobj, src) return ..() -/obj/item/reagent_containers/food/process() +/obj/item/food/proc/add_initial_reagents() // This literally is only a proc for junk food + if(list_reagents) + reagents.add_reagent_list(list_reagents) + +/obj/item/food/process() if(!antable) return PROCESS_KILL if(world.time > last_ant_time + 5 MINUTES) check_for_ants() -/obj/item/reagent_containers/food/proc/check_for_ants() +/obj/item/food/proc/check_for_ants() last_ant_time = world.time // Are we unshielded from the fury of space ants? @@ -77,3 +90,10 @@ antable = FALSE desc += " It appears to be infested with ants. Yuck!" reagents.add_reagent("ants", 1) // Don't eat things with ants in it you weirdo. + +/obj/item/food/ex_act() + if(reagents) + for(var/datum/reagent/R in reagents.reagent_list) + R.on_ex_act() + if(!QDELETED(src)) + ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm b/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm index 59fe4b78bcdb..a0d534809432 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm @@ -19,6 +19,6 @@ setme.desc = "[name.desc] It has been [thiscooktype]" /obj/machinery/cooker/cerealmaker/gettype() - var/obj/item/reagent_containers/food/snacks/cereal/type = new(get_turf(src)) + var/obj/item/food/snacks/cereal/type = new(get_turf(src)) return type diff --git a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm index e6b9d5dadc0f..6ea19108e8b8 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm @@ -34,13 +34,13 @@ return ..() // checks if the snack has been cooked in a certain way -/obj/machinery/cooker/proc/checkCooked(obj/item/reagent_containers/food/snacks/D) +/obj/machinery/cooker/proc/checkCooked(obj/item/food/snacks/D) if(D.cooktype[thiscooktype]) return 1 return 0 // Sets the new snack's cooktype list to the same as the old one - no more cooking something in the same machine more than once! -/obj/machinery/cooker/proc/setCooked(obj/item/reagent_containers/food/snacks/oldtypes, obj/item/reagent_containers/food/snacks/newtypes) +/obj/machinery/cooker/proc/setCooked(obj/item/food/snacks/oldtypes, obj/item/food/snacks/newtypes) var/ct for(ct in oldtypes.cooktype) newtypes.cooktype[ct] = oldtypes.cooktype[ct] @@ -115,7 +115,7 @@ return FALSE if(has_specials && checkSpecials(check)) return TRUE - if(istype(check, /obj/item/reagent_containers/food/snacks) || emagged) + if(istype(check, /obj/item/food/snacks) || emagged) if(istype(check, /obj/item/disk/nuclear)) //(1984 voice) you will not deep fry the NAD to_chat(user, "The disk is more useful raw than [thiscooktype].") return FALSE @@ -147,7 +147,7 @@ // if burns = FALSE then it'll just tell you that the item is already that foodtype and it would do nothing // if you wanted a different side effect set burns to 1 and override burn_food() /obj/machinery/cooker/proc/burn_food(mob/user, obj/item/reagent_containers/props) - var/obj/item/reagent_containers/food/snacks/badrecipe/burnt = new(get_turf(src)) + var/obj/item/food/snacks/badrecipe/burnt = new(get_turf(src)) setRegents(props, burnt) soundloop.stop() to_chat(user, "You smell burning coming from [src]!") @@ -177,7 +177,7 @@ // Override this with the correct snack type /obj/machinery/cooker/proc/gettype() - var/obj/item/reagent_containers/food/snacks/type = new(get_turf(src)) + var/obj/item/food/snacks/type = new(get_turf(src)) return type /obj/machinery/cooker/attackby(obj/item/I, mob/user, params) @@ -197,7 +197,7 @@ if(!checkValid(I, user)) return if(!burns) - if(istype(I, /obj/item/reagent_containers/food/snacks)) + if(istype(I, /obj/item/food/snacks)) if(checkCooked(I)) to_chat(user, "That is already [thiscooktype], it would do nothing!") return @@ -226,17 +226,17 @@ cookSpecial(special) //Handle cooking the item as appropriate turnoff(I) //Shut off the machine and qdel the original item return - if(istype(I, /obj/item/reagent_containers/food/snacks)) + if(istype(I, /obj/item/food/snacks)) if(checkCooked(I)) burn_food(user, I) turnoff(I) return - var/obj/item/reagent_containers/food/snacks/newfood = gettype() + var/obj/item/food/snacks/newfood = gettype() setIcon(I, newfood) changename(I, newfood) if(istype(I, /obj/item/reagent_containers)) setRegents(I, newfood) - if(istype(I, /obj/item/reagent_containers/food/snacks)) + if(istype(I, /obj/item/food/snacks)) setCooked(I, newfood) newfood.cooktype[thiscooktype] = TRUE turnoff(I) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index ea92ab36e5ee..5bf7ef4f8317 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -40,11 +40,11 @@ cooktime = (200 - (E * 20)) //Effectively each laser improves cooktime by 20 per rating beyond the first (200 base, 80 max upgrade) /obj/machinery/cooker/deepfryer/gettype() - var/obj/item/reagent_containers/food/snacks/deepfryholder/type = new(get_turf(src)) + var/obj/item/food/snacks/deepfryholder/type = new(get_turf(src)) return type /obj/machinery/cooker/deepfryer/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks/ice)) + if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks/ice)) var/ice_amount = I.reagents.get_reagent_amount("ice") if(ice_amount) I.reagents.remove_all(I.reagents.total_volume) @@ -82,7 +82,7 @@ to_chat(usr, "You short out the fryer's safeties, allowing non-food objects to be placed in the oil.") playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) emagged = TRUE - return + return TRUE /obj/machinery/cooker/deepfryer/special_attack_shove(mob/living/target, mob/living/attacker) target.visible_message( @@ -156,44 +156,44 @@ return istype(I, input) /datum/deepfryer_special/shrimp - input = /obj/item/reagent_containers/food/snacks/shrimp - output = /obj/item/reagent_containers/food/snacks/fried_shrimp + input = /obj/item/food/snacks/shrimp + output = /obj/item/food/snacks/fried_shrimp /datum/deepfryer_special/banana - input = /obj/item/reagent_containers/food/snacks/grown/banana - output = /obj/item/reagent_containers/food/snacks/friedbanana + input = /obj/item/food/snacks/grown/banana + output = /obj/item/food/snacks/friedbanana /datum/deepfryer_special/fries - input = /obj/item/reagent_containers/food/snacks/rawsticks - output = /obj/item/reagent_containers/food/snacks/fries + input = /obj/item/food/snacks/rawsticks + output = /obj/item/food/snacks/fries /datum/deepfryer_special/corn_chips - input = /obj/item/reagent_containers/food/snacks/grown/corn - output = /obj/item/reagent_containers/food/snacks/cornchips + input = /obj/item/food/snacks/grown/corn + output = /obj/item/food/snacks/cornchips /datum/deepfryer_special/fried_tofu - input = /obj/item/reagent_containers/food/snacks/tofu - output = /obj/item/reagent_containers/food/snacks/fried_tofu + input = /obj/item/food/snacks/tofu + output = /obj/item/food/snacks/fried_tofu /datum/deepfryer_special/chimichanga - input = /obj/item/reagent_containers/food/snacks/burrito - output = /obj/item/reagent_containers/food/snacks/chimichanga + input = /obj/item/food/snacks/burrito + output = /obj/item/food/snacks/chimichanga /datum/deepfryer_special/potato_chips - input = /obj/item/reagent_containers/food/snacks/grown/potato/wedges - output = /obj/item/reagent_containers/food/snacks/chips + input = /obj/item/food/snacks/grown/potato/wedges + output = /obj/item/food/snacks/chips /datum/deepfryer_special/carrotfries - input = /obj/item/reagent_containers/food/snacks/grown/carrot/wedges - output = /obj/item/reagent_containers/food/snacks/carrotfries + input = /obj/item/food/snacks/grown/carrot/wedges + output = /obj/item/food/snacks/carrotfries /datum/deepfryer_special/onionrings - input = /obj/item/reagent_containers/food/snacks/onion_slice - output = /obj/item/reagent_containers/food/snacks/onionrings + input = /obj/item/food/snacks/onion_slice + output = /obj/item/food/snacks/onionrings /datum/deepfryer_special/fried_vox input = /obj/item/organ/external - output = /obj/item/reagent_containers/food/snacks/fried_vox + output = /obj/item/food/snacks/fried_vox /datum/deepfryer_special/fried_vox/validate(obj/item/I) if(!..()) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 515af3acb849..ae1de2d18b09 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -157,6 +157,7 @@ user.visible_message("[user] stuffs [victim] into [src]!") else return + QDEL_LIST_CONTENTS(victim.grabbed_by) victim.forceMove(src) occupant = victim @@ -191,45 +192,28 @@ return locked = TRUE //lock gibber + occupant.dir = SOUTH - var/image/gibberoverlay = new //used to simulate 3D effects - gibberoverlay.icon = icon - gibberoverlay.icon_state = "grinder_overlay" - gibberoverlay.overlays += image('icons/obj/kitchen.dmi', "grinder_idle") - icon_state = "grinder_on" - - var/image/feedee = new - occupant.dir = 2 - feedee.icon = getFlatIcon(occupant, 2) //makes the image a copy of the occupant - - var/atom/movable/holder = new //holder for occupant image - holder.name = null //make unclickable - holder.overlays += feedee //add occupant to holder overlays - holder.pixel_y = 25 //above the gibber - holder.loc = get_turf(src) - holder.layer = MOB_LAYER //simulate mob-like layering - holder.anchored = TRUE - - var/atom/movable/holder2 = new //holder for gibber overlay, used to simulate 3D effect - holder2.name = null - holder2.overlays += gibberoverlay - holder2.loc = get_turf(src) - holder2.layer = MOB_LAYER + 0.1 //3D, it's above the mob, rest of the gibber is behind - holder2.anchored = TRUE - - animate(holder, pixel_y = 16, time = animation_delay) //animate going down - + var/image/victim = image(icon = getFlatIcon(occupant, SOUTH), loc = src, layer = MOB_LAYER, pixel_y = 25) // Copies the look of the victim and places them above the gibber, can't grab the exact icon because it needs to be considered as static to mask the feet later on + var/image/grinder_overlay = image(icon = 'icons/obj/kitchen.dmi', loc = src, icon_state = "grinder_overlay") + if(dirty) + grinder_overlay.overlays += image(icon = 'icons/obj/kitchen.dmi', icon_state = "grinder_bloody") + /// Here's the part where I do something silly + var/list/gibber_viewers = list() + for(var/mob/viewer as anything in viewers(src)) + gibber_viewers += viewer.client + for(var/client/viewer in gibber_viewers) + viewer.images += victim + flick_overlay(grinder_overlay, gibber_viewers, animation_delay * 2) + animate(victim, pixel_y = 16, time = animation_delay) sleep(animation_delay) - - holder.overlays -= feedee //reset static icon - feedee.icon += icon('icons/obj/kitchen.dmi', "footicon") //this is some byond magic; += to the icon var with a black and white image will mask it - holder.overlays += feedee - animate(holder, pixel_y = -3, time = animation_delay) //animate going down further - - sleep(animation_delay) //time everything right, animate doesn't prevent proc from continuing - - qdel(holder) //get rid of holder object - qdel(holder2) //get rid of holder object + victim.icon += icon('icons/obj/kitchen.dmi', "footicon") //this is some byond magic; += to the icon var with a black and white image will mask it + animate(victim, pixel_y = -3, time = animation_delay) // Animate going down further + sleep(animation_delay) + for(var/client/viewer in gibber_viewers) + viewer.images -= victim + qdel(victim) + qdel(grinder_overlay) locked = FALSE //unlock dirty = TRUE //dirty gibber @@ -259,13 +243,13 @@ 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_type = /obj/item/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) + var/obj/item/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) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index f28d4f13e509..437e0658e614 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -40,7 +40,7 @@ to_chat(user, "You add [I] to [src]") updateUsrDialog() return - if(istype(I, /obj/item/reagent_containers/food/snacks/frozen/icecream)) + if(istype(I, /obj/item/food/snacks/frozen/icecream)) if(!I.reagents.has_reagent("sprinkles")) if(I.reagents.total_volume > 29) I.reagents.remove_any(1) @@ -147,7 +147,7 @@ else if(href_list["createchoco"]) var/name = generate_name(reagents.get_master_reagent_name()) name += " Chocolate Cone" - var/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcup/C = new(loc) + var/obj/item/food/snacks/frozen/icecream/icecreamcup/C = new(loc) C.name = "[name]" C.pixel_x = rand(-8, 8) C.pixel_y = -16 @@ -159,7 +159,7 @@ else if(href_list["createcone"]) var/name = generate_name(reagents.get_master_reagent_name()) name += " Cone" - var/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone/C = new(loc) + var/obj/item/food/snacks/frozen/icecream/icecreamcone/C = new(loc) C.name = "[name]" C.pixel_x = rand(-8, 8) C.pixel_y = -16 @@ -171,7 +171,7 @@ else if(href_list["createwaffle"]) var/name = generate_name(reagents.get_master_reagent_name()) name += " Waffle Cone" - var/obj/item/reagent_containers/food/snacks/frozen/icecream/wafflecone/C = new(loc) + var/obj/item/food/snacks/frozen/icecream/wafflecone/C = new(loc) C.name = "[name]" C.pixel_x = rand(-8, 8) C.pixel_y = -16 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 fc4a4fe78592..8db5fa8e3199 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -65,7 +65,7 @@ GLOB.cooking_reagents[recipe_type] |= reagent else qdel(recipe) - GLOB.cooking_ingredients[recipe_type] |= /obj/item/reagent_containers/food/snacks/grown + GLOB.cooking_ingredients[recipe_type] |= /obj/item/food/snacks/grown /******************* * Item Adding @@ -108,7 +108,7 @@ add_item(S, user) else add_item(O, user) - else if(is_type_in_list(O, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment))) + else if(is_type_in_list(O, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/drinks, /obj/item/reagent_containers/condiment))) if(!O.reagents) return TRUE for(var/datum/reagent/R in O.reagents.reagent_list) @@ -199,8 +199,8 @@ var/list/name_overrides = list() for(var/obj/O in contents) var/display_name = O.name - if(istype(O, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = O + if(isfood(O)) + var/obj/item/food/food = O if(!items_counts[display_name]) if(food.ingredient_name) name_overrides[display_name] = food.ingredient_name @@ -364,7 +364,7 @@ /obj/machinery/kitchen_machine/proc/has_extra_item() for(var/obj/O in contents) - if(!is_type_in_list(O, list(/obj/item/reagent_containers/food, /obj/item/grown, /obj/item/mixing_bowl))) + if(!is_type_in_list(O, list(/obj/item/food, /obj/item/grown, /obj/item/mixing_bowl))) return TRUE return FALSE @@ -416,7 +416,7 @@ amount += reagents.total_volume reagents.clear_reagents() if(amount) - var/obj/item/reagent_containers/food/snacks/badrecipe/mysteryfood = new(src) + var/obj/item/food/snacks/badrecipe/mysteryfood = new(src) mysteryfood.reagents.add_reagent("carbon", amount / 2) mysteryfood.reagents.add_reagent("????", amount / 15) mysteryfood.forceMove(get_turf(src)) @@ -446,10 +446,16 @@ ui_interact(user) -/obj/machinery/kitchen_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/kitchen_machine/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/kitchen_machine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/kitchen_machine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "KitchenMachine", name, 400, 300, master_ui, state) + ui = new(user, src, "KitchenMachine", name) ui.open() /obj/machinery/kitchen_machine/ui_data(mob/user) @@ -470,8 +476,8 @@ var/list/name_overrides = list() for(var/obj/O in contents) var/display_name = O.name - if(istype(O, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = O + if(istype(O, /obj/item/food)) + var/obj/item/food/food = O if(!items_counts[display_name]) if(food.ingredient_name) name_overrides[display_name] = food.ingredient_name diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 8510e6bce62e..512d3359c990 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) var/required_grind = 5 var/cube_production = 1 var/cycle_through = 0 - var/obj/item/reagent_containers/food/snacks/monkeycube/cube_type = /obj/item/reagent_containers/food/snacks/monkeycube + var/obj/item/food/snacks/monkeycube/cube_type = /obj/item/food/snacks/monkeycube var/list/connected = list() /obj/machinery/monkey_recycler/Initialize(mapload) @@ -73,15 +73,15 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) cycle_through++ switch(cycle_through) if(1) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube + cube_type = /obj/item/food/snacks/monkeycube/farwacube if(2) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube + cube_type = /obj/item/food/snacks/monkeycube/wolpincube if(3) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube + cube_type = /obj/item/food/snacks/monkeycube/stokcube if(4) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube + cube_type = /obj/item/food/snacks/monkeycube/neaeracube if(5) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube + cube_type = /obj/item/food/snacks/monkeycube cycle_through = 0 to_chat(user, "You change the monkeycube type to [initial(cube_type.name)].") else diff --git a/code/modules/food_and_drinks/kitchen_machinery/oven.dm b/code/modules/food_and_drinks/kitchen_machinery/oven.dm index 0b571d393c37..94ebc9c61bbe 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/oven.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/oven.dm @@ -22,8 +22,8 @@ return else var/obj/item/F = I - var/obj/item/reagent_containers/food/snacks/customizable/C - C = input("Select food to make.", "Cooking", C) in food_choices + var/obj/item/food/snacks/customizable/C + C = tgui_input_list(user, "Select food to make.", "Cooking", food_choices) if(!C) return else @@ -59,8 +59,8 @@ /obj/machinery/cooking/oven/updatefood() for(var/U in food_choices) food_choices.Remove(U) - for(var/U in subtypesof(/obj/item/reagent_containers/food/snacks/customizable/cook)) - var/obj/item/reagent_containers/food/snacks/customizable/cook/V = new U + for(var/U in subtypesof(/obj/item/food/snacks/customizable/cook)) + var/obj/item/food/snacks/customizable/cook/V = new U food_choices += V return @@ -74,7 +74,7 @@ /obj/machinery/cooking/candy/updatefood() for(var/U in food_choices) food_choices.Remove(U) - for(var/U in subtypesof(/obj/item/reagent_containers/food/snacks/customizable/candy)) - var/obj/item/reagent_containers/food/snacks/customizable/candy/V = new U + for(var/U in subtypesof(/obj/item/food/snacks/customizable/candy)) + var/obj/item/food/snacks/customizable/candy/V = new U food_choices += V return diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 6c6224bf572b..6d7ef45eb2c3 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -88,36 +88,36 @@ /////OBJECT RECIPIES///// ///////////////////////// /datum/food_processor_process/meat - input = /obj/item/reagent_containers/food/snacks/meat - output = /obj/item/reagent_containers/food/snacks/meatball + input = /obj/item/food/snacks/meat + output = /obj/item/food/snacks/meatball /datum/food_processor_process/potato - input = /obj/item/reagent_containers/food/snacks/grown/potato - output = /obj/item/reagent_containers/food/snacks/rawsticks + input = /obj/item/food/snacks/grown/potato + output = /obj/item/food/snacks/rawsticks /datum/food_processor_process/rawsticks - input = /obj/item/reagent_containers/food/snacks/rawsticks - output = /obj/item/reagent_containers/food/snacks/tatortot + input = /obj/item/food/snacks/rawsticks + output = /obj/item/food/snacks/tatortot /datum/food_processor_process/soybeans - input = /obj/item/reagent_containers/food/snacks/grown/soybeans - output = /obj/item/reagent_containers/food/snacks/soydope + input = /obj/item/food/snacks/grown/soybeans + output = /obj/item/food/snacks/soydope /datum/food_processor_process/spaghetti - input = /obj/item/reagent_containers/food/snacks/doughslice - output = /obj/item/reagent_containers/food/snacks/spaghetti + input = /obj/item/food/snacks/doughslice + output = /obj/item/food/snacks/spaghetti /datum/food_processor_process/macaroni - input = /obj/item/reagent_containers/food/snacks/spaghetti - output = /obj/item/reagent_containers/food/snacks/macaroni + input = /obj/item/food/snacks/spaghetti + output = /obj/item/food/snacks/macaroni /datum/food_processor_process/parsnip - input = /obj/item/reagent_containers/food/snacks/grown/parsnip - output = /obj/item/reagent_containers/food/snacks/roastparsnip + input = /obj/item/food/snacks/grown/parsnip + output = /obj/item/food/snacks/roastparsnip /datum/food_processor_process/carrot - input = /obj/item/reagent_containers/food/snacks/grown/carrot - output = /obj/item/reagent_containers/food/snacks/grown/carrot/wedges + input = /obj/item/food/snacks/grown/carrot + output = /obj/item/food/snacks/grown/carrot/wedges /datum/food_processor_process/towercap input = /obj/item/grown/log diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 50e6ed0066de..047fc0ce6bb1 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -82,7 +82,7 @@ update_icon(UPDATE_OVERLAYS) // Accepted items accepted_items_typecache = typecacheof(list( - /obj/item/reagent_containers/food/snacks/grown, + /obj/item/food/snacks/grown, /obj/item/seeds, /obj/item/grown, )) @@ -248,10 +248,13 @@ to_chat(user, "[failed] item\s [failed == 1 ? "is" : "are"] refused.") return TRUE -/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/smartfridge/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/smartfridge/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Smartfridge", name, 500, 500) + ui = new(user, src, "Smartfridge", name) ui.open() /obj/machinery/smartfridge/ui_data(mob/user) @@ -404,6 +407,7 @@ /obj/machinery/smartfridge/secure/emag_act(mob/user) emagged = TRUE to_chat(user, "You short out the product lock on \the [src].") + return TRUE /obj/machinery/smartfridge/secure/emp_act(severity) if(!emagged && prob(40 / severity)) @@ -418,18 +422,18 @@ . = ..() accepted_items_typecache = typecacheof(list( /obj/item/kitchen, - /obj/item/reagent_containers/food)) + /obj/item/food)) // Syndicate Druglab Ruin /obj/machinery/smartfridge/food/syndicate_druglab starting_items = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 2, - /obj/item/reagent_containers/food/snacks/macncheese = 1, - /obj/item/reagent_containers/food/snacks/syndicake = 3, - /obj/item/reagent_containers/food/snacks/beans = 4, + /obj/item/food/snacks/boiledrice = 2, + /obj/item/food/snacks/macncheese = 1, + /obj/item/food/snacks/syndicake = 3, + /obj/item/food/snacks/beans = 4, /obj/item/reagent_containers/glass/beaker/waterbottle/large = 7, - /obj/item/reagent_containers/food/drinks/bottle/kahlua = 1, - /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 2) + /obj/item/reagent_containers/drinks/bottle/kahlua = 1, + /obj/item/reagent_containers/drinks/bottle/orangejuice = 2) /** * # Seed Storage @@ -471,9 +475,9 @@ /obj/machinery/smartfridge/foodcart/Initialize(mapload) . = ..() accepted_items_typecache = typecacheof(list( - /obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/drinks, - /obj/item/reagent_containers/food/condiment, + /obj/item/food/snacks, + /obj/item/reagent_containers/drinks, + /obj/item/reagent_containers/condiment, )) /obj/machinery/smartfridge/foodcart/screwdriver_act(mob/living/user, obj/item/I) @@ -802,8 +806,8 @@ . = ..() accepted_items_typecache = typecacheof(list( /obj/item/reagent_containers/glass, - /obj/item/reagent_containers/food/drinks, - /obj/item/reagent_containers/food/condiment, + /obj/item/reagent_containers/drinks, + /obj/item/reagent_containers/condiment, )) /** @@ -832,7 +836,7 @@ component_parts = null // Accepted items accepted_items_typecache = typecacheof(list( - /obj/item/reagent_containers/food/snacks, + /obj/item/food/snacks, /obj/item/stack/sheet/wetleather, )) @@ -881,8 +885,8 @@ /obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) . = ..() // If it's a food, reject non driable ones - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = O + if(istype(O, /obj/item/food/snacks)) + var/obj/item/food/snacks/S = O if(!S.dried_type) return FALSE @@ -903,7 +907,7 @@ * Called in [/obj/machinery/smartfridge/drying_rack/process] to dry the contents. */ /obj/machinery/smartfridge/drying_rack/proc/rack_dry() - for(var/obj/item/reagent_containers/food/snacks/S in contents) + for(var/obj/item/food/snacks/S in contents) if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item... S.color = "#ad7257" S.dry = TRUE diff --git a/code/modules/food_and_drinks/recipes/recipes_candy.dm b/code/modules/food_and_drinks/recipes/recipes_candy.dm index 2339acd3ffaa..e47449af1935 100644 --- a/code/modules/food_and_drinks/recipes/recipes_candy.dm +++ b/code/modules/food_and_drinks/recipes/recipes_candy.dm @@ -3,7 +3,7 @@ * /datum/recipe/candy/ * reagents = list() * items = list() -* result = /obj/item/reagent_containers/food/snacks/ +* result = /obj/item/food/snacks/ * byproduct = /obj/item/ // only set this if the recipe has a byproduct, like returning it's mould * * NOTE: If using a mould, make sure to list it in *BOTH* the items and byproduct lists if it is to be returned. @@ -18,74 +18,74 @@ /datum/recipe/candy/chocolate_bar reagents = list("soymilk" = 2, "cocoa" = 2, "sugar" = 2) items = list() - result = /obj/item/reagent_containers/food/snacks/chocolatebar + result = /obj/item/food/snacks/chocolatebar /datum/recipe/candy/chocolate_bar2 reagents = list("milk" = 2, "cocoa" = 2, "sugar" = 2) items = list() - result = /obj/item/reagent_containers/food/snacks/chocolatebar + result = /obj/item/food/snacks/chocolatebar /datum/recipe/candy/fudge_peanut reagents = list("sugar" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/grown/peanuts, - /obj/item/reagent_containers/food/snacks/grown/peanuts, /obj/item/reagent_containers/food/snacks/grown/peanuts) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/peanut + items = list(/obj/item/food/snacks/chocolatebar, /obj/item/food/snacks/grown/peanuts, + /obj/item/food/snacks/grown/peanuts, /obj/item/food/snacks/grown/peanuts) + result = /obj/item/food/snacks/candy/fudge/peanut /datum/recipe/candy/fudge_cherry reagents = list("sugar" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/cherries, /obj/item/reagent_containers/food/snacks/grown/cherries) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/cherry + items = list(/obj/item/food/snacks/chocolatebar, /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/cherries, /obj/item/food/snacks/grown/cherries) + result = /obj/item/food/snacks/candy/fudge/cherry /datum/recipe/candy/fudge_cookies_n_cream reagents = list("sugar" = 5, "milk" = 5, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/cookie, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/cookie, ) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream + result = /obj/item/food/snacks/candy/fudge/cookies_n_cream /datum/recipe/candy/fudge_turtle reagents = list("sugar" = 5, "milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/candy/caramel, - /obj/item/reagent_containers/food/snacks/grown/peanuts + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/candy/caramel, + /obj/item/food/snacks/grown/peanuts ) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/turtle + result = /obj/item/food/snacks/candy/fudge/turtle /datum/recipe/candy/fudge reagents = list("sugar" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/chocolatebar) - result = /obj/item/reagent_containers/food/snacks/candy/fudge + items = list(/obj/item/food/snacks/chocolatebar) + result = /obj/item/food/snacks/candy/fudge /datum/recipe/candy/caramel reagents = list("sugar" = 5, "cream" = 5) items = list() - result = /obj/item/reagent_containers/food/snacks/candy/caramel + result = /obj/item/food/snacks/candy/caramel /datum/recipe/candy/toffee reagents = list("sugar" = 5, "flour" = 10) - result = /obj/item/reagent_containers/food/snacks/candy/toffee + result = /obj/item/food/snacks/candy/toffee /datum/recipe/candy/taffy reagents = list("salglu_solution" = 15) items = list() - result = /obj/item/reagent_containers/food/snacks/candy/taffy + result = /obj/item/food/snacks/candy/taffy /datum/recipe/candy/nougat reagents = list("sugar" = 5, "cornoil" = 5) - items = list(/obj/item/reagent_containers/food/snacks/egg) - result = /obj/item/reagent_containers/food/snacks/candy/nougat + items = list(/obj/item/food/snacks/egg) + result = /obj/item/food/snacks/candy/nougat /datum/recipe/candy/nougat/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/candy/nougat/being_cooked = ..() + var/obj/item/food/snacks/candy/nougat/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/candy/wafflecone reagents = list("milk" = 1, "sugar" = 1) - result = /obj/item/reagent_containers/food/snacks/wafflecone + result = /obj/item/food/snacks/wafflecone // *********************************************************** // Base Candy Recipes (unflavored / plain) @@ -96,14 +96,14 @@ items = list( /obj/item/c_tube, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton + result = /obj/item/food/snacks/candy/cotton /datum/recipe/candy/gummybear reagents = list("sugar" = 5, "water" = 5, "cornoil" = 5) items = list( /obj/item/kitchen/mould/bear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear + result = /obj/item/food/snacks/candy/gummybear byproduct = /obj/item/kitchen/mould/bear /datum/recipe/candy/gummyworm @@ -111,7 +111,7 @@ items = list( /obj/item/kitchen/mould/worm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm + result = /obj/item/food/snacks/candy/gummyworm byproduct = /obj/item/kitchen/mould/worm /datum/recipe/candy/jellybean @@ -119,7 +119,7 @@ items = list( /obj/item/kitchen/mould/bean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean + result = /obj/item/food/snacks/candy/jellybean byproduct = /obj/item/kitchen/mould/bean /datum/recipe/candy/jawbreaker @@ -127,44 +127,44 @@ items = list( /obj/item/kitchen/mould/ball, ) - result = /obj/item/reagent_containers/food/snacks/candy/jawbreaker + result = /obj/item/food/snacks/candy/jawbreaker byproduct = /obj/item/kitchen/mould/ball /datum/recipe/candy/candycane reagents = list("sugar" = 5) items = list( /obj/item/kitchen/mould/cane, - /obj/item/reagent_containers/food/snacks/mint, + /obj/item/food/snacks/mint, ) - result = /obj/item/reagent_containers/food/snacks/candy/candycane + result = /obj/item/food/snacks/candy/candycane byproduct = /obj/item/kitchen/mould/cane /datum/recipe/candy/gum reagents = list("sugar" = 5, "water" = 5, "cornoil" = 5) items = list() - result = /obj/item/reagent_containers/food/snacks/candy/gum + result = /obj/item/food/snacks/candy/gum /datum/recipe/candy/candybar reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/candybar + result = /obj/item/food/snacks/candy/candybar /datum/recipe/candy/cash items = list( /obj/item/kitchen/mould/cash, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/cash + result = /obj/item/food/snacks/candy/cash byproduct = /obj/item/kitchen/mould/cash /datum/recipe/candy/coin items = list( /obj/item/kitchen/mould/coin, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/coin + result = /obj/item/food/snacks/candy/coin byproduct = /obj/item/kitchen/mould/coin /datum/recipe/candy/sucker @@ -172,7 +172,7 @@ items = list( /obj/item/kitchen/mould/loli, ) - result = /obj/item/reagent_containers/food/snacks/candy/sucker + result = /obj/item/food/snacks/candy/sucker byproduct = /obj/item/kitchen/mould/loli // *********************************************************** @@ -182,84 +182,84 @@ /datum/recipe/candy/cottoncandy_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/red + result = /obj/item/food/snacks/candy/cotton/red /datum/recipe/candy/cottoncandy_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/blue + result = /obj/item/food/snacks/candy/cotton/blue /datum/recipe/candy/cottoncandy_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/poison + result = /obj/item/food/snacks/candy/cotton/poison /datum/recipe/candy/cottoncandy_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/green + result = /obj/item/food/snacks/candy/cotton/green /datum/recipe/candy/cottoncandy_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/yellow + result = /obj/item/food/snacks/candy/cotton/yellow /datum/recipe/candy/cottoncandy_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/orange + result = /obj/item/food/snacks/candy/cotton/orange /datum/recipe/candy/cottoncandy_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/purple + result = /obj/item/food/snacks/candy/cotton/purple /datum/recipe/candy/cottoncandy_pink reagents = list("watermelonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/pink + result = /obj/item/food/snacks/candy/cotton/pink /datum/recipe/candy/cottoncandy_rainbow reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton/red, - /obj/item/reagent_containers/food/snacks/candy/cotton/blue, - /obj/item/reagent_containers/food/snacks/candy/cotton/green, - /obj/item/reagent_containers/food/snacks/candy/cotton/yellow, - /obj/item/reagent_containers/food/snacks/candy/cotton/orange, - /obj/item/reagent_containers/food/snacks/candy/cotton/purple, - /obj/item/reagent_containers/food/snacks/candy/cotton/pink, + /obj/item/food/snacks/candy/cotton/red, + /obj/item/food/snacks/candy/cotton/blue, + /obj/item/food/snacks/candy/cotton/green, + /obj/item/food/snacks/candy/cotton/yellow, + /obj/item/food/snacks/candy/cotton/orange, + /obj/item/food/snacks/candy/cotton/purple, + /obj/item/food/snacks/candy/cotton/pink, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/rainbow + result = /obj/item/food/snacks/candy/cotton/rainbow /datum/recipe/candy/cottoncandy_rainbow2 reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton/red, - /obj/item/reagent_containers/food/snacks/candy/cotton/poison, - /obj/item/reagent_containers/food/snacks/candy/cotton/green, - /obj/item/reagent_containers/food/snacks/candy/cotton/yellow, - /obj/item/reagent_containers/food/snacks/candy/cotton/orange, - /obj/item/reagent_containers/food/snacks/candy/cotton/purple, - /obj/item/reagent_containers/food/snacks/candy/cotton/pink, + /obj/item/food/snacks/candy/cotton/red, + /obj/item/food/snacks/candy/cotton/poison, + /obj/item/food/snacks/candy/cotton/green, + /obj/item/food/snacks/candy/cotton/yellow, + /obj/item/food/snacks/candy/cotton/orange, + /obj/item/food/snacks/candy/cotton/purple, + /obj/item/food/snacks/candy/cotton/pink, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/bad_rainbow + result = /obj/item/food/snacks/candy/cotton/bad_rainbow // *********************************************************** // Gummy Bear Recipes (flavored) @@ -268,63 +268,63 @@ /datum/recipe/candy/gummybear_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/red + result = /obj/item/food/snacks/candy/gummybear/red /datum/recipe/candy/gummybear_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/blue + result = /obj/item/food/snacks/candy/gummybear/blue /datum/recipe/candy/gummybear_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/poison + result = /obj/item/food/snacks/candy/gummybear/poison /datum/recipe/candy/gummybear_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/green + result = /obj/item/food/snacks/candy/gummybear/green /datum/recipe/candy/gummybear_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/yellow + result = /obj/item/food/snacks/candy/gummybear/yellow /datum/recipe/candy/gummybear_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/orange + result = /obj/item/food/snacks/candy/gummybear/orange /datum/recipe/candy/gummybear_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/purple + result = /obj/item/food/snacks/candy/gummybear/purple /datum/recipe/candy/gummybear_wtf reagents = list("space_drugs" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/wtf + result = /obj/item/food/snacks/candy/gummybear/wtf /datum/recipe/candy/gummybear_wtf2 reagents = list() - items = list(/obj/item/reagent_containers/food/snacks/candy/gummybear, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/wtf + items = list(/obj/item/food/snacks/candy/gummybear, /obj/item/food/snacks/grown/ambrosia/vulgaris) + result = /obj/item/food/snacks/candy/gummybear/wtf // *********************************************************** // Gummy Worm Recipes (flavored) @@ -333,62 +333,62 @@ /datum/recipe/candy/gummyworm_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/red + result = /obj/item/food/snacks/candy/gummyworm/red /datum/recipe/candy/gummyworm_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/blue + result = /obj/item/food/snacks/candy/gummyworm/blue /datum/recipe/candy/gummyworm_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/poison + result = /obj/item/food/snacks/candy/gummyworm/poison /datum/recipe/candy/gummyworm_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/green + result = /obj/item/food/snacks/candy/gummyworm/green /datum/recipe/candy/gummyworm_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/yellow + result = /obj/item/food/snacks/candy/gummyworm/yellow /datum/recipe/candy/gummyworm_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/orange + result = /obj/item/food/snacks/candy/gummyworm/orange /datum/recipe/candy/gummyworm_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/purple + result = /obj/item/food/snacks/candy/gummyworm/purple /datum/recipe/candy/gummyworm_wtf reagents = list("space_drugs" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf + result = /obj/item/food/snacks/candy/gummyworm/wtf /datum/recipe/candy/gummyworm_wtf2 - items = list(/obj/item/reagent_containers/food/snacks/candy/gummyworm, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf + items = list(/obj/item/food/snacks/candy/gummyworm, /obj/item/food/snacks/grown/ambrosia/vulgaris) + result = /obj/item/food/snacks/candy/gummyworm/wtf // *********************************************************** // Jelly Bean Recipes (flavored) @@ -397,99 +397,99 @@ /datum/recipe/candy/jellybean_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/red + result = /obj/item/food/snacks/candy/jellybean/red /datum/recipe/candy/jellybean_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/blue + result = /obj/item/food/snacks/candy/jellybean/blue /datum/recipe/candy/jellybean_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/poison + result = /obj/item/food/snacks/candy/jellybean/poison /datum/recipe/candy/jellybean_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/green + result = /obj/item/food/snacks/candy/jellybean/green /datum/recipe/candy/jellybean_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/yellow + result = /obj/item/food/snacks/candy/jellybean/yellow /datum/recipe/candy/jellybean_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/orange + result = /obj/item/food/snacks/candy/jellybean/orange /datum/recipe/candy/jellybean_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/purple + result = /obj/item/food/snacks/candy/jellybean/purple /datum/recipe/candy/jellybean_chocolate reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/candy/jellybean, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/chocolate + result = /obj/item/food/snacks/candy/jellybean/chocolate /datum/recipe/candy/jellybean_cola reagents = list("cola" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/cola + result = /obj/item/food/snacks/candy/jellybean/cola /datum/recipe/candy/jellybean_popcorn reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/popcorn, - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/popcorn, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/popcorn + result = /obj/item/food/snacks/candy/jellybean/popcorn /datum/recipe/candy/jellybean_coffee reagents = list("coffee" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/cola + result = /obj/item/food/snacks/candy/jellybean/cola /datum/recipe/candy/jellybean_drgibb reagents = list("dr_gibb" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/cola + result = /obj/item/food/snacks/candy/jellybean/cola /datum/recipe/candy/jellybean_wtf reagents = list("space_drugs" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/wtf + result = /obj/item/food/snacks/candy/jellybean/wtf /datum/recipe/candy/jellybean_wtf2 - items = list(/obj/item/reagent_containers/food/snacks/candy/jellybean, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/wtf + items = list(/obj/item/food/snacks/candy/jellybean, /obj/item/food/snacks/grown/ambrosia/vulgaris) + result = /obj/item/food/snacks/candy/jellybean/wtf // *********************************************************** // Candybar Recipes (flavored) @@ -498,39 +498,39 @@ /datum/recipe/candy/malper reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/caramel, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/caramel, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel + result = /obj/item/food/snacks/candy/confectionery/caramel /datum/recipe/candy/toolerone reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/nougat, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/nougat, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/nougat + result = /obj/item/food/snacks/candy/confectionery/nougat /datum/recipe/candy/yumbaton reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/toffee, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/toffee, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/toffee + result = /obj/item/food/snacks/candy/confectionery/toffee /datum/recipe/candy/crunch reagents = list("rice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/candybar, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/rice + result = /obj/item/food/snacks/candy/confectionery/rice /datum/recipe/candy/toxinstest reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/caramel, - /obj/item/reagent_containers/food/snacks/candy/nougat, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/caramel, + /obj/item/food/snacks/candy/nougat, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat + result = /obj/item/food/snacks/candy/confectionery/caramel_nougat diff --git a/code/modules/food_and_drinks/recipes/recipes_grill.dm b/code/modules/food_and_drinks/recipes/recipes_grill.dm index a12287ee8905..cbe5f7bcf92d 100644 --- a/code/modules/food_and_drinks/recipes/recipes_grill.dm +++ b/code/modules/food_and_drinks/recipes/recipes_grill.dm @@ -3,289 +3,289 @@ /datum/recipe/grill/bacon items = list( - /obj/item/reagent_containers/food/snacks/raw_bacon, + /obj/item/food/snacks/raw_bacon, ) - result = /obj/item/reagent_containers/food/snacks/bacon + result = /obj/item/food/snacks/bacon /datum/recipe/grill/telebacon items = list( - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/meat, /obj/item/assembly/signaler ) - result = /obj/item/reagent_containers/food/snacks/telebacon + result = /obj/item/food/snacks/telebacon /datum/recipe/grill/syntitelebacon items = list( - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, /obj/item/assembly/signaler ) - result = /obj/item/reagent_containers/food/snacks/telebacon + result = /obj/item/food/snacks/telebacon /datum/recipe/grill/friedegg reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/egg ) - result = /obj/item/reagent_containers/food/snacks/friedegg + result = /obj/item/food/snacks/friedegg /datum/recipe/grill/meatsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/meatsteak + result = /obj/item/food/snacks/meatsteak /datum/recipe/grill/salmonsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/salmonmeat + /obj/item/food/snacks/salmonmeat ) - result = /obj/item/reagent_containers/food/snacks/salmonsteak + result = /obj/item/food/snacks/salmonsteak /datum/recipe/grill/syntisteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meat/syntiflesh + /obj/item/food/snacks/meat/syntiflesh ) - result = /obj/item/reagent_containers/food/snacks/meatsteak + result = /obj/item/food/snacks/meatsteak /datum/recipe/grill/waffles reagents = list("sugar" = 10) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/waffles + result = /obj/item/food/snacks/waffles /datum/recipe/grill/rofflewaffles reagents = list("psilocybin" = 5, "sugar" = 10) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/rofflewaffles + result = /obj/item/food/snacks/rofflewaffles /datum/recipe/grill/grilledcheese items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/grilledcheese + result = /obj/item/food/snacks/grilledcheese /datum/recipe/grill/sausage items = list( - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/cutlet, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/cutlet, ) - result = /obj/item/reagent_containers/food/snacks/sausage + result = /obj/item/food/snacks/sausage /datum/recipe/grill/fishfingers reagents = list("flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/carpmeat, ) - result = /obj/item/reagent_containers/food/snacks/fishfingers + result = /obj/item/food/snacks/fishfingers /datum/recipe/grill/fishfingers/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/fishfingers/being_cooked = ..() + var/obj/item/food/snacks/fishfingers/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/grill/cutlet items = list( - /obj/item/reagent_containers/food/snacks/rawcutlet + /obj/item/food/snacks/rawcutlet ) - result = /obj/item/reagent_containers/food/snacks/cutlet + result = /obj/item/food/snacks/cutlet /datum/recipe/grill/omelette items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/omelette + result = /obj/item/food/snacks/omelette /datum/recipe/grill/wingfangchu reagents = list("soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat + /obj/item/food/snacks/monstermeat/xenomeat ) - result = /obj/item/reagent_containers/food/snacks/wingfangchu + result = /obj/item/food/snacks/wingfangchu /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/food/snacks/meat/human, + /obj/item/food/snacks/meat/human, ) - result = /obj/item/reagent_containers/food/snacks/human/kabob + result = /obj/item/food/snacks/human/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/food/snacks/meat/monkey, + /obj/item/food/snacks/meat/monkey, ) - result = /obj/item/reagent_containers/food/snacks/monkeykabob + result = /obj/item/food/snacks/monkeykabob /datum/recipe/grill/syntikabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, ) - result = /obj/item/reagent_containers/food/snacks/monkeykabob + result = /obj/item/food/snacks/monkeykabob /datum/recipe/grill/tofukabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, ) - result = /obj/item/reagent_containers/food/snacks/tofukabob + result = /obj/item/food/snacks/tofukabob /datum/recipe/grill/picoss_kabob reagents = list("vinegar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/carpmeat, - /obj/item/reagent_containers/food/snacks/carpmeat, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/food/snacks/carpmeat, + /obj/item/food/snacks/carpmeat, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/chili, /obj/item/stack/rods ) - result = /obj/item/reagent_containers/food/snacks/picoss_kabob + result = /obj/item/food/snacks/picoss_kabob /datum/recipe/grill/sushi_Tamago reagents = list("sake" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/boiledrice, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Tamago + result = /obj/item/food/snacks/sushi_Tamago /datum/recipe/grill/sushi_Unagi reagents = list("sake" = 5) items = list( /obj/item/fish/electric_eel, - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Unagi + result = /obj/item/food/snacks/sushi_Unagi /datum/recipe/grill/sushi_Ebi items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/boiled_shrimp, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/boiled_shrimp, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Ebi + result = /obj/item/food/snacks/sushi_Ebi /datum/recipe/grill/sushi_Ikura items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/salmon, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Ikura + result = /obj/item/food/snacks/sushi_Ikura /datum/recipe/grill/sushi_Inari items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/fried_tofu, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/fried_tofu, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Inari + result = /obj/item/food/snacks/sushi_Inari /datum/recipe/grill/sushi_Sake items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/salmonmeat, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/salmonmeat, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Sake + result = /obj/item/food/snacks/sushi_Sake /datum/recipe/grill/sushi_SmokedSalmon items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/salmonsteak, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/salmonsteak, ) - result = /obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon + result = /obj/item/food/snacks/sushi_SmokedSalmon /datum/recipe/grill/sushi_Masago items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/goldfish, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Masago + result = /obj/item/food/snacks/sushi_Masago /datum/recipe/grill/sushi_Tobiko items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/shark, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Tobiko + result = /obj/item/food/snacks/sushi_Tobiko /datum/recipe/grill/sushi_TobikoEgg items = list( - /obj/item/reagent_containers/food/snacks/sushi_Tobiko, - /obj/item/reagent_containers/food/snacks/egg, + /obj/item/food/snacks/sushi_Tobiko, + /obj/item/food/snacks/egg, ) - result = /obj/item/reagent_containers/food/snacks/sushi_TobikoEgg + result = /obj/item/food/snacks/sushi_TobikoEgg /datum/recipe/grill/sushi_Tai items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/catfishmeat, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/catfishmeat, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Tai + result = /obj/item/food/snacks/sushi_Tai /datum/recipe/grill/goliath - items = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath) - result = /obj/item/reagent_containers/food/snacks/goliath_steak + items = list(/obj/item/food/snacks/monstermeat/goliath) + result = /obj/item/food/snacks/goliath_steak /datum/recipe/grill/shrimp_skewer items = list( - /obj/item/reagent_containers/food/snacks/shrimp, - /obj/item/reagent_containers/food/snacks/shrimp, - /obj/item/reagent_containers/food/snacks/shrimp, - /obj/item/reagent_containers/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, /obj/item/stack/rods, ) - result = /obj/item/reagent_containers/food/snacks/shrimp_skewer + result = /obj/item/food/snacks/shrimp_skewer /datum/recipe/grill/fish_skewer reagents = list("flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/salmonmeat, + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/salmonmeat, /obj/item/stack/rods, ) - result = /obj/item/reagent_containers/food/snacks/fish_skewer + result = /obj/item/food/snacks/fish_skewer /datum/recipe/grill/pancake items = list( - /obj/item/reagent_containers/food/snacks/cookiedough + /obj/item/food/snacks/cookiedough ) - result = /obj/item/reagent_containers/food/snacks/pancake + result = /obj/item/food/snacks/pancake /datum/recipe/grill/berry_pancake items = list( - /obj/item/reagent_containers/food/snacks/cookiedough, - /obj/item/reagent_containers/food/snacks/grown/berries + /obj/item/food/snacks/cookiedough, + /obj/item/food/snacks/grown/berries ) - result = /obj/item/reagent_containers/food/snacks/pancake/berry_pancake + result = /obj/item/food/snacks/pancake/berry_pancake /datum/recipe/grill/choc_chip_pancake items = list( - /obj/item/reagent_containers/food/snacks/cookiedough, - /obj/item/reagent_containers/food/snacks/choc_pile + /obj/item/food/snacks/cookiedough, + /obj/item/food/snacks/choc_pile ) - result = /obj/item/reagent_containers/food/snacks/pancake/choc_chip_pancake + result = /obj/item/food/snacks/pancake/choc_chip_pancake /datum/recipe/grill/bbqribs reagents = list("bbqsauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, /obj/item/stack/rods ) - result = /obj/item/reagent_containers/food/snacks/bbqribs + result = /obj/item/food/snacks/bbqribs diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index 112dcc6ca87a..53904858aaa9 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -5,791 +5,791 @@ /datum/recipe/microwave/boiledegg reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/egg ) - result = /obj/item/reagent_containers/food/snacks/boiledegg + result = /obj/item/food/snacks/boiledegg /datum/recipe/microwave/dionaroast reagents = list("facid" = 5) //It dissolves the carapace. Still poisonous, though. - items = list(/obj/item/holder/diona, /obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/dionaroast + items = list(/obj/item/holder/diona, /obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/dionaroast /datum/recipe/microwave/jellydonut reagents = list("berryjuice" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly + result = /obj/item/food/snacks/donut/jelly /datum/recipe/microwave/jellydonut/slime reagents = list("slimejelly" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly + result = /obj/item/food/snacks/donut/jelly/slimejelly /datum/recipe/microwave/jellydonut/cherry reagents = list("cherryjelly" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly + result = /obj/item/food/snacks/donut/jelly/cherryjelly /datum/recipe/microwave/donut reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut + result = /obj/item/food/snacks/donut /datum/recipe/microwave/donut/sprinkles reagents = list("sugar" = 5, "sprinkles" = 2) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/sprinkles + result = /obj/item/food/snacks/donut/sprinkles /datum/recipe/microwave/human/burger items = list( - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/meat/human, + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/human/burger + result = /obj/item/food/snacks/human/burger /datum/recipe/microwave/plainburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/microwave/humanburger + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat //do not place this recipe before /datum/recipe/microwave/humanburger ) - result = /obj/item/reagent_containers/food/snacks/burger/plain + result = /obj/item/food/snacks/burger/plain /datum/recipe/microwave/syntiburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat/syntiflesh ) - result = /obj/item/reagent_containers/food/snacks/burger/plain + result = /obj/item/food/snacks/burger/plain /datum/recipe/microwave/brainburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/organ/internal/brain ) - result = /obj/item/reagent_containers/food/snacks/burger/brain + result = /obj/item/food/snacks/burger/brain /datum/recipe/microwave/hamborger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/robot_parts/head ) - result = /obj/item/reagent_containers/food/snacks/burger/hamborger + result = /obj/item/food/snacks/burger/hamborger /datum/recipe/microwave/xenoburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat ) - result = /obj/item/reagent_containers/food/snacks/burger/xeno + /obj/item/food/snacks/bun, + /obj/item/food/snacks/monstermeat/xenomeat) + result = /obj/item/food/snacks/burger/xeno /datum/recipe/microwave/fishburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/carpmeat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/carpmeat ) - result = /obj/item/reagent_containers/food/snacks/fishburger + result = /obj/item/food/snacks/fishburger /datum/recipe/microwave/tofuburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/bun, + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/burger/tofu + result = /obj/item/food/snacks/burger/tofu /datum/recipe/microwave/ghostburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/ectoplasm //where do you even find this stuff + /obj/item/food/snacks/bun, + /obj/item/food/snacks/ectoplasm //where do you even find this stuff ) - result = /obj/item/reagent_containers/food/snacks/burger/ghost + result = /obj/item/food/snacks/burger/ghost /datum/recipe/microwave/clownburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/mask/gas/clown_hat, ) - result = /obj/item/reagent_containers/food/snacks/burger/clown + result = /obj/item/food/snacks/burger/clown /datum/recipe/microwave/mimeburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/head/beret ) - result = /obj/item/reagent_containers/food/snacks/burger/mime + result = /obj/item/food/snacks/burger/mime /datum/recipe/microwave/baseballburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/melee/baseball_bat ) - result = /obj/item/reagent_containers/food/snacks/burger/baseball + result = /obj/item/food/snacks/burger/baseball /datum/recipe/microwave/cheeseburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/burger/cheese + result = /obj/item/food/snacks/burger/cheese /datum/recipe/microwave/appendixburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/organ/internal/appendix ) - result = /obj/item/reagent_containers/food/snacks/burger/appendix + result = /obj/item/food/snacks/burger/appendix /datum/recipe/microwave/appendixburger_bitten items = list( - /obj/item/reagent_containers/food/snacks/appendix, - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/appendix, + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/burger/appendix + result = /obj/item/food/snacks/burger/appendix /datum/recipe/microwave/bearger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/monstermeat/bearmeat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/monstermeat/bearmeat ) - result = /obj/item/reagent_containers/food/snacks/burger/bearger + result = /obj/item/food/snacks/burger/bearger /datum/recipe/microwave/fivealarmburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili + /obj/item/food/snacks/bun, + /obj/item/food/snacks/grown/ghost_chili, + /obj/item/food/snacks/grown/ghost_chili ) - result = /obj/item/reagent_containers/food/snacks/burger/fivealarm + result = /obj/item/food/snacks/burger/fivealarm /datum/recipe/microwave/baconburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/burger/bacon + result = /obj/item/food/snacks/burger/bacon /datum/recipe/microwave/mcrib items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bbqribs, - /obj/item/reagent_containers/food/snacks/onion_slice + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bbqribs, + /obj/item/food/snacks/onion_slice ) - result = /obj/item/reagent_containers/food/snacks/burger/mcrib + result = /obj/item/food/snacks/burger/mcrib /datum/recipe/microwave/mcguffin items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/friedegg + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/friedegg ) - result = /obj/item/reagent_containers/food/snacks/burger/mcguffin + result = /obj/item/food/snacks/burger/mcguffin /datum/recipe/microwave/hotdog items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/sausage + /obj/item/food/snacks/bun, + /obj/item/food/snacks/sausage ) - result = /obj/item/reagent_containers/food/snacks/hotdog + result = /obj/item/food/snacks/hotdog /datum/recipe/microwave/donkpocket items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meatball + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meatball ) - result = /obj/item/reagent_containers/food/snacks/donkpocket + result = /obj/item/food/snacks/donkpocket /datum/recipe/microwave/warmdonkpocket duplicate = FALSE items = list( - /obj/item/reagent_containers/food/snacks/donkpocket + /obj/item/food/snacks/donkpocket ) - result = /obj/item/reagent_containers/food/snacks/warmdonkpocket + result = /obj/item/food/snacks/warmdonkpocket /datum/recipe/microwave/reheatwarmdonkpocket duplicate = FALSE items = list( - /obj/item/reagent_containers/food/snacks/warmdonkpocket + /obj/item/food/snacks/warmdonkpocket ) - result = /obj/item/reagent_containers/food/snacks/warmdonkpocket + result = /obj/item/food/snacks/warmdonkpocket /datum/recipe/microwave/eggplantparm items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/eggplant + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/eggplant ) - result = /obj/item/reagent_containers/food/snacks/eggplantparm + result = /obj/item/food/snacks/eggplantparm /datum/recipe/microwave/soylentviridians reagents = list("flour" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/soybeans) - result = /obj/item/reagent_containers/food/snacks/soylentviridians + items = list(/obj/item/food/snacks/grown/soybeans) + result = /obj/item/food/snacks/soylentviridians /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/food/snacks/meat/human, + /obj/item/food/snacks/meat/human, ) - result = /obj/item/reagent_containers/food/snacks/soylentgreen + result = /obj/item/food/snacks/soylentgreen /datum/recipe/microwave/chaosdonut reagents = list("frostoil" = 5, "capsaicin" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/chaos + result = /obj/item/food/snacks/donut/chaos /datum/recipe/microwave/cheesyfries items = list( - /obj/item/reagent_containers/food/snacks/fries, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/fries, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/cheesyfries + result = /obj/item/food/snacks/cheesyfries /datum/recipe/microwave/cubancarp items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/carpmeat, - /obj/item/reagent_containers/food/snacks/grown/chili + /obj/item/food/snacks/dough, + /obj/item/food/snacks/carpmeat, + /obj/item/food/snacks/grown/chili ) - result = /obj/item/reagent_containers/food/snacks/cubancarp + result = /obj/item/food/snacks/cubancarp /datum/recipe/microwave/popcorn - items = list(/obj/item/reagent_containers/food/snacks/grown/corn) - result = /obj/item/reagent_containers/food/snacks/popcorn + items = list(/obj/item/food/snacks/grown/corn) + result = /obj/item/food/snacks/popcorn /datum/recipe/microwave/spacylibertyduff reagents = list("water" = 5, "vodka" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, - /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap) - result = /obj/item/reagent_containers/food/snacks/spacylibertyduff + items = list(/obj/item/food/snacks/grown/mushroom/libertycap, /obj/item/food/snacks/grown/mushroom/libertycap, + /obj/item/food/snacks/grown/mushroom/libertycap) + result = /obj/item/food/snacks/spacylibertyduff /datum/recipe/microwave/amanitajelly reagents = list("water" = 5, "vodka" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, - /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita) - result = /obj/item/reagent_containers/food/snacks/amanitajelly + items = list(/obj/item/food/snacks/grown/mushroom/amanita, /obj/item/food/snacks/grown/mushroom/amanita, + /obj/item/food/snacks/grown/mushroom/amanita) + result = /obj/item/food/snacks/amanitajelly /datum/recipe/microwave/amanitajelly/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/amanitajelly/being_cooked = ..() + var/obj/item/food/snacks/amanitajelly/being_cooked = ..() being_cooked.reagents.del_reagent("amanitin") return being_cooked /datum/recipe/microwave/meatballsoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/meatball, /obj/item/reagent_containers/food/snacks/grown/potato, /obj/item/reagent_containers/food/snacks/grown/carrot) - result = /obj/item/reagent_containers/food/snacks/soup/meatballsoup + items = list(/obj/item/food/snacks/meatball, /obj/item/food/snacks/grown/potato, /obj/item/food/snacks/grown/carrot) + result = /obj/item/food/snacks/soup/meatballsoup /datum/recipe/microwave/vegetablesoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/potato, /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/corn, /obj/item/reagent_containers/food/snacks/grown/eggplant) - result = /obj/item/reagent_containers/food/snacks/soup/vegetablesoup + items = list(/obj/item/food/snacks/grown/potato, /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/corn, /obj/item/food/snacks/grown/eggplant) + result = /obj/item/food/snacks/soup/vegetablesoup /datum/recipe/microwave/nettlesoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/egg, /obj/item/grown/nettle/basic, /obj/item/reagent_containers/food/snacks/grown/potato) - result = /obj/item/reagent_containers/food/snacks/soup/nettlesoup + items = list(/obj/item/food/snacks/egg, /obj/item/grown/nettle/basic, /obj/item/food/snacks/grown/potato) + result = /obj/item/food/snacks/soup/nettlesoup /datum/recipe/microwave/wishsoup reagents = list("water" = 20) - result = /obj/item/reagent_containers/food/snacks/soup/wishsoup + result = /obj/item/food/snacks/soup/wishsoup /datum/recipe/microwave/hotchili - items = list(/obj/item/reagent_containers/food/snacks/meat, /obj/item/reagent_containers/food/snacks/grown/chili, /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/soup/hotchili + items = list(/obj/item/food/snacks/meat, /obj/item/food/snacks/grown/chili, /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/soup/hotchili /datum/recipe/microwave/coldchili - items = list(/obj/item/reagent_containers/food/snacks/meat, /obj/item/reagent_containers/food/snacks/grown/icepepper, /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/soup/coldchili + items = list(/obj/item/food/snacks/meat, /obj/item/food/snacks/grown/icepepper, /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/soup/coldchili /datum/recipe/microwave/spellburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/head/wizard/fake, ) - result = /obj/item/reagent_containers/food/snacks/burger/spell + result = /obj/item/food/snacks/burger/spell /datum/recipe/microwave/spellburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/head/wizard, ) - result = /obj/item/reagent_containers/food/snacks/burger/spell + result = /obj/item/food/snacks/burger/spell /datum/recipe/microwave/bigbiteburger items = list( - /obj/item/reagent_containers/food/snacks/burger/plain, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/egg, + /obj/item/food/snacks/burger/plain, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/egg, ) - result = /obj/item/reagent_containers/food/snacks/burger/bigbite + result = /obj/item/food/snacks/burger/bigbite /datum/recipe/microwave/enchiladas items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/corn) - result = /obj/item/reagent_containers/food/snacks/enchiladas + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/corn) + result = /obj/item/food/snacks/enchiladas /datum/recipe/microwave/burrito reagents = list("capsaicin" = 5, "rice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/beans, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/beans, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/sliceable/flatdough, ) - result = /obj/item/reagent_containers/food/snacks/burrito + result = /obj/item/food/snacks/burrito /datum/recipe/microwave/monkeysdelight reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/monkeycube, - /obj/item/reagent_containers/food/snacks/grown/banana) - result = /obj/item/reagent_containers/food/snacks/monkeysdelight + /obj/item/food/snacks/monkeycube, + /obj/item/food/snacks/grown/banana) + result = /obj/item/food/snacks/monkeysdelight /datum/recipe/microwave/fishandchips items = list( - /obj/item/reagent_containers/food/snacks/fries, - /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/food/snacks/fries, + /obj/item/food/snacks/carpmeat, ) - result = /obj/item/reagent_containers/food/snacks/fishandchips + result = /obj/item/food/snacks/fishandchips /datum/recipe/microwave/sandwich items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sandwich + result = /obj/item/food/snacks/sandwich /datum/recipe/microwave/tomatosoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/soup/tomatosoup + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/soup/tomatosoup /datum/recipe/microwave/stew reagents = list("water" = 10) items= list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/eggplant, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/meat) - result = /obj/item/reagent_containers/food/snacks/soup/stew + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/eggplant, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/meat) + result = /obj/item/food/snacks/soup/stew /datum/recipe/microwave/slimetoast reagents = list("slimejelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime + result = /obj/item/food/snacks/jelliedtoast/slime /datum/recipe/microwave/jelliedtoast reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry + result = /obj/item/food/snacks/jelliedtoast/cherry /datum/recipe/microwave/misosoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, + /obj/item/food/snacks/soydope, + /obj/item/food/snacks/soydope, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, ) - result = /obj/item/reagent_containers/food/snacks/soup/misosoup + result = /obj/item/food/snacks/soup/misosoup /datum/recipe/microwave/stewedsoymeat - items = list(/obj/item/reagent_containers/food/snacks/soydope, /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/grown/carrot, /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/stewedsoymeat + items = list(/obj/item/food/snacks/soydope, /obj/item/food/snacks/soydope, + /obj/item/food/snacks/grown/carrot, /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/stewedsoymeat /datum/recipe/microwave/boiledspaghetti reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/spaghetti, + /obj/item/food/snacks/spaghetti, ) - result = /obj/item/reagent_containers/food/snacks/boiledspaghetti + result = /obj/item/food/snacks/boiledspaghetti /datum/recipe/microwave/boiledrice reagents = list("water" = 5, "rice" = 10) - result = /obj/item/reagent_containers/food/snacks/boiledrice + result = /obj/item/food/snacks/boiledrice /datum/recipe/microwave/ricepudding reagents = list("milk" = 5, "rice" = 10) - result = /obj/item/reagent_containers/food/snacks/ricepudding + result = /obj/item/food/snacks/ricepudding /datum/recipe/microwave/pastatomato reagents = list("water" = 5) - items = list(/obj/item/reagent_containers/food/snacks/spaghetti, /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/pastatomato + items = list(/obj/item/food/snacks/spaghetti, /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/pastatomato /datum/recipe/microwave/poppypretzel - items = list(/obj/item/seeds/poppy, /obj/item/reagent_containers/food/snacks/dough) - result = /obj/item/reagent_containers/food/snacks/poppypretzel + items = list(/obj/item/seeds/poppy, /obj/item/food/snacks/dough) + result = /obj/item/food/snacks/poppypretzel /datum/recipe/microwave/meatballspaggetti reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/spaghetti, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, + /obj/item/food/snacks/spaghetti, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, ) - result = /obj/item/reagent_containers/food/snacks/meatballspaghetti + result = /obj/item/food/snacks/meatballspaghetti /datum/recipe/microwave/spesslaw reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/spaghetti, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, + /obj/item/food/snacks/spaghetti, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, ) - result = /obj/item/reagent_containers/food/snacks/spesslaw + result = /obj/item/food/snacks/spesslaw /datum/recipe/microwave/macncheese reagents = list("water" = 5, "milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/macaroni, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/macaroni, ) - result = /obj/item/reagent_containers/food/snacks/macncheese + result = /obj/item/food/snacks/macncheese /datum/recipe/microwave/superbiteburger reagents = list("sodiumchloride" = 5, "blackpepper" = 5) items = list( - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/tomatoslice + /obj/item/food/snacks/burger/bigbite, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/tomatoslice ) - result = /obj/item/reagent_containers/food/snacks/burger/superbite + result = /obj/item/food/snacks/burger/superbite /datum/recipe/microwave/crazyburger reagents = list("cornoil" = 15) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/chili, /obj/item/toy/crayon/green, /obj/item/flashlight/flare ) - result = /obj/item/reagent_containers/food/snacks/burger/crazy + result = /obj/item/food/snacks/burger/crazy /datum/recipe/microwave/blt items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/tomatoslice, - /obj/item/reagent_containers/food/snacks/bacon + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/tomatoslice, + /obj/item/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/blt + result = /obj/item/food/snacks/blt /datum/recipe/microwave/peanut_butter_jelly/cherry reagents = list("cherryjelly" = 5, "peanutbutter" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice ) - result = /obj/item/reagent_containers/food/snacks/peanut_butter_jelly/cherry + result = /obj/item/food/snacks/peanut_butter_jelly/cherry /datum/recipe/microwave/peanut_butter_jelly/slime reagents = list("slimejelly" = 5, "peanutbutter" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice ) - result = /obj/item/reagent_containers/food/snacks/peanut_butter_jelly/slime + result = /obj/item/food/snacks/peanut_butter_jelly/slime /datum/recipe/microwave/peanut_butter_banana reagents = list("peanutbutter" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/peanut_butter_banana + result = /obj/item/food/snacks/peanut_butter_banana /datum/recipe/microwave/philly_cheesesteak items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/onion + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/onion ) - result = /obj/item/reagent_containers/food/snacks/philly_cheesesteak + result = /obj/item/food/snacks/philly_cheesesteak /datum/recipe/microwave/ppattyred reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/red + result = /obj/item/food/snacks/burger/ppatty/red /datum/recipe/microwave/ppattyorange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/orange + result = /obj/item/food/snacks/burger/ppatty/orange /datum/recipe/microwave/ppattyyellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/yellow + result = /obj/item/food/snacks/burger/ppatty/yellow /datum/recipe/microwave/ppattygreen reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/green + result = /obj/item/food/snacks/burger/ppatty/green /datum/recipe/microwave/ppattyblue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/blue + result = /obj/item/food/snacks/burger/ppatty/blue /datum/recipe/microwave/ppattypurple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/purple + result = /obj/item/food/snacks/burger/ppatty/purple /datum/recipe/microwave/ppattywhite reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/white + result = /obj/item/food/snacks/burger/ppatty/white /datum/recipe/microwave/ppattyrainbow items = list( - /obj/item/reagent_containers/food/snacks/burger/ppatty/red, - /obj/item/reagent_containers/food/snacks/burger/ppatty/orange, - /obj/item/reagent_containers/food/snacks/burger/ppatty/yellow, - /obj/item/reagent_containers/food/snacks/burger/ppatty/green, - /obj/item/reagent_containers/food/snacks/burger/ppatty/blue, - /obj/item/reagent_containers/food/snacks/burger/ppatty/purple, - /obj/item/reagent_containers/food/snacks/burger/ppatty/white + /obj/item/food/snacks/burger/ppatty/red, + /obj/item/food/snacks/burger/ppatty/orange, + /obj/item/food/snacks/burger/ppatty/yellow, + /obj/item/food/snacks/burger/ppatty/green, + /obj/item/food/snacks/burger/ppatty/blue, + /obj/item/food/snacks/burger/ppatty/purple, + /obj/item/food/snacks/burger/ppatty/white ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/rainbow + result = /obj/item/food/snacks/burger/ppatty/rainbow /datum/recipe/microwave/elecburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/stack/sheet/mineral/plasma, /obj/item/stack/sheet/mineral/plasma ) - result = /obj/item/reagent_containers/food/snacks/burger/elec + result = /obj/item/food/snacks/burger/elec /datum/recipe/microwave/ratburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/holder/mouse ) - result = /obj/item/reagent_containers/food/snacks/burger/rat + result = /obj/item/food/snacks/burger/rat /datum/recipe/microwave/candiedapple reagents = list("water" = 5, "sugar" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/candiedapple + items = list(/obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/candiedapple /datum/recipe/microwave/slimeburger reagents = list("slimejelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/burger/jelly/slime + result = /obj/item/food/snacks/burger/jelly/slime /datum/recipe/microwave/jellyburger reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/burger/jelly/cherry + result = /obj/item/food/snacks/burger/jelly/cherry /datum/recipe/microwave/twobread reagents = list("wine" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/twobread + result = /obj/item/food/snacks/twobread /datum/recipe/microwave/slimesandwich reagents = list("slimejelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jellysandwich/slime + result = /obj/item/food/snacks/jellysandwich/slime /datum/recipe/microwave/cherrysandwich reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry + result = /obj/item/food/snacks/jellysandwich/cherry /datum/recipe/microwave/bloodsoup reagents = list("blood" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blood, /obj/item/reagent_containers/food/snacks/grown/tomato/blood) - result = /obj/item/reagent_containers/food/snacks/soup/bloodsoup + items = list(/obj/item/food/snacks/grown/tomato/blood, /obj/item/food/snacks/grown/tomato/blood) + result = /obj/item/food/snacks/soup/bloodsoup /datum/recipe/microwave/slimesoup reagents = list("water" = 10, "slimejelly" = 5) - result = /obj/item/reagent_containers/food/snacks/soup/slimesoup + result = /obj/item/food/snacks/soup/slimesoup /datum/recipe/microwave/clownstears reagents = list("water" = 10) items = list( /obj/item/stack/ore/bananium, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/soup/clownstears + result = /obj/item/food/snacks/soup/clownstears /datum/recipe/microwave/clownchili reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/tomato, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/tomato, /obj/item/clothing/shoes/clown_shoes ) - result = /obj/item/reagent_containers/food/snacks/soup/clownchili + result = /obj/item/food/snacks/soup/clownchili /datum/recipe/microwave/eyesoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, /obj/item/organ/internal/eyes ) - result = /obj/item/reagent_containers/food/snacks/soup/eyesoup + result = /obj/item/food/snacks/soup/eyesoup /datum/recipe/microwave/sweetpotatosoup reagents = list("water" = 10, "milk" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/potato/sweet, - /obj/item/reagent_containers/food/snacks/grown/potato/sweet + /obj/item/food/snacks/grown/potato/sweet, + /obj/item/food/snacks/grown/potato/sweet ) - result = /obj/item/reagent_containers/food/snacks/soup/sweetpotatosoup + result = /obj/item/food/snacks/soup/sweetpotatosoup /datum/recipe/microwave/redbeetsoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/redbeet, - /obj/item/reagent_containers/food/snacks/grown/redbeet, - /obj/item/reagent_containers/food/snacks/grown/cabbage + /obj/item/food/snacks/grown/redbeet, + /obj/item/food/snacks/grown/redbeet, + /obj/item/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/soup/redbeetsoup + result = /obj/item/food/snacks/soup/redbeetsoup /datum/recipe/microwave/frenchonionsoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/soup/frenchonionsoup + result = /obj/item/food/snacks/soup/frenchonionsoup /datum/recipe/microwave/zurek reagents = list("water" = 10, "flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/sausage, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/onion + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/sausage, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/onion ) - result = /obj/item/reagent_containers/food/snacks/soup/zurek + result = /obj/item/food/snacks/soup/zurek /datum/recipe/microwave/cullenskink reagents = list("water" = 10, "milk" = 10, "blackpepper" = 4) items = list( - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/potato + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/potato ) - result = /obj/item/reagent_containers/food/snacks/soup/cullenskink + result = /obj/item/food/snacks/soup/cullenskink /datum/recipe/microwave/chicken_noodle_soup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/boiledspaghetti + /obj/item/food/snacks/meat, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/boiledspaghetti ) - result = /obj/item/reagent_containers/food/snacks/soup/chicken_noodle_soup + result = /obj/item/food/snacks/soup/chicken_noodle_soup /datum/recipe/microwave/cornchowder reagents = list("water" = 10, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/corn, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/bacon + /obj/item/food/snacks/grown/corn, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/soup/cornchowder + result = /obj/item/food/snacks/soup/cornchowder /datum/recipe/microwave/meatball_noodles reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/peanuts, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/spaghetti + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/peanuts, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/spaghetti ) - result = /obj/item/reagent_containers/food/snacks/soup/meatball_noodles + result = /obj/item/food/snacks/soup/meatball_noodles /datum/recipe/microwave/seedsoup reagents = list("water" = 10, "vinegar" = 10) @@ -798,218 +798,218 @@ /obj/item/seeds/poppy/lily, /obj/item/seeds/ambrosia ) - result = /obj/item/reagent_containers/food/snacks/soup/seedsoup + result = /obj/item/food/snacks/soup/seedsoup /datum/recipe/microwave/beanstew reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/beans, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/corn + /obj/item/food/snacks/beans, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/corn ) - result = /obj/item/reagent_containers/food/snacks/soup/beanstew + result = /obj/item/food/snacks/soup/beanstew /datum/recipe/microwave/oatstew reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/oat, - /obj/item/reagent_containers/food/snacks/grown/potato/sweet, - /obj/item/reagent_containers/food/snacks/grown/parsnip, - /obj/item/reagent_containers/food/snacks/grown/carrot + /obj/item/food/snacks/grown/oat, + /obj/item/food/snacks/grown/potato/sweet, + /obj/item/food/snacks/grown/parsnip, + /obj/item/food/snacks/grown/carrot ) - result = /obj/item/reagent_containers/food/snacks/soup/oatstew + result = /obj/item/food/snacks/soup/oatstew /datum/recipe/microwave/hong_kong_borscht reagents = list("water" = 10, "soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/cutlet + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/cutlet ) - result = /obj/item/reagent_containers/food/snacks/soup/hong_kong_borscht + result = /obj/item/food/snacks/soup/hong_kong_borscht /datum/recipe/microwave/hong_kong_macaroni reagents = list("water" = 10, "cream" = 10) items = list( - /obj/item/reagent_containers/food/snacks/boiledspaghetti, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/bacon + /obj/item/food/snacks/boiledspaghetti, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/soup/hong_kong_macaroni + result = /obj/item/food/snacks/soup/hong_kong_macaroni /datum/recipe/microwave/boiledslimeextract reagents = list("water" = 5) items = list( /obj/item/slime_extract, ) - result = /obj/item/reagent_containers/food/snacks/boiledslimecore + result = /obj/item/food/snacks/boiledslimecore /datum/recipe/microwave/mint reagents = list("toxin" = 5) - result = /obj/item/reagent_containers/food/snacks/mint + result = /obj/item/food/snacks/mint /datum/recipe/microwave/chocolateegg items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/chocolateegg + result = /obj/item/food/snacks/chocolateegg /datum/recipe/microwave/mysterysoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/badrecipe, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/badrecipe, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/soup/mysterysoup + result = /obj/item/food/snacks/soup/mysterysoup /datum/recipe/microwave/mushroomsoup reagents = list("water" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom) - result = /obj/item/reagent_containers/food/snacks/soup/mushroomsoup + items = list(/obj/item/food/snacks/grown/mushroom) + result = /obj/item/food/snacks/soup/mushroomsoup /datum/recipe/microwave/chawanmushi reagents = list("water" = 5, "soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/grown/mushroom + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/grown/mushroom ) - result = /obj/item/reagent_containers/food/snacks/chawanmushi + result = /obj/item/food/snacks/chawanmushi /datum/recipe/microwave/beetsoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/whitebeet, /obj/item/reagent_containers/food/snacks/grown/cabbage) - result = /obj/item/reagent_containers/food/snacks/soup/beetsoup + items = list(/obj/item/food/snacks/grown/whitebeet, /obj/item/food/snacks/grown/cabbage) + result = /obj/item/food/snacks/soup/beetsoup /datum/recipe/microwave/salad items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/cabbage + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/salad + result = /obj/item/food/snacks/salad /datum/recipe/microwave/antipasto_salad items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/olive, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/olive, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/salad/antipasto + result = /obj/item/food/snacks/salad/antipasto /datum/recipe/microwave/caesar_salad reagents = list("oliveoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/breadslice + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/breadslice ) - result = /obj/item/reagent_containers/food/snacks/salad/caesar + result = /obj/item/food/snacks/salad/caesar /datum/recipe/microwave/citrusdelight items = list( - /obj/item/reagent_containers/food/snacks/grown/citrus/lime, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + /obj/item/food/snacks/grown/citrus/lime, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/lemon ) - result = /obj/item/reagent_containers/food/snacks/salad/citrusdelight + result = /obj/item/food/snacks/salad/citrusdelight /datum/recipe/microwave/fruitsalad items = list( - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/grapes, - /obj/item/reagent_containers/food/snacks/watermelonslice + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/grapes, + /obj/item/food/snacks/watermelonslice ) - result = /obj/item/reagent_containers/food/snacks/salad/fruit + result = /obj/item/food/snacks/salad/fruit /datum/recipe/microwave/greek_salad reagents = list("oliveoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/olive, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/grown/olive, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/salad/greek + result = /obj/item/food/snacks/salad/greek /datum/recipe/microwave/junglesalad items = list( - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/grapes, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/watermelonslice, - /obj/item/reagent_containers/food/snacks/watermelonslice + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/grapes, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/watermelonslice, + /obj/item/food/snacks/watermelonslice ) - result = /obj/item/reagent_containers/food/snacks/salad/jungle + result = /obj/item/food/snacks/salad/jungle /datum/recipe/microwave/kale_salad reagents = list("oliveoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/onion_slice/red + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/onion_slice/red ) - result = /obj/item/reagent_containers/food/snacks/salad/kale + result = /obj/item/food/snacks/salad/kale /datum/recipe/microwave/potato_salad reagents = list("mayonnaise" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/boiledegg + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/boiledegg ) - result = /obj/item/reagent_containers/food/snacks/salad/potato + result = /obj/item/food/snacks/salad/potato /datum/recipe/microwave/melonfruitbowl items = list( - /obj/item/reagent_containers/food/snacks/grown/watermelon, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/ambrosia, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + /obj/item/food/snacks/grown/watermelon, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/ambrosia, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/lemon ) - result = /obj/item/reagent_containers/food/snacks/salad/melonfruitbowl + result = /obj/item/food/snacks/salad/melonfruitbowl /datum/recipe/microwave/herbsalad - items = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/salad/herb + items = list(/obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/salad/herb /datum/recipe/microwave/herbsalad/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/salad/herb/being_cooked = ..() + var/obj/item/food/snacks/salad/herb/being_cooked = ..() being_cooked.reagents.del_reagent("toxin") return being_cooked /datum/recipe/microwave/aesirsalad - items = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/grown/apple/gold) - result = /obj/item/reagent_containers/food/snacks/salad/aesir + items = list(/obj/item/food/snacks/grown/ambrosia/deus, /obj/item/food/snacks/grown/ambrosia/deus, + /obj/item/food/snacks/grown/ambrosia/deus, /obj/item/food/snacks/grown/apple/gold) + result = /obj/item/food/snacks/salad/aesir /datum/recipe/microwave/validsalad - items = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/meatball) - result = /obj/item/reagent_containers/food/snacks/salad/valid + items = list(/obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/meatball) + result = /obj/item/food/snacks/salad/valid /datum/recipe/microwave/validsalad/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/salad/valid/being_cooked = ..() + var/obj/item/food/snacks/salad/valid/being_cooked = ..() being_cooked.reagents.del_reagent("toxin") return being_cooked @@ -1017,325 +1017,325 @@ /datum/recipe/microwave/wrap reagents = list("soysauce" = 10) - items = list(/obj/item/reagent_containers/food/snacks/friedegg, /obj/item/reagent_containers/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/wrap + items = list(/obj/item/food/snacks/friedegg, /obj/item/food/snacks/grown/cabbage ) + result = /obj/item/food/snacks/wrap /datum/recipe/microwave/beans reagents = list("ketchup" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/soybeans, /obj/item/reagent_containers/food/snacks/grown/soybeans) - result = /obj/item/reagent_containers/food/snacks/beans + items = list(/obj/item/food/snacks/grown/soybeans, /obj/item/food/snacks/grown/soybeans) + result = /obj/item/food/snacks/beans /datum/recipe/microwave/benedict items = list( - /obj/item/reagent_containers/food/snacks/friedegg, - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/friedegg, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/benedict + result = /obj/item/food/snacks/benedict /datum/recipe/microwave/meatbun reagents = list("soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/grown/cabbage + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/meatbun + result = /obj/item/food/snacks/meatbun /datum/recipe/microwave/icecreamsandwich reagents = list("ice" = 5, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/frozen/icecream, + /obj/item/food/snacks/frozen/icecream, ) - result = /obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich + result = /obj/item/food/snacks/frozen/icecreamsandwich /datum/recipe/microwave/berryicecreamsandwich reagents = list("ice" = 5, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/wafflecone + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/wafflecone ) - result = /obj/item/reagent_containers/food/snacks/frozen/berryicecreamsandwich + result = /obj/item/food/snacks/frozen/berryicecreamsandwich /datum/recipe/microwave/sundae reagents = list("cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/wafflecone, - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/wafflecone, + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/frozen/sundae + result = /obj/item/food/snacks/frozen/sundae /datum/recipe/microwave/bananatopsicle reagents = list("sugar" = 5, "banana" = 5) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/bananatop + result = /obj/item/food/snacks/frozen/popsicle/bananatop /datum/recipe/microwave/berrytopsicle reagents = list("sugar" = 5, "berryjuice" = 5) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/berrytop + result = /obj/item/food/snacks/frozen/popsicle/berrytop /datum/recipe/microwave/pineappletopsicle reagents = list("sugar" = 5, "pineapplejuice" = 5) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/pineappletop + result = /obj/item/food/snacks/frozen/popsicle/pineappletop /datum/recipe/microwave/licoricecreamsicle reagents = list("sugar" = 2, "blumpkinjuice" = 4, "ice" = 2, "vanilla" = 2, "cream" = 2) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/licoricecream + result = /obj/item/food/snacks/frozen/popsicle/licoricecream /datum/recipe/microwave/orangecreamsicle reagents = list("sugar" = 2, "orangejuice" = 4, "ice" = 2, "vanilla" = 2, "cream" = 2) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/orangecream + result = /obj/item/food/snacks/frozen/popsicle/orangecream /datum/recipe/microwave/berrycreamsicle reagents = list("sugar" = 2, "berryjuice" = 4, "ice" = 2, "vanilla" = 2, "cream" = 2) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/berrycream + result = /obj/item/food/snacks/frozen/popsicle/berrycream /datum/recipe/microwave/frozenpineapplepop items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/pineappleslice, - /obj/item/reagent_containers/food/snacks/chocolatebar + /obj/item/food/snacks/pineappleslice, + /obj/item/food/snacks/chocolatebar ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/frozenpineapple + result = /obj/item/food/snacks/frozen/popsicle/frozenpineapple /datum/recipe/microwave/jumboicecream reagents = list("sugar" = 2, "ice" = 2, "vanilla" = 3, "cream" = 2) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/chocolatebar + /obj/item/food/snacks/chocolatebar ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle + result = /obj/item/food/snacks/frozen/popsicle /datum/recipe/microwave/seasalticecream reagents = list("sugar" = 5, "sodiumchloride" = 3, "cream" = 5) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/sea_salt + result = /obj/item/food/snacks/frozen/popsicle/sea_salt /datum/recipe/microwave/cornuto reagents = list("ice" = 2, "sugar" = 4, "cream" = 4) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/chocolatebar + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/chocolatebar ) - result = /obj/item/reagent_containers/food/snacks/frozen/cornuto + result = /obj/item/food/snacks/frozen/cornuto /datum/recipe/microwave/honkdae reagents = list("cream" = 5, "ice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/wafflecone, - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, + /obj/item/food/snacks/wafflecone, + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, /obj/item/clothing/mask/gas/clown_hat ) - result = /obj/item/reagent_containers/food/snacks/frozen/honkdae + result = /obj/item/food/snacks/frozen/honkdae /datum/recipe/microwave/peanutbuttermochi reagents = list("cream" = 5, "rice" = 5, "sugar" = 5, "peanutbutter" = 2) items = list( - /obj/item/reagent_containers/food/snacks/wafflecone + /obj/item/food/snacks/wafflecone ) - result = /obj/item/reagent_containers/food/snacks/frozen/peanutbuttermochi + result = /obj/item/food/snacks/frozen/peanutbuttermochi /datum/recipe/microwave/spacefreezy reagents = list("bluecherryjelly" = 5,"spacemountainwind" = 15) items = list( - /obj/item/reagent_containers/food/snacks/frozen/icecream + /obj/item/food/snacks/frozen/icecream ) - result = /obj/item/reagent_containers/food/snacks/frozen/spacefreezy + result = /obj/item/food/snacks/frozen/spacefreezy /datum/recipe/microwave/snowcone/apple reagents = list("ice" = 15, "applejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/apple + result = /obj/item/food/snacks/frozen/snowcone/apple /datum/recipe/microwave/snowcone/berry reagents = list("ice" = 15, "berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/berry + result = /obj/item/food/snacks/frozen/snowcone/berry /datum/recipe/microwave/snowcone/bluecherry reagents = list("ice" = 15, "bluecherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/bluecherry + result = /obj/item/food/snacks/frozen/snowcone/bluecherry /datum/recipe/microwave/snowcone/cherry reagents = list("ice" = 15, "cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/cherry + result = /obj/item/food/snacks/frozen/snowcone/cherry /datum/recipe/microwave/snowcone/flavorless reagents = list("ice" = 15) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone + result = /obj/item/food/snacks/frozen/snowcone /datum/recipe/microwave/snowcone/fruitsalad reagents = list("ice" = 15, "orangejuice" = 5, "limejuice" = 5, "lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/fruitsalad + result = /obj/item/food/snacks/frozen/snowcone/fruitsalad /datum/recipe/microwave/snowcone/grape reagents = list("ice" = 15, "grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/grape + result = /obj/item/food/snacks/frozen/snowcone/grape /datum/recipe/microwave/snowcone/honey reagents = list("ice" = 15, "honey" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/honey + result = /obj/item/food/snacks/frozen/snowcone/honey /datum/recipe/microwave/snowcone/lemon reagents = list("ice" = 15, "lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/lemon + result = /obj/item/food/snacks/frozen/snowcone/lemon /datum/recipe/microwave/snowcone/lime reagents = list("ice" = 15, "limejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/lime + result = /obj/item/food/snacks/frozen/snowcone/lime /datum/recipe/microwave/snowcone/mime reagents = list("ice" = 15, "nothing" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/mime + result = /obj/item/food/snacks/frozen/snowcone/mime /datum/recipe/microwave/snowcone/orange reagents = list("ice" = 15, "orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/orange + result = /obj/item/food/snacks/frozen/snowcone/orange /datum/recipe/microwave/snowcone/pineapple reagents = list("ice" = 15, "pineapplejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/pineapple + result = /obj/item/food/snacks/frozen/snowcone/pineapple /datum/recipe/microwave/snowcone/rainbow reagents = list("ice" = 15, "colorful_reagent" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/rainbow + result = /obj/item/food/snacks/frozen/snowcone/rainbow /datum/recipe/microwave/snowcone/cola reagents = list("ice" = 15, "cola" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/cola + result = /obj/item/food/snacks/frozen/snowcone/cola /datum/recipe/microwave/snowcone/spacemountainwind reagents = list("ice" = 15, "spacemountainwind" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/spacemountain + result = /obj/item/food/snacks/frozen/snowcone/spacemountain /datum/recipe/microwave/antpopsicle reagents = list("sugar" = 5, "water" = 5, "ants" = 10) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/ant + result = /obj/item/food/snacks/frozen/popsicle/ant /datum/recipe/microwave/notasandwich items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, /obj/item/clothing/mask/fakemoustache, ) - result = /obj/item/reagent_containers/food/snacks/notasandwich + result = /obj/item/food/snacks/notasandwich /datum/recipe/microwave/friedbanana reagents = list("sugar" = 10, "cornoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/friedbanana + result = /obj/item/food/snacks/friedbanana /datum/recipe/microwave/stuffing reagents = list("water" = 5, "sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/bread, + /obj/item/food/snacks/sliceable/bread, ) - result = /obj/item/reagent_containers/food/snacks/stuffing + result = /obj/item/food/snacks/stuffing /datum/recipe/microwave/boiledspiderleg reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg + /obj/item/food/snacks/monstermeat/spiderleg ) - result = /obj/item/reagent_containers/food/snacks/boiledspiderleg + result = /obj/item/food/snacks/boiledspiderleg /datum/recipe/microwave/spidereggsham reagents = list("sodiumchloride" = 1) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/spidereggs, - /obj/item/reagent_containers/food/snacks/monstermeat/spidermeat + /obj/item/food/snacks/monstermeat/spidereggs, + /obj/item/food/snacks/monstermeat/spidermeat ) - result = /obj/item/reagent_containers/food/snacks/spidereggsham + result = /obj/item/food/snacks/spidereggsham /datum/recipe/microwave/sashimi reagents = list("soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/spidereggs, - /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/food/snacks/monstermeat/spidereggs, + /obj/item/food/snacks/carpmeat, ) - result = /obj/item/reagent_containers/food/snacks/sashimi + result = /obj/item/food/snacks/sashimi /datum/recipe/microwave/mashedtaters reagents = list("gravy" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/potato) - result = /obj/item/reagent_containers/food/snacks/mashed_potatoes + items = list(/obj/item/food/snacks/grown/potato) + result = /obj/item/food/snacks/mashed_potatoes ////////////////////////////////////////// // bs12 food port stuff @@ -1343,19 +1343,19 @@ /datum/recipe/microwave/taco items = list( - /obj/item/reagent_containers/food/snacks/doughslice, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/doughslice, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/taco + result = /obj/item/food/snacks/taco /datum/recipe/microwave/mint_2 reagents = list("sugar" = 5, "frostoil" = 5) - result = /obj/item/reagent_containers/food/snacks/mint + result = /obj/item/food/snacks/mint /datum/recipe/microwave/boiled_shrimp reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/shrimp + /obj/item/food/snacks/shrimp ) - result = /obj/item/reagent_containers/food/snacks/boiled_shrimp + result = /obj/item/food/snacks/boiled_shrimp diff --git a/code/modules/food_and_drinks/recipes/recipes_oven.dm b/code/modules/food_and_drinks/recipes/recipes_oven.dm index a06b87d8883c..e95dad37b108 100644 --- a/code/modules/food_and_drinks/recipes/recipes_oven.dm +++ b/code/modules/food_and_drinks/recipes/recipes_oven.dm @@ -4,209 +4,209 @@ /datum/recipe/oven/bun items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/bun + result = /obj/item/food/snacks/bun /datum/recipe/oven/meatbread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/meatbread + result = /obj/item/food/snacks/sliceable/meatbread /datum/recipe/oven/syntibread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/meatbread + result = /obj/item/food/snacks/sliceable/meatbread /datum/recipe/oven/xenomeatbread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/monstermeat/xenomeat, + /obj/item/food/snacks/monstermeat/xenomeat, + /obj/item/food/snacks/monstermeat/xenomeat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread + result = /obj/item/food/snacks/sliceable/xenomeatbread /datum/recipe/oven/bananabread reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bananabread + result = /obj/item/food/snacks/sliceable/bananabread /datum/recipe/oven/banarnarbread reagents = list("milk" = 5, "sugar" = 5, "blood" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/banarnarbread + result = /obj/item/food/snacks/sliceable/banarnarbread /datum/recipe/oven/muffin reagents = list("milk" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/muffin + result = /obj/item/food/snacks/muffin /datum/recipe/oven/carrotcake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/carrot + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/carrot ) - result = /obj/item/reagent_containers/food/snacks/sliceable/carrotcake + result = /obj/item/food/snacks/sliceable/carrotcake /datum/recipe/oven/cheesecake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/cheesecake + result = /obj/item/food/snacks/sliceable/cheesecake /datum/recipe/oven/plaincake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/plaincake + result = /obj/item/food/snacks/sliceable/plaincake /datum/recipe/oven/clowncake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/frozen/sundae, - /obj/item/reagent_containers/food/snacks/frozen/sundae, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/frozen/sundae, + /obj/item/food/snacks/frozen/sundae, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/clowncake + result = /obj/item/food/snacks/sliceable/clowncake /datum/recipe/oven/meatpie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/meat, ) - result = /obj/item/reagent_containers/food/snacks/meatpie + result = /obj/item/food/snacks/meatpie /datum/recipe/oven/tofupie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/tofu, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/tofu, ) - result = /obj/item/reagent_containers/food/snacks/tofupie + result = /obj/item/food/snacks/tofupie /datum/recipe/oven/xemeatpie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/monstermeat/xenomeat ) - result = /obj/item/reagent_containers/food/snacks/xemeatpie + result = /obj/item/food/snacks/xemeatpie /datum/recipe/oven/pie reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/pie + result = /obj/item/food/snacks/pie /datum/recipe/oven/cherrypie reagents = list("sugar" = 10) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/cherries + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/cherries ) - result = /obj/item/reagent_containers/food/snacks/cherrypie + result = /obj/item/food/snacks/cherrypie /datum/recipe/oven/berryclafoutis items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/berries + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/berries ) - result = /obj/item/reagent_containers/food/snacks/berryclafoutis + result = /obj/item/food/snacks/berryclafoutis /datum/recipe/oven/tofubread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/tofubread + result = /obj/item/food/snacks/sliceable/tofubread /datum/recipe/oven/loadedbakedpotato items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/potato + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/potato ) - result = /obj/item/reagent_containers/food/snacks/loadedbakedpotato + result = /obj/item/food/snacks/loadedbakedpotato /datum/recipe/oven/yakiimo items = list( - /obj/item/reagent_containers/food/snacks/grown/potato/sweet + /obj/item/food/snacks/grown/potato/sweet ) - result = /obj/item/reagent_containers/food/snacks/yakiimo + result = /obj/item/food/snacks/yakiimo ////cookies by Ume /datum/recipe/oven/cookies items = list( - /obj/item/reagent_containers/food/snacks/rawcookies/chocochips, + /obj/item/food/snacks/rawcookies/chocochips, ) result = /obj/item/storage/bag/tray/cookies_tray /datum/recipe/oven/sugarcookies items = list( - /obj/item/reagent_containers/food/snacks/rawcookies, + /obj/item/food/snacks/rawcookies, ) result = /obj/item/storage/bag/tray/cookies_tray/sugarcookie @@ -216,15 +216,15 @@ /datum/recipe/oven/fortunecookie reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/doughslice, + /obj/item/food/snacks/doughslice, /obj/item/paper, ) - result = /obj/item/reagent_containers/food/snacks/fortunecookie + result = /obj/item/food/snacks/fortunecookie /datum/recipe/oven/fortunecookie/make_food(obj/container) var/obj/item/paper/P = locate() in container P.loc = null //So we don't delete the paper while cooking the cookie - var/obj/item/reagent_containers/food/snacks/fortunecookie/being_cooked = ..() + var/obj/item/food/snacks/fortunecookie/being_cooked = ..() if(P.info) //If there's anything written on the paper, just move it into the fortune cookie P.forceMove(being_cooked) //Prevents the oven deleting our paper being_cooked.trash = P //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn @@ -235,367 +235,367 @@ // Pizzas /datum/recipe/oven/pizzamargherita items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza + result = /obj/item/food/snacks/sliceable/pizza/margheritapizza /datum/recipe/oven/meatpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/tomato + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/tomato ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza + result = /obj/item/food/snacks/sliceable/pizza/meatpizza /datum/recipe/oven/mushroompizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/tomato + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/tomato ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza + result = /obj/item/food/snacks/sliceable/pizza/mushroompizza /datum/recipe/oven/vegetablepizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/eggplant, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/corn, - /obj/item/reagent_containers/food/snacks/grown/tomato + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/eggplant, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/corn, + /obj/item/food/snacks/grown/tomato ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza + result = /obj/item/food/snacks/sliceable/pizza/vegetablepizza /datum/recipe/oven/hawaiianpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/pineappleslice, - /obj/item/reagent_containers/food/snacks/pineappleslice, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/pineappleslice, + /obj/item/food/snacks/pineappleslice, + /obj/item/food/snacks/meat, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza + result = /obj/item/food/snacks/sliceable/pizza/hawaiianpizza /datum/recipe/oven/macncheesepizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/macncheese, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/macncheese, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza + result = /obj/item/food/snacks/sliceable/pizza/macpizza /datum/recipe/oven/cheesepizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/cheesepizza + result = /obj/item/food/snacks/sliceable/pizza/cheesepizza /datum/recipe/oven/pepperonipizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/sausage + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/sausage ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza + result = /obj/item/food/snacks/sliceable/pizza/pepperonipizza /datum/recipe/oven/donkpocketpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/donkpocket, - /obj/item/reagent_containers/food/snacks/donkpocket + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/donkpocket, + /obj/item/food/snacks/donkpocket ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/donkpocketpizza + result = /obj/item/food/snacks/sliceable/pizza/donkpocketpizza /datum/recipe/oven/dankpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/cannabis, - /obj/item/reagent_containers/food/snacks/grown/cannabis, - /obj/item/reagent_containers/food/snacks/grown/cannabis, - /obj/item/reagent_containers/food/snacks/grown/cannabis + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/cannabis, + /obj/item/food/snacks/grown/cannabis, + /obj/item/food/snacks/grown/cannabis, + /obj/item/food/snacks/grown/cannabis ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/dankpizza + result = /obj/item/food/snacks/sliceable/pizza/dankpizza /datum/recipe/oven/firecrackerpizza reagents = list("capsaicin" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza + result = /obj/item/food/snacks/sliceable/pizza/firecrackerpizza /datum/recipe/oven/pestopizza reagents = list("wasabi" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/pestopizza + result = /obj/item/food/snacks/sliceable/pizza/pestopizza /datum/recipe/oven/garlicpizza reagents = list("garlic" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza + result = /obj/item/food/snacks/sliceable/pizza/garlicpizza /datum/recipe/oven/amanita_pie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/mushroom/amanita ) - result = /obj/item/reagent_containers/food/snacks/amanita_pie + result = /obj/item/food/snacks/amanita_pie /datum/recipe/oven/plump_pie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/mushroom/plumphelmet ) - result = /obj/item/reagent_containers/food/snacks/plump_pie + result = /obj/item/food/snacks/plump_pie /datum/recipe/oven/plumphelmetbiscuit reagents = list("water" = 5, "flour" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet) - result = /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit + items = list(/obj/item/food/snacks/grown/mushroom/plumphelmet) + result = /obj/item/food/snacks/plumphelmetbiscuit /datum/recipe/oven/creamcheesebread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread + result = /obj/item/food/snacks/sliceable/creamcheesebread /datum/recipe/oven/baguette reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/baguette + result = /obj/item/food/snacks/baguette /datum/recipe/oven/croissant items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/dough, + /obj/item/food/snacks/egg ) reagents = list("sodiumchloride" = 1, "milk" = 5, "sugar" = 5) - result = /obj/item/reagent_containers/food/snacks/croissant + result = /obj/item/food/snacks/croissant /datum/recipe/oven/birthdaycake reagents = list("milk" = 5, "sugar" = 15, "vanilla" = 10) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, /obj/item/candle, /obj/item/candle, /obj/item/candle, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/birthdaycake + result = /obj/item/food/snacks/sliceable/birthdaycake /datum/recipe/oven/bread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/dough, + /obj/item/food/snacks/egg ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bread + result = /obj/item/food/snacks/sliceable/bread /datum/recipe/oven/bread/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/sliceable/bread/being_cooked = ..() + var/obj/item/food/snacks/sliceable/bread/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/oven/applepie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/apple + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/apple ) - result = /obj/item/reagent_containers/food/snacks/applepie + result = /obj/item/food/snacks/applepie /datum/recipe/oven/applecake reagents = list("milk" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/apple + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/apple ) - result = /obj/item/reagent_containers/food/snacks/sliceable/applecake + result = /obj/item/food/snacks/sliceable/applecake /datum/recipe/oven/orangecake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/orange ) - result = /obj/item/reagent_containers/food/snacks/sliceable/orangecake + result = /obj/item/food/snacks/sliceable/orangecake /datum/recipe/oven/bananacake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bananacake + result = /obj/item/food/snacks/sliceable/bananacake /datum/recipe/oven/limecake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/citrus/lime, + /obj/item/food/snacks/grown/citrus/lime ) - result = /obj/item/reagent_containers/food/snacks/sliceable/limecake + result = /obj/item/food/snacks/sliceable/limecake /datum/recipe/oven/lemoncake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/citrus/lemon, + /obj/item/food/snacks/grown/citrus/lemon ) - result = /obj/item/reagent_containers/food/snacks/sliceable/lemoncake + result = /obj/item/food/snacks/sliceable/lemoncake /datum/recipe/oven/chocolatecake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/chocolatecake + result = /obj/item/food/snacks/sliceable/chocolatecake /datum/recipe/oven/braincake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, /obj/item/organ/internal/brain ) - result = /obj/item/reagent_containers/food/snacks/sliceable/braincake + result = /obj/item/food/snacks/sliceable/braincake /datum/recipe/oven/pumpkinpie reagents = list("milk" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/pumpkin + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/pumpkin ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie + result = /obj/item/food/snacks/sliceable/pumpkinpie /datum/recipe/oven/appletart reagents = list("sugar" = 5, "milk" = 5, "flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/grown/apple/gold + /obj/item/food/snacks/egg, + /obj/item/food/snacks/grown/apple/gold ) - result = /obj/item/reagent_containers/food/snacks/appletart + result = /obj/item/food/snacks/appletart /datum/recipe/oven/appletart/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/appletart/being_cooked = ..() + var/obj/item/food/snacks/appletart/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/oven/cracker reagents = list("sodiumchloride" = 1) items = list( - /obj/item/reagent_containers/food/snacks/doughslice + /obj/item/food/snacks/doughslice ) - result = /obj/item/reagent_containers/food/snacks/cracker + result = /obj/item/food/snacks/cracker /datum/recipe/oven/sugarcookie/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/sugarcookie/being_cooked = ..() + var/obj/item/food/snacks/sugarcookie/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/oven/flatbread items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough + /obj/item/food/snacks/sliceable/flatdough ) - result = /obj/item/reagent_containers/food/snacks/flatbread + result = /obj/item/food/snacks/flatbread /datum/recipe/oven/toastedsandwich items = list( - /obj/item/reagent_containers/food/snacks/sandwich + /obj/item/food/snacks/sandwich ) - result = /obj/item/reagent_containers/food/snacks/toastedsandwich + result = /obj/item/food/snacks/toastedsandwich /datum/recipe/oven/turkey // Magic items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/stuffing, - /obj/item/reagent_containers/food/snacks/stuffing + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/stuffing, + /obj/item/food/snacks/stuffing ) - result = /obj/item/reagent_containers/food/snacks/sliceable/turkey + result = /obj/item/food/snacks/sliceable/turkey /datum/recipe/oven/tofurkey items = list( - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/stuffing, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/stuffing, ) - result = /obj/item/reagent_containers/food/snacks/tofurkey + result = /obj/item/food/snacks/tofurkey /datum/recipe/oven/lasagna items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/lasagna + result = /obj/item/food/snacks/lasagna diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm index c13c81bb5ab0..5aaf7023d7fc 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm @@ -11,11 +11,11 @@ /datum/crafting_recipe/sandwich name = "Sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/meatsteak = 1, - /obj/item/reagent_containers/food/snacks/breadslice = 2, - /obj/item/reagent_containers/food/snacks/cheesewedge = 1, + /obj/item/food/snacks/meatsteak = 1, + /obj/item/food/snacks/breadslice = 2, + /obj/item/food/snacks/cheesewedge = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sandwich) + result = list(/obj/item/food/snacks/sandwich) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -23,9 +23,9 @@ name = "Slime Jelly Sandwich" reqs = list( /datum/reagent/slimejelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice = 2, + /obj/item/food/snacks/breadslice = 2, ) - result = list(/obj/item/reagent_containers/food/snacks/jellysandwich/slime) + result = list(/obj/item/food/snacks/jellysandwich/slime) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -33,9 +33,9 @@ name = "Cherry Jelly Sandwich" reqs = list( /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice = 2, + /obj/item/food/snacks/breadslice = 2, ) - result = list(/obj/item/reagent_containers/food/snacks/jellysandwich/cherry) + result = list(/obj/item/food/snacks/jellysandwich/cherry) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -43,9 +43,9 @@ name = "Slime Jelly Burger" reqs = list( /datum/reagent/slimejelly = 5, - /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/food/snacks/bun = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/burger/jelly/slime) + result = list(/obj/item/food/snacks/burger/jelly/slime) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -53,9 +53,9 @@ name = "Cherry Jelly Burger" reqs = list( /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/food/snacks/bun = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/burger/jelly/cherry) + result = list(/obj/item/food/snacks/burger/jelly/cherry) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -63,208 +63,208 @@ name = "Home run baseball burger" reqs = list( /obj/item/melee/baseball_bat = 1, - /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/food/snacks/bun = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/burger/baseball) + result = list(/obj/item/food/snacks/burger/baseball) category = CAT_FOOD subcategory = CAT_SANDWICH /datum/crafting_recipe/notasandwich name = "not-a-sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice = 2, + /obj/item/food/snacks/breadslice = 2, /obj/item/clothing/mask/fakemoustache = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/notasandwich) + result = list(/obj/item/food/snacks/notasandwich) category = CAT_FOOD subcategory = CAT_SANDWICH /datum/crafting_recipe/sushi_Ebi name = "Ebi Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/boiled_shrimp = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiled_shrimp = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Ebi) + result = list(/obj/item/food/snacks/sushi_Ebi) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Ebi_maki name = "Ebi Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/boiled_shrimp = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiled_shrimp = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki) + result = list(/obj/item/food/snacks/sliceable/Ebi_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Ikura name = "Ikura Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Ikura) + result = list(/obj/item/food/snacks/sushi_Ikura) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Ikura_maki name = "Ikura Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki) + result = list(/obj/item/food/snacks/sliceable/Ikura_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Inari name = "Inari Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/fried_tofu = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/fried_tofu = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Inari) + result = list(/obj/item/food/snacks/sushi_Inari) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Inari_maki name = "Inari Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/fried_tofu = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/fried_tofu = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Inari_maki) + result = list(/obj/item/food/snacks/sliceable/Inari_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Sake name = "Sake Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonmeat = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonmeat = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Sake) + result = list(/obj/item/food/snacks/sushi_Sake) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Sake_maki name = "Sake Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonmeat = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonmeat = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Sake_maki) + result = list(/obj/item/food/snacks/sliceable/Sake_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_SmokedSalmon name = "Smoked Salmon Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonsteak = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonsteak = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon) + result = list(/obj/item/food/snacks/sushi_SmokedSalmon) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/SmokedSalmon_maki name = "Smoked Salmon Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonsteak = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonsteak = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki) + result = list(/obj/item/food/snacks/sliceable/SmokedSalmon_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Masago name = "Masago Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Masago) + result = list(/obj/item/food/snacks/sushi_Masago) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Masago_maki name = "Masago Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Masago_maki) + result = list(/obj/item/food/snacks/sliceable/Masago_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Tobiko name = "Tobiko Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Tobiko) + result = list(/obj/item/food/snacks/sushi_Tobiko) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Tobiko_maki name = "Tobiko Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki) + result = list(/obj/item/food/snacks/sliceable/Tobiko_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_TobikoEgg name = "Tobiko and Egg Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/sushi_Tobiko = 1, - /obj/item/reagent_containers/food/snacks/egg = 1, + /obj/item/food/snacks/sushi_Tobiko = 1, + /obj/item/food/snacks/egg = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_TobikoEgg) + result = list(/obj/item/food/snacks/sushi_TobikoEgg) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/TobikoEgg_maki name = "Tobiko and Egg Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/sushi_Tobiko = 4, - /obj/item/reagent_containers/food/snacks/egg = 4, + /obj/item/food/snacks/sushi_Tobiko = 4, + /obj/item/food/snacks/egg = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki) + result = list(/obj/item/food/snacks/sliceable/TobikoEgg_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Tai name = "Tai Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/catfishmeat = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/catfishmeat = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Tai) + result = list(/obj/item/food/snacks/sushi_Tai) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Tai_maki name = "Tai Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/catfishmeat = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/catfishmeat = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Tai_maki) + result = list(/obj/item/food/snacks/sliceable/Tai_maki) category = CAT_FOOD subcategory = CAT_SUSHI @@ -278,8 +278,8 @@ reqs = list( /obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, - /obj/item/reagent_containers/food/snacks/sliceable/birthdaycake = 1, - /obj/item/reagent_containers/food/snacks/meat = 3, + /obj/item/food/snacks/sliceable/birthdaycake = 1, + /obj/item/food/snacks/meat = 3, /datum/reagent/blood = 30, /datum/reagent/consumable/sprinkles = 5, /datum/reagent/teslium = 1, diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 9a64098491b4..eb3029bd4dac 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -66,8 +66,8 @@ return if(length(H.cards) > 1) - var/confirm = alert("Are you sure you want to put your [length(H.cards)] cards back into the deck?", "Return Hand", "Yes", "No") - if(confirm == "No" || !Adjacent(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + var/confirm = tgui_alert(user, "Are you sure you want to put your [length(H.cards)] cards back into the deck?", "Return Hand", list("Yes", "No")) + if(confirm != "Yes" || !Adjacent(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return for(var/datum/playingcard/P in H.cards) cards += P @@ -191,9 +191,8 @@ for(var/mob/living/player in viewers(3)) if(!player.incapacitated()) players += player - var/maxcards = clamp(length(cards), 1, 10) - var/dcard = input("How many card(s) do you wish to deal? You may deal up to [maxcards] cards.") as num - if(dcard > maxcards) + var/dcard = tgui_input_number(usr, "How many card(s) do you wish to deal? You may deal up to [length(cards)] cards.", "Deal Cards", max_value = length(cards)) + if(!dcard) return var/mob/living/M = tgui_input_list(usr, "Who do you wish to deal [dcard] card(s)?", "Deal Card", players) if(!usr || !src || !M || !Adjacent(usr)) @@ -354,7 +353,6 @@ dat += "Which card will you remove next?
        " dat += "Turn the hand over" var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.set_content(dat) popup.open() @@ -454,7 +452,7 @@ var/mob/living/carbon/user = usr var/maxcards = min(length(cards), 5) - var/discards = input("How many cards do you want to discard? You may discard up to [maxcards] card(s)") as num + var/discards = tgui_input_number(usr, "How many cards do you want to discard? You may discard up to [maxcards] card(s)", "Discard Cards", max_value = maxcards) if(discards > maxcards) return for(var/i in 1 to discards) diff --git a/code/modules/hallucinations/effects/common.dm b/code/modules/hallucinations/effects/common.dm index 9b29042158dc..827ab482b19a 100644 --- a/code/modules/hallucinations/effects/common.dm +++ b/code/modules/hallucinations/effects/common.dm @@ -112,7 +112,7 @@ /obj/effect/hallucination/chaser/attacker/proc/attack(was_weakened) dir = get_dir(src, target) attack_effects() - target.adjustStaminaLoss(damage) + target.apply_damage(damage, STAMINA) if(!was_weakened && target.IsWeakened()) on_knockdown() diff --git a/code/modules/hallucinations/effects/moderate.dm b/code/modules/hallucinations/effects/moderate.dm index 74744363c90d..187639a5cc55 100644 --- a/code/modules/hallucinations/effects/moderate.dm +++ b/code/modules/hallucinations/effects/moderate.dm @@ -344,11 +344,7 @@ /obj/effect/hallucination/stunprodding/Initialize(mapload, mob/living/carbon/target) . = ..() - var/list/turfs = list() - for(var/turf/T in range(world.view, target)) - turfs += T - - var/turf/T = pick(turfs) + var/turf/T = pick(RANGE_TURFS(15, target)) target.playsound_local(T, 'sound/weapons/egloves.ogg', 25, TRUE) target.playsound_local(T, get_sfx("bodyfall"), 25, TRUE) target.playsound_local(T, "sparks", 50, TRUE) @@ -370,12 +366,8 @@ /obj/effect/hallucination/energy_sword/Initialize(mapload, mob/living/carbon/target) . = ..() - var/list/turfs = list() - for(var/turf/T in range(world.view, target)) - turfs += T - - var/turf/T = pick(turfs) - loc = T + var/turf/T = pick(RANGE_TURFS(15, target)) + forceMove(T) target.playsound_local(T, 'sound/weapons/saberon.ogg', 20, TRUE) var/scream_sound = pick('sound/goonstation/voice/female_scream.ogg', 'sound/goonstation/voice/male_scream.ogg') @@ -406,12 +398,8 @@ /obj/effect/hallucination/gunfire/Initialize(mapload, mob/living/carbon/target) . = ..() - var/list/turfs = list() - for(var/turf/T in range(world.view, target)) - turfs += T - - var/turf/T = pick(turfs) - loc = T + var/turf/T = pick(RANGE_TURFS(15, target)) + forceMove(T) var/gun_sound = pick('sound/weapons/gunshots/gunshot_pistol.ogg', 'sound/weapons/gunshots/gunshot_strong.ogg') var/scream_sound = pick('sound/goonstation/voice/female_scream.ogg', 'sound/goonstation/voice/male_scream.ogg') diff --git a/code/modules/hallucinations/hallucinations.dm b/code/modules/hallucinations/hallucinations.dm index d01413019a1d..aefeb0d1e4e8 100644 --- a/code/modules/hallucinations/hallucinations.dm +++ b/code/modules/hallucinations/hallucinations.dm @@ -52,9 +52,12 @@ GLOBAL_LIST_INIT(hallucinations, list( /// Lazy list of images created as part of the hallucination. Cleared on destruction. var/list/image/images = null -/obj/effect/hallucination/Initialize(mapload, mob/living/carbon/target) +/obj/effect/hallucination/Initialize(mapload, mob/living/carbon/hallucination_target) . = ..() - src.target = target + if(QDELETED(hallucination_target)) + qdel(src) + return + target = hallucination_target if(hallucination_icon && hallucination_icon_state) var/image/I = image(hallucination_icon, hallucination_override ? src : get_turf(src), hallucination_icon_state) I.override = hallucination_override diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 57a5eb504ed5..20919459e93b 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -95,7 +95,7 @@ if(queen_bee) if(bee_resources >= BEE_RESOURCE_HONEYCOMB_COST && honeycombs.len < get_max_honeycomb()) bee_resources = max(bee_resources-BEE_RESOURCE_HONEYCOMB_COST, 0) - var/obj/item/reagent_containers/food/snacks/honeycomb/HC = new(src) + var/obj/item/food/snacks/honeycomb/HC = new(src) if(queen_bee.beegent) HC.set_reagent(queen_bee.beegent.id) honeycombs += HC @@ -240,7 +240,7 @@ var/amtH = HF.honeycomb_capacity var/fallen = 0 while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it - var/obj/item/reagent_containers/food/snacks/honeycomb/HC = pick_n_take(honeycombs) + var/obj/item/food/snacks/honeycomb/HC = pick_n_take(honeycombs) if(HC) HC.forceMove(get_turf(src)) amtH-- diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index ce9d923f43cb..7f27bdb9841b 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -1,24 +1,20 @@ -/obj/item/reagent_containers/food/snacks/honeycomb +/obj/item/food/snacks/honeycomb name = "honeycomb" desc = "A hexagonal mesh of honeycomb." icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "honeycomb" - possible_transfer_amounts = null - disease_amount = 0 volume = 10 - amount_per_transfer_from_this = 0 - visible_transfer_rate = FALSE list_reagents = list("honey" = 5) var/honey_color = "" -/obj/item/reagent_containers/food/snacks/honeycomb/Initialize(mapload) +/obj/item/food/snacks/honeycomb/Initialize(mapload) . = ..() pixel_x = rand(8,-8) pixel_y = rand(8,-8) update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/snacks/honeycomb/update_overlays() +/obj/item/food/snacks/honeycomb/update_overlays() . = ..() var/image/honey if(honey_color) @@ -29,7 +25,7 @@ . += honey -/obj/item/reagent_containers/food/snacks/honeycomb/proc/set_reagent(reagent) +/obj/item/food/snacks/honeycomb/proc/set_reagent(reagent) var/datum/reagent/R = GLOB.chemical_reagents_list[reagent] if(istype(R)) name = "honeycomb ([R.name])" diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 447083963f48..24a936cbb3c1 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -127,7 +127,7 @@ return var/obj/item/storage/bag/plants/PB = O - for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) + for(var/obj/item/food/snacks/grown/G in PB.contents) if(length(stored_plants) >= max_storable_plants) break PB.remove_from_storage(G, src) @@ -141,7 +141,7 @@ SStgui.update_uis(src) return TRUE - else if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) + else if(istype(O, /obj/item/food/snacks/grown)) if(length(stored_plants) >= max_storable_plants) to_chat(user, "[src] can't hold any more plants!") return @@ -166,7 +166,7 @@ files.AddDesign2Known(D.blueprint) processing = FALSE - update_ui_product_list() + update_ui_product_list(user) return TRUE else to_chat(user, "You cannot put this in [name]!") @@ -174,7 +174,7 @@ /** * Builds/Updates the `product_list` used by the UI. */ -/obj/machinery/biogenerator/proc/update_ui_product_list() +/obj/machinery/biogenerator/proc/update_ui_product_list(mob/user) product_list = list() for(var/category in categories) product_list[category] = list() @@ -190,7 +190,8 @@ "cost" = D.materials[MAT_BIOMASS] / efficiency ) - SStgui.update_uis(src, update_static_data = TRUE) + update_static_data(user) + SStgui.update_uis(src) /obj/machinery/biogenerator/attack_hand(mob/user) if(..()) @@ -200,10 +201,13 @@ /obj/machinery/biogenerator/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/biogenerator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/biogenerator/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/biogenerator/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Biogenerator", "Biogenerator", 390, 600, master_ui, state) + ui = new(user, src, "Biogenerator", "Biogenerator") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/hydroponics/compost_bin.dm b/code/modules/hydroponics/compost_bin.dm index 18519207f6ba..50ff4c918da7 100644 --- a/code/modules/hydroponics/compost_bin.dm +++ b/code/modules/hydroponics/compost_bin.dm @@ -40,7 +40,7 @@ return default_deconstruction_crowbar(user, I, ignore_panel = TRUE) // Accepts inserted plants and converts them to biomass -/obj/machinery/compost_bin/proc/make_biomass(obj/item/reagent_containers/food/snacks/grown/O) +/obj/machinery/compost_bin/proc/make_biomass(obj/item/food/snacks/grown/O) // calculate biomass from plant nutriment and plant matter var/plant_biomass = O.reagents.get_reagent_amount("nutriment") + O.reagents.get_reagent_amount("plantmatter") biomass += clamp(plant_biomass * 10, 1, biomass_capacity - biomass) @@ -58,7 +58,7 @@ return var/obj/item/storage/bag/plants/PB = O - for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) + for(var/obj/item/food/snacks/grown/G in PB.contents) PB.remove_from_storage(G, src) make_biomass(G) @@ -74,7 +74,7 @@ update_icon_state() return TRUE - if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) + if(istype(O, /obj/item/food/snacks/grown)) if(biomass >= biomass_capacity) to_chat(user, "[src] can't hold any more plants!") return @@ -118,10 +118,13 @@ /obj/machinery/compost_bin/attack_hand(mob/user) ui_interact(user) -/obj/machinery/compost_bin/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/compost_bin/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/compost_bin/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CompostBin", "Compost Bin", 390, 200, master_ui, state) + ui = new(user, src, "CompostBin", "Compost Bin") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index ef4b978936f6..71c296d900bd 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -17,9 +17,9 @@ /obj/structure/fermenting_barrel/examine(mob/user) . = ..() - . += "It is currently [open ? "open, letting you pour liquids in." : "closed, letting you draw liquids from the tap."] " + . += "It is currently [open ? "open, letting you pour liquids in." : "closed, letting you draw liquids from the tap."]" -/obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/G) +/obj/structure/fermenting_barrel/proc/makeWine(obj/item/food/snacks/grown/G) if(G.reagents) G.reagents.trans_to(src, G.reagents.total_volume) var/amount = G.seed.potency / 4 @@ -39,7 +39,7 @@ playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) /obj/structure/fermenting_barrel/attackby(obj/item/I, mob/user, params) - var/obj/item/reagent_containers/food/snacks/grown/G = I + var/obj/item/food/snacks/grown/G = I if(istype(G)) if(!G.can_distill) to_chat(user, "You can't distill this into anything...") diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index de80880e5712..7d10426d9ed5 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -142,10 +142,13 @@ /obj/machinery/plantgenes/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/plantgenes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/plantgenes/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/plantgenes/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GeneModder", name, 500, 700, master_ui, state) + ui = new(user, src, "GeneModder", name) ui.open() /obj/machinery/plantgenes/ui_data(mob/user) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2e40c78ed7ec..eb3b7576058e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -4,7 +4,7 @@ // *********************************************************** // Base type. Subtypes are found in /grown dir. -/obj/item/reagent_containers/food/snacks/grown +/obj/item/food/snacks/grown icon = 'icons/obj/hydroponics/harvest.dmi' var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. var/plantname = "" @@ -18,7 +18,7 @@ resistance_flags = FLAMMABLE origin_tech = "biotech=1" -/obj/item/reagent_containers/food/snacks/grown/Initialize(mapload, obj/item/seeds/new_seed = null) +/obj/item/food/snacks/grown/Initialize(mapload, obj/item/seeds/new_seed = null) . = ..() if(!tastes) tastes = list("[name]" = 1) @@ -45,25 +45,25 @@ if(seed.variant) name += " \[[seed.variant]]" -/obj/item/reagent_containers/food/snacks/grown/Destroy() +/obj/item/food/snacks/grown/Destroy() QDEL_NULL(seed) return ..() -/obj/item/reagent_containers/food/snacks/grown/proc/add_juice() +/obj/item/food/snacks/grown/proc/add_juice() if(reagents) if(bitesize_mod) bitesize = 1 + round(reagents.total_volume / bitesize_mod) return 1 return 0 -/obj/item/reagent_containers/food/snacks/grown/examine(user) +/obj/item/food/snacks/grown/examine(user) . = ..() if(seed) for(var/datum/plant_gene/trait/T in seed.genes) if(T.examine_line) . += T.examine_line -/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) +/obj/item/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() if(slices_num && slice_path) var/inaccurate = TRUE @@ -112,12 +112,12 @@ // Various gene procs -/obj/item/reagent_containers/food/snacks/grown/attack_self(mob/user) +/obj/item/food/snacks/grown/attack_self(mob/user) if(seed && seed.get_gene(/datum/plant_gene/trait/squash)) squash(user) ..() -/obj/item/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) +/obj/item/food/snacks/grown/throw_impact(atom/hit_atom) if(!..()) //was it caught by a mob? if(seed) log_action(locateUID(thrownby), hit_atom, "Thrown [src] at") @@ -126,7 +126,7 @@ if(seed.get_gene(/datum/plant_gene/trait/squash)) squash(hit_atom) -/obj/item/reagent_containers/food/snacks/grown/proc/squash(atom/target) +/obj/item/food/snacks/grown/proc/squash(atom/target) var/turf/T = get_turf(target) if(ispath(splat_type, /obj/effect/decal/cleanable/plant_smudge)) if(filling_color) @@ -151,28 +151,28 @@ qdel(src) -/obj/item/reagent_containers/food/snacks/grown/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/grown/On_Consume(mob/M, mob/user) if(iscarbon(M)) if(seed) for(var/datum/plant_gene/trait/T in seed.genes) T.on_consume(src, M) ..() -/obj/item/reagent_containers/food/snacks/grown/after_slip(mob/living/carbon/human/H) +/obj/item/food/snacks/grown/after_slip(mob/living/carbon/human/H) if(!seed) return for(var/datum/plant_gene/trait/T in seed.genes) T.on_slip(src, H) // Glow gene procs -/obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location) +/obj/item/food/snacks/grown/generate_trash(atom/location) if(trash && ispath(trash, /obj/item/grown)) . = new trash(location, seed) trash = null return return ..() -/obj/item/reagent_containers/food/snacks/grown/decompile_act(obj/item/matter_decompiler/C, mob/user) +/obj/item/food/snacks/grown/decompile_act(obj/item/matter_decompiler/C, mob/user) if(isdrone(user)) C.stored_comms["wood"] += 4 qdel(src) @@ -180,7 +180,7 @@ return ..() // For item-containing growns such as eggy or gatfruit -/obj/item/reagent_containers/food/snacks/grown/shell/attack_self(mob/user) +/obj/item/food/snacks/grown/shell/attack_self(mob/user) if(!do_after(user, 1.5 SECONDS, target = user)) return user.unEquip(src) @@ -191,14 +191,14 @@ qdel(src) // Diona Nymphs can eat these as well as weeds to gain nutrition. -/obj/item/reagent_containers/food/snacks/grown/attack_animal(mob/living/simple_animal/M) +/obj/item/food/snacks/grown/attack_animal(mob/living/simple_animal/M) if(isnymph(M)) var/mob/living/simple_animal/diona/D = M D.consume(src) else return ..() -/obj/item/reagent_containers/food/snacks/grown/proc/log_action(mob/user, atom/target, what_done) +/obj/item/food/snacks/grown/proc/log_action(mob/user, atom/target, what_done) var/reagent_str = reagents.log_list() var/genes_str = "No genes" if(seed && length(seed.genes)) @@ -211,7 +211,7 @@ add_attack_logs(user, target, "[what_done] ([reagent_str] | [genes_str])") -/obj/item/reagent_containers/food/snacks/grown/extinguish_light(force = FALSE) +/obj/item/food/snacks/grown/extinguish_light(force = FALSE) if(!force) return if(seed.get_gene(/datum/plant_gene/trait/glow/shadow)) diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index 9f1f8d8744ad..0cd8dfcdb5e2 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -1,5 +1,5 @@ // Ambrosia - base type -/obj/item/reagent_containers/food/snacks/grown/ambrosia +/obj/item/food/snacks/grown/ambrosia seed = /obj/item/seeds/ambrosia name = "ambrosia branch" desc = "This is a plant." @@ -20,7 +20,7 @@ icon_state = "seed-ambrosiavulgaris" species = "ambrosiavulgaris" plantname = "Ambrosia Vulgaris" - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris + product = /obj/item/food/snacks/grown/ambrosia/vulgaris lifespan = 60 endurance = 25 yield = 6 @@ -30,7 +30,7 @@ mutatelist = list(/obj/item/seeds/ambrosia/deus) reagents_add = list("space_drugs" = 0.15, "bicaridine" = 0.1, "kelotane" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.05, "toxin" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris +/obj/item/food/snacks/grown/ambrosia/vulgaris seed = /obj/item/seeds/ambrosia name = "ambrosia vulgaris branch" desc = "This is a plant containing various healing chemicals." @@ -44,12 +44,12 @@ icon_state = "seed-ambrosiadeus" species = "ambrosiadeus" plantname = "Ambrosia Deus" - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus + product = /obj/item/food/snacks/grown/ambrosia/deus mutatelist = list(/obj/item/seeds/ambrosia/gaia) reagents_add = list("weak_omnizine" = 0.15, "synaptizine" = 0.15, "space_drugs" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.05) rarity = 40 -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus +/obj/item/food/snacks/grown/ambrosia/deus seed = /obj/item/seeds/ambrosia/deus name = "ambrosia deus branch" desc = "Eating this makes you feel immortal!" @@ -70,7 +70,7 @@ icon_state = "seed-ambrosia_gaia" species = "ambrosia_gaia" plantname = "Ambrosia Gaia" - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia + product = /obj/item/food/snacks/grown/ambrosia/gaia mutatelist = list() reagents_add = list("earthsblood" = 0.05, "nutriment" = 0.06, "vitamin" = 0.05) rarity = 30 //These are some pretty good plants right here @@ -78,7 +78,7 @@ weed_rate = 4 weed_chance = 100 -/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia +/obj/item/food/snacks/grown/ambrosia/gaia name = "ambrosia gaia branch" desc = "Eating this makes you immortal." icon_state = "ambrosia_gaia" @@ -92,12 +92,12 @@ // Ambrosia Cruciatus /obj/item/seeds/ambrosia/cruciatus - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/cruciatus + product = /obj/item/food/snacks/grown/ambrosia/cruciatus potency = 10 mutatelist = list() reagents_add = list("thc" = 0.15, "kelotane" = 0.15, "bicaridine" = 0.1, "bath_salts" = 0.20, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/ambrosia/cruciatus +/obj/item/food/snacks/grown/ambrosia/cruciatus seed = /obj/item/seeds/ambrosia/cruciatus wine_power = 0.7 tastes = list("ambrosia cruciatus" = 1) diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index 7510c3cdfb6e..f1cd12752313 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -5,7 +5,7 @@ icon_state = "seed-apple" species = "apple" plantname = "Apple Tree" - product = /obj/item/reagent_containers/food/snacks/grown/apple + product = /obj/item/food/snacks/grown/apple lifespan = 55 endurance = 35 yield = 5 @@ -16,7 +16,7 @@ mutatelist = list(/obj/item/seeds/apple/gold) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/apple +/obj/item/food/snacks/grown/apple seed = /obj/item/seeds/apple name = "apple" desc = "It's a little piece of Eden." @@ -28,12 +28,12 @@ // Posioned Apple /obj/item/seeds/apple/poisoned - product = /obj/item/reagent_containers/food/snacks/grown/apple/poisoned + product = /obj/item/food/snacks/grown/apple/poisoned mutatelist = list() reagents_add = list("cyanide" = 0.5, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 50 // Source of cyanide, and hard (almost impossible) to obtain normally. -/obj/item/reagent_containers/food/snacks/grown/apple/poisoned +/obj/item/food/snacks/grown/apple/poisoned seed = /obj/item/seeds/apple/poisoned // Gold Apple @@ -43,14 +43,14 @@ icon_state = "seed-goldapple" species = "goldapple" plantname = "Golden Apple Tree" - product = /obj/item/reagent_containers/food/snacks/grown/apple/gold + product = /obj/item/food/snacks/grown/apple/gold maturation = 10 production = 10 mutatelist = list() reagents_add = list("gold" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 40 // Alchemy! -/obj/item/reagent_containers/food/snacks/grown/apple/gold +/obj/item/food/snacks/grown/apple/gold seed = /obj/item/seeds/apple/gold name = "golden apple" desc = "Emblazoned upon the apple is the word 'Kallisti'." diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 67b3df02b901..57d8f8c7e5d2 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -5,7 +5,7 @@ icon_state = "seed-banana" species = "banana" plantname = "Banana Tree" - product = /obj/item/reagent_containers/food/snacks/grown/banana + product = /obj/item/food/snacks/grown/banana lifespan = 50 endurance = 30 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' @@ -14,7 +14,7 @@ mutatelist = list(/obj/item/seeds/banana/mime, /obj/item/seeds/banana/bluespace) reagents_add = list("banana" = 0.1, "potassium" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.02) -/obj/item/reagent_containers/food/snacks/grown/banana +/obj/item/food/snacks/grown/banana seed = /obj/item/seeds/banana name = "banana" desc = "It's an excellent prop for a clown." @@ -26,11 +26,11 @@ distill_reagent = "bananahonk" tastes = list("banana" = 1) -/obj/item/reagent_containers/food/snacks/grown/banana/Initialize(mapload) +/obj/item/food/snacks/grown/banana/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_CAN_POINT_WITH, ROUNDSTART_TRAIT) -/obj/item/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) +/obj/item/food/snacks/grown/banana/suicide_act(mob/user) user.visible_message("[user] is aiming [src] at [user.p_themselves()]! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) sleep(25) @@ -81,13 +81,13 @@ icon_state = "seed-mimana" species = "mimana" plantname = "Mimana Tree" - product = /obj/item/reagent_containers/food/snacks/grown/banana/mime + product = /obj/item/food/snacks/grown/banana/mime growthstages = 4 mutatelist = list() reagents_add = list("nothing" = 0.1, "capulettium_plus" = 0.1, "nutriment" = 0.02) rarity = 15 -/obj/item/reagent_containers/food/snacks/grown/banana/mime +/obj/item/food/snacks/grown/banana/mime seed = /obj/item/seeds/banana/mime name = "mimana" desc = "It's an excellent prop for a mime." @@ -110,13 +110,13 @@ species = "bluespacebanana" icon_grow = "banana-grow" plantname = "Bluespace Banana Tree" - product = /obj/item/reagent_containers/food/snacks/grown/banana/bluespace + product = /obj/item/food/snacks/grown/banana/bluespace mutatelist = list() genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/repeated_harvest) reagents_add = list("singulo" = 0.2, "banana" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.02) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/banana/bluespace +/obj/item/food/snacks/grown/banana/bluespace seed = /obj/item/seeds/banana/bluespace name = "bluespace banana" icon_state = "bluenana" diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 3482fd89ecbf..4c0ad33b5f46 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -5,7 +5,7 @@ icon_state = "seed-soybean" species = "soybean" plantname = "Soybean Plants" - product = /obj/item/reagent_containers/food/snacks/grown/soybeans + product = /obj/item/food/snacks/grown/soybeans maturation = 4 production = 4 potency = 15 @@ -17,7 +17,7 @@ mutatelist = list(/obj/item/seeds/soya/koi) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05, "soybeanoil" = 0.03) -/obj/item/reagent_containers/food/snacks/grown/soybeans +/obj/item/food/snacks/grown/soybeans seed = /obj/item/seeds/soya name = "soybeans" desc = "It's pretty bland, but oh the possibilities..." @@ -35,13 +35,13 @@ icon_state = "seed-koibean" species = "koibean" plantname = "Koibean Plants" - product = /obj/item/reagent_containers/food/snacks/grown/koibeans + product = /obj/item/food/snacks/grown/koibeans potency = 10 mutatelist = list() reagents_add = list("carpotoxin" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.05) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/koibeans +/obj/item/food/snacks/grown/koibeans seed = /obj/item/seeds/soya/koi name = "koibean" desc = "Something about these seems fishy." diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 07eb158689e6..78f651294985 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -5,7 +5,7 @@ icon_state = "seed-berry" species = "berry" plantname = "Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries + product = /obj/item/food/snacks/grown/berries lifespan = 20 maturation = 5 production = 5 @@ -17,7 +17,7 @@ mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/berries +/obj/item/food/snacks/grown/berries seed = /obj/item/seeds/berry name = "bunch of berries" desc = "Nutritious!" @@ -35,12 +35,12 @@ icon_state = "seed-poisonberry" species = "poisonberry" plantname = "Poison-Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries/poison + product = /obj/item/food/snacks/grown/berries/poison mutatelist = list(/obj/item/seeds/berry/death) reagents_add = list("cyanide" = 0.15, "tirizene" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 10 // Mildly poisonous berries are common in reality -/obj/item/reagent_containers/food/snacks/grown/berries/poison +/obj/item/food/snacks/grown/berries/poison seed = /obj/item/seeds/berry/poison name = "bunch of poison-berries" desc = "Taste so good, you could die!" @@ -57,14 +57,14 @@ icon_state = "seed-deathberry" species = "deathberry" plantname = "Death Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries/death + product = /obj/item/food/snacks/grown/berries/death lifespan = 30 potency = 50 mutatelist = list() reagents_add = list("coniine" = 0.08, "tirizene" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/berries/death +/obj/item/food/snacks/grown/berries/death seed = /obj/item/seeds/berry/death name = "bunch of death-berries" desc = "Taste so good, you could die!" @@ -81,7 +81,7 @@ icon_state = "seed-glowberry" species = "glowberry" plantname = "Glow-Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries/glow + product = /obj/item/food/snacks/grown/berries/glow lifespan = 30 endurance = 25 mutatelist = list() @@ -89,7 +89,7 @@ reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/berries/glow +/obj/item/food/snacks/grown/berries/glow seed = /obj/item/seeds/berry/glow name = "bunch of glow-berries" desc = "Nutritious!" @@ -109,7 +109,7 @@ icon_state = "seed-cherry" species = "cherry" plantname = "Cherry Tree" - product = /obj/item/reagent_containers/food/snacks/grown/cherries + product = /obj/item/food/snacks/grown/cherries lifespan = 35 endurance = 35 maturation = 5 @@ -122,7 +122,7 @@ mutatelist = list(/obj/item/seeds/cherry/blue) reagents_add = list("plantmatter" = 0.07, "sugar" = 0.07) -/obj/item/reagent_containers/food/snacks/grown/cherries +/obj/item/food/snacks/grown/cherries seed = /obj/item/seeds/cherry name = "cherries" desc = "Great for toppings!" @@ -140,12 +140,12 @@ icon_state = "seed-bluecherry" species = "bluecherry" plantname = "Blue Cherry Tree" - product = /obj/item/reagent_containers/food/snacks/grown/bluecherries + product = /obj/item/food/snacks/grown/bluecherries mutatelist = list() reagents_add = list("plantmatter" = 0.07, "sugar" = 0.07) rarity = 10 -/obj/item/reagent_containers/food/snacks/grown/bluecherries +/obj/item/food/snacks/grown/bluecherries seed = /obj/item/seeds/cherry/blue name = "blue cherries" desc = "They're cherries that are blue." @@ -162,7 +162,7 @@ icon_state = "seed-grapes" species = "grape" plantname = "Grape Vine" - product = /obj/item/reagent_containers/food/snacks/grown/grapes + product = /obj/item/food/snacks/grown/grapes lifespan = 50 endurance = 25 maturation = 3 @@ -176,12 +176,12 @@ mutatelist = list(/obj/item/seeds/grape/green) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1, "sugar" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/grapes +/obj/item/food/snacks/grown/grapes seed = /obj/item/seeds/grape name = "bunch of grapes" desc = "Nutritious!" icon_state = "grapes" - dried_type = /obj/item/reagent_containers/food/snacks/no_raisin/healthy + dried_type = /obj/item/food/snacks/no_raisin/healthy filling_color = "#FF1493" bitesize_mod = 2 tastes = list("grapes" = 1) @@ -194,12 +194,12 @@ icon_state = "seed-greengrapes" species = "greengrape" plantname = "Green-Grape Vine" - product = /obj/item/reagent_containers/food/snacks/grown/grapes/green + product = /obj/item/food/snacks/grown/grapes/green reagents_add = list("kelotane" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1, "sugar" = 0.1) // No rarity: technically it's a beneficial mutant, but it's not exactly "new"... mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/grapes/green +/obj/item/food/snacks/grown/grapes/green seed = /obj/item/seeds/grape/green name = "bunch of green grapes" icon_state = "greengrapes" diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 9dedaa18d837..ce96f21d6668 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -5,7 +5,7 @@ icon_state = "seed-cannabis" species = "cannabis" plantname = "Cannabis Plant" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis + product = /obj/item/food/snacks/grown/cannabis maturation = 8 potency = 20 growthstages = 1 @@ -24,7 +24,7 @@ icon_state = "seed-megacannabis" species = "megacannabis" plantname = "Rainbow Weed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow + product = /obj/item/food/snacks/grown/cannabis/rainbow mutatelist = list(/obj/item/seeds/cannabis/death, /obj/item/seeds/cannabis/ultimate) reagents_add = list("lsd" = 0.15, "thc" = 0.15, "cbd" = 0.15, "happiness" = 0.15) @@ -36,7 +36,7 @@ icon_state = "seed-blackcannabis" species = "blackcannabis" plantname = "Deathweed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/death + product = /obj/item/food/snacks/grown/cannabis/death mutatelist = list() reagents_add = list("cyanide" = 0.35, "thc" = 0.15, "cbd" = 0.15) rarity = 40 @@ -47,7 +47,7 @@ icon_state = "seed-whitecannabis" species = "whitecannabis" plantname = "Lifeweed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/white + product = /obj/item/food/snacks/grown/cannabis/white mutatelist = list(/obj/item/seeds/cannabis/death, /obj/item/seeds/cannabis/ultimate) reagents_add = list("omnizine" = 0.35, "thc" = 0.15, "cbd" = 0.15) @@ -60,7 +60,7 @@ icon_state = "seed-ocannabis" species = "ocannabis" plantname = "Omega Weed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate + product = /obj/item/food/snacks/grown/cannabis/ultimate mutatelist = list() reagents_add = list("lsd" = 0.05, "suicider" = 0.05, @@ -85,7 +85,7 @@ // --------------------------------------------------------------- -/obj/item/reagent_containers/food/snacks/grown/cannabis +/obj/item/food/snacks/grown/cannabis seed = /obj/item/seeds/cannabis icon = 'icons/goonstation/objects/hydroponics.dmi' name = "cannabis leaf" @@ -97,28 +97,28 @@ wine_power = 0.2 -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow +/obj/item/food/snacks/grown/cannabis/rainbow seed = /obj/item/seeds/cannabis/rainbow name = "rainbow cannabis leaf" desc = "Is it supposed to be glowing like that...?" icon_state = "megacannabis" wine_power = 0.6 -/obj/item/reagent_containers/food/snacks/grown/cannabis/death +/obj/item/food/snacks/grown/cannabis/death seed = /obj/item/seeds/cannabis/death name = "death cannabis leaf" desc = "Looks a bit dark. Oh well." icon_state = "blackcannabis" wine_power = 0.4 -/obj/item/reagent_containers/food/snacks/grown/cannabis/white +/obj/item/food/snacks/grown/cannabis/white seed = /obj/item/seeds/cannabis/white name = "white cannabis leaf" desc = "It feels smooth and nice to the touch." icon_state = "whitecannabis" wine_power = 0.1 -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate +/obj/item/food/snacks/grown/cannabis/ultimate seed = /obj/item/seeds/cannabis/ultimate name = "omega cannibas leaf" desc = "You feel dizzy looking at it. What the fuck?" diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 89b462a19e11..3ed266947518 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -5,7 +5,7 @@ icon_state = "seed-wheat" species = "wheat" plantname = "Wheat Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/wheat + product = /obj/item/food/snacks/grown/wheat production = 1 yield = 4 potency = 15 @@ -13,7 +13,7 @@ mutatelist = list(/obj/item/seeds/wheat/oat, /obj/item/seeds/wheat/meat) reagents_add = list("plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/wheat +/obj/item/food/snacks/grown/wheat seed = /obj/item/seeds/wheat name = "wheat" desc = "Sigh... wheat... a-grain?" @@ -31,10 +31,10 @@ icon_state = "seed-oat" species = "oat" plantname = "Oat Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/oat + product = /obj/item/food/snacks/grown/oat mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/oat +/obj/item/food/snacks/grown/oat seed = /obj/item/seeds/wheat/oat name = "oat" desc = "Eat oats, do squats." @@ -52,11 +52,11 @@ icon_state = "seed-rice" species = "rice" plantname = "Rice Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/rice + product = /obj/item/food/snacks/grown/rice mutatelist = list() growthstages = 3 -/obj/item/reagent_containers/food/snacks/grown/rice +/obj/item/food/snacks/grown/rice seed = /obj/item/seeds/wheat/rice name = "rice" desc = "Rice to meet you." @@ -74,11 +74,11 @@ icon_state = "seed-meatwheat" species = "meatwheat" plantname = "Meatwheat" - product = /obj/item/reagent_containers/food/snacks/grown/meatwheat + product = /obj/item/food/snacks/grown/meatwheat mutatelist = list() reagents_add = list("protein" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/meatwheat +/obj/item/food/snacks/grown/meatwheat name = "meatwheat" desc = "Some blood-drenched wheat stalks. You can crush them into what passes for meat if you squint hard enough." icon_state = "meatwheat" @@ -89,10 +89,10 @@ tastes = list("meatwheat" = 1) can_distill = FALSE -/obj/item/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user) +/obj/item/food/snacks/grown/meatwheat/attack_self(mob/living/user) user.visible_message("[user] crushes [src] into meat.", "You crush [src] into something that resembles meat.") playsound(user, 'sound/effects/blobattack.ogg', 50, 1) - var/obj/item/reagent_containers/food/snacks/meat/meatwheat/M = new(get_turf(user)) + var/obj/item/food/snacks/meat/meatwheat/M = new(get_turf(user)) user.drop_item() qdel(src) user.put_in_hands(M) diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 3908262a6a24..63202491bffc 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -5,7 +5,7 @@ icon_state = "seed-chili" species = "chili" plantname = "Chili Plants" - product = /obj/item/reagent_containers/food/snacks/grown/chili + product = /obj/item/food/snacks/grown/chili lifespan = 20 maturation = 5 production = 5 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/chili/ice, /obj/item/seeds/chili/ghost) reagents_add = list("capsaicin" = 0.25, "vitamin" = 0.04, "plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/chili +/obj/item/food/snacks/grown/chili seed = /obj/item/seeds/chili name = "chili" desc = "It's spicy! Wait... IT'S BURNING ME!!" @@ -35,7 +35,7 @@ icon_state = "seed-icepepper" species = "chiliice" plantname = "Chilly Pepper Plants" - product = /obj/item/reagent_containers/food/snacks/grown/icepepper + product = /obj/item/food/snacks/grown/icepepper lifespan = 25 maturation = 4 production = 4 @@ -43,7 +43,7 @@ mutatelist = list() reagents_add = list("frostoil" = 0.25, "vitamin" = 0.02, "plantmatter" = 0.02) -/obj/item/reagent_containers/food/snacks/grown/icepepper +/obj/item/food/snacks/grown/icepepper seed = /obj/item/seeds/chili/ice name = "chilly pepper" desc = "It's a mutant strain of chili" @@ -61,7 +61,7 @@ icon_state = "seed-chilighost" species = "chilighost" plantname = "Ghost Chili Plants" - product = /obj/item/reagent_containers/food/snacks/grown/ghost_chili + product = /obj/item/food/snacks/grown/ghost_chili endurance = 10 maturation = 10 production = 10 @@ -70,7 +70,7 @@ mutatelist = list() reagents_add = list("condensedcapsaicin" = 0.3, "capsaicin" = 0.55, "plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/ghost_chili +/obj/item/food/snacks/grown/ghost_chili seed = /obj/item/seeds/chili/ghost name = "ghost chili" desc = "It seems to be vibrating gently." diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index aeda25fc74dd..0f624c37e1d1 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -1,5 +1,5 @@ // Citrus - base type -/obj/item/reagent_containers/food/snacks/grown/citrus +/obj/item/food/snacks/grown/citrus seed = /obj/item/seeds/lime name = "citrus" desc = "It's so sour, your face will twist." @@ -14,7 +14,7 @@ icon_state = "seed-lime" species = "lime" plantname = "Lime Tree" - product = /obj/item/reagent_containers/food/snacks/grown/citrus/lime + product = /obj/item/food/snacks/grown/citrus/lime lifespan = 55 endurance = 50 yield = 4 @@ -24,7 +24,7 @@ mutatelist = list(/obj/item/seeds/orange) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/citrus/lime +/obj/item/food/snacks/grown/citrus/lime seed = /obj/item/seeds/lime name = "lime" desc = "It's so sour, your face will twist." @@ -39,7 +39,7 @@ icon_state = "seed-orange" species = "orange" plantname = "Orange Tree" - product = /obj/item/reagent_containers/food/snacks/grown/citrus/orange + product = /obj/item/food/snacks/grown/citrus/orange lifespan = 60 endurance = 50 yield = 5 @@ -51,7 +51,7 @@ mutatelist = list(/obj/item/seeds/lime) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/citrus/orange +/obj/item/food/snacks/grown/citrus/orange seed = /obj/item/seeds/orange name = "orange" desc = "It's an tangy fruit." @@ -67,7 +67,7 @@ icon_state = "seed-lemon" species = "lemon" plantname = "Lemon Tree" - product = /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + product = /obj/item/food/snacks/grown/citrus/lemon lifespan = 55 endurance = 45 yield = 4 @@ -78,7 +78,7 @@ mutatelist = list(/obj/item/seeds/firelemon) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon +/obj/item/food/snacks/grown/citrus/lemon seed = /obj/item/seeds/lemon name = "lemon" desc = "When life gives you lemons, make lemonade." @@ -93,7 +93,7 @@ icon_state = "seed-firelemon" species = "firelemon" plantname = "Combustible Lemon Tree" - product = /obj/item/reagent_containers/food/snacks/grown/firelemon + product = /obj/item/food/snacks/grown/firelemon growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "lime-grow" icon_dead = "lime-dead" @@ -103,7 +103,7 @@ yield = 4 reagents_add = list("plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/firelemon +/obj/item/food/snacks/grown/firelemon seed = /obj/item/seeds/firelemon name = "combustible lemon" desc = "Made for burning houses down." @@ -113,7 +113,7 @@ tastes = list("burning lemon" = 1) wine_flavor = "fire" -/obj/item/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user) +/obj/item/food/snacks/grown/firelemon/attack_self(mob/living/user) var/area/A = get_area(user) user.visible_message("[user] primes [src]!", "You prime [src]!") investigate_log("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].", INVESTIGATE_BOMB) @@ -126,19 +126,19 @@ playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) addtimer(CALLBACK(src, PROC_REF(prime)), rand(10, 60)) -/obj/item/reagent_containers/food/snacks/grown/firelemon/burn() +/obj/item/food/snacks/grown/firelemon/burn() prime() ..() -/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/update_mob() +/obj/item/food/snacks/grown/firelemon/proc/update_mob() if(ismob(loc)) var/mob/M = loc M.unEquip(src) -/obj/item/reagent_containers/food/snacks/grown/firelemon/ex_act(severity) +/obj/item/food/snacks/grown/firelemon/ex_act(severity) qdel(src) //Ensuring that it's deleted by its own explosion -/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/prime() +/obj/item/food/snacks/grown/firelemon/proc/prime() switch(seed.potency) //Combustible lemons are alot like IEDs, lots of flame, very little bang. if(0 to 30) update_mob() diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index b00c4b1aded9..9e21671169bd 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -5,7 +5,7 @@ icon_state = "seed-cocoapod" species = "cocoapod" plantname = "Cocao Tree" - product = /obj/item/reagent_containers/food/snacks/grown/cocoapod + product = /obj/item/food/snacks/grown/cocoapod lifespan = 20 maturation = 5 production = 5 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/cocoapod/vanillapod) reagents_add = list("cocoa" = 0.25, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/cocoapod +/obj/item/food/snacks/grown/cocoapod seed = /obj/item/seeds/cocoapod name = "cocoa pod" desc = "Fattening... Mmmmm... chucklate." @@ -34,12 +34,12 @@ icon_state = "seed-vanillapod" species = "vanillapod" plantname = "Vanilla Tree" - product = /obj/item/reagent_containers/food/snacks/grown/vanillapod + product = /obj/item/food/snacks/grown/vanillapod genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = list() reagents_add = list("vanilla" = 0.25, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/vanillapod +/obj/item/food/snacks/grown/vanillapod seed = /obj/item/seeds/cocoapod/vanillapod name = "vanilla pod" desc = "Fattening... Mmmmm... vanilla." diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index ac7946b38643..256fc42e88c8 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -5,7 +5,7 @@ icon_state = "seed-corn" species = "corn" plantname = "Corn Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/corn + product = /obj/item/food/snacks/grown/corn maturation = 8 potency = 20 growthstages = 3 @@ -15,12 +15,12 @@ mutatelist = list(/obj/item/seeds/corn/snapcorn) reagents_add = list("cornoil" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/corn +/obj/item/food/snacks/grown/corn seed = /obj/item/seeds/corn name = "ear of corn" desc = "Needs some butter!" icon_state = "corn" - cooked_type = /obj/item/reagent_containers/food/snacks/popcorn + cooked_type = /obj/item/food/snacks/popcorn filling_color = "#FFFF00" trash = /obj/item/grown/corncob bitesize_mod = 2 diff --git a/code/modules/hydroponics/grown/eggplant.dm b/code/modules/hydroponics/grown/eggplant.dm index 7aa15c61fa9d..e31e07e215bc 100644 --- a/code/modules/hydroponics/grown/eggplant.dm +++ b/code/modules/hydroponics/grown/eggplant.dm @@ -5,7 +5,7 @@ icon_state = "seed-eggplant" species = "eggplant" plantname = "Eggplants" - product = /obj/item/reagent_containers/food/snacks/grown/eggplant + product = /obj/item/food/snacks/grown/eggplant yield = 2 potency = 20 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' @@ -15,7 +15,7 @@ mutatelist = list(/obj/item/seeds/eggplant/eggy) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/eggplant +/obj/item/food/snacks/grown/eggplant seed = /obj/item/seeds/eggplant name = "eggplant" desc = "Maybe there's a chicken inside?" @@ -32,18 +32,18 @@ icon_state = "seed-eggy" species = "eggy" plantname = "Egg-Plants" - product = /obj/item/reagent_containers/food/snacks/grown/shell/eggy + product = /obj/item/food/snacks/grown/shell/eggy lifespan = 75 production = 12 mutatelist = list() reagents_add = list("nutriment" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/shell/eggy +/obj/item/food/snacks/grown/shell/eggy seed = /obj/item/seeds/eggplant/eggy name = "Egg-plant" desc = "There MUST be a chicken inside." icon_state = "eggyplant" - trash = /obj/item/reagent_containers/food/snacks/egg + trash = /obj/item/food/snacks/egg filling_color = "#F8F8FF" bitesize_mod = 2 tastes = list("egg-plant" = 1) diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index ea4dc842233d..42d7eaa2e9c5 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -5,7 +5,7 @@ icon_state = "seed-poppy" species = "poppy" plantname = "Poppy Plants" - product = /obj/item/reagent_containers/food/snacks/grown/poppy + product = /obj/item/food/snacks/grown/poppy endurance = 10 maturation = 8 yield = 6 @@ -17,7 +17,7 @@ mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/poppy/lily) reagents_add = list("bicaridine" = 0.2, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/poppy +/obj/item/food/snacks/grown/poppy seed = /obj/item/seeds/poppy name = "poppy" desc = "Long-used as a symbol of rest, peace, and death." @@ -37,10 +37,10 @@ plantname = "Lily Plants" icon_grow = "lily-grow" icon_dead = "lily-dead" - product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily + product = /obj/item/food/snacks/grown/poppy/lily mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/poppy/lily +/obj/item/food/snacks/grown/poppy/lily seed = /obj/item/seeds/poppy/lily name = "lily" desc = "A beautiful white flower." @@ -57,10 +57,10 @@ plantname = "Geranium Plants" icon_grow = "geranium-grow" icon_dead = "geranium-dead" - product = /obj/item/reagent_containers/food/snacks/grown/poppy/geranium + product = /obj/item/food/snacks/grown/poppy/geranium mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium +/obj/item/food/snacks/grown/poppy/geranium seed = /obj/item/seeds/poppy/geranium name = "geranium" desc = "A beautiful purple flower." @@ -76,7 +76,7 @@ icon_state = "seed-harebell" species = "harebell" plantname = "Harebells" - product = /obj/item/reagent_containers/food/snacks/grown/harebell + product = /obj/item/food/snacks/grown/harebell lifespan = 100 endurance = 20 maturation = 7 @@ -88,7 +88,7 @@ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' reagents_add = list("plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/harebell +/obj/item/food/snacks/grown/harebell seed = /obj/item/seeds/harebell name = "harebell" desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten'd not thy breath.\"" @@ -144,12 +144,12 @@ plantname = "Moonflowers" icon_grow = "moonflower-grow" icon_dead = "sunflower-dead" - product = /obj/item/reagent_containers/food/snacks/grown/moonflower + product = /obj/item/food/snacks/grown/moonflower mutatelist = list() reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "plantmatter" = 0.02) rarity = 15 -/obj/item/reagent_containers/food/snacks/grown/moonflower +/obj/item/food/snacks/grown/moonflower seed = /obj/item/seeds/sunflower/moonflower name = "moonflower" desc = "Store in a location at least 50 yards away from werewolves." diff --git a/code/modules/hydroponics/grown/garlic.dm b/code/modules/hydroponics/grown/garlic.dm index 3c1b2b38b1d4..82d802a0b927 100644 --- a/code/modules/hydroponics/grown/garlic.dm +++ b/code/modules/hydroponics/grown/garlic.dm @@ -4,14 +4,14 @@ icon_state = "seed-garlic" species = "garlic" plantname = "Garlic Sprouts" - product = /obj/item/reagent_containers/food/snacks/grown/garlic + product = /obj/item/food/snacks/grown/garlic yield = 6 potency = 25 growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' reagents_add = list("garlic" = 0.15, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/garlic +/obj/item/food/snacks/grown/garlic seed = /obj/item/seeds/garlic name = "garlic" desc = "Delicious, but with a potentially overwhelming odor." diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index 832645c95cd1..84c177d2b070 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -5,7 +5,7 @@ icon_state = "seed-grass" species = "grass" plantname = "Grass" - product = /obj/item/reagent_containers/food/snacks/grown/grass + product = /obj/item/food/snacks/grown/grass lifespan = 40 endurance = 40 maturation = 2 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/grass/carpet) reagents_add = list("plantmatter" = 0.02, "hydrogen" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/grass +/obj/item/food/snacks/grown/grass seed = /obj/item/seeds/grass name = "grass" desc = "Green and lush." @@ -30,10 +30,10 @@ tastes = list("grass" = 1) wine_power = 0.15 -/obj/item/reagent_containers/food/snacks/grown/grass/attack_self(mob/user) +/obj/item/food/snacks/grown/grass/attack_self(mob/user) to_chat(user, "You prepare the astroturf.") var/grassAmt = 1 + round(seed.potency * tile_coefficient) // The grass we're holding - for(var/obj/item/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor + for(var/obj/item/food/snacks/grown/grass/G in user.loc) // The grass on the floor if(G.type != type) continue grassAmt += 1 + round(G.seed.potency * tile_coefficient) @@ -48,11 +48,11 @@ icon_state = "seed-carpet" species = "carpet" plantname = "Carpet" - product = /obj/item/reagent_containers/food/snacks/grown/grass/carpet + product = /obj/item/food/snacks/grown/grass/carpet mutatelist = list() rarity = 10 -/obj/item/reagent_containers/food/snacks/grown/grass/carpet +/obj/item/food/snacks/grown/grass/carpet seed = /obj/item/seeds/grass/carpet name = "carpet" desc = "The textile industry's dark secret." diff --git a/code/modules/hydroponics/grown/herbals.dm b/code/modules/hydroponics/grown/herbals.dm index e98247d8cb5b..87ff2959c047 100644 --- a/code/modules/hydroponics/grown/herbals.dm +++ b/code/modules/hydroponics/grown/herbals.dm @@ -4,14 +4,14 @@ icon_state = "seed-cabbage" species = "cabbage" plantname = "comfrey" - product = /obj/item/reagent_containers/food/snacks/grown/comfrey + product = /obj/item/food/snacks/grown/comfrey yield = 2 maturation = 3 growthstages = 1 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' reagents_add = list("styptic_powder" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/comfrey +/obj/item/food/snacks/grown/comfrey seed = /obj/item/seeds/comfrey name = "comfrey leaf" desc = "Mash to turn into a poultice." @@ -20,7 +20,7 @@ tastes = list("comfrey" = 1) bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/comfrey/attack_self(mob/user) +/obj/item/food/snacks/grown/comfrey/attack_self(mob/user) var/obj/item/stack/medical/bruise_pack/comfrey/C = new(get_turf(user)) C.heal_brute = seed.potency to_chat(user, "You mash [src] into a poultice.") @@ -33,12 +33,12 @@ icon_state = "seed-ambrosiavulgaris" species = "ambrosiavulgaris" plantname = "Aloe Vera Plant" - product = /obj/item/reagent_containers/food/snacks/grown/aloe + product = /obj/item/food/snacks/grown/aloe yield = 2 icon_dead = "ambrosia-dead" reagents_add = list("silver_sulfadiazine" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/aloe +/obj/item/food/snacks/grown/aloe seed = /obj/item/seeds/aloe name = "aloe leaf" desc = "Mash to turn into a poultice." @@ -47,7 +47,7 @@ tastes = list("aloe" = 1) bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/aloe/attack_self(mob/user) +/obj/item/food/snacks/grown/aloe/attack_self(mob/user) var/obj/item/stack/medical/ointment/aloe/A = new(get_turf(user)) A.heal_burn = seed.potency to_chat(user, "You mash [src] into a poultice.") @@ -61,7 +61,7 @@ icon_state = "seed-mint" species = "mint" plantname = "Mint Plant" - product = /obj/item/reagent_containers/food/snacks/grown/mint + product = /obj/item/food/snacks/grown/mint lifespan = 20 maturation = 4 production = 5 @@ -70,7 +70,7 @@ icon_dead = "mint-dead" reagents_add = list("mint" = 0.03, "plantmatter" = 0.03) -/obj/item/reagent_containers/food/snacks/grown/mint +/obj/item/food/snacks/grown/mint seed = /obj/item/seeds/mint name = "mint leaves" desc = "Process for mint. Distill for menthol. No need to experi-mint." //haha diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index fdaa9750a200..537356c9b474 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -6,7 +6,7 @@ icon_state = "seed-kudzu" species = "kudzu" plantname = "Kudzu" - product = /obj/item/reagent_containers/food/snacks/grown/kudzupod + product = /obj/item/food/snacks/grown/kudzupod genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy) lifespan = 20 endurance = 10 @@ -88,7 +88,7 @@ adjust_potency(rand(15, -5)) -/obj/item/reagent_containers/food/snacks/grown/kudzupod +/obj/item/food/snacks/grown/kudzupod seed = /obj/item/seeds/kudzu name = "kudzu pod" desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index e4e20fd1f7c1..702640618ab0 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -5,7 +5,7 @@ icon_state = "seed-watermelon" species = "watermelon" plantname = "Watermelon Vines" - product = /obj/item/reagent_containers/food/snacks/grown/watermelon + product = /obj/item/food/snacks/grown/watermelon lifespan = 50 endurance = 40 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' @@ -21,12 +21,12 @@ qdel(src) return OBLITERATION -/obj/item/reagent_containers/food/snacks/grown/watermelon +/obj/item/food/snacks/grown/watermelon seed = /obj/item/seeds/watermelon name = "watermelon" desc = "It's full of watery goodness." icon_state = "watermelon" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. - slice_path = /obj/item/reagent_containers/food/snacks/watermelonslice + slice_path = /obj/item/food/snacks/watermelonslice slices_num = 5 dried_type = null w_class = WEIGHT_CLASS_NORMAL @@ -42,12 +42,12 @@ icon_state = "seed-holymelon" species = "holymelon" plantname = "Holy Melon Vines" - product = /obj/item/reagent_containers/food/snacks/grown/holymelon + product = /obj/item/food/snacks/grown/holymelon mutatelist = list() reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/holymelon +/obj/item/food/snacks/grown/holymelon seed = /obj/item/seeds/watermelon/holy name = "holymelon" desc = "The water within this melon has been blessed by some deity that's particularly fond of watermelon." diff --git a/code/modules/hydroponics/grown/misc_seeds.dm b/code/modules/hydroponics/grown/misc_seeds.dm index 1d34ff8a0eb3..6e4bf03af16f 100644 --- a/code/modules/hydroponics/grown/misc_seeds.dm +++ b/code/modules/hydroponics/grown/misc_seeds.dm @@ -34,7 +34,7 @@ icon_state = "seed-cabbage" species = "cabbage" plantname = "Cabbages" - product = /obj/item/reagent_containers/food/snacks/grown/cabbage + product = /obj/item/food/snacks/grown/cabbage lifespan = 50 endurance = 25 maturation = 3 @@ -46,7 +46,7 @@ mutatelist = list(/obj/item/seeds/replicapod) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/cabbage +/obj/item/food/snacks/grown/cabbage seed = /obj/item/seeds/cabbage name = "cabbage" desc = "Ewwwwwwwwww. Cabbage." @@ -64,7 +64,7 @@ icon_state = "seed-sugarcane" species = "sugarcane" plantname = "Sugarcane" - product = /obj/item/reagent_containers/food/snacks/grown/sugarcane + product = /obj/item/food/snacks/grown/sugarcane genes = list(/datum/plant_gene/trait/repeated_harvest) lifespan = 60 endurance = 50 @@ -73,7 +73,7 @@ growthstages = 3 reagents_add = list("sugar" = 0.25) -/obj/item/reagent_containers/food/snacks/grown/sugarcane +/obj/item/food/snacks/grown/sugarcane seed = /obj/item/seeds/sugarcane name = "sugarcane" desc = "Sickly sweet." @@ -91,7 +91,7 @@ icon_state = "seed-gatfruit" species = "gatfruit" plantname = "Gatfruit Tree" - product = /obj/item/reagent_containers/food/snacks/grown/shell/gatfruit + product = /obj/item/food/snacks/grown/shell/gatfruit genes = list(/datum/plant_gene/trait/repeated_harvest) lifespan = 20 endurance = 20 @@ -104,7 +104,7 @@ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' reagents_add = list("sulfur" = 0.1, "carbon" = 0.1, "nitrogen" = 0.07, "potassium" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/shell/gatfruit +/obj/item/food/snacks/grown/shell/gatfruit seed = /obj/item/seeds/gatfruit name = "gatfruit" desc = "It smells like burning." @@ -122,12 +122,12 @@ icon_state = "seed-cherry_bomb" species = "cherry_bomb" plantname = "Cherry Bomb Tree" - product = /obj/item/reagent_containers/food/snacks/grown/cherry_bomb + product = /obj/item/food/snacks/grown/cherry_bomb mutatelist = list() reagents_add = list("plantmatter" = 0.1, "sugar" = 0.1, "blackpowder" = 0.7) rarity = 60 //See above -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb +/obj/item/food/snacks/grown/cherry_bomb name = "cherry bombs" desc = "You think you can hear the hissing of a tiny fuse." icon_state = "cherry_bomb" @@ -139,7 +139,7 @@ max_integrity = 40 wine_power = 0.8 -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) +/obj/item/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) var/area/A = get_area(user) user.visible_message("[user] plucks the stem from [src]!", "You pluck the stem from [src], which begins to hiss loudly!") message_admins("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x], [user.y], [user.z]) (JMP)") @@ -149,16 +149,16 @@ C.throw_mode_on() prime() -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE) +/obj/item/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE) if(!disassembled) prime() if(!QDELETED(src)) qdel(src) -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/ex_act(severity) +/obj/item/food/snacks/grown/cherry_bomb/ex_act(severity) qdel(src) //Ensuring that it's deleted by its own explosion. Also prevents mass chain reaction with piles of cherry bombs -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime() +/obj/item/food/snacks/grown/cherry_bomb/proc/prime() icon_state = "cherry_bomb_lit" playsound(src, 'sound/goonstation/misc/fuse.ogg', seed.potency, 0) reagents.set_reagent_temp(1000) //Sets off the black powder diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 9f516da18d56..88e447ec798b 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/snacks/grown/mushroom +/obj/item/food/snacks/grown/mushroom name = "mushroom" bitesize_mod = 2 wine_power = 0.4 @@ -11,7 +11,7 @@ icon_state = "mycelium-reishi" species = "reishi" plantname = "Reishi" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/reishi + product = /obj/item/food/snacks/grown/mushroom/reishi lifespan = 35 endurance = 35 maturation = 10 @@ -23,7 +23,7 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0) -/obj/item/reagent_containers/food/snacks/grown/mushroom/reishi +/obj/item/food/snacks/grown/mushroom/reishi seed = /obj/item/seeds/reishi name = "reishi" desc = "Ganoderma lucidum: A special fungus known for its medicinal and stress relieving properties." @@ -39,7 +39,7 @@ icon_state = "mycelium-amanita" species = "amanita" plantname = "Fly Amanitas" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita + product = /obj/item/food/snacks/grown/mushroom/amanita lifespan = 50 endurance = 35 maturation = 10 @@ -51,7 +51,7 @@ mutatelist = list(/obj/item/seeds/angel) reagents_add = list("psilocybin" = 0.04, "amanitin" = 0.35, "nutriment" = 0, "growthserum" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita +/obj/item/food/snacks/grown/mushroom/amanita seed = /obj/item/seeds/amanita name = "fly amanita" desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." @@ -67,7 +67,7 @@ icon_state = "mycelium-angel" species = "angel" plantname = "Destroying Angels" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/angel + product = /obj/item/food/snacks/grown/mushroom/angel lifespan = 50 endurance = 35 maturation = 12 @@ -81,7 +81,7 @@ rarity = 30 origin_tech = "biotech=5" -/obj/item/reagent_containers/food/snacks/grown/mushroom/angel +/obj/item/food/snacks/grown/mushroom/angel seed = /obj/item/seeds/angel name = "destroying angel" desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amanitin." @@ -98,7 +98,7 @@ icon_state = "mycelium-liberty" species = "liberty" plantname = "Liberty-Caps" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap + product = /obj/item/food/snacks/grown/mushroom/libertycap maturation = 7 production = 1 yield = 5 @@ -108,7 +108,7 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("psilocybin" = 0.25, "nutriment" = 0.02) -/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap +/obj/item/food/snacks/grown/mushroom/libertycap seed = /obj/item/seeds/liberty name = "liberty-cap" desc = "Psilocybe Semilanceata: Liberate yourself!" @@ -126,7 +126,7 @@ icon_state = "mycelium-plump" species = "plump" plantname = "Plump-Helmet Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet + product = /obj/item/food/snacks/grown/mushroom/plumphelmet maturation = 8 production = 1 yield = 4 @@ -137,7 +137,7 @@ mutatelist = list(/obj/item/seeds/plump/walkingmushroom) reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet +/obj/item/food/snacks/grown/mushroom/plumphelmet seed = /obj/item/seeds/plump name = "plump-helmet" desc = "Plumus Hellmus: Plump, soft and s-so inviting~" @@ -154,7 +154,7 @@ icon_state = "mycelium-walkingmushroom" species = "walkingmushroom" plantname = "Walking Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom + product = /obj/item/food/snacks/grown/mushroom/walkingmushroom lifespan = 30 endurance = 30 maturation = 5 @@ -164,7 +164,7 @@ reagents_add = list("vitamin" = 0.05, "nutriment" = 0.15) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom +/obj/item/food/snacks/grown/mushroom/walkingmushroom seed = /obj/item/seeds/plump/walkingmushroom name = "walking mushroom" desc = "Plumus Locomotus: The beginning of the great walk." @@ -174,7 +174,7 @@ tastes = list("walking mushroom" = 1, "motion" = 1) can_distill = FALSE -/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) +/obj/item/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) if(isspaceturf(user.loc)) return var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc) @@ -194,7 +194,7 @@ icon_state = "mycelium-chanter" species = "chanter" plantname = "Chanterelle Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle + product = /obj/item/food/snacks/grown/mushroom/chanterelle lifespan = 35 endurance = 20 maturation = 7 @@ -206,7 +206,7 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("nutriment" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle +/obj/item/food/snacks/grown/mushroom/chanterelle seed = /obj/item/seeds/chanter name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" @@ -222,7 +222,7 @@ icon_state = "mycelium-glowshroom" species = "glowshroom" plantname = "Glowshrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom + product = /obj/item/food/snacks/grown/mushroom/glowshroom lifespan = 100 //ten times that is the delay endurance = 30 maturation = 15 @@ -236,7 +236,7 @@ mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom) reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom +/obj/item/food/snacks/grown/mushroom/glowshroom seed = /obj/item/seeds/glowshroom name = "glowshroom cluster" desc = "Mycena Bregprox: This species of mushroom glows in the dark." @@ -248,7 +248,7 @@ tastes = list("warmth" = 1, "light" = 1, "glowshroom" = 1) wine_power = 0.5 -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) +/obj/item/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) if(isspaceturf(user.loc)) return FALSE if(!isturf(user.loc)) @@ -279,13 +279,13 @@ species = "glowcap" icon_harvest = "glowcap-harvest" plantname = "Glowcaps" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap + product = /obj/item/food/snacks/grown/mushroom/glowshroom/glowcap genes = list(/datum/plant_gene/trait/glow/red, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism) mutatelist = list() reagents_add = list("teslium" = 0.1, "nutriment" = 0.04) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap +/obj/item/food/snacks/grown/mushroom/glowshroom/glowcap seed = /obj/item/seeds/glowshroom/glowcap name = "glowcap cluster" desc = "Mycena Ruthenia: This species of mushroom glows in the dark, but isn't actually bioluminescent. They're warm to the touch..." @@ -305,7 +305,7 @@ icon_state = "mycelium-tower" species = "mold" plantname = "Fungus" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/fungus + product = /obj/item/food/snacks/grown/mushroom/fungus yield = 4 icon_grow = "mold-grow" icon_dead = "mold-dead" @@ -314,7 +314,7 @@ genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) reagents_add = list("fungus" = 0.35) -/obj/item/reagent_containers/food/snacks/grown/mushroom/fungus +/obj/item/food/snacks/grown/mushroom/fungus seed = /obj/item/seeds/fungus name = "fungus" desc = "A fungus ideal for making antibacterials." @@ -331,13 +331,13 @@ icon_grow = "shadowshroom-grow" icon_dead = "shadowshroom-dead" plantname = "Shadowshrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom + product = /obj/item/food/snacks/grown/mushroom/glowshroom/shadowshroom genes = list(/datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/plant_type/fungal_metabolism) mutatelist = list() reagents_add = list("radium" = 0.2, "nutriment" = 0.04) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom +/obj/item/food/snacks/grown/mushroom/glowshroom/shadowshroom seed = /obj/item/seeds/glowshroom/shadowshroom name = "shadowshroom cluster" desc = "Mycena Umbra: This species of mushroom emits shadow instead of light." diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index 4cacb9c699a0..78fe7964c461 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -88,7 +88,7 @@ /obj/item/grown/nettle/death seed = /obj/item/seeds/nettle/death name = "deathnettle" - desc = "The glowing nettle incites rage in you just from looking at it!" + desc = "The glowing nettle incites rage in you just from looking at it!" icon_state = "deathnettle" force = 25 throwforce = 10 diff --git a/code/modules/hydroponics/grown/nymph.dm b/code/modules/hydroponics/grown/nymph.dm index 34bbffc4c9db..af1a0506b788 100644 --- a/code/modules/hydroponics/grown/nymph.dm +++ b/code/modules/hydroponics/grown/nymph.dm @@ -4,7 +4,7 @@ icon_state = "seed-replicapod" species = "replicapod" plantname = "Nymph Pod" - product = /obj/item/reagent_containers/food/snacks/grown/nymph_pod + product = /obj/item/food/snacks/grown/nymph_pod lifespan = 50 endurance = 8 maturation = 10 @@ -12,14 +12,14 @@ yield = 1 reagents_add = list("plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/nymph_pod +/obj/item/food/snacks/grown/nymph_pod seed = /obj/item/seeds/nymph name = "nymph pod" desc = "A peculiar wriggling pod with a grown nymph inside. Crack it open to let the nymph out." icon_state = "mushy" bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/nymph_pod/attack_self(mob/user) +/obj/item/food/snacks/grown/nymph_pod/attack_self(mob/user) new /mob/living/simple_animal/diona(get_turf(user)) to_chat(user, "You crack open [src] letting the nymph out.") user.drop_item() diff --git a/code/modules/hydroponics/grown/olive.dm b/code/modules/hydroponics/grown/olive.dm index eb3ea8d43d36..05f46a5a58f4 100644 --- a/code/modules/hydroponics/grown/olive.dm +++ b/code/modules/hydroponics/grown/olive.dm @@ -5,17 +5,17 @@ icon_state = "seed-olive" species = "olive" plantname = "Olive Tree" - product = /obj/item/reagent_containers/food/snacks/grown/olive + product = /obj/item/food/snacks/grown/olive lifespan = 150 endurance = 35 yield = 5 growthstages = 6 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/apple) + mutatelist = list() reagents_add = list("vitamin" = 0.02, "plantmatter" = 0.2, "sodiumchloride" = 0.2) -/obj/item/reagent_containers/food/snacks/grown/olive +/obj/item/food/snacks/grown/olive seed = /obj/item/seeds/olive name = "olive" desc = "A small cylindrical salty fruit closely related to mangoes. Can be ground into a paste and mixed with water to make quality oil." diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm index 8594c6f37eab..b59a3bfa5e0e 100644 --- a/code/modules/hydroponics/grown/onion.dm +++ b/code/modules/hydroponics/grown/onion.dm @@ -4,7 +4,7 @@ icon_state = "seed-onion" species = "onion" plantname = "Onion Sprouts" - product = /obj/item/reagent_containers/food/snacks/grown/onion + product = /obj/item/food/snacks/grown/onion lifespan = 20 maturation = 3 production = 4 @@ -16,14 +16,14 @@ reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) mutatelist = list(/obj/item/seeds/onion/red) -/obj/item/reagent_containers/food/snacks/grown/onion +/obj/item/food/snacks/grown/onion seed = /obj/item/seeds/onion name = "onion" desc = "Nothing to cry over." icon_state = "onion" filling_color = "#C0C9A0" bitesize_mod = 2 - slice_path = /obj/item/reagent_containers/food/snacks/onion_slice + slice_path = /obj/item/food/snacks/onion_slice tastes = list("onion" = 1, "pungentness" = 1) slices_num = 2 wine_power = 0.3 @@ -36,22 +36,22 @@ species = "onion_red" plantname = "Red Onion Sprouts" weed_chance = 1 - product = /obj/item/reagent_containers/food/snacks/grown/onion/red + product = /obj/item/food/snacks/grown/onion/red mutatelist = list() reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1, "onionjuice" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/onion/red +/obj/item/food/snacks/grown/onion/red seed = /obj/item/seeds/onion/red name = "red onion" desc = "Purple despite the name." icon_state = "onion_red" filling_color = "#C29ACF" - slice_path = /obj/item/reagent_containers/food/snacks/onion_slice/red + slice_path = /obj/item/food/snacks/onion_slice/red tastes = list("red onion" = 1, "pungentness" = 3) wine_power = 0.6 wine_flavor = "powerful pungentness" -/obj/item/reagent_containers/food/snacks/onion_slice +/obj/item/food/snacks/onion_slice name = "onion slices" desc = "Rings, not for wearing." icon_state = "onionslice" @@ -59,9 +59,9 @@ filling_color = "#C0C9A0" tastes = list("onion" = 1, "pungentness" = 1) gender = PLURAL - cooked_type = /obj/item/reagent_containers/food/snacks/onionrings + cooked_type = /obj/item/food/snacks/onionrings -/obj/item/reagent_containers/food/snacks/onion_slice/red +/obj/item/food/snacks/onion_slice/red name = "red onion slices" desc = "They shine like exceptionally low quality amethyst." icon_state = "onionslice_red" diff --git a/code/modules/hydroponics/grown/peanut.dm b/code/modules/hydroponics/grown/peanut.dm index 836f21488886..8226df87fca2 100644 --- a/code/modules/hydroponics/grown/peanut.dm +++ b/code/modules/hydroponics/grown/peanut.dm @@ -5,7 +5,7 @@ icon_state = "seed-potato" species = "potato" plantname = "Peanut Vines" - product = /obj/item/reagent_containers/food/snacks/grown/peanuts + product = /obj/item/food/snacks/grown/peanuts lifespan = 30 maturation = 10 production = 1 @@ -17,7 +17,7 @@ genes = list(/datum/plant_gene/trait/repeated_harvest) reagents_add = list("plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/peanuts +/obj/item/food/snacks/grown/peanuts seed = /obj/item/seeds/peanuts name = "patch of peanuts" desc = "Best avoided if you have spess allergies." diff --git a/code/modules/hydroponics/grown/pineapple.dm b/code/modules/hydroponics/grown/pineapple.dm index aa1946aee4ef..dd4727a2c318 100644 --- a/code/modules/hydroponics/grown/pineapple.dm +++ b/code/modules/hydroponics/grown/pineapple.dm @@ -5,7 +5,7 @@ icon_state = "seed-pineapple" species = "pineapple" plantname = "Pineapple Plant" - product = /obj/item/reagent_containers/food/snacks/grown/pineapple + product = /obj/item/food/snacks/grown/pineapple lifespan = 40 endurance = 30 growthstages = 3 @@ -14,7 +14,7 @@ mutatelist = list(/obj/item/seeds/apple) reagents_add = list("vitamin" = 0.02, "plantmatter" = 0.2, "water" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/pineapple +/obj/item/food/snacks/grown/pineapple seed = /obj/item/seeds/pineapple name = "pineapple" desc = "A soft sweet interior surrounded by a spiky skin." @@ -25,7 +25,7 @@ attack_verb = list("stung", "pined") throw_speed = 1 throw_range = 5 - slice_path = /obj/item/reagent_containers/food/snacks/pineappleslice + slice_path = /obj/item/food/snacks/pineappleslice slices_num = 3 filling_color = "#F6CB0B" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index a4d854163283..319343fac185 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -5,7 +5,7 @@ icon_state = "seed-potato" species = "potato" plantname = "Potato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/potato + product = /obj/item/food/snacks/grown/potato lifespan = 30 maturation = 10 production = 1 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/potato/sweet) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/potato +/obj/item/food/snacks/grown/potato seed = /obj/item/seeds/potato name = "potato" desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" @@ -29,7 +29,7 @@ distill_reagent = "vodka" -/obj/item/reagent_containers/food/snacks/grown/potato/wedges +/obj/item/food/snacks/grown/potato/wedges name = "potato wedges" desc = "Slices of neatly cut potato." icon_state = "potato_wedges" @@ -39,10 +39,10 @@ distill_reagent = "sbiten" -/obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/grown/potato/attackby(obj/item/W, mob/user, params) if(is_sharp(W)) to_chat(user, "You cut the potato into wedges with [W].") - var/obj/item/reagent_containers/food/snacks/grown/potato/wedges/Wedges = new /obj/item/reagent_containers/food/snacks/grown/potato/wedges + var/obj/item/food/snacks/grown/potato/wedges/Wedges = new /obj/item/food/snacks/grown/potato/wedges if(!remove_item_from_storage(user)) user.unEquip(src) user.put_in_hands(Wedges) @@ -58,11 +58,11 @@ icon_state = "seed-sweetpotato" species = "sweetpotato" plantname = "Sweet Potato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/potato/sweet + product = /obj/item/food/snacks/grown/potato/sweet mutatelist = list() reagents_add = list("vitamin" = 0.1, "sugar" = 0.1, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/potato/sweet +/obj/item/food/snacks/grown/potato/sweet seed = /obj/item/seeds/potato/sweet name = "sweet potato" desc = "It's sweet." diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 718b16c6b1f6..93b5da9980cc 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -5,7 +5,7 @@ icon_state = "seed-pumpkin" species = "pumpkin" plantname = "Pumpkin Vines" - product = /obj/item/reagent_containers/food/snacks/grown/pumpkin + product = /obj/item/food/snacks/grown/pumpkin lifespan = 50 endurance = 40 growthstages = 3 @@ -17,7 +17,7 @@ reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.2) -/obj/item/reagent_containers/food/snacks/grown/pumpkin +/obj/item/food/snacks/grown/pumpkin seed = /obj/item/seeds/pumpkin name = "pumpkin" desc = "It's large and scary." @@ -28,7 +28,7 @@ wine_power = 0.2 var/carved_type = /obj/item/clothing/head/hardhat/pumpkinhead -/obj/item/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params) if(is_sharp(W)) user.show_message("You carve a face into [src]!", 1) new carved_type(user.loc) @@ -44,13 +44,13 @@ icon_state = "seed-blumpkin" species = "blumpkin" plantname = "Blumpkin Vines" - product = /obj/item/reagent_containers/food/snacks/grown/pumpkin/blumpkin + product = /obj/item/food/snacks/grown/pumpkin/blumpkin mutatelist = list() reagents_add = list("ammonia" = 0.2, "chlorine" = 0.1, "plasma" = 0.1, "plantmatter" = 0.2) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/pumpkin/blumpkin +/obj/item/food/snacks/grown/pumpkin/blumpkin seed = /obj/item/seeds/pumpkin/blumpkin name = "blumpkin" desc = "The pumpkin's toxic sibling." diff --git a/code/modules/hydroponics/grown/random_seeds.dm b/code/modules/hydroponics/grown/random_seeds.dm index c01513e1011a..3be1c302f87b 100644 --- a/code/modules/hydroponics/grown/random_seeds.dm +++ b/code/modules/hydroponics/grown/random_seeds.dm @@ -6,7 +6,7 @@ icon_state = "seed-x" species = "?????" plantname = "strange plant" - product = /obj/item/reagent_containers/food/snacks/grown/random + product = /obj/item/food/snacks/grown/random icon_grow = "xpod-grow" icon_dead = "xpod-dead" icon_harvest = "xpod-harvest" @@ -30,14 +30,14 @@ add_random_plant_type(100) desc = "Label: \n" + get_analyzer_text() -/obj/item/reagent_containers/food/snacks/grown/random +/obj/item/food/snacks/grown/random seed = /obj/item/seeds/random name = "strange plant" desc = "What could this even be?" icon_state = "crunchy" bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/random/Initialize() +/obj/item/food/snacks/grown/random/Initialize() . = ..() wine_power = rand(0.1,1.5) if(prob(1)) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 263f52568178..4d8e9ab629cd 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -5,7 +5,7 @@ icon_state = "seed-carrot" species = "carrot" plantname = "Carrots" - product = /obj/item/reagent_containers/food/snacks/grown/carrot + product = /obj/item/food/snacks/grown/carrot maturation = 10 production = 1 yield = 5 @@ -14,7 +14,7 @@ mutatelist = list(/obj/item/seeds/carrot/parsnip) reagents_add = list("oculine" = 0.25, "vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/carrot +/obj/item/food/snacks/grown/carrot seed = /obj/item/seeds/carrot name = "carrot" desc = "It's good for the eyes!" @@ -24,14 +24,14 @@ tastes = list("carrot" = 1) wine_power = 0.3 -/obj/item/reagent_containers/food/snacks/grown/carrot/wedges +/obj/item/food/snacks/grown/carrot/wedges name = "carrot wedges" desc = "Slices of neatly cut carrot." icon_state = "carrot_wedges" filling_color = "#FFA500" bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) if(is_sharp(I)) to_chat(user, "You sharpen the carrot into a shiv with [I].") var/obj/item/kitchen/knife/shiv/carrot/Shiv = new () @@ -50,12 +50,12 @@ icon_state = "seed-parsnip" species = "parsnip" plantname = "Parsnip" - product = /obj/item/reagent_containers/food/snacks/grown/parsnip + product = /obj/item/food/snacks/grown/parsnip icon_dead = "carrot-dead" mutatelist = list() reagents_add = list("vitamin" = 0.05, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/parsnip +/obj/item/food/snacks/grown/parsnip seed = /obj/item/seeds/carrot/parsnip name = "parsnip" desc = "Closely related to carrots." @@ -72,7 +72,7 @@ icon_state = "seed-whitebeet" species = "whitebeet" plantname = "White Beet Plants" - product = /obj/item/reagent_containers/food/snacks/grown/whitebeet + product = /obj/item/food/snacks/grown/whitebeet lifespan = 60 endurance = 50 yield = 6 @@ -81,7 +81,7 @@ mutatelist = list(/obj/item/seeds/redbeet) reagents_add = list("vitamin" = 0.04, "sugar" = 0.2, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/whitebeet +/obj/item/food/snacks/grown/whitebeet seed = /obj/item/seeds/whitebeet name = "white beet" desc = "You can't beat white beet." @@ -98,7 +98,7 @@ icon_state = "seed-redbeet" species = "redbeet" plantname = "Red Beet Plants" - product = /obj/item/reagent_containers/food/snacks/grown/redbeet + product = /obj/item/food/snacks/grown/redbeet lifespan = 60 endurance = 50 yield = 6 @@ -107,7 +107,7 @@ genes = list(/datum/plant_gene/trait/maxchem) reagents_add = list("vitamin" = 0.05, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/redbeet +/obj/item/food/snacks/grown/redbeet seed = /obj/item/seeds/redbeet name = "red beet" desc = "You can't beat red beet." diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index 0bba20ad4c03..6289b1abda7f 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -5,7 +5,7 @@ icon_state = "seed-teaaspera" species = "teaaspera" plantname = "Tea Aspera Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tea + product = /obj/item/food/snacks/grown/tea lifespan = 20 maturation = 5 production = 5 @@ -16,7 +16,7 @@ mutatelist = list(/obj/item/seeds/tea/astra) reagents_add = list("vitamin" = 0.04, "teapowder" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/tea +/obj/item/food/snacks/grown/tea seed = /obj/item/seeds/tea name = "Tea Aspera tips" desc = "These aromatic tips of the tea plant can be dried to make tea." @@ -32,12 +32,12 @@ desc = "These seeds grow into Tea Astra, a more potent variant of tea" species = "teaastra" plantname = "Tea Astra Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tea/astra + product = /obj/item/food/snacks/grown/tea/astra mutatelist = list() reagents_add = list("synaptizine" = 0.1, "vitamin" = 0.04, "teapowder" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tea/astra +/obj/item/food/snacks/grown/tea/astra seed = /obj/item/seeds/tea/astra name = "Tea Astra tips" desc = "Knock away your fatigue!" @@ -53,7 +53,7 @@ icon_state = "seed-coffeea" species = "coffeea" plantname = "Coffee Arabica Bush" - product = /obj/item/reagent_containers/food/snacks/grown/coffee + product = /obj/item/food/snacks/grown/coffee lifespan = 30 endurance = 20 maturation = 5 @@ -65,7 +65,7 @@ mutatelist = list(/obj/item/seeds/coffee/robusta) reagents_add = list("vitamin" = 0.04, "coffeepowder" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/coffee +/obj/item/food/snacks/grown/coffee seed = /obj/item/seeds/coffee name = "coffee arabica beans" desc = "Dry them out to make coffee." @@ -82,12 +82,12 @@ icon_state = "seed-coffeer" species = "coffeer" plantname = "Coffee Robusta Bush" - product = /obj/item/reagent_containers/food/snacks/grown/coffee/robusta + product = /obj/item/food/snacks/grown/coffee/robusta mutatelist = list() reagents_add = list("ephedrine" = 0.1, "vitamin" = 0.04, "coffeepowder" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/coffee/robusta +/obj/item/food/snacks/grown/coffee/robusta seed = /obj/item/seeds/coffee/robusta name = "coffee robusta beans" desc = "Increases robustness by 37 percent!" diff --git a/code/modules/hydroponics/grown/tobacco.dm b/code/modules/hydroponics/grown/tobacco.dm index 36be15997280..6a74a4e02f44 100644 --- a/code/modules/hydroponics/grown/tobacco.dm +++ b/code/modules/hydroponics/grown/tobacco.dm @@ -5,7 +5,7 @@ icon_state = "seed-tobacco" species = "tobacco" plantname = "Tobacco Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tobacco + product = /obj/item/food/snacks/grown/tobacco lifespan = 20 maturation = 5 production = 5 @@ -15,7 +15,7 @@ mutatelist = list(/obj/item/seeds/tobacco/space) reagents_add = list("nicotine" = 0.03, "plantmatter" = 0.03) -/obj/item/reagent_containers/food/snacks/grown/tobacco +/obj/item/food/snacks/grown/tobacco seed = /obj/item/seeds/tobacco name = "tobacco leaves" desc = "Dry them out to make some smokes." @@ -31,12 +31,12 @@ icon_state = "seed-stobacco" species = "stobacco" plantname = "Space Tobacco Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tobacco/space + product = /obj/item/food/snacks/grown/tobacco/space mutatelist = list() reagents_add = list("salbutamol" = 0.05, "nicotine" = 0.08, "plantmatter" = 0.03) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tobacco/space +/obj/item/food/snacks/grown/tobacco/space seed = /obj/item/seeds/tobacco/space name = "space tobacco leaves" desc = "Dry them out to make some space-smokes." diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 6236d56994eb..0de416b0972d 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -5,7 +5,7 @@ icon_state = "seed-tomato" species = "tomato" plantname = "Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato + product = /obj/item/food/snacks/grown/tomato maturation = 8 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "tomato-grow" @@ -14,12 +14,12 @@ mutatelist = list(/obj/item/seeds/tomato/blue, /obj/item/seeds/tomato/blood) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/tomato +/obj/item/food/snacks/grown/tomato seed = /obj/item/seeds/tomato name = "tomato" desc = "I say to-mah-to, you say tom-mae-to." icon_state = "tomato" - slice_path = /obj/item/reagent_containers/food/snacks/tomatoslice + slice_path = /obj/item/food/snacks/tomatoslice slices_num = 4 splat_type = /obj/effect/decal/cleanable/tomato_smudge filling_color = "#FF6347" @@ -34,12 +34,12 @@ icon_state = "seed-bloodtomato" species = "bloodtomato" plantname = "Blood-Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/blood + product = /obj/item/food/snacks/grown/tomato/blood mutatelist = list(/obj/item/seeds/tomato/killer) reagents_add = list("blood" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tomato/blood +/obj/item/food/snacks/grown/tomato/blood seed = /obj/item/seeds/tomato/blood name = "blood-tomato" desc = "So bloody...so...very...bloody....AHHHH!!!!" @@ -58,7 +58,7 @@ icon_state = "seed-bluetomato" species = "bluetomato" plantname = "Blue-Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/blue + product = /obj/item/food/snacks/grown/tomato/blue yield = 2 icon_grow = "bluetomato-grow" mutatelist = list(/obj/item/seeds/tomato/blue/bluespace) @@ -66,7 +66,7 @@ reagents_add = list("lube" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tomato/blue +/obj/item/food/snacks/grown/tomato/blue seed = /obj/item/seeds/tomato/blue name = "blue-tomato" desc = "I say blue-mah-to, you say blue-mae-to." @@ -83,14 +83,14 @@ icon_state = "seed-bluespacetomato" species = "bluespacetomato" plantname = "Bluespace Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/blue/bluespace + product = /obj/item/food/snacks/grown/tomato/blue/bluespace yield = 2 mutatelist = list() genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/repeated_harvest) reagents_add = list("lube" = 0.2, "singulo" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 50 -/obj/item/reagent_containers/food/snacks/grown/tomato/blue/bluespace +/obj/item/food/snacks/grown/tomato/blue/bluespace seed = /obj/item/seeds/tomato/blue/bluespace name = "bluespace tomato" desc = "So lubricated, you might slip through space-time." @@ -108,7 +108,7 @@ icon_state = "seed-killertomato" species = "killertomato" plantname = "Killer-Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/killer + product = /obj/item/food/snacks/grown/tomato/killer yield = 2 genes = list(/datum/plant_gene/trait/squash) growthstages = 2 @@ -119,7 +119,7 @@ reagents_add = list("vitamin" = 0.04, "protein" = 0.1) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/tomato/killer +/obj/item/food/snacks/grown/tomato/killer seed = /obj/item/seeds/tomato/killer name = "killer-tomato" desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" @@ -129,13 +129,13 @@ origin_tech = "biotech=4;combat=5" distill_reagent = "demonsblood" -/obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) +/obj/item/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) if(awakening) to_chat(user, "The tomato is twitching and shaking, preventing you from eating it.") return ..() -/obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user) +/obj/item/food/snacks/grown/tomato/killer/attack_self(mob/user) if(awakening || isspaceturf(user.loc)) return to_chat(user, "You begin to awaken the Killer Tomato...") diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 43525465b328..1c33b6ce5dae 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -44,11 +44,11 @@ attack_verb = list("bashed", "battered", "bludgeoned", "whacked") var/plank_type = /obj/item/stack/sheet/wood var/plank_name = "wooden planks" - var/static/list/accepted = typecacheof(list(/obj/item/reagent_containers/food/snacks/grown/tobacco, - /obj/item/reagent_containers/food/snacks/grown/tea, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/wheat)) + var/static/list/accepted = typecacheof(list(/obj/item/food/snacks/grown/tobacco, + /obj/item/food/snacks/grown/tea, + /obj/item/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/deus, + /obj/item/food/snacks/grown/wheat)) /obj/item/grown/log/attackby(obj/item/W, mob/user, params) if(is_sharp(W)) @@ -69,7 +69,7 @@ qdel(src) if(CheckAccepted(W)) - var/obj/item/reagent_containers/food/snacks/grown/leaf = W + var/obj/item/food/snacks/grown/leaf = W if(leaf.dry) user.show_message("You wrap \the [W] around the log, turning it into a torch!") var/obj/item/flashlight/flare/torch/T = new /obj/item/flashlight/flare/torch(user.loc) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index ccf5a753bb56..4fcbe25430e1 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -6,9 +6,9 @@ name = "grown_weapon" icon = 'icons/obj/hydroponics/harvest.dmi' resistance_flags = FLAMMABLE - var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. + var/obj/item/seeds/seed // type path, gets converted to item on New(). It's safe to assume it's always a seed item. -/obj/item/grown/Initialize(mapload, newloc, obj/item/seeds/new_seed = null) +/obj/item/grown/Initialize(mapload, obj/item/seeds/new_seed) . = ..() create_reagents(50) @@ -24,7 +24,7 @@ if(seed) for(var/datum/plant_gene/trait/T in seed.genes) - T.on_new(src, newloc) + T.on_new(src) if(istype(src, seed.product)) // no adding reagents if it is just a trash item seed.prepare_result(src) diff --git a/code/modules/hydroponics/hydroponics_tray.dm b/code/modules/hydroponics/hydroponics_tray.dm index c284393cfbf2..ebeaac15cddf 100644 --- a/code/modules/hydroponics/hydroponics_tray.dm +++ b/code/modules/hydroponics/hydroponics_tray.dm @@ -44,6 +44,7 @@ plant_hud_set_toxin() plant_hud_set_pest() plant_hud_set_weed() + create_reagents(300) // This should get cleared every time it is filled, barring admemery /obj/machinery/hydroponics/constructable name = "hydroponics tray" @@ -79,14 +80,9 @@ return ..() /obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "hydrotray3", "hydrotray3", I)) + if(default_deconstruction_screwdriver(user, "hydrotray3", "hydrotray3", I) || exchange_parts(user, I)) return - - if(exchange_parts(user, I)) - return - - else - return ..() + return ..() /obj/machinery/hydroponics/constructable/crowbar_act(mob/user, obj/item/I) @@ -735,76 +731,54 @@ //Called when mob user "attacks" it with object O if(istype(O, /obj/item/reagent_containers)) // Syringe stuff (and other reagent containers now too) var/obj/item/reagent_containers/reagent_source = O + var/target = myseed ? myseed.plantname : src if(istype(reagent_source, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/syringe/syr = reagent_source - if(syr.mode != 1) + if(syr.mode != SYRINGE_INJECT) to_chat(user, "You can't get any extract out of this plant.") //That. Gives me an idea... - return + return TRUE if(!reagent_source.reagents.total_volume) to_chat(user, "[reagent_source] is empty.") - return 1 + return TRUE if(reagent_source.has_lid && !reagent_source.is_drainable()) //if theres a LID then cannot transfer reagents. to_chat(user, "You need to open [O] first!") return TRUE - var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc - var/target = myseed ? myseed.plantname : src var/visi_msg = "" - var/irrigate = 0 //How am I supposed to irrigate pill contents? - var/transfer_amount + var/transfer_amount = reagent_source.amount_per_transfer_from_this + var/irrigate = FALSE - if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || ispill(reagent_source)) - visi_msg="[user] composts [reagent_source], spreading it through [target]" - transfer_amount = reagent_source.reagents.total_volume - else - transfer_amount = reagent_source.amount_per_transfer_from_this - if(istype(reagent_source, /obj/item/reagent_containers/syringe/)) - var/obj/item/reagent_containers/syringe/syr = reagent_source - visi_msg="[user] injects [target] with [syr]" - if(syr.reagents.total_volume <= syr.amount_per_transfer_from_this) - syr.mode = 0 - else if(istype(reagent_source, /obj/item/reagent_containers/spray/)) - visi_msg="[user] sprays [target] with [reagent_source]" - playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) - irrigate = 1 - else if(transfer_amount) // Droppers, cans, beakers, what have you. - visi_msg="[user] uses [reagent_source] on [target]" - irrigate = 1 - // Beakers, bottles, buckets, etc. - if(reagent_source.is_drainable()) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - - if(irrigate && transfer_amount > 30 && reagent_source.reagents.total_volume >= 30 && using_irrigation) - trays = FindConnected() - if(trays.len > 1) - visi_msg += ", setting off the irrigation system" - - if(visi_msg) - visible_message("[visi_msg].") - - var/split = round(transfer_amount/trays.len) - - for(var/obj/machinery/hydroponics/H in trays) - //cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener - - var/datum/reagents/S = new /datum/reagents() //This is a strange way, but I don't know of a better one so I can't fix it at the moment... - S.my_atom = H - - reagent_source.reagents.trans_to(S,split) - if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || ispill(reagent_source)) - qdel(reagent_source) - - H.applyChemicals(S, user) - - S.clear_reagents() - qdel(S) - H.update_state() - if(reagent_source) // If the source wasn't composted and destroyed - reagent_source.update_icon() - return 1 + if(istype(reagent_source, /obj/item/reagent_containers/syringe)) + var/obj/item/reagent_containers/syringe/syr = reagent_source + visi_msg = "[user] injects [target] with [syr]" + if(syr.reagents.total_volume <= syr.amount_per_transfer_from_this) + syr.mode = SYRINGE_DRAW + + else if(istype(reagent_source, /obj/item/reagent_containers/spray)) + visi_msg = "[user] sprays [target] with [reagent_source]" + playsound(loc, 'sound/effects/spray3.ogg', 50, TRUE, -6) + irrigate = TRUE + + else if(transfer_amount) // Droppers, cans, beakers, what have you. + visi_msg = "[user] uses [reagent_source] on [target]" + irrigate = TRUE + + // Beakers, bottles, buckets, etc. + if(reagent_source.is_drainable()) + playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) + + add_compost(reagent_source, user, transfer_amount, visi_msg, irrigate) + return TRUE + + else if(isfood(O) || istype(O, /obj/item/grown)) + var/target = myseed ? myseed.plantname : src + var/transfer = O.reagents.total_volume + var/message = "[user] composts [O], spreading it through [target]" + add_compost(O, user, transfer, message) + return TRUE else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample)) if(!myseed) @@ -838,7 +812,6 @@ to_chat(user, "- Toxicity level: [toxic] / 100") to_chat(user, "- Water level: [waterlevel] / [maxwater]") to_chat(user, "- Nutrition level: [nutrilevel] / [maxnutri]") - to_chat(user, "") else if(istype(O, /obj/item/cultivator)) if(weedlevel > 0) @@ -851,7 +824,7 @@ else if(istype(O, /obj/item/storage/bag/plants)) attack_hand(user) var/obj/item/storage/bag/plants/S = O - for(var/obj/item/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z)) + for(var/obj/item/food/snacks/grown/G in locate(user.x,user.y,user.z)) if(!S.can_be_inserted(G)) return S.handle_item_insertion(G, 1) @@ -1022,3 +995,28 @@ qdel(src) else return ..() + +/obj/machinery/hydroponics/proc/add_compost(obj/item/reagent_source, mob/user, transfer_amount, visi_msg, irrigate = FALSE) + var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc + + if(irrigate && transfer_amount > 30 && reagent_source.reagents.total_volume >= 30 && using_irrigation) + trays = FindConnected() + + if(length(trays) > 1) + visi_msg += ", setting off the irrigation system" + + if(visi_msg) + visible_message("[visi_msg].") + + var/split = round(transfer_amount / length(trays)) + for(var/obj/machinery/hydroponics/H in trays)//cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener + reagent_source.reagents.trans_to(H.reagents, split) + if(isfood(reagent_source) || ispill(reagent_source) || istype(reagent_source, /obj/item/grown)) + qdel(reagent_source) + + H.applyChemicals(reagents, user) + reagents.clear_reagents() + H.update_state() + + if(reagent_source) // If the source wasn't composted and destroyed + reagent_source.update_icon() diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 5c207ada6e61..ccf886c8b66e 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -203,7 +203,7 @@ return FALSE return TRUE -/datum/plant_gene/trait/proc/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/proc/on_new(obj/item/food/snacks/grown/G) if(!origin_tech) // This ugly code segment adds RnD tech levels to resulting plants. return @@ -218,19 +218,19 @@ else G.origin_tech = list2params(origin_tech) -/datum/plant_gene/trait/proc/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) +/datum/plant_gene/trait/proc/on_consume(obj/item/food/snacks/grown/G, mob/living/carbon/target) return -/datum/plant_gene/trait/proc/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) +/datum/plant_gene/trait/proc/on_slip(obj/item/food/snacks/grown/G, mob/living/carbon/target) return -/datum/plant_gene/trait/proc/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/proc/on_squash(obj/item/food/snacks/grown/G, atom/target) return -/datum/plant_gene/trait/proc/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user) +/datum/plant_gene/trait/proc/on_attackby(obj/item/food/snacks/grown/G, obj/item/I, mob/user) return -/datum/plant_gene/trait/proc/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/proc/on_throw_impact(obj/item/food/snacks/grown/G, atom/target) return /datum/plant_gene/trait/squash @@ -250,7 +250,7 @@ examine_line = "It has a very slippery skin." dangerous = TRUE -/datum/plant_gene/trait/slip/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/slip/on_new(obj/item/food/snacks/grown/G) . = ..() if(istype(G) && ispath(G.trash, /obj/item/grown)) return @@ -274,19 +274,19 @@ origin_tech = list("powerstorage" = 5) dangerous = TRUE -/datum/plant_gene/trait/cell_charge/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) +/datum/plant_gene/trait/cell_charge/on_slip(obj/item/food/snacks/grown/G, mob/living/carbon/C) var/power = G.seed.potency*rate if(prob(power)) C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES) -/datum/plant_gene/trait/cell_charge/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/cell_charge/on_squash(obj/item/food/snacks/grown/G, atom/target) if(isliving(target)) var/mob/living/carbon/C = target var/power = G.seed.potency*rate if(prob(power)) C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES) -/datum/plant_gene/trait/cell_charge/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) +/datum/plant_gene/trait/cell_charge/on_consume(obj/item/food/snacks/grown/G, mob/living/carbon/target) if(!G.reagents.total_volume) var/batteries_recharged = 0 for(var/obj/item/stock_parts/cell/C in target.GetAllContents()) @@ -299,6 +299,7 @@ C.update_icon() batteries_recharged = 1 if(batteries_recharged) + target.reagents.add_reagent("teslium", 2) to_chat(target, "Your batteries are recharged!") @@ -318,7 +319,7 @@ /datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S) return max(S.potency*(rate + 0.01), 0.1) -/datum/plant_gene/trait/glow/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/glow/on_new(obj/item/food/snacks/grown/G) ..() G.set_light(glow_range(G.seed), glow_power(G.seed), glow_color) @@ -349,7 +350,7 @@ origin_tech = list("bluespace" = 5) dangerous = TRUE -/datum/plant_gene/trait/teleport/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/teleport/on_squash(obj/item/food/snacks/grown/G, atom/target) if(isliving(target)) var/mob/living/L = target var/teleport_radius = max(round(G.seed.potency / 10), 1) @@ -358,7 +359,7 @@ do_teleport(L, T, teleport_radius) L.apply_status_effect(STATUS_EFFECT_TELEPORTSICK) -/datum/plant_gene/trait/teleport/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) +/datum/plant_gene/trait/teleport/on_slip(obj/item/food/snacks/grown/G, mob/living/carbon/C) var/teleport_radius = max(round(G.seed.potency / 10), 1) var/turf/T = get_turf(C) if(do_teleport(C, T, teleport_radius)) @@ -379,7 +380,7 @@ name = "Densified Chemicals" rate = 2 -/datum/plant_gene/trait/maxchem/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/maxchem/on_new(obj/item/food/snacks/grown/G) ..() G.reagents.maximum_volume *= rate @@ -396,7 +397,7 @@ /datum/plant_gene/trait/battery name = "Capacitive Cell Production" -/datum/plant_gene/trait/battery/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user) +/datum/plant_gene/trait/battery/on_attackby(obj/item/food/snacks/grown/G, obj/item/I, mob/user) if(istype(I, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = I if(C.use(5)) @@ -425,7 +426,7 @@ name = "Hypodermic Prickles" dangerous = TRUE -/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/food/snacks/grown/G, atom/target) if(isliving(target) && G.reagents && G.reagents.total_volume) var/mob/living/L = target // It would be nice to inject the body part the original thrower aimed at, @@ -442,7 +443,7 @@ name = "gaseous decomposition" dangerous = TRUE -/datum/plant_gene/trait/smoke/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/smoke/on_squash(obj/item/food/snacks/grown/G, atom/target) var/datum/effect_system/smoke_spread/chem/S = new var/splat_location = get_turf(target) var/smoke_amount = round(sqrt(G.seed.potency * 0.1), 1) @@ -456,7 +457,7 @@ if(!(S.resistance_flags & FIRE_PROOF)) S.resistance_flags |= FIRE_PROOF -/datum/plant_gene/trait/fire_resistance/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/fire_resistance/on_new(obj/item/food/snacks/grown/G) if(!(G.resistance_flags & FIRE_PROOF)) G.resistance_flags |= FIRE_PROOF diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 608ba17e3c8c..30b3c34b6aae 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -16,8 +16,8 @@ if(extractor) seedloc = extractor.loc - if(istype(O, /obj/item/reagent_containers/food/snacks/grown/)) - var/obj/item/reagent_containers/food/snacks/grown/F = O + if(istype(O, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/F = O if(F.seed) if(user && !user.drop_item()) //couldn't drop the item return @@ -122,10 +122,13 @@ /obj/machinery/seed_extractor/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/seed_extractor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/seed_extractor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/seed_extractor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SeedExtractor", name, 800, 400, master_ui, state) + ui = new(user, src, "SeedExtractor", name) ui.open() /obj/machinery/seed_extractor/ui_data(mob/user) @@ -157,13 +160,13 @@ . = FALSE switch(action) if("vend") - vend_seed(text2num(params["seedid"]), params["seedvariant"], vend_amount) + vend_seed(params["seedid"], params["seedvariant"], vend_amount) add_fingerprint(usr) . = TRUE if("set_vend_amount") if(!length(params["vend_amount"])) return - vend_amount = clamp(text2num(params["vend_amount"]), 1, MAX_DISPENSE_SEEDS) + vend_amount = clamp(params["vend_amount"], 1, MAX_DISPENSE_SEEDS) add_fingerprint(usr) . = TRUE diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index ee463e80ce38..74393733a8c4 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -146,7 +146,7 @@ var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc // Needed for TK var/product_name for(var/i in 1 to getYield()) - var/obj/item/reagent_containers/food/snacks/grown/produce = new product(output_loc, src) + var/obj/item/produce = new product(output_loc, src) if(!produce) return @@ -169,8 +169,8 @@ data = list("blood_type" = "O-") if(rid == "nutriment" || rid == "vitamin" || rid == "protein" || rid == "plantmatter") // Apple tastes of apple. - if(istype(T, /obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/grown_edible = T + if(istype(T, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/grown_edible = T data = grown_edible.tastes.Copy() T.reagents.add_reagent(rid, amount, data) @@ -179,7 +179,7 @@ /// Setter procs /// /obj/item/seeds/proc/adjust_yield(adjustamt) if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable - yield = clamp(yield + adjustamt, 0, 10) + yield = clamp(yield + adjustamt, 0, 5) if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) yield = 1 // Mushrooms always have a minimum yield of 1. @@ -277,7 +277,7 @@ /obj/item/seeds/proc/get_analyzer_text() // In case seeds have something special to tell to the analyzer - var/text = "" + var/list/text = list() if(!get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism) && !get_gene(/datum/plant_gene/trait/plant_type/alien_properties)) text += "- Plant type: Normal plant\n" if(get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) @@ -306,7 +306,7 @@ all_traits += " [traits.get_name()]" text += "- Plant Traits:[all_traits]\n" - return text + return text.Join("") /obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) // In case seeds have some special interaction with special chems return @@ -327,7 +327,7 @@ /obj/item/seeds/proc/variant_prompt(mob/user, obj/item/container = null) var/prev = variant - var/V = input(user, "Choose variant name:", "Plant Variant Naming", variant) as text|null + var/V = tgui_input_text(user, "Choose variant name:", "Plant Variant Naming", variant, encode = FALSE) if(isnull(V)) // Did the user cancel? return if(container && (loc != container)) // Was the seed removed from the container, if there is a container? diff --git a/code/modules/input/input.dm b/code/modules/input/input.dm index d1bd24e4a8a9..cab19d2c503f 100644 --- a/code/modules/input/input.dm +++ b/code/modules/input/input.dm @@ -24,11 +24,11 @@ "default" = list( "Any" = "\"Key_Down \[\[*\]\]\"", // Passes any key down to the rebindable input system "Any+UP" = "\"Key_Up \[\[*\]\]\"", // 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.border=sunken\\\"\"", // 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.border=line\\\"\"", // 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 ), ) @@ -63,7 +63,8 @@ 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.border=line") //screw you, we start in hotkey mode now + macro_sets = null //not needed anymore, bye have a great time /client/verb/Key_Down(_key as text) diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index bcb235d099b4..bf79ebcbae53 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -352,7 +352,7 @@ // We don't want to send the whole payload (song included) just for volume var/datum/tgui/ui = SStgui.get_open_ui(usr, parent, "main") if(ui) - ui.push_data(list("volume" = volume), force = TRUE) + ui.send_update(list("volume" = volume), TRUE) /** * Setter for setting how low the volume has to get before a note is considered "dead" and dropped diff --git a/code/modules/instruments/songs/_song_ui.dm b/code/modules/instruments/songs/_song_ui.dm index 5d7fa1f19312..c603646ef659 100644 --- a/code/modules/instruments/songs/_song_ui.dm +++ b/code/modules/instruments/songs/_song_ui.dm @@ -44,10 +44,13 @@ return data -/datum/song/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, parent, ui_key, ui, force_open) +/datum/song/ui_state(mob/user) + return GLOB.default_state + +/datum/song/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, parent, ui) if(!ui) - ui = new(user, parent, ui_key, "Instrument", parent?.name || "Instrument", 700, 500) + ui = new(user, parent, "Instrument", parent?.name || "Instrument") ui.open() ui.set_autoupdate(FALSE) // NO!!! Don't auto-update this!! @@ -60,16 +63,9 @@ name = "" if("import") var/t = "" - do - t = html_encode(input(usr, "Please paste the entire song, formatted:", "[name]", t) as message) - if(!in_range(parent, usr)) - return - - if(length_char(t) >= MUSIC_MAXLINES * MUSIC_MAXLINECHARS) - var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") - if(cont == "no") - break - while(length_char(t) > MUSIC_MAXLINES * MUSIC_MAXLINECHARS) + t = tgui_input_text(usr, "Please paste the entire song, formatted:", parent.name, max_length = (MUSIC_MAXLINECHARS * MUSIC_MAXLINES), multiline = TRUE) + if(!in_range(parent, usr)) + return parse_song(t) return FALSE if("help") @@ -85,11 +81,9 @@ if("play") INVOKE_ASYNC(src, PROC_REF(start_playing), usr) if("newline") - var/newline = html_encode(input("Enter your line: ", parent.name) as text|null) + var/newline = tgui_input_text(usr, "Enter your line:", parent.name, max_length = MUSIC_MAXLINECHARS) if(!newline || !in_range(parent, usr)) return - if(length(lines) > MUSIC_MAXLINES) - return if(length(newline) > MUSIC_MAXLINECHARS) newline = copytext(newline, 1, MUSIC_MAXLINECHARS) lines.Add(newline) @@ -100,7 +94,7 @@ lines.Cut(num, num + 1) if("modifyline") var/num = round(text2num(params["line"])) - var/content = stripped_input(usr, "Enter your line: ", parent.name, lines[num], MUSIC_MAXLINECHARS) + var/content = tgui_input_text(usr, "Enter your line:", parent.name, lines[num], max_length = MUSIC_MAXLINECHARS) if(!content || !in_range(parent, usr)) return if(num > length(lines) || num < 1) diff --git a/code/modules/lavaland/lavaland_theme.dm b/code/modules/lavaland/lavaland_theme.dm new file mode 100644 index 000000000000..f1c4f16230b7 --- /dev/null +++ b/code/modules/lavaland/lavaland_theme.dm @@ -0,0 +1,56 @@ +/datum/lavaland_theme + /// Name of lavaland theme + var/name = "Not Specified" + /// Typepath of turf the `/turf/simulated/floor/lava/mapping_lava` will be changed to on Late Initialization + var/turf/simulated/floor/primary_turf_type + /// Icon state of planet present on background of station Z-level + var/planet_icon_state + +/datum/lavaland_theme/New() + if(!primary_turf_type) + stack_trace("Turf type is `null` in `[type]` lavaland theme") + else if(!ispath(primary_turf_type)) + stack_trace("Wrong turf type `[primary_turf_type.type]` in `[type]` lavaland theme") + +/** + * This proc should do all theme specific thing. + * Now it only generates rivers, but it can do all stuff you desire. + */ +/datum/lavaland_theme/proc/setup() + return + +/datum/lavaland_theme/lava + name = "lava" + primary_turf_type = /turf/simulated/floor/lava/lava_land_surface + planet_icon_state = "planet_lava" + +/datum/lavaland_theme/lava/setup() + spawn_rivers(level_name_to_num(MINING)) + +/datum/lavaland_theme/plasma + name = "plasma" + primary_turf_type = /turf/simulated/floor/lava/lava_land_surface/plasma + planet_icon_state = "planet_plasma" + +/datum/lavaland_theme/plasma/setup() + spawn_rivers(level_name_to_num(MINING), nodes = 2) + spawn_rivers(level_name_to_num(MINING), nodes = 2) + +/datum/lavaland_theme/chasm + name = "chasm" + primary_turf_type = /turf/simulated/floor/chasm/straight_down/lava_land_surface + planet_icon_state = "planet_chasm" + +/datum/lavaland_theme/chasm/setup() + spawn_rivers( + level_name_to_num(MINING), + nodes = 6, + turf_type = /turf/simulated/floor/lava/mapping_lava, + whitelist_area = /area/lavaland/surface/outdoors, + min_x = 50, + min_y = 7, + max_x = 250, + max_y = 225, + prob = 10, + prob_loss = 5 + ) diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 5a1e9de918ac..7f2570280522 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -213,7 +213,7 @@ var/choice = tgui_input_list(user, "What would you like to edit?", "Book Edit", list("Title", "Edit Current Page", "Author", "Summary", "Add Page", "Remove Page")) switch(choice) if("Title") - var/newtitle = reject_bad_text(stripped_input(user, "Write a new title:")) + var/newtitle = reject_bad_text(tgui_input_text(user, "Write a new title:", "Title", title)) if(!newtitle) to_chat(user, "You change your mind.") return @@ -222,13 +222,13 @@ name = "Book: " + newtitle title = newtitle if("Author") - var/newauthor = stripped_input(user, "Write the author's name:") + var/newauthor = tgui_input_text(user, "Write the author's name:", "Author", author, MAX_NAME_LEN) if(!newauthor) to_chat(user, "You change your mind.") return author = newauthor if("Summary") - var/newsummary = strip_html(input(user, "Write the new summary:") as message|null, MAX_SUMMARY_LEN) + var/newsummary = tgui_input_text(user, "Write the new summary:", "Summary", summary, MAX_SUMMARY_LEN, multiline = TRUE) if(!newsummary) to_chat(user, "You change your mind.") return @@ -244,7 +244,7 @@ if(character_space_remaining <= 0) to_chat(user, "There's not enough space left on this page to write anything!") return - var/content = strip_html(input(user, "Add Text to this page, you have [character_space_remaining] characters of space left:") as message|null, MAX_CHARACTERS_PER_BOOKPAGE) + var/content = tgui_input_text(user, "Add Text to this page, you have [character_space_remaining] characters of space left:", "Edit Current Page", max_length = MAX_CHARACTERS_PER_BOOKPAGE, multiline = TRUE) if(!content) to_chat(user, "You change your mind.") return @@ -267,7 +267,7 @@ if(!length(pages)) to_chat(user, "There aren't any pages in this book!") return - var/page_choice = input(user, "There are [length(pages)] pages, which page number would you like to remove?", "Input Page Number", null) as num|null + var/page_choice = tgui_input_number(user, "There are [length(pages)] pages, which page number would you like to remove?", "Input Page Number", max_value = length(pages)) if(!page_choice) to_chat(user, "You change your mind.") return diff --git a/code/modules/library/library_admin.dm b/code/modules/library/library_admin.dm index ded38fdd8069..dc22de9e33e7 100644 --- a/code/modules/library/library_admin.dm +++ b/code/modules/library/library_admin.dm @@ -30,10 +30,13 @@ ///browserui helper variable for turning pages in book var/view_book_page = 0 -/datum/ui_module/library_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/library_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/library_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "LibraryManager", name, 600, 600, master_ui, state) + ui = new(user, src, "LibraryManager", name) ui.autoupdate = TRUE ui.open() @@ -108,7 +111,7 @@ if("specify_ssid_delete") if(!answer || !text2num(answer)) return - var/confirm = alert("You are about to delete book [text2num(answer)]", "Confirm Deletion", "Yes", "No") + var/confirm = tgui_alert(usr, "You are about to delete book [text2num(answer)]", "Confirm Deletion", list("Yes", "No")) if(confirm != "Yes") return //we don't need to sanitize b/c removeBookyByID uses id=:id instead of like statemetns if(GLOB.library_catalog.remove_book_by_id(text2num(answer))) @@ -137,7 +140,7 @@ return var/sanitized_answer = paranoid_sanitize(answer) //the last thing we want happening is someone deleting every book with "%%" var/confirm //We want to be absolutely certain an admin wants to do this - confirm = alert("You are about to mass delete potentially up to 10 books", "Confirm Deletion", "Yes", "No") + confirm = tgui_alert(usr, "You are about to mass delete potentially up to 10 books", "Confirm Deletion", list("Yes", "No")) if(confirm != "Yes") return if(GLOB.library_catalog.remove_books_by_ckey(sanitized_answer)) diff --git a/code/modules/library/library_computer.dm b/code/modules/library/library_computer.dm index ffddf2c1ae33..f6854b9fb678 100644 --- a/code/modules/library/library_computer.dm +++ b/code/modules/library/library_computer.dm @@ -103,10 +103,13 @@ return ..() -/obj/machinery/computer/library/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/library/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/library/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "LibraryComputer", name, 1050, 600, master_ui, state) + ui = new(user, src, "LibraryComputer", name) ui.open() /* @@ -471,7 +474,7 @@ return FALSE /obj/machinery/computer/library/proc/select_book(obj/item/book/B) - if(B.carved == TRUE) + if(B.carved) return user_data.selected_book.title = B.title ? B.title : "No Title" user_data.selected_book.author = B.author ? B.author : "No Author" @@ -586,6 +589,7 @@ new /obj/item/storage/bible/syndi(loc) visible_message("[src]'s printer ominously hums as it produces a completely bound book. How did it do that?") print_cooldown = world.time + PRINTING_COOLDOWN + return TRUE #undef LIBRARY_BOOKS_PER_PAGE #undef LOGIN_FULL diff --git a/code/modules/library/library_equipment.dm b/code/modules/library/library_equipment.dm index 42a13d63fde1..f7b42c501877 100644 --- a/code/modules/library/library_equipment.dm +++ b/code/modules/library/library_equipment.dm @@ -214,10 +214,13 @@ if(c) selected_content.categories += c -/obj/machinery/bookbinder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/bookbinder/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/bookbinder/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BookBinder", name, 700, 400, master_ui, state) + ui = new(user, src, "BookBinder", name) ui.open() /obj/machinery/bookbinder/ui_data(mob/user) @@ -408,11 +411,11 @@ if(BARCODE_MODE_CHECKOUT) var/confirm if(!computer.user_data.patron_account) - confirm = alert("Warning: patron does not have an associated account number! Are you sure you want to checkout [B] to [computer.user_data.patron_name]?", "Confirm Checkout", "Yes", "No") + confirm = tgui_alert(user, "Warning: patron does not have an associated account number! Are you sure you want to checkout [B] to [computer.user_data.patron_name]?", "Confirm Checkout", list("Yes", "No")) else - confirm = alert("Are you sure you want to checkout [B] to [computer.user_data.patron_name]?", "Confirm Checkout", "Yes", "No") + confirm = tgui_alert(user, "Are you sure you want to checkout [B] to [computer.user_data.patron_name]?", "Confirm Checkout", list("Yes", "No")) - if(confirm == "No") + if(confirm != "Yes") return if(computer.checkout(B)) playsound(src, 'sound/items/scannerbeep.ogg', 15, TRUE) diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 731dfebc6f52..49541458f787 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -78,7 +78,7 @@ if(!isturf(T)) return - if(new_opacity == TRUE) + if(new_opacity) T.has_opaque_atom = TRUE T.reconsider_lights() else diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm index 13c0573a1f7f..c01bcd703e58 100644 --- a/code/modules/mapping/access_helpers.dm +++ b/code/modules/mapping/access_helpers.dm @@ -212,8 +212,12 @@ icon_state = "access_helper_sup" /obj/effect/mapping_helpers/airlock/access/any/supply/general + name = "cargo office" access = ACCESS_CARGO +/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay + access = ACCESS_CARGO_BAY + /obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting access = ACCESS_MAILSORTING @@ -427,8 +431,15 @@ icon_state = "access_helper_sup" /obj/effect/mapping_helpers/airlock/access/all/supply/general + name = "cargo office" access = ACCESS_CARGO +/obj/effect/mapping_helpers/airlock/access/all/supply/cargo_bay + access = ACCESS_CARGO_BAY + +/obj/effect/mapping_helpers/airlock/access/all/supply/supply_shuttle + access = ACCESS_SUPPLY_SHUTTLE + /obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting access = ACCESS_MAILSORTING diff --git a/code/modules/mapping/merge_conflicts.dm b/code/modules/mapping/merge_conflicts.dm index 31f854e80166..534fe98064b1 100644 --- a/code/modules/mapping/merge_conflicts.dm +++ b/code/modules/mapping/merge_conflicts.dm @@ -13,7 +13,7 @@ /proc/announce_merge_conflict_marker(atom/origin) var/msg = "HEY, LISTEN!!! Merge Conflict Marker detected at [AREACOORD(origin)]! Please manually address all potential merge conflicts!!!" warning(msg) - to_chat(world, "[msg]") + to_chat(world, "[msg]") /obj/merge_conflict_marker name = MERGE_CONFLICT_MARKER_NAME diff --git a/code/modules/maptext_alerts/location_blurbs.dm b/code/modules/maptext_alerts/location_blurbs.dm new file mode 100644 index 000000000000..b50b6b101308 --- /dev/null +++ b/code/modules/maptext_alerts/location_blurbs.dm @@ -0,0 +1,156 @@ +/obj/screen/text/blurb + maptext_height = 64 + maptext_width = 512 + screen_loc = "LEFT+1,BOTTOM+2" + /// Font size in pixels + var/font_size = 11 + /// Font family + var/font_family = "Courier New" + /// Where text is aligned + var/text_alignment = "left" + /// Color of text in RGB + var/text_color = COLOR_WHITE + /// Color of text outline + var/text_outline_color = COLOR_BLACK + /// Width of text outline in pixels + var/text_outline_width = 1 + /// Text that will be shown in blurb + var/blurb_text = "" + /// Number of chars from the `text` that will be displayed per interval. Defaults to 1 + var/chars_per_interval = 1 + /// The interval between chars rendering + var/interval = 1 DECISECONDS + /// Amount of time the blurb will be present on the screen. 0 means that blurb will dissappear immediately + var/hold_for = 0 + /// Amount of time the blurbs appering (alpha changing from 0 to 255). 0 means blurb is fully opaque from the start + var/appear_animation_duration = 0 + /// Amount of time the blurb takes to fade (alpha changing from 255 to 0). 0 means blurb is instantly removed from the screen after finished + var/fade_animation_duration = 0 + // Colours of the background + var/background_r = 0 + var/background_g = 0 + var/background_b = 0 + var/background_a = 0 + + +/obj/screen/text/blurb/proc/show_to(list/client/viewers) + if(!blurb_text || !viewers) + return + + if(islist(viewers)) + if(!length(viewers)) + return + + else + viewers = list(viewers) + + for(var/client/viewer as anything in viewers) + if(viewer) + viewer.screen += src + + appear() + print_text() + + if(hold_for) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/screen/text/blurb, hide_from), viewers), hold_for) + else + hide_from(viewers) + + +/obj/screen/text/blurb/proc/get_text_style() + PRIVATE_PROC(TRUE) + + return {"\ + font-family: [font_family], [initial(font_family)]; \ + -dm-text-outline: [text_outline_width] [text_outline_color]; \ + background-color: rgba([background_r], [background_g], [background_b], [background_a]); \ + font-size: [font_size]px; \ + text-align: [text_alignment]; \ + color: [text_color]; + "} + +/obj/screen/text/blurb/proc/hide_from(list/client/viewers) + PRIVATE_PROC(TRUE) + + fade() + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/screen/text/blurb, remove_from_viewers), viewers), fade_animation_duration) + +/obj/screen/text/blurb/proc/appear() + PRIVATE_PROC(TRUE) + + animate(src, alpha = 255, time = appear_animation_duration) + + +/obj/screen/text/blurb/proc/fade() + PRIVATE_PROC(TRUE) + + animate(src, alpha = 0, time = fade_animation_duration) + + +/obj/screen/text/blurb/proc/print_text() + PRIVATE_PROC(TRUE) + + var/text_style = get_text_style() + var/text_length = length_char(blurb_text) + for(var/segment_start = 1, segment_start <= text_length, segment_start += chars_per_interval) + var/segment_end = min(text_length + 1, segment_start + chars_per_interval) + maptext += get_formatted_text_segment(text_style, segment_start, segment_end) + sleep(interval) + +/obj/screen/text/blurb/proc/get_formatted_text_segment(style, segment_start, segment_end) + return "[copytext_char(blurb_text, segment_start, segment_end)]" + +/obj/screen/text/blurb/proc/remove_from_viewers(list/client/viewers) + PRIVATE_PROC(TRUE) + + for(var/client/viewer as anything in viewers) + if(viewer) + viewer.screen -= src + + qdel(src) + +/datum/controller/subsystem/jobs/proc/show_location_blurb(client/show_blurb_to, datum/mind/antag_check) + PRIVATE_PROC(TRUE) + + if(!show_blurb_to?.mob) + return + SEND_SOUND(show_blurb_to, sound('sound/machines/typewriter.ogg')) + + var/obj/screen/text/blurb/location_blurb = new() + if(antag_check.antag_datums) + for(var/datum/antagonist/role) + if(role.custom_blurb()) + location_blurb.blurb_text = uppertext(role.custom_blurb()) + location_blurb.text_color = role.blurb_text_color + location_blurb.text_outline_width = role.blurb_text_outline_width + location_blurb.background_r = role.blurb_r + location_blurb.background_g = role.blurb_g + location_blurb.background_b = role.blurb_b + location_blurb.background_a = role.blurb_a + location_blurb.font_family = role.blurb_font + break + location_blurb.blurb_text = uppertext("[GLOB.current_date_string], [station_time_timestamp()]\n[station_name()], [get_area_name(show_blurb_to.mob, TRUE)]") + + else + location_blurb.blurb_text = uppertext("[GLOB.current_date_string], [station_time_timestamp()]\n[station_name()], [get_area_name(show_blurb_to.mob, TRUE)]") + location_blurb.hold_for = 3 SECONDS + location_blurb.appear_animation_duration = 1 SECONDS + location_blurb.fade_animation_duration = 0.5 SECONDS + + location_blurb.show_to(show_blurb_to) + + +/datum/controller/subsystem/ticker/proc/show_server_restart_blurb(reason) + PRIVATE_PROC(TRUE) + + if(!length(GLOB.clients)) + return + + var/obj/screen/text/blurb/server_restart_blurb = new() + server_restart_blurb.text_color = COLOR_RED + server_restart_blurb.blurb_text = "Round is restarting...\n[reason]" + server_restart_blurb.hold_for = 90 SECONDS + server_restart_blurb.appear_animation_duration = 1 SECONDS + server_restart_blurb.fade_animation_duration = 0.5 SECONDS + + server_restart_blurb.show_to(GLOB.clients) diff --git a/code/modules/martial_arts/adminfu.dm b/code/modules/martial_arts/adminfu.dm index d17228f48275..2301a4d5218d 100644 --- a/code/modules/martial_arts/adminfu.dm +++ b/code/modules/martial_arts/adminfu.dm @@ -47,7 +47,7 @@ var/mob/living/carbon/human/H = user 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.") + to_chat(H, "You have learned the ancient martial art of the Admins.") used = TRUE desc = "It's completely blank." name = "empty scroll" diff --git a/code/modules/martial_arts/bearserk.dm b/code/modules/martial_arts/bearserk.dm new file mode 100644 index 000000000000..68d2454c0481 --- /dev/null +++ b/code/modules/martial_arts/bearserk.dm @@ -0,0 +1,78 @@ +/datum/martial_art/bearserk + weight = 8 // Only beaten out by Carp-Fu, because being able to go back to using guns when you want to is OP + name = "Rage of the Space Bear" + has_explaination_verb = TRUE + combos = list(/datum/martial_combo/bearserk/bear_jaws, /datum/martial_combo/bearserk/paw_slam, /datum/martial_combo/bearserk/smokey) + +/datum/martial_art/bearserk/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + MARTIAL_ARTS_ACT_CHECK + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + var/atk_verb = pick("punches", "claws", "hits", "mauls") + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + D.visible_message("[A] [atk_verb] [D]!", "[A] [atk_verb] you!") + D.apply_damage(10, BRUTE, A.zone_selected) + if(isliving(D) && D.stat != DEAD) + A.adjustStaminaLoss(-20) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Punched", ATKLOG_ALL) + return TRUE + +/datum/martial_art/bearserk/explaination_header(user) + to_chat(user, "Quelling the ursine rage for a moment, you ponder on how a Space Bear fights...") + +/datum/martial_art/bearserk/explaination_footer(user) + to_chat(user, "All combos recover stamina and grant a stamina resistance buff, so get aggressive!") + +/datum/martial_art/bearserk/teach(mob/living/carbon/human/H, make_temporary = 0) + ..() + if(HAS_TRAIT(H, TRAIT_PACIFISM)) + to_chat(H, "You feel otherworldly rage flicker briefly in your mind, before you reject such violent thoughts and calm down. \ + At the very least, the weighty pelt still protects your body.") + return + to_chat(H, "Like a berserker of old, you harness the Rage of the Space Bear!") + to_chat(H, "The occultic, ursine might and anger of Foh'Sie and Smoh'Kie flows through your body, making you far more dangerous in unarmed combat. \ + You can learn more about this newfound strength in the Recall Teachings verb in the martial arts tab.") + +/datum/martial_art/bearserk/remove(mob/living/carbon/human/H) + ..() + to_chat(H, "The ancient fury of bears leaves your mind...") + +// The Pelt + +/obj/item/clothing/head/bearpelt/bearserk + strip_delay = 80 + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, RAD = 0, FIRE = INFINITY, ACID = 75) + resistance_flags = FIRE_PROOF + body_parts_covered = UPPER_TORSO|HEAD|ARMS + var/datum/martial_art/bearserk/style + +/obj/item/clothing/head/bearpelt/bearserk/Initialize() + . = ..() + style = new() + +/obj/item/clothing/head/bearpelt/bearserk/equipped(mob/user, slot) + ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(slot == SLOT_HUD_HEAD) + style.teach(H, TRUE) + H.faction |= "russian" // Russian Hardbass Begins + H.physiology.stun_mod *= 0.80 + ADD_TRAIT(H, TRAIT_RESISTHEAT, "bearserk") + +/obj/item/clothing/head/bearpelt/bearserk/dropped(mob/user, datum/reagent/R) + ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_HUD_HEAD) == src) + style.remove(H) + H.faction -= "russian" // Hardbass stops + H.physiology.stun_mod /= 0.80 + REMOVE_TRAIT (H, TRAIT_RESISTHEAT, "bearserk") + +/obj/item/clothing/head/bearpelt/bearserk/examine(mob/user) + . = ..() + if(isAntag(user)) + . += "Wearing this armored pelt grants you the strength of the space bear. \ + It also makes wild bears and Russians neutral towards you." diff --git a/code/modules/martial_arts/combos/bearserk/bear_jaws.dm b/code/modules/martial_arts/combos/bearserk/bear_jaws.dm new file mode 100644 index 000000000000..29ab60046252 --- /dev/null +++ b/code/modules/martial_arts/combos/bearserk/bear_jaws.dm @@ -0,0 +1,26 @@ +/datum/martial_combo/bearserk/bear_jaws + name = "Bear Jaws" + steps = list(MARTIAL_COMBO_STEP_HARM, MARTIAL_COMBO_STEP_GRAB) + explaination_text = "Bite your opponent like a true lunatic, with even more savagery against knocked down targets." + +/datum/martial_combo/bearserk/bear_jaws/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA) + user.do_attack_animation(target, ATTACK_EFFECT_BITE) + playsound(get_turf(target), 'sound/weapons/bite.ogg', 25, vary = TRUE, extrarange = -1) + if(IS_HORIZONTAL(target)) + target.visible_message("[user] leaps onto [target] and bites them!", + "[user] leaps onto you and bites you like a real savage!") + target.apply_damage(20, BRUTE, user.zone_selected, sharp = TRUE) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-60) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [MA] : Bear Jaws", ATKLOG_ALL) + return MARTIAL_COMBO_DONE + var/atk_verb = pick("bites", "gnaws", "tears at") + target.visible_message("[user] [atk_verb] [target]!", + "[user] [atk_verb] you!") + target.apply_damage(10, BRUTE, user.zone_selected, sharp = TRUE) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-40) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [MA] : Bear Jaws", ATKLOG_ALL) + return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/bearserk/paw_slam.dm b/code/modules/martial_arts/combos/bearserk/paw_slam.dm new file mode 100644 index 000000000000..7205a693e0ba --- /dev/null +++ b/code/modules/martial_arts/combos/bearserk/paw_slam.dm @@ -0,0 +1,30 @@ +/datum/martial_combo/bearserk/paw_slam + name = "Paw Slam" + steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_HARM) + explaination_text = "Slap an opponent with a mighty paw, knocking them down. Beats down harder on already knocked down opponents." + +/datum/martial_combo/bearserk/paw_slam/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA) + if(IS_HORIZONTAL(target)) + user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) + target.visible_message("[user] pounds down on [target] with both fists!", \ + "[user] pounds down on you with both fists!") + playsound(get_turf(target), 'sound/weapons/punch1.ogg', 25, vary = TRUE, extrarange = -1) + target.apply_damage(20, BRUTE, user.zone_selected) + target.Slowed(2 SECONDS) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-40) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [src] : Paw Slam", ATKLOG_ALL) + return MARTIAL_COMBO_DONE + user.do_attack_animation(target, ATTACK_EFFECT_DISARM) + target.visible_message("[user] strikes [target] to the ground with a mighty slap!", \ + "[user] slaps you so hard, you fall over!") + playsound(get_turf(user), 'sound/weapons/slap.ogg', 25, vary = TRUE, extrarange = -1) + target.apply_damage(10, BRUTE, user.zone_selected) + target.KnockDown(4 SECONDS) + target.Slowed(6 SECONDS) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-40) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [src] : Paw Slam", ATKLOG_ALL) + return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/bearserk/smokey.dm b/code/modules/martial_arts/combos/bearserk/smokey.dm new file mode 100644 index 000000000000..6af677e470e3 --- /dev/null +++ b/code/modules/martial_arts/combos/bearserk/smokey.dm @@ -0,0 +1,20 @@ +/datum/martial_combo/bearserk/smokey + name = "Smokey" + steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_DISARM) + explaination_text = "Mentally channel the occultic fury of Smoh'Kie to set your opponent aflame!" + +/datum/martial_combo/bearserk/smokey/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA) + if(!isliving(target)) + return + user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) + target.visible_message("[user] sets [target] on fire with otherwordly powers!", \ + "As [user] punches you with a searing fist, these words echo in your mind; \"remember... only YOU can prevent forest fires!\"") + target.apply_damage(10, BURN, user.zone_selected) + playsound(get_turf(user), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + target.adjust_fire_stacks(1.5) + target.IgniteMob() + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-40) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [src] : Smokey", ATKLOG_ALL) + return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/cqc/consecutive.dm b/code/modules/martial_arts/combos/cqc/consecutive.dm index bca508b616f5..fc7efc897f80 100644 --- a/code/modules/martial_arts/combos/cqc/consecutive.dm +++ b/code/modules/martial_arts/combos/cqc/consecutive.dm @@ -8,7 +8,7 @@ target.visible_message("[user] strikes [target]'s abdomen, neck and back consecutively", \ "[user] strikes your abdomen, neck and back consecutively!") playsound(get_turf(target), 'sound/weapons/cqchit2.ogg', 50, 1, -1) - target.adjustStaminaLoss(70) + target.apply_damage(70, STAMINA) target.apply_damage(20, BRUTE) add_attack_logs(user, target, "Melee attacked with martial-art [src] : Consecutive", ATKLOG_ALL) return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/cqc/kick.dm b/code/modules/martial_arts/combos/cqc/kick.dm index 44e003216f69..d94023cc5c94 100644 --- a/code/modules/martial_arts/combos/cqc/kick.dm +++ b/code/modules/martial_arts/combos/cqc/kick.dm @@ -21,7 +21,7 @@ playsound(get_turf(user), 'sound/weapons/genhit1.ogg', 25, 1, -1) var/atom/throw_target = get_edge_target_turf(target, user.dir) target.throw_at(throw_target, 1, 8, user) - target.adjustStaminaLoss(40) + target.apply_damage(40, STAMINA) target.adjustBrainLoss(10) target.Silence(3 SECONDS) add_attack_logs(user, target, "Kicked in the head with martial-art [src] : Kick", ATKLOG_ALL) diff --git a/code/modules/martial_arts/combos/cqc/pressure.dm b/code/modules/martial_arts/combos/cqc/pressure.dm index 96b482b22abb..90de2f1be93a 100644 --- a/code/modules/martial_arts/combos/cqc/pressure.dm +++ b/code/modules/martial_arts/combos/cqc/pressure.dm @@ -8,7 +8,7 @@ var/obj/item/I = target.get_active_hand() if(I && target.drop_item()) user.put_in_hands(I) - target.adjustStaminaLoss(40) + target.apply_damage(40, STAMINA) playsound(get_turf(user), 'sound/weapons/cqchit1.ogg', 5, 1, -1) add_attack_logs(user, target, "Melee attacked with martial-art [src] : Pressure", ATKLOG_ALL) return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/cqc/restrain.dm b/code/modules/martial_arts/combos/cqc/restrain.dm index 944c0cac45d9..c73603cc0578 100644 --- a/code/modules/martial_arts/combos/cqc/restrain.dm +++ b/code/modules/martial_arts/combos/cqc/restrain.dm @@ -18,11 +18,11 @@ switch(stam_damage) if(0 to 40) target.Immobilize(4 SECONDS) - target.adjustStaminaLoss(35) + target.apply_damage(35, STAMINA) if(41 to 80) target.Stun(6 SECONDS) if(81 to 120) - target.adjustStaminaLoss(40) + target.apply_damage(40, STAMINA) CQC.restraining = TRUE addtimer(CALLBACK(CQC, TYPE_PROC_REF(/datum/martial_art/cqc, drop_restraining)), 5 SECONDS, TIMER_UNIQUE) diff --git a/code/modules/martial_arts/combos/krav_maga/lung_punch.dm b/code/modules/martial_arts/combos/krav_maga/lung_punch.dm index ba1bfd465a0b..9ed06508ca87 100644 --- a/code/modules/martial_arts/combos/krav_maga/lung_punch.dm +++ b/code/modules/martial_arts/combos/krav_maga/lung_punch.dm @@ -8,7 +8,7 @@ "[user] slams your chest! You can't breathe!") playsound(get_turf(user), 'sound/effects/hit_punch.ogg', 50, 1, -1) target.AdjustLoseBreath(10 SECONDS) - target.adjustStaminaLoss(30) + target.apply_damage(30, STAMINA) add_attack_logs(user, target, "Melee attacked with martial-art [src] : Lung Punch", ATKLOG_ALL) user.mind.martial_art.in_stance = FALSE return MARTIAL_COMBO_DONE_CLEAR_COMBOS diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm index 1c59f19ea12b..7b018bbca566 100644 --- a/code/modules/martial_arts/krav_maga.dm +++ b/code/modules/martial_arts/krav_maga.dm @@ -108,15 +108,15 @@ if(IS_HORIZONTAL(D)) bonus_damage += 5 picked_hit_type = "stomps on" - D.apply_damage(bonus_damage, BRUTE) - if(picked_hit_type == "kicks" || picked_hit_type == "stomps") + if(picked_hit_type == "kicks" || IS_HORIZONTAL(D)) A.do_attack_animation(D, ATTACK_EFFECT_KICK) - playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1) + playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) else A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, 1, -1) + playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, TRUE, -1) D.visible_message("[A] [picked_hit_type] [D]!", \ "[A] [picked_hit_type] you!") + D.apply_damage(bonus_damage, BRUTE) return TRUE /datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -132,7 +132,7 @@ else D.visible_message("[A] attempted to disarm [D]!", \ "[A] attempted to disarm [D]!") - playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + playsound(D, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) return TRUE //Krav Maga Gloves diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 10819a351ecb..17d04d3232ff 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -97,19 +97,19 @@ if(MARTIAL_COMBO_FAIL) current_combos -= MC if(MARTIAL_COMBO_DONE_NO_CLEAR) - . = TRUE + . = MARTIAL_ARTS_ACT_SUCCESS current_combos -= MC if(MARTIAL_COMBO_DONE) reset_combos() - return TRUE + return MARTIAL_ARTS_ACT_SUCCESS if(MARTIAL_COMBO_DONE_BASIC_HIT) basic_hit(user, target) reset_combos() - return TRUE + return MARTIAL_ARTS_ACT_SUCCESS if(MARTIAL_COMBO_DONE_CLEAR_COMBOS) combos.Cut() reset_combos() - return TRUE + return MARTIAL_ARTS_ACT_SUCCESS if(!LAZYLEN(current_combos)) reset_combos() if(HAS_COMBOS && could_start_new_combo) @@ -325,7 +325,7 @@ var/mob/living/carbon/human/H = user 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.") + to_chat(H, "You have learned the ancient martial art of Plasma Fist.") used = TRUE desc = "It's completely blank." name = "empty scroll" @@ -375,7 +375,7 @@ to_chat(user, "The mere thought of combat, let alone CQC, makes your head spin!") return - to_chat(user, "You remember the basics of CQC.") + to_chat(user, "You remember the basics of CQC.") var/datum/martial_art/cqc/CQC = new(null) CQC.teach(user) user.drop_item() @@ -444,7 +444,7 @@ H.visible_message("[pick(fluffmessages)]", \ "[pick(fluffmessages)]") playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1) - H.adjustStaminaLoss(rand(13,20)) + H.apply_damage(rand(13,20), STAMINA) if(prob(10)) H.visible_message("[H] collapses!", \ "Your legs give out!") diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm index 8eb960c0e884..7178f879a793 100644 --- a/code/modules/martial_arts/mimejutsu.dm +++ b/code/modules/martial_arts/mimejutsu.dm @@ -27,7 +27,7 @@ var/mob/living/carbon/human/H = user var/datum/martial_art/mimejutsu/F = new/datum/martial_art/mimejutsu(null) F.teach(H) - to_chat(H, "You have learned the ancient martial art of mimes.") + to_chat(H, "You have learned the ancient martial art of mimes.") used = TRUE desc = "It used to have something stapled to it..the staple is still there." name = "beret with staple" diff --git a/code/modules/martial_arts/muscle_implant.dm b/code/modules/martial_arts/muscle_implant.dm index a048708ddbf4..bae6f2d66092 100644 --- a/code/modules/martial_arts/muscle_implant.dm +++ b/code/modules/martial_arts/muscle_implant.dm @@ -12,7 +12,7 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, "You don't want to hurt [target]!") return FALSE - var/picked_hit_type = pick("punch", "smash", "kick") + var/picked_hit_type = pick("punch", "smash") if(ishuman(target) && target.check_shields(user, punch_damage, "[user]'s' [picked_hit_type]")) user.do_attack_animation(target) playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index ea5e8488e62f..d3af7191459c 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -1,6 +1,6 @@ //Used by the gang of the same name. Uses combos. Basic attacks bypass armor and never miss /datum/martial_art/the_sleeping_carp - weight = 8 + weight = 9 name = "The Sleeping Carp" deflection_chance = 100 reroute_deflection = TRUE diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 022981c28720..1246798c39f7 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -23,9 +23,9 @@ var/loot = rand(1,100) //100 different crates with varying chances of spawning switch(loot) if(1 to 5) //5% chance - new /obj/item/reagent_containers/food/drinks/bottle/rum(src) - new /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus(src) - new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src) + new /obj/item/reagent_containers/drinks/bottle/rum(src) + new /obj/item/food/snacks/grown/ambrosia/deus(src) + new /obj/item/reagent_containers/drinks/bottle/whiskey(src) new /obj/item/lighter(src) if(6 to 10) new /obj/item/bedsheet(src) @@ -113,7 +113,7 @@ new /obj/item/bikehorn(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/reagent_containers/spray/waterflower(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) if(89) //1% chance new /obj/item/weed_extract(src) if(90) @@ -135,7 +135,7 @@ new /obj/item/clothing/head/beret(src) new /obj/item/clothing/suit/suspenders(src) new /obj/item/toy/crayon/mime(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(src) if(96) new /obj/item/hand_tele(src) if(97) diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm index 8a392486cce3..821a77b0c9a2 100644 --- a/code/modules/mining/equipment/lazarus_injector.dm +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -53,6 +53,7 @@ if(!malfunctioning) malfunctioning = 1 to_chat(user, "You override [src]'s safety protocols.") + return TRUE /obj/item/lazarus_injector/emp_act() if(!malfunctioning) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index b9c3b8e5acd8..57f32f4dae8b 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -59,10 +59,10 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( transfer_fingerprints_to(M) /obj/item/stack/marker_beacon/AltClick(mob/living/user) - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", GLOB.marker_beacon_colors) - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return if(input_color) picked_color = input_color @@ -135,10 +135,10 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/structure/marker_beacon/AltClick(mob/living/user) ..() - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", GLOB.marker_beacon_colors) - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return if(input_color) picked_color = input_color diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index b7f65bf4fdc6..25b563aa096a 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -21,8 +21,7 @@ if(!emagged) to_chat(usr, "You short out the safeties, allowing it to be placed in the station sector.") emagged = TRUE - return - + return TRUE to_chat(usr, "The safeties are already shorted out!") /obj/item/survivalcapsule/proc/get_template() @@ -42,7 +41,7 @@ /obj/item/survivalcapsule/attack_self() // Can't grab when capsule is New() because templates aren't loaded then get_template() - if(used == FALSE) + if(!used) loc.visible_message("[src] begins to shake. Stand back!") used = TRUE sleep(50) @@ -225,7 +224,7 @@ return for(var/i in 1 to 5) - var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src) + var/obj/item/food/snacks/warmdonkpocket_weak/W = new(src) load(W) if(prob(50)) var/obj/item/storage/bag/dice/D = new(src) diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 451353bfc28f..17d1eb27cdb4 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -63,8 +63,9 @@ emagged = TRUE to_chat(user, "You emag [src].") var/turf/T = get_turf(src) - do_sparks(5, 0, T) + do_sparks(5, FALSE, T) playsound(T, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return TRUE /obj/effect/portal/jaunt_tunnel name = "jaunt tunnel" @@ -122,7 +123,9 @@ areaindex[tmpname] = 1 L[tmpname] = R - var/desc = input("Please select a location to target.", "Flare Target Interface") in L + var/desc = tgui_input_list(user, "Please select a location to target.", "Flare Target Interface", L) + if(!desc) + return destination = L[desc] /obj/item/wormhole_jaunter/contractor/attack_self(mob/user) // message is later down diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index cc1eead3e152..7a79f1b96436 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -70,10 +70,13 @@ /obj/machinery/mineral/labor_prisoner_shuttle_console/attack_ghost(mob/user) attack_hand(user) -/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PrisonerShuttleConsole", name, 315, 150, master_ui, state) + ui = new(user, src, "PrisonerShuttleConsole", name) ui.open() /obj/machinery/mineral/labor_prisoner_shuttle_console/ui_data(mob/user) @@ -153,6 +156,7 @@ if(!emagged) emagged = TRUE to_chat(user, "PZZTTPFFFT") + return TRUE /**********************Point Lookup Console**************************/ /obj/machinery/mineral/labor_points_checker diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 7a9d08733e32..668442ccf5fa 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -9,7 +9,7 @@ var/harvested_name = "shortened mushrooms" var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large." var/needs_sharp_harvest = TRUE - var/harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings + var/harvest = /obj/item/food/snacks/grown/ash_flora/shavings var/harvest_amount_low = 1 var/harvest_amount_high = 3 var/harvest_time = 60 @@ -84,7 +84,7 @@ desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures." harvested_name = "leafless mushrooms" harvested_desc = "A bunch of formerly-leafed mushrooms, with their sporangiums exposed. Scandalous?" - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf + harvest = /obj/item/food/snacks/grown/ash_flora/mushroom_leaf needs_sharp_harvest = FALSE harvest_amount_high = 4 harvest_time = 20 @@ -100,7 +100,7 @@ desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems." harvested_name = "small mushrooms" harvested_desc = "Several small mushrooms near the stumps of what likely were larger mushrooms." - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap + harvest = /obj/item/food/snacks/grown/ash_flora/mushroom_cap harvest_amount_high = 4 harvest_time = 50 harvest_message_low = "You slice the cap off of a mushroom." @@ -117,7 +117,7 @@ light_power = 2.1 harvested_name = "tiny mushrooms" harvested_desc = "A few tiny mushrooms around larger stumps. You can already see them growing back." - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem + harvest = /obj/item/food/snacks/grown/ash_flora/mushroom_stem harvest_amount_high = 4 harvest_time = 40 harvest_message_low = "You pick and slice the cap off of a mushroom, leaving the stem." @@ -132,7 +132,7 @@ desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash." harvested_name = "cacti" harvested_desc = "A bunch of prickly cacti. You can see fruits slowly growing beneath the covering of ash." - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit + harvest = /obj/item/food/snacks/grown/ash_flora/cactus_fruit needs_sharp_harvest = FALSE harvest_amount_high = 2 harvest_time = 10 @@ -181,7 +181,7 @@ . = ..() icon_state = "basalt[rand(1, 4)]" -/obj/item/reagent_containers/food/snacks/grown/ash_flora +/obj/item/food/snacks/grown/ash_flora name = "mushroom shavings" desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl." icon = 'icons/obj/lavaland/ash_flora.dmi' @@ -192,35 +192,35 @@ seed = /obj/item/seeds/lavaland/polypore wine_power = 0.2 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize(mapload) +/obj/item/food/snacks/grown/ash_flora/Initialize(mapload) . = ..() pixel_x = rand(-4, 4) pixel_y = rand(-4, 4) -/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings //for actual crafting +/obj/item/food/snacks/grown/ash_flora/shavings //for actual crafting -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf +/obj/item/food/snacks/grown/ash_flora/mushroom_leaf name = "mushroom leaf" desc = "A leaf, from a mushroom." icon_state = "mushroom_leaf" seed = /obj/item/seeds/lavaland/porcini wine_power = 0.4 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap +/obj/item/food/snacks/grown/ash_flora/mushroom_cap name = "mushroom cap" desc = "The cap of a large mushroom." icon_state = "mushroom_cap" seed = /obj/item/seeds/lavaland/inocybe wine_power = 0.7 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem +/obj/item/food/snacks/grown/ash_flora/mushroom_stem name = "mushroom stem" desc = "A long mushroom stem. It's slightly glowing." icon_state = "mushroom_stem" seed = /obj/item/seeds/lavaland/ember wine_power = 0.6 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit +/obj/item/food/snacks/grown/ash_flora/cactus_fruit name = "cactus fruit" desc = "A cactus fruit covered in a thick, reddish skin. And some ash." icon_state = "cactus_fruit" @@ -249,7 +249,7 @@ icon_state = "seed-cactus" species = "cactus" plantname = "Fruiting Cactus" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit + product = /obj/item/food/snacks/grown/ash_flora/cactus_fruit genes = list(/datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' growthstages = 2 @@ -261,7 +261,7 @@ icon_state = "mycelium-polypore" species = "polypore" plantname = "Polypore Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings + product = /obj/item/food/snacks/grown/ash_flora/shavings genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("sugar" = 0.06, "ethanol" = 0.04, "stabilizing_agent" = 0.06, "minttoxin" = 0.02) @@ -272,7 +272,7 @@ icon_state = "mycelium-porcini" species = "porcini" plantname = "Porcini Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf + product = /obj/item/food/snacks/grown/ash_flora/mushroom_leaf genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("nutriment" = 0.06, "vitfro" = 0.04, "nicotine" = 0.04) @@ -284,7 +284,7 @@ icon_state = "mycelium-inocybe" species = "inocybe" plantname = "Inocybe Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap + product = /obj/item/food/snacks/grown/ash_flora/mushroom_cap genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("lsd" = 0.04, "entpoly" = 0.08, "psilocybin" = 0.04) @@ -295,7 +295,7 @@ icon_state = "mycelium-ember" species = "ember" plantname = "Embershroom Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem + product = /obj/item/food/snacks/grown/ash_flora/mushroom_stem genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/glow, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("tinlux" = 0.04, "vitamin" = 0.02, "space_drugs" = 0.02) @@ -305,12 +305,12 @@ //what you can craft with these things /datum/crafting_recipe/mushroom_bowl name = "Mushroom Bowl" - result = list(/obj/item/reagent_containers/food/drinks/mushroom_bowl) - reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) + result = list(/obj/item/reagent_containers/drinks/mushroom_bowl) + reqs = list(/obj/item/food/snacks/grown/ash_flora/shavings = 5) time = 30 category = CAT_PRIMAL -/obj/item/reagent_containers/food/drinks/mushroom_bowl +/obj/item/reagent_containers/drinks/mushroom_bowl name = "mushroom bowl" desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point." icon = 'icons/obj/lavaland/ash_flora.dmi' diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index 102a38f71ffe..1a1bbd268bd3 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -224,8 +224,8 @@ if(!user.check_ahud_rejoin_eligibility()) to_chat(user, "Upon using the antagHUD you forfeited the ability to join the round.") return - var/be_helper = alert("Become a Lightgeist? (Warning, You can no longer be cloned!)",,"Yes","No") - if(be_helper == "No") + var/be_helper = tgui_alert(user, "Become a Lightgeist? (Warning, You can no longer be cloned!)", "Respawn", list("Yes","No")) + if(be_helper != "Yes") return if(!loc || QDELETED(src) || QDELETED(user)) if(user) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 12459079fe90..5c643f07398c 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -93,32 +93,6 @@ new /obj/effect/decal/cleanable/ash(get_turf(user)) qdel(src) -//Jacob's ladder - -/obj/item/jacobs_ladder - name = "jacob's ladder" - desc = "A celestial ladder that violates the laws of physics." - icon = 'icons/obj/structures.dmi' - icon_state = "ladder00" - -/obj/item/jacobs_ladder/attack_self(mob/user) - var/turf/T = get_turf(src) - var/ladder_x = T.x - var/ladder_y = T.y - to_chat(user, "You unfold the ladder. It extends much farther than you were expecting.") - var/last_ladder = null - for(var/i in 1 to world.maxz) - if(is_admin_level(i) || is_away_level(i)) - continue - var/turf/T2 = locate(ladder_x, ladder_y, i) - last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder) - qdel(src) - -// Inherit from unbreakable but don't set ID, to suppress the default Z linkage -/obj/structure/ladder/unbreakable/jacob - name = "jacob's ladder" - desc = "An indestructible celestial ladder that violates the laws of physics." - //Boat /obj/vehicle/lavaboat diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 7d221a5f6410..bf9bfc53edf2 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -63,7 +63,7 @@ if(20) new /obj/item/grenade/clusterbuster/inferno(src) if(21) - new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src) + new /obj/item/reagent_containers/drinks/bottle/holywater/hell(src) if(22) new /obj/item/spellbook/oneuse/summonitem(src) if(23) @@ -355,7 +355,7 @@ /obj/item/rod_of_asclepius/dropped(mob/user, silent) ..() - if(!activated) + if(!activated || QDELETED(src)) return addtimer(CALLBACK(src, PROC_REF(try_attach_to_owner)), 0) // Do this once the drop call stack is done. The holding limb might be getting removed @@ -670,7 +670,7 @@ to_chat(target, "[user] shatters [src] over you!") target.apply_damage((ishostile(target) ? 75 : 35), BRUTE, BODY_ZONE_CHEST, TRUE) target.KnockDown(5 SECONDS) - target.adjustStaminaLoss(60) //Takes 4 hits to do, breaks your weapon. Perfectly fine. + target.apply_damage(60, STAMINA) //Takes 4 hits to do, breaks your weapon. Perfectly fine. user.do_attack_animation(target, ATTACK_EFFECT_SMASH) playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) if(ishuman(user)) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 41d77a681bbe..81faa38130b0 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -328,12 +328,14 @@ return FALSE var/stored = get_num_smeltable_alloy(D) var/desired = min(amount, stored, MAX_STACK_SIZE) + if(!desired) + return FALSE materials.use_amount(D.materials, desired) // Spawn the alloy var/result = new D.build_path(src) if(istype(result, /obj/item/stack/sheet)) var/obj/item/stack/sheet/mineral/A = result - A.amount = amount + A.amount = desired unload_mineral(A) else unload_mineral(result) @@ -367,16 +369,22 @@ return FALSE add_fingerprint(usr) -/obj/machinery/mineral/ore_redemption/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - var/datum/asset/materials_assets = get_asset_datum(/datum/asset/simple/materials) - materials_assets.send(user) +/obj/machinery/mineral/ore_redemption/ui_state(mob/user) + return GLOB.default_state - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/mineral/ore_redemption/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "OreRedemption", name, 500, 600) + ui = new(user, src, "OreRedemption", name) ui.open() ui.set_autoupdate(FALSE) +/obj/machinery/mineral/ore_redemption/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/materials), + get_asset_datum(/datum/asset/spritesheet/alloys) + ) + /** * Smelts the given stack of ore. * @@ -390,7 +398,11 @@ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/amount_compatible = materials.get_item_material_amount(O) if(amount_compatible) - materials.insert_item(O, sheet_per_ore) + // Prevents duping + if(O.refined_type) + materials.insert_item(O, sheet_per_ore) + else + materials.insert_item(O, 1) // Delete the stack ore_buffer -= O qdel(O) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index f96ea785af88..2c942dc578ba 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -83,7 +83,7 @@ EQUIPMENT("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400), ) prize_list["Miscellaneous"] = list( - EQUIPMENT("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 100), + EQUIPMENT("Absinthe", /obj/item/reagent_containers/drinks/bottle/absinthe/premium, 100), EQUIPMENT("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), EQUIPMENT("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150), EQUIPMENT("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500), @@ -91,7 +91,7 @@ EQUIPMENT("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), EQUIPMENT("Soap", /obj/item/soap/nanotrasen, 200), EQUIPMENT("Space Cash", /obj/item/stack/spacecash/c200, 2000), - EQUIPMENT("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100), + EQUIPMENT("Whiskey", /obj/item/reagent_containers/drinks/bottle/whiskey, 100), EQUIPMENT("HRD-MDE Project Box", /obj/item/storage/box/hardmode_box, 3500) //I want miners have to pay a lot to get this, but be set once they do. ) prize_list["Extra"] = list() // Used in child vendors @@ -158,19 +158,20 @@ dirty_items = TRUE return ..() -/obj/machinery/mineral/equipment_vendor/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) +/obj/machinery/mineral/equipment_vendor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user, datum/tgui/ui = null) // Update static data if need be if(dirty_items) if(!ui) - ui = SStgui.get_open_ui(user, src, ui_key) - if(ui) // OK so ui?. somehow breaks the implied src so this is needed - ui.initial_static_data = ui_static_data(user) + ui = SStgui.get_open_ui(user, src) dirty_items = FALSE // Open the window - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MiningVendor", name, 400, 450) + ui = new(user, src, "MiningVendor", name) ui.open() ui.set_autoupdate(FALSE) @@ -306,7 +307,7 @@ EQUIPMENT("Extra ID", /obj/item/card/id/golem, 250), EQUIPMENT("Science Backpack", /obj/item/storage/backpack/science, 250), EQUIPMENT("Full Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250), - EQUIPMENT("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250), + EQUIPMENT("Monkey Cube", /obj/item/food/snacks/monkeycube, 250), EQUIPMENT("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), EQUIPMENT("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), EQUIPMENT("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000), @@ -335,16 +336,16 @@ prize_list = list() prize_list["Scum"] += list( EQUIPMENT("Trauma Kit", /obj/item/stack/medical/bruise_pack/advanced, 150), - EQUIPMENT("Whisky", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100), - EQUIPMENT("Beer", /obj/item/reagent_containers/food/drinks/cans/beer, 50), - EQUIPMENT("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 250), + EQUIPMENT("Whisky", /obj/item/reagent_containers/drinks/bottle/whiskey, 100), + EQUIPMENT("Beer", /obj/item/reagent_containers/drinks/cans/beer, 50), + EQUIPMENT("Absinthe", /obj/item/reagent_containers/drinks/bottle/absinthe/premium, 250), EQUIPMENT("Cigarettes", /obj/item/storage/fancy/cigarettes, 100), EQUIPMENT("Medical Marijuana", /obj/item/storage/fancy/cigarettes/cigpack_med, 250), EQUIPMENT("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150), EQUIPMENT("Box of matches", /obj/item/storage/fancy/matches, 50), - EQUIPMENT("Cheeseburger", /obj/item/reagent_containers/food/snacks/burger/cheese, 150), - EQUIPMENT("Big Burger", /obj/item/reagent_containers/food/snacks/burger/bigbite, 250), - EQUIPMENT("Recycled Prisoner", /obj/item/reagent_containers/food/snacks/soylentgreen, 500), + EQUIPMENT("Cheeseburger", /obj/item/food/snacks/burger/cheese, 150), + EQUIPMENT("Big Burger", /obj/item/food/snacks/burger/bigbite, 250), + EQUIPMENT("Recycled Prisoner", /obj/item/food/snacks/soylentgreen, 500), EQUIPMENT("Crayons", /obj/item/storage/fancy/crayons, 350), EQUIPMENT("Plushie", /obj/random/plushie, 750), EQUIPMENT("Dnd set", /obj/item/storage/box/characters, 500), diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 4a199cd11b35..8d1bfef8a8ce 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ visible_message("[C]'s glasses block the sand!") return C.EyeBlurry(12 SECONDS) - C.adjustStaminaLoss(15)//the pain from your eyes burning does stamina damage + C.apply_damage(15, STAMINA)//the pain from your eyes burning does stamina damage C.AdjustConfused(10 SECONDS) to_chat(C, "[src] gets into your eyes! The pain, it burns!") qdel(src) @@ -354,6 +354,10 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ if(cmineral && name_by_cmineral) name = "[cmineral] coin" +/obj/item/coin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/surgery_initiator/robo) + /obj/item/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" @@ -380,15 +384,47 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/coin/plasma cmineral = "plasma" + desc = "You really shouldn't keep this in the same pocket as a lighter." icon_state = "coin_plasma_heads" materials = list(MAT_PLASMA = 400) credits = 80 +/obj/item/coin/plasma/bullet_act(obj/item/projectile/P) + if(!QDELETED(src) && !P.nodamage && (P.damage_type == BURN)) + log_and_set_aflame(P.firer, P) + +/obj/item/coin/plasma/attackby(obj/item/I, mob/living/user, params) + if(!I.get_heat()) + return ..() + log_and_set_aflame(user, I) + +/obj/item/coin/plasma/proc/log_and_set_aflame(mob/user, obj/item/I) + var/turf/T = get_turf(src) + message_admins("Plasma coin ignited by [key_name_admin(user)]([ADMIN_QUE(user, "?")]) ([ADMIN_FLW(user, "FLW")]) in ([COORD(T)] - [ADMIN_JMP(T)]") + log_game("Plasma coin ignited by [key_name(user)] in [COORD(T)]") + investigate_log("was ignited by [key_name(user)]", "atmos") + user.create_log(MISC_LOG, "Plasma coin ignited using [I]", src) + fire_act() + +/obj/item/coin/plasma/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) + ..() + atmos_spawn_air(LINDA_SPAWN_HEAT | LINDA_SPAWN_TOXINS, 5) // 2 is the "correct" ammount, but its super lame. Im sure this wont have ramifications on the plasma market. + qdel(src) + /obj/item/coin/uranium cmineral = "uranium" + desc = "You probably shouldn't keep this in your front pocket." icon_state = "coin_uranium_heads" materials = list(MAT_URANIUM = 400) credits = 160 + COOLDOWN_DECLARE(radiation_cooldown) + +/obj/item/coin/uranium/attack_self(mob/user) + ..() + if(!COOLDOWN_FINISHED(src, radiation_cooldown)) + return + radiation_pulse(src, 50) + COOLDOWN_START(src, radiation_cooldown, 1.5 SECONDS) /obj/item/coin/clown cmineral = "bananium" @@ -396,6 +432,10 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ materials = list(MAT_BANANIUM = 400) credits = 600 //makes the clown cri +/obj/item/coin/clown/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, src, 4 SECONDS, 100, 0, FALSE) + /obj/item/coin/mime cmineral = "tranquillite" icon_state = "coin_tranquillite_heads" @@ -460,7 +500,9 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ to_chat(user, "You detach the string from the coin.") else ..() -/obj/item/coin/welder_act(mob/user, obj/item/I) +/obj/item/coin/wirecutter_act(mob/user, obj/item/I) + if(string_attached) + return . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return @@ -471,9 +513,10 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ "uranium" = /obj/item/clothing/gloves/ring/uranium) var/typekey = typelist[cmineral] if(ispath(typekey)) - to_chat(user, "You make [src] into a ring.") - new typekey(get_turf(loc)) + to_chat(user, "You carefully cut a hole into [src] turning it into a ring.") + var/obj/item/clothing/gloves/ring/ring = new typekey() qdel(src) + user.put_in_hands(ring) /obj/item/coin/attack_self(mob/user as mob) @@ -482,11 +525,14 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ cooldown = world.time flick("coin_[cmineral]_flip", src) icon_state = "coin_[cmineral]_[coinflip]" - playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1) + var/blind_sound + if(cmineral != "tranquillite") + playsound(user.loc, 'sound/items/coinflip.ogg', 50, TRUE) + blind_sound = "You hear the clattering of loose change." if(do_after(user, 15, target = src)) user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \ "You flip [src]. It lands on [coinflip].", \ - "You hear the clattering of loose change.") + blind_sound) #undef GIBTONITE_QUALITY_LOW #undef GIBTONITE_QUALITY_MEDIUM diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm index e0970661ce3a..e832baa543ee 100644 --- a/code/modules/mob/dead/observer/observer_base.dm +++ b/code/modules/mob/dead/observer/observer_base.dm @@ -174,7 +174,7 @@ Works together with spawning an observer, noted above. C.images += target.hud_list[SPECIALROLE_HUD] return 1 -/mob/proc/ghostize(flags = GHOST_CAN_REENTER) +/mob/proc/ghostize(flags = GHOST_CAN_REENTER, user_color, ghost_name) if(key) if(player_logged) //if they have disconnected we want to remove their SSD overlay overlays -= image('icons/effects/effects.dmi', icon_state = "zzz_glow") @@ -186,6 +186,11 @@ Works together with spawning an observer, noted above. ADD_TRAIT(ghost, TRAIT_RESPAWNABLE, GHOSTED) else GLOB.non_respawnable_keys[ckey] = 1 + if(user_color) + add_atom_colour(user_color, ADMIN_COLOUR_PRIORITY) + ghost.color = user_color + if(ghost_name) + ghost.name = ghost_name ghost.key = key return ghost @@ -224,7 +229,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(warningmsg) var/response var/alertmsg = "Are you -sure- you want to ghost?\n([warningmsg]. If you ghost now, you probably won't be able to rejoin the round! You can't change your mind, so choose wisely!)" - response = alert(src, alertmsg,"Are you sure you want to ghost?","Stay in body","Ghost") + response = tgui_alert(src, alertmsg, "Ghost", list("Stay in body", "Ghost")) if(response != "Ghost") return @@ -393,7 +398,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "Your body is still alive!") return - var/choice = alert(src, "If you enable this, your body will be unrevivable for the remainder of the round.", "Are you sure?", "Yes", "No") + var/choice = tgui_alert(src, "If you enable this, your body will be unrevivable for the remainder of the round.", "Do Not Revive!", list("Yes", "No")) if(choice == "Yes") to_chat(src, "Do Not Revive state enabled.") create_log(MISC_LOG, "DNR Enabled") @@ -410,7 +415,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!isobserver(usr)) to_chat(usr, "Not when you're not dead!") return - var/target = input("Area to teleport to", "Teleport to a location") as null|anything in SSmapping.ghostteleportlocs + var/target = tgui_input_list(usr, "Area to teleport to", "Teleport to a location", SSmapping.ghostteleportlocs) teleport(SSmapping.ghostteleportlocs[target]) /mob/dead/observer/proc/jump_to_ruin() @@ -624,7 +629,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/verb/view_manifest() set name = "View Crew Manifest" set category = "Ghost" - GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.observer_state) + GLOB.generic_crew_manifest.ui_interact(usr) //this is called when a ghost is drag clicked to something. /mob/dead/observer/MouseDrop(atom/over) diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 158cb9bfd90f..555e05928f3a 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -6,10 +6,13 @@ qdel(src) owner = new_owner -/datum/orbit_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/orbit_menu/ui_state(mob/user) + return GLOB.observer_state + +/datum/orbit_menu/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Orbit", "Orbit", 700, 500, master_ui, state) + ui = new(user, src, "Orbit", "Orbit") ui.open() /datum/orbit_menu/ui_act(action, list/params, datum/tgui/ui) diff --git a/code/modules/mob/dead/observer/spells.dm b/code/modules/mob/dead/observer/spells.dm index afcd7421196d..46f0f4342d66 100644 --- a/code/modules/mob/dead/observer/spells.dm +++ b/code/modules/mob/dead/observer/spells.dm @@ -41,7 +41,7 @@ GLOBAL_LIST_INIT(boo_phrases, list( if(target.get_spooked()) var/area/spook_zone = get_area(target) - if(spook_zone.is_haunted == TRUE) + if(spook_zone.is_haunted) to_chat(usr, "The veil is weak in [spook_zone], it took less effort to influence [target].") cooldown_handler.start_recharge(cooldown_handler.recharge_duration / 2) return diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 361163f4df77..c00b0667daaf 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -42,11 +42,18 @@ if(msg == "") // There is literally no content left in this message, we need to shut this shit down . = "" // hear_say will suppress it + return + if(isliving(src)) + for(var/datum/component/codeword_hearing/hearing_datum in GetComponents(/datum/component/codeword_hearing)) + var/tmp_msg = hearing_datum.handle_hearing(msg) + if(!tmp_msg) + continue + msg = tmp_msg + + if(verb) + . = "[verb], \"[trim(msg)]\"" else - if(verb) - . = "[verb], \"[trim(msg)]\"" - else - . = trim(msg) + . = trim(msg) /mob/proc/hear_say(list/message_pieces, verb = "says", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol, sound_frequency, use_voice = TRUE) if(!client) diff --git a/code/modules/mob/inventory_procs.dm b/code/modules/mob/inventory_procs.dm index e551dc7b683f..171aeaf9c2f7 100644 --- a/code/modules/mob/inventory_procs.dm +++ b/code/modules/mob/inventory_procs.dm @@ -55,18 +55,18 @@ //Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success. /mob/proc/put_in_l_hand(obj/item/W, skip_blocked_hands_check = FALSE) if(!put_in_hand_check(W, skip_blocked_hands_check)) - return 0 + return FALSE if(!l_hand && has_left_hand()) W.forceMove(src) //TODO: move to equipped? l_hand = W W.layer = ABOVE_HUD_LAYER //TODO: move to equipped? W.plane = ABOVE_HUD_PLANE //TODO: move to equipped? - W.equipped(src,SLOT_HUD_LEFT_HAND) + W.equipped(src, SLOT_HUD_LEFT_HAND) if(pulling == W) stop_pulling() update_inv_l_hand() - return 1 - return 0 + return TRUE + return FALSE //Puts the item into your r_hand if possible and calls all necessary triggers/updates. returns 1 on success. /mob/proc/put_in_r_hand(obj/item/W, skip_blocked_hands_check = FALSE) @@ -96,8 +96,10 @@ //Puts the item into our active hand if possible. returns 1 on success. /mob/proc/put_in_active_hand(obj/item/W) - if(hand) return put_in_l_hand(W) - else return put_in_r_hand(W) + if(hand) + return put_in_l_hand(W) + else + return put_in_r_hand(W) //Puts the item into our inactive hand if possible. returns 1 on success. /mob/proc/put_in_inactive_hand(obj/item/W) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 39714882a550..d1d4c993c6cb 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -111,13 +111,15 @@ var/msg = "[name], [speaker_mask] [get_spoken_verb(message)], [format_message(message)]" for(var/mob/player in GLOB.player_list) - if(istype(player,/mob/dead) && follow) + if(istype(player, /mob/dead) && follow) var/msg_dead = "[name], [speaker_mask] ([ghost_follow_link(speaker, ghost=player)]) [get_spoken_verb(message)], [format_message(message)]" to_chat(player, msg_dead) continue - else if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player, speaker))) + else if(istype(player, /mob/dead) || ((src in player.languages) && check_special_condition(player, speaker))) to_chat(player, msg) + if((flags & HIVEMIND) && (flags & HIVEMIND_RUNECHAT)) + player.create_chat_message(player, "[speaker_mask], [format_message(message)]") /datum/language/proc/check_special_condition(mob/other, mob/living/speaker) return TRUE @@ -281,7 +283,6 @@ /datum/language/trinary/scramble(input) . = ..(copytext(input, 1, max(length(input) / 4, 2))) - /datum/language/trinary/get_random_name() var/new_name if(prob(70)) @@ -313,7 +314,6 @@ new_name += "[pick(list("Tristan", "Zarlan", "Clack", "Kkraz", "Zramn", "Orlan", "Zrax", "Orax", "Oriz", "Tariz", "Kvestan"))]" return new_name - /datum/language/slime name = "Bubblish" desc = "The language of slimes. It's a mixture of bubbling noises and pops. Very difficult to speak without mechanical aid for humans." @@ -564,7 +564,7 @@ exclaim_verbs = list("gibbers") colour = "abductor" key = "zw" //doesn't matter, this is their default and only language - flags = RESTRICTED | HIVEMIND | NOBABEL + flags = RESTRICTED | HIVEMIND | NOBABEL | HIVEMIND_RUNECHAT follow = TRUE /datum/language/abductor/broadcast(mob/living/speaker, message, speaker_mask) @@ -581,6 +581,7 @@ /datum/language/abductor/golem name = "Golem Mindlink" desc = "Communicate with other alien alloy golems through a psychic link." + flags = RESTRICTED | HIVEMIND | NOBABEL /datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker) return TRUE @@ -714,7 +715,6 @@ /mob/verb/check_languages() set name = "Check Known Languages" set category = "IC" - set src = usr var/datum/browser/popup = new(src, "checklanguage", "Known Languages", 420, 470) popup.set_content(check_lang_data()) diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 9aad0da4631c..ffd829077a28 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -23,11 +23,6 @@ prefs.active_character.autohiss_mode = AUTOHISS_OFF to_chat(src, "Auto-hiss is now OFF.") -/datum/species - var/list/autohiss_basic_map = null - var/list/autohiss_extra_map = null - var/list/autohiss_exempt = null - /datum/species/unathi autohiss_basic_map = list( "s" = list("ss", "sss", "ssss") diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 9ed5f563c1e0..e48f38e341e1 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -265,7 +265,7 @@ /obj/item/mmi/contents_ui_distance(src_object, mob/living/user) . = ..() if((src_object in view(src)) && get_dist(src_object, src) <= user.client.maxview()) - return STATUS_INTERACTIVE // interactive (green visibility) + return UI_INTERACTIVE // interactive (green visibility) return user.shared_living_ui_distance() /obj/item/mmi/forceMove(atom/destination) diff --git a/code/modules/mob/living/carbon/alien/alien_base.dm b/code/modules/mob/living/carbon/alien/alien_base.dm index 7a7845746393..8d2a727019e1 100644 --- a/code/modules/mob/living/carbon/alien/alien_base.dm +++ b/code/modules/mob/living/carbon/alien/alien_base.dm @@ -5,18 +5,16 @@ bubble_icon = "alien" icon = 'icons/mob/alien.dmi' gender = NEUTER - dna = null var/nightvision = TRUE see_in_dark = 4 var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie var/has_fine_manipulation = FALSE - var/move_delay_add = FALSE // movement delay to add + var/move_delay_add = 0 // movement delay to add status_flags = CANPARALYSE|CANPUSH var/heal_rate = 5 - var/large = FALSE var/loudspeaker = FALSE var/heat_protection = 0.5 var/leaping = FALSE @@ -27,8 +25,6 @@ /mob/living/carbon/alien/Initialize(mapload) . = ..() create_reagents(1000) - verbs += /mob/living/verb/mob_sleep - verbs += /mob/living/verb/rest for(var/organ_path in get_caste_organs()) var/obj/item/organ/internal/organ = new organ_path() @@ -50,17 +46,17 @@ return GLOB.all_languages["Xenomorph"] /mob/living/carbon/alien/say_quote(message, datum/language/speaking = null) - var/verb = "hisses" + var/speech_verb = "hisses" var/ending = copytext(message, length(message)) if(speaking && (speaking.name != "Galactic Common")) //this is so adminbooze xenos speaking common have their custom verbs, - verb = speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages + speech_verb = speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages else - if(ending=="!") - verb = "roars" - else if(ending=="?") - verb = "hisses curiously" - return verb + if(ending == "!") + speech_verb = "roars" + else if(ending== "?") + speech_verb = "hisses curiously" + return speech_verb /mob/living/carbon/alien/adjustToxLoss(amount) @@ -68,7 +64,7 @@ /mob/living/carbon/alien/adjustFireLoss(amount) // Weak to Fire if(amount > 0) - return ..(amount * 2) + return ..(amount * 1.5) else return ..(amount) @@ -77,17 +73,11 @@ return 2 /mob/living/carbon/alien/handle_environment(datum/gas_mixture/environment) - if(!environment) return var/loc_temp = get_temperature(environment) -// to_chat(world, "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Fire protection: [heat_protection] - Location: [loc] - src: [src]") - - // Aliens are now weak to fire. - - //After then, it reacts to the surrounding atmosphere based on your thermal protection if(!on_fire) // If you're on fire, ignore local air temperature if(loc_temp > bodytemperature) //Place is hotter than we are @@ -121,8 +111,8 @@ /mob/living/carbon/alien/Stat() ..() if(statpanel("Status")) - stat(null, "Intent: [a_intent]") - stat(null, "Move Mode: [m_intent]") + stat("Intent: [a_intent]") + stat("Move Mode: [m_intent]") show_stat_emergency_shuttle_eta() /mob/living/carbon/alien/SetStunned(amount, updating = TRUE, force = 0) @@ -141,26 +131,8 @@ /mob/living/carbon/alien/setDNA() return -/mob/living/carbon/alien/verb/nightvisiontoggle() - set name = "Toggle Night Vision" - set category = "Alien" - - if(!nightvision) - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - nightvision = TRUE - usr.hud_used.nightvisionicon.icon_state = "nightvision1" - else if(nightvision) - see_in_dark = initial(see_in_dark) - lighting_alpha = initial(lighting_alpha) - nightvision = FALSE - usr.hud_used.nightvisionicon.icon_state = "nightvision0" - - update_sight() - - /mob/living/carbon/alien/assess_threat(mob/living/simple_animal/bot/secbot/judgebot, lasercolor) - if(judgebot.emagged == 2) + if(judgebot.emagged) return 10 //Everyone is a criminal! var/threatcount = 0 @@ -209,34 +181,31 @@ /mob/living/carbon/alien/proc/deathrattle_message() return "The hivemind echoes: [name] has been slain!" -/mob/living/carbon/alien/CanContractDisease(datum/disease/D) - return FALSE - /*---------------------------------------- Proc: AddInfectionImages() Des: Gives the client of the alien an image on each infected mob. ----------------------------------------*/ /mob/living/carbon/alien/proc/AddInfectionImages() - if(client) - for(var/mob/living/C in GLOB.mob_list) - if(HAS_TRAIT(C, TRAIT_XENO_HOST)) - var/obj/item/organ/internal/body_egg/alien_embryo/A = C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]") - client.images += I - return - + if(!client) + return + for(var/mob/living/C in GLOB.mob_list) + if(HAS_TRAIT(C, TRAIT_XENO_HOST)) + var/obj/item/organ/internal/body_egg/alien_embryo/A = C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(!A) + continue + var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]") + client.images += I /*---------------------------------------- Proc: RemoveInfectionImages() Des: Removes all infected images from the alien. ----------------------------------------*/ /mob/living/carbon/alien/proc/RemoveInfectionImages() - if(client) - for(var/image/I in client.images) - if(dd_hasprefix_case(I.icon_state, "infected")) - qdel(I) - return + if(!client) + return + for(var/image/I in client.images) + if(dd_hasprefix_case(I.icon_state, "infected")) + qdel(I) /mob/living/carbon/alien/canBeHandcuffed() return TRUE @@ -309,3 +278,8 @@ and carry the owner just to make sure*/ medicine.reagents.reaction(src, reagent_application, fraction) medicine.reagents.trans_to(src, how_many_reagents) return TRUE + +/mob/living/carbon/alien/update_stat(reason) + if(health <= HEALTH_THRESHOLD_CRIT && stat == CONSCIOUS) + KnockOut() + return ..() diff --git a/code/modules/mob/living/carbon/alien/alien_death.dm b/code/modules/mob/living/carbon/alien/alien_death.dm index 12757bd3a8b3..fa5e5a1f12c7 100644 --- a/code/modules/mob/living/carbon/alien/alien_death.dm +++ b/code/modules/mob/living/carbon/alien/alien_death.dm @@ -12,7 +12,7 @@ animation.icon = 'icons/mob/mob.dmi' animation.master = src - playsound(src.loc, 'sound/goonstation/effects/gib.ogg', 50, 1) + playsound(loc, 'sound/goonstation/effects/gib.ogg', 50, TRUE) for(var/mob/M in stomach_contents) //Release eaten mobs when Beno is gibbed LAZYREMOVE(stomach_contents, M) @@ -21,6 +21,13 @@ var/mob/living/carbon/human/H = M H.KnockDown(5 SECONDS) + for(var/obj/item/organ/internal/I in internal_organs) + if(isturf(loc)) + var/atom/movable/thing = I.remove(src) + if(thing) + thing.forceMove(get_turf(src)) + thing.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1, 3), 5) + flick("gibbed-a", animation) xgibs(loc) GLOB.dead_mob_list -= src diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index de23bdcd5bbe..491d5612f72c 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -10,9 +10,6 @@ In all, this is a lot like the monkey code. This code could certainly use with a touch of TLC, but it functions alright. Bit odd aliens attacking other aliens are like, full logged though */ /mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M) - if(isturf(loc) && istype(loc.loc, /area/start)) - to_chat(M, "No attacking people at spawn, you jackass.") - return switch(M.a_intent) if(INTENT_HELP) AdjustSleeping(-10 SECONDS) @@ -82,9 +79,9 @@ This code could certainly use with a touch of TLC, but it functions alright. Bit /mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M) // This is very RNG based, maybe come back to this later - GDN if(..()) //successful slime attack - var/damage = rand(5, 35) + var/damage = 10 if(M.is_adult) - damage = rand(10, 40) + damage = 15 adjustBruteLoss(damage) add_attack_logs(M, src, "Slime'd for [damage] damage") updatehealth("slime attack") diff --git a/code/modules/mob/living/carbon/alien/alien_login.dm b/code/modules/mob/living/carbon/alien/alien_login.dm index 589a97416270..fa043b3e8c8d 100644 --- a/code/modules/mob/living/carbon/alien/alien_login.dm +++ b/code/modules/mob/living/carbon/alien/alien_login.dm @@ -2,4 +2,3 @@ ..() AddInfectionImages() update_plasma_display(src) - return diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/alien_drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/alien_drone.dm index 1195a46e735f..35c75e4931a4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/alien_drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/alien_drone.dm @@ -1,15 +1,14 @@ /mob/living/carbon/alien/humanoid/drone name = "alien drone" caste = "d" - maxHealth = 100 - health = 100 + maxHealth = 150 + health = 150 icon_state = "aliend_s" /mob/living/carbon/alien/humanoid/drone/Initialize(mapload) . = ..() - if(src.name == "alien drone") - src.name = "alien drone ([rand(1, 1000)])" - src.real_name = src.name + name = "alien drone ([rand(1, 1000)])" + real_name = name AddSpell(new /obj/effect/proc_holder/spell/alien_spell/evolve_queen) /mob/living/carbon/alien/humanoid/drone/get_caste_organs() @@ -19,8 +18,3 @@ /obj/item/organ/internal/alien/acidgland, /obj/item/organ/internal/alien/resinspinner, ) - - -//Drones use the same base as generic humanoids. -//Drone verbs - diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index e80f74cd6efe..0b8c0ab5441f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -1,38 +1,35 @@ /mob/living/carbon/alien/humanoid/hunter name = "alien hunter" caste = "h" - maxHealth = 125 - health = 125 + maxHealth = 150 + health = 150 icon_state = "alienh_s" - alien_movement_delay = -1 //hunters are faster than normal xenomorphs, and people + alien_movement_delay = -0.5 //hunters are faster than normal xenomorphs, and people + var/leap_on_click = FALSE + /// Are we on leap cooldown? + var/on_leap_cooldown = FALSE /mob/living/carbon/alien/humanoid/hunter/Initialize(mapload) . = ..() - if(name == "alien hunter") - name = "alien hunter ([rand(1, 1000)])" + name = "alien hunter ([rand(1, 1000)])" real_name = name /mob/living/carbon/alien/humanoid/hunter/get_caste_organs() . = ..() . += /obj/item/organ/internal/alien/plasmavessel/hunter - /mob/living/carbon/alien/humanoid/hunter/handle_environment() if(m_intent == MOVE_INTENT_RUN || IS_HORIZONTAL(src)) ..() else add_plasma(-heal_rate) - -//Hunter verbs - -/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(message = 1) +/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(message = TRUE) leap_on_click = !leap_on_click leap_icon.icon_state = "leap_[leap_on_click ? "on":"off"]" + update_icons() if(message) - to_chat(src, "You will now [leap_on_click ? "leap at":"slash at"] enemies!") - else - return + to_chat(src, "You will now [leap_on_click ? "leap at" : "slash at"] enemies!") /mob/living/carbon/alien/humanoid/hunter/ClickOn(atom/A, params) face_atom(A) @@ -44,64 +41,71 @@ #define MAX_ALIEN_LEAP_DIST 7 /mob/living/carbon/alien/humanoid/hunter/proc/leap_at(atom/A) - if(pounce_cooldown > world.time) - to_chat(src, "You are too fatigued to pounce right now!") - return - - if(leaping) //Leap while you leap, so you can leap while you leap + if(leaping || on_leap_cooldown) return - if(!has_gravity(src) || !has_gravity(A)) - to_chat(src, "It is unsafe to leap without gravity!") - //It's also extremely buggy visually, so it's balance+bugfix - return if(IS_HORIZONTAL(src)) return - else //Maybe uses plasma in the future, although that wouldn't make any sense... - leaping = 1 - update_icons() - throw_at(A, MAX_ALIEN_LEAP_DIST, 1, spin = 0, diagonals_first = 1, callback = CALLBACK(src, PROC_REF(leap_end))) + leaping = TRUE + on_leap_cooldown = TRUE + update_icons() + Immobilize(15 SECONDS, TRUE) + addtimer(VARSET_CALLBACK(src, on_leap_cooldown, FALSE), 3 SECONDS) + throw_at(A, MAX_ALIEN_LEAP_DIST, 1.5, spin = 0, diagonals_first = 1, callback = CALLBACK(src, PROC_REF(leap_end))) /mob/living/carbon/alien/humanoid/hunter/proc/leap_end() - leaping = 0 + leaping = FALSE + SetImmobilized(0, TRUE) update_icons() /mob/living/carbon/alien/humanoid/hunter/throw_impact(atom/A) if(!leaping) return ..() - if(A) - if(isliving(A)) - var/mob/living/L = A - var/blocked = 0 - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(H.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) - blocked = 1 - if(!blocked) - L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") - if(ishuman(L)) - var/mob/living/carbon/human/H = L - H.apply_effect(10 SECONDS, KNOCKDOWN, H.run_armor_check(null, MELEE)) - H.adjustStaminaLoss(40) - else - L.Weaken(10 SECONDS) - sleep(2)//Runtime prevention (infinite bump() calls on hulks) - step_towards(src,L) + if(isliving(A)) + var/mob/living/L = A + var/blocked = FALSE + if(ishuman(A)) + var/mob/living/carbon/human/H = A + if(H.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) + blocked = TRUE + if(!blocked) + L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") + if(ishuman(L)) + var/mob/living/carbon/human/H = L + H.apply_effect(10 SECONDS, KNOCKDOWN, H.run_armor_check(null, MELEE)) + H.apply_damage(40, STAMINA) else - Weaken(4 SECONDS, TRUE) - - toggle_leap(0) - pounce_cooldown = world.time + pounce_cooldown_time - else if(A.density && !A.CanPass(src)) - visible_message("[src] smashes into [A]!", "[src] smashes into [A]!") - Weaken(4 SECONDS, TRUE) - - if(leaping) - leaping = 0 - update_icons() + L.Weaken(5 SECONDS) + sleep(2)//Runtime prevention (infinite bump() calls on hulks) + step_towards(src, L) + else + Weaken(2 SECONDS, TRUE) + ..() + + toggle_leap(FALSE) + else if(A.density && !A.CanPass(src)) + visible_message("[src] smashes into [A]!", "[src] smashes into [A]!") + Weaken(2 SECONDS, TRUE) + playsound(get_turf(src), 'sound/effects/bang.ogg', 50, 0, 0) // owwie + ..() + if(leaping) + leaping = FALSE + update_icons() +/mob/living/carbon/alien/humanoid/hunter/update_icons() + ..() + if(leap_on_click && !leaping) + icon_state = "alien[caste]_pounce" + if(leaping) + if(alt_icon == initial(alt_icon)) + var/old_icon = icon + icon = alt_icon + alt_icon = old_icon + icon_state = "alien[caste]_leap" + pixel_x = -32 + pixel_y = -32 /mob/living/carbon/alien/humanoid/float(on) if(leaping) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index bd3075eadf61..9b9ae103770b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -1,8 +1,8 @@ /mob/living/carbon/alien/humanoid/sentinel name = "alien sentinel" caste = "s" - maxHealth = 150 - health = 150 + maxHealth = 175 + health = 175 icon_state = "aliens_s" /mob/living/carbon/alien/humanoid/sentinel/large @@ -12,13 +12,6 @@ pixel_x = -16 maxHealth = 200 health = 200 - large = 1 - -/mob/living/carbon/alien/humanoid/sentinel/praetorian - name = "alien praetorian" - maxHealth = 200 - health = 200 - large = 1 /mob/living/carbon/alien/humanoid/sentinel/large/update_icons() overlays.Cut() @@ -34,8 +27,7 @@ /mob/living/carbon/alien/humanoid/sentinel/Initialize(mapload) . = ..() - if(name == "alien sentinel") - name = "alien sentinel ([rand(1, 1000)])" + name = "alien sentinel ([rand(1, 1000)])" real_name = name /mob/living/carbon/alien/humanoid/sentinel/get_caste_organs() diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 2ab7d8663235..9ea090b459e6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -8,7 +8,6 @@ loudspeaker = TRUE mob_size = MOB_SIZE_LARGE bubble_icon = "alienroyal" - large = 1 ventcrawler = VENTCRAWLER_NONE move_resist = MOVE_FORCE_STRONG //Yes, big benos is huge and heavy alien_disarm_damage = 60 //Empress do higher disarm stamina damage than normal aliens @@ -37,16 +36,7 @@ /mob/living/carbon/alien/humanoid/empress/Initialize(mapload) . = ..() //there should only be one queen - for(var/mob/living/carbon/alien/humanoid/empress/E in GLOB.alive_mob_list) - if(E == src) - continue - if(E.stat == DEAD) - continue - if(E.client) - name = "alien grand princess ([rand(1, 999)])" //if this is too cutesy feel free to change it/remove it. - break - - real_name = name + ADD_TRAIT(src, TRAIT_FORCE_DOORS, UNIQUE_TRAIT_SOURCE(src)) /mob/living/carbon/alien/humanoid/empress/get_caste_organs() . = ..() diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 31240725f069..5b139d6652d4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -2,20 +2,17 @@ name = "alien" icon_state = "alien_s" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 5, /obj/item/stack/sheet/animalhide/xeno = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 5, /obj/item/stack/sheet/animalhide/xeno = 1) var/obj/item/r_store = null var/obj/item/l_store = null var/caste = "" var/alt_icon = 'icons/mob/alienleap.dmi' //used to switch between the two alien icon files. - var/next_attack = 0 - var/pounce_cooldown = 0 - var/pounce_cooldown_time = 30 - var/leap_on_click = 0 var/custom_pixel_x_offset = 0 //for admin fuckery. var/custom_pixel_y_offset = 0 var/alien_disarm_damage = 30 //Aliens deal a good amount of stamina damage on disarm intent var/alien_slash_damage = 20 //Aliens deal a good amount of damage on harm intent var/alien_movement_delay = 0 //This can be + or -, how fast an alien moves + var/temperature_resistance = T0C+75 pass_flags = PASSTABLE //This is fine right now, if we're adding organ specific damage this needs to be updated @@ -31,13 +28,14 @@ /mob/living/carbon/alien/humanoid/Process_Spacemove(check_drift = 0) if(..()) - return 1 - - return 0 + return TRUE + return FALSE /mob/living/carbon/alien/humanoid/emp_act(severity) - if(r_store) r_store.emp_act(severity) - if(l_store) l_store.emp_act(severity) + if(r_store) + r_store.emp_act(severity) + if(l_store) + l_store.emp_act(severity) ..() /mob/living/carbon/alien/humanoid/ex_act(severity) @@ -69,11 +67,8 @@ /mob/living/carbon/alien/humanoid/restrained() if(handcuffed) - return 1 - return 0 - - -/mob/living/carbon/alien/humanoid/var/temperature_resistance = T0C+75 + return TRUE + return FALSE /mob/living/carbon/alien/humanoid/movement_delay() //Aliens have a varied movespeed . = ..() @@ -102,9 +97,6 @@ popup.set_content(dat) popup.open() -/mob/living/carbon/alien/humanoid/canBeHandcuffed() - return 1 - /mob/living/carbon/alien/humanoid/cuff_resist(obj/item/I) playsound(src, 'sound/voice/hiss5.ogg', 40, 1, 1) //Alien roars when starting to break free ..(I, cuff_break = 1) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index 5d0f1aff4816..43c9bd959364 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -4,14 +4,11 @@ to_chat(user, "You don't want to hurt [src]!") return FALSE ..(user, TRUE) - adjustBruteLoss(15) + adjustBruteLoss(10) var/hitverb = "punched" if(mob_size < MOB_SIZE_LARGE) - Paralyse(2 SECONDS) - spawn(0) - step_away(src, user, 15) - sleep(1) - step_away(src, user, 15) + Stun(2 SECONDS) + throw_at(get_edge_target_turf(user, get_dir(user, src)), 3, 7) hitverb = "slammed" playsound(loc, "punch", 25, 1, -1) visible_message("[user] has [hitverb] [src]!", "[user] has [hitverb] [src]!") diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm index 9c168e564c4c..70f37d83d213 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm @@ -28,8 +28,6 @@ else if(stat == UNCONSCIOUS || IsWeakened()) icon_state = "alien[caste]_unconscious" pixel_y = 0 - else if(leap_on_click) - icon_state = "alien[caste]_pounce" else if(IS_HORIZONTAL(src)) icon_state = "alien[caste]_sleep" @@ -38,21 +36,12 @@ else icon_state = "alien[caste]_s" - if(leaping) - if(alt_icon == initial(alt_icon)) - var/old_icon = icon - icon = alt_icon - alt_icon = old_icon - icon_state = "alien[caste]_leap" - pixel_x = -32 - pixel_y = -32 - else - if(alt_icon != initial(alt_icon)) - var/old_icon = icon - icon = alt_icon - alt_icon = old_icon - pixel_x = get_standard_pixel_x_offset() - pixel_y = get_standard_pixel_y_offset() + if(alt_icon != initial(alt_icon)) + var/old_icon = icon + icon = alt_icon + alt_icon = old_icon + pixel_x = get_standard_pixel_x_offset() + pixel_y = get_standard_pixel_y_offset() /mob/living/carbon/alien/humanoid/regenerate_icons() ..() diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 2564f8ec7b8b..1d0e6e931de6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -1,13 +1,11 @@ /mob/living/carbon/alien/humanoid/queen name = "alien queen" caste = "q" - maxHealth = 250 - health = 250 + maxHealth = 300 + health = 300 icon_state = "alienq_s" status_flags = CANPARALYSE loudspeaker = TRUE - heal_rate = 5 - large = 1 ventcrawler = VENTCRAWLER_NONE pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper. move_resist = MOVE_FORCE_STRONG //Yes, queenos is huge and heavy @@ -17,19 +15,8 @@ /mob/living/carbon/alien/humanoid/queen/Initialize(mapload) . = ..() - //there should only be one queen - for(var/mob/living/carbon/alien/humanoid/queen/Q in GLOB.alive_mob_list) - if(Q == src) - ADD_TRAIT(Q, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT) - continue - if(Q.stat == DEAD) - ADD_TRAIT(Q, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT) - continue - if(Q.client) - name = "alien princess ([rand(1, 999)])" //if this is too cutesy feel free to change it/remove it. - break - - real_name = src.name + ADD_TRAIT(src, TRAIT_FORCE_DOORS, UNIQUE_TRAIT_SOURCE(src)) + AddSpell(new /obj/effect/proc_holder/spell/alien_spell/tail_lash) /mob/living/carbon/alien/humanoid/queen/get_caste_organs() . = ..() @@ -38,8 +25,7 @@ /obj/item/organ/internal/alien/acidgland, /obj/item/organ/internal/alien/eggsac, /obj/item/organ/internal/alien/resinspinner, - /obj/item/organ/internal/alien/neurotoxin, - ) + /obj/item/organ/internal/alien/neurotoxin) /mob/living/carbon/alien/humanoid/queen/deathrattle_message() return "A shock reverberates through the hive; [name] has been slain!" @@ -51,7 +37,6 @@ icon = 'icons/mob/alienlarge.dmi' icon_state = "queen_s" pixel_x = -16 - large = 1 /mob/living/carbon/alien/humanoid/queen/large/update_icons() overlays.Cut() diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 6c06c7bb20a5..c1e3b1d69cf1 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -9,17 +9,17 @@ health = 25 density = FALSE + var/temperature_resistance = T0C+75 var/amount_grown = 0 var/max_grown = 200 - var/time_of_birth death_message = "lets out a waning high-pitched cry." death_sound = null //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/Initialize(mapload) . = ..() - if(name == "alien larva") - name = "alien larva ([rand(1, 1000)])" + + name = "alien larva ([rand(1, 1000)])" real_name = name regenerate_icons() add_language("Xenomorph") @@ -41,7 +41,7 @@ /mob/living/carbon/alien/larva/Stat() ..() - stat(null, "Progress: [amount_grown]/[max_grown]") + stat("Progress: [amount_grown]/[max_grown]") /mob/living/carbon/alien/larva/add_plasma(amount) if(stat != DEAD && amount > 0) @@ -78,12 +78,9 @@ /mob/living/carbon/alien/larva/restrained() return FALSE -/mob/living/carbon/alien/larva/var/temperature_resistance = T0C+75 - // new damage icon system // now constructs damage icon for each organ from mask * damage field - /mob/living/carbon/alien/larva/show_inv(mob/user as mob) return diff --git a/code/modules/mob/living/carbon/alien/larva/larva_inventory.dm b/code/modules/mob/living/carbon/alien/larva/larva_inventory.dm index fc5acb63fd0c..0c5df6d99e9d 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_inventory.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_inventory.dm @@ -1,3 +1,3 @@ -//can't unequip since it can't equip anything +//can't unequip since it can't equip anything // why the fuck is this it's own file /mob/living/carbon/alien/larva/unEquip(obj/item/I, force, silent = FALSE) return diff --git a/code/modules/mob/living/carbon/alien/larva/larva_life.dm b/code/modules/mob/living/carbon/alien/larva/larva_life.dm index ea964329fd4e..141f5e8d950b 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_life.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_life.dm @@ -1,7 +1,5 @@ /mob/living/carbon/alien/larva/Life(seconds, times_fired) set invisibility = 0 - if(notransform) - return if(..()) //not dead and not in stasis // GROW! if(amount_grown < max_grown) @@ -19,10 +17,8 @@ if(IsParalyzed() || IsSleeping() || getOxyLoss() > 50 || (health <= HEALTH_THRESHOLD_CRIT && check_death_method())) if(stat == CONSCIOUS) KnockOut() - create_debug_log("fell unconscious, trigger reason: [reason]") else if(stat == UNCONSCIOUS) WakeUp() - create_debug_log("woke up, trigger reason: [reason]") update_damage_hud() update_health_hud() diff --git a/code/modules/mob/living/carbon/alien/larva/larva_update_icons.dm b/code/modules/mob/living/carbon/alien/larva/larva_update_icons.dm index 60db90600d17..90e14393f5ff 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_update_icons.dm @@ -1,4 +1,3 @@ - /mob/living/carbon/alien/larva/regenerate_icons() overlays = list() update_icons() diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 3eff208e536c..661201f94e21 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -53,11 +53,11 @@ if(real)//So that giant red text about probisci doesn't show up for fake ones switch(stat) if(DEAD,UNCONSCIOUS) - . += "[src] is not moving." + . += "[src] is not moving." if(CONSCIOUS) - . += "[src] seems to be active!" + . += "[src] seems to be active!" if(sterile) - . += "It looks like the proboscis has been removed." + . += "It looks like the proboscis has been removed." /obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 8fbf5c0d845e..f3e4c40a82db 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -54,8 +54,6 @@ #define STOMACH_ATTACK_DELAY 4 -/mob/living/carbon/var/last_stomach_attack //defining this here because no one would look in carbon_defines for it - /mob/living/carbon/relaymove(mob/user, direction) if(LAZYLEN(stomach_contents)) if(user in stomach_contents) @@ -345,7 +343,7 @@ status_list += "There is \a [I] embedded in your [LB.name]!" for(var/t in missing) - status_list += "Your [parse_zone(t)] is missing!" + status_list += "Your [parse_zone(t)] is missing!" if(H.bleed_rate) status_list += "You are bleeding!" @@ -450,15 +448,15 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/vent_pump, /obj/machinery/atmospherics/unary/vent_scrubber)) -/mob/living/handle_ventcrawl(atom/clicked_on) // -- TLE -- Merged by Carn +/mob/living/handle_ventcrawl(atom/clicked_on) // Why is this proc even in carbon.dm ... if(!Adjacent(clicked_on)) return - var/ventcrawlerlocal = 0 + var/ventcrawlerlocal = VENTCRAWLER_NONE if(ventcrawler) ventcrawlerlocal = ventcrawler - if(!ventcrawlerlocal) + if(ventcrawlerlocal == VENTCRAWLER_NONE) // You can't ventcrawl. return if(stat) @@ -472,9 +470,11 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(has_buckled_mobs()) to_chat(src, "You can't vent crawl with other creatures on you!") return + if(buckled) to_chat(src, "You can't vent crawl while buckled!") return + if(ishuman(src)) var/mob/living/carbon/human/H = src if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/rank/engineering/atmospheric_technician/contortionist))//IMMA SPCHUL SNOWFLAKE @@ -491,55 +491,54 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(!vent_found) - for(var/obj/machinery/atmospherics/machine in range(1,src)) + for(var/obj/machinery/atmospherics/machine in range(1, src)) if(is_type_in_list(machine, GLOB.ventcrawl_machinery) && machine.can_crawl_through()) vent_found = machine break - if(vent_found) - if(vent_found.parent && (vent_found.parent.members.len || vent_found.parent.other_atmosmch)) - visible_message("[src] begins climbing into the ventilation system...", \ - "You begin climbing into the ventilation system...") + if(!vent_found) + to_chat(src, "This ventilation duct is not connected to anything!") + return - if(!do_after(src, 45, target = src)) - return + if(!vent_found.parent || !(length(vent_found.parent.members) || vent_found.parent.other_atmosmch)) + return - if(has_buckled_mobs()) - to_chat(src, "You can't vent crawl with other creatures on you!") - return + visible_message("[src] begins climbing into the ventilation system...", \ + "You begin climbing into the ventilation system...") - if(buckled) - to_chat(src, "You cannot crawl into a vent while buckled to something!") - return + if(!do_after(src, 4.5 SECONDS, target = src)) + return - if(!client) - return + if(!client) + return - if(iscarbon(src) && contents.len && ventcrawlerlocal < 2)//It must have atleast been 1 to get this far - for(var/obj/item/I in contents) - var/failed = 0 - if(istype(I, /obj/item/bio_chip)) - continue - if(istype(I, /obj/item/reagent_containers/patch)) - continue - if(I.flags & ABSTRACT) - continue - else - failed++ - - if(failed) - to_chat(src, "You can't crawl around in the ventilation ducts with items!") - return + if(!vent_found.can_crawl_through()) + to_chat(src, "You can't vent crawl through that!") + return + + if(has_buckled_mobs()) + to_chat(src, "You can't vent crawl with other creatures on you!") + return - visible_message("[src] scrambles into the ventilation ducts!", "You climb into the ventilation system.") - var/old_loc = loc - loc = vent_found - Moved(old_loc, get_dir(old_loc, loc), FALSE) - add_ventcrawl(vent_found) + if(buckled) + to_chat(src, "You cannot crawl into a vent while buckled to something!") + return - else - to_chat(src, "This ventilation duct is not connected to anything!") + if(iscarbon(src) && length(contents) && ventcrawlerlocal < VENTCRAWLER_ALWAYS) // If we're here you can only ventcrawl while completely nude + for(var/obj/item/I in contents) + if(istype(I, /obj/item/bio_chip)) + continue + if(istype(I, /obj/item/reagent_containers/patch)) + continue + if(I.flags & ABSTRACT) + continue + to_chat(src, "You can't crawl around in the ventilation ducts with items!") + return + + visible_message("[src] scrambles into the ventilation ducts!", "You climb into the ventilation system.") + forceMove(vent_found) + add_ventcrawl(vent_found) /mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine, obj/machinery/atmospherics/target_move) if(!istype(starting_machine) || !starting_machine.returnPipenet(target_move) || !starting_machine.can_see_pipes()) @@ -704,7 +703,8 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven return if(thrown_thing) - visible_message("[src] has thrown [thrown_thing].") + if(!HAS_TRAIT(thrown_thing, TRAIT_NO_THROWN_MESSAGE)) + visible_message("[src] has thrown [thrown_thing].") newtonian_move(get_dir(target, src)) thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src, null, null, null, move_force) @@ -1086,7 +1086,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(statpanel("Status")) var/obj/item/organ/internal/alien/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/alien/plasmavessel) if(vessel) - stat(null, "Plasma Stored: [vessel.stored_plasma]/[vessel.max_plasma]") + stat("Plasma Stored: [vessel.stored_plasma]/[vessel.max_plasma]") /mob/living/carbon/get_all_slots() return list(l_hand, @@ -1163,26 +1163,22 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven /mob/living/carbon/proc/can_eat(flags = 255) return TRUE -/mob/living/carbon/proc/eat(obj/item/reagent_containers/to_eat, mob/user, bitesize_override) - if(ispill(to_eat) || ispatch(to_eat)) +/mob/living/carbon/proc/eat(obj/item/food/to_eat, mob/user, bitesize_override) + if(ispill(to_eat) || ispatch(to_eat)) // We first have to know if it's either a pill or a patch, only then can we check if it's a food item return consume_patch_or_pill(to_eat, user) - if(!isfood(to_eat)) // We first have to know if it's either a pill or a patch, only then can we check if it's a food item + if(!isfood(to_eat)) return FALSE - var/obj/item/reagent_containers/food/food = to_eat // It's not a patch or a pill so it must be food + var/obj/item/food/food = to_eat // It's not a patch or a pill so it must be food var/fullness = nutrition + 10 - if(istype(food, /obj/item/reagent_containers/food/snacks)) + if(istype(food, /obj/item/food/snacks)) for(var/datum/reagent/consumable/C in reagents.reagent_list) //we add the nutrition value of what we're currently digesting fullness += C.nutriment_factor * C.volume / (C.metabolization_rate * metabolism_efficiency) if(user == src) - if(istype(food, /obj/item/reagent_containers/food/drinks)) - if(!selfDrink(food)) - return FALSE - else - if(!selfFeed(food, fullness)) - return FALSE + if(!selfFeed(food, fullness)) + return FALSE else if(!forceFed(food, user, fullness)) return FALSE @@ -1191,7 +1187,27 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven SSticker.score.score_food_eaten++ return TRUE -/mob/living/carbon/proc/selfFeed(obj/item/reagent_containers/food/to_eat, fullness) +/mob/living/carbon/proc/drink(obj/item/reagent_containers/drinks/to_drink, mob/user, drinksize_override) + if(user == src) + if(!selfDrink(to_drink)) + return FALSE + else if(!forceFed(to_drink, user, nutrition)) + return FALSE + + if(to_drink.consume_sound) + playsound(loc, to_drink.consume_sound, rand(10, 50), TRUE) + if(to_drink.reagents.total_volume) + taste(to_drink.reagents) + var/drink_size = max(initial(to_drink.amount_per_transfer_from_this), 5) + if(drinksize_override) + drink_size = drinksize_override + to_drink.reagents.reaction(src, REAGENT_INGEST) + to_drink.reagents.trans_to(src, drink_size) + + SSticker.score.score_food_eaten++ + return TRUE + +/mob/living/carbon/proc/selfFeed(obj/item/food/to_eat, fullness) if(ispill(to_eat)) to_chat(src, "You swallow [to_eat].") else if(ispatch(to_eat)) @@ -1213,7 +1229,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven return FALSE return TRUE -/mob/living/carbon/proc/selfDrink(obj/item/reagent_containers/food/drinks/toDrink, mob/user) +/mob/living/carbon/proc/selfDrink(obj/item/reagent_containers/drinks/toDrink, mob/user) return TRUE /mob/living/carbon/proc/forceFed(obj/item/reagent_containers/to_eat, mob/user, fullness) @@ -1233,7 +1249,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven /*TO DO - If/when stomach organs are introduced, override this at the human level sending the item to the stomach so that different stomachs can handle things in different ways VB*/ -/mob/living/carbon/proc/consume(obj/item/reagent_containers/food/to_eat, bitesize_override) +/mob/living/carbon/proc/consume(obj/item/food/to_eat, bitesize_override) var/this_bite = bitesize_override ? bitesize_override : to_eat.bitesize if(!to_eat.reagents) return diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 6a19650f051f..f9710e12c2b8 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -53,7 +53,7 @@ if(..()) //successful slime attack if(M.powerlevel > 0) do_sparks(5, TRUE, src) - adjustStaminaLoss(M.powerlevel * 5) //5-50 stamina damage, at starting power level 10 this means 50, 35, 20 on consecutive hits - stamina crit in 3 hits + apply_damage(M.powerlevel * 5, STAMINA) //5-50 stamina damage, at starting power level 10 this means 50, 35, 20 on consecutive hits - stamina crit in 3 hits KnockDown(M.powerlevel SECONDS) Stuttering(M.powerlevel SECONDS) visible_message("[M] has shocked [src]!", "[M] has shocked you!") diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 0b0b8fa108de..bae5e21a22b2 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,10 +1,15 @@ /mob/living/carbon gender = MALE pressure_resistance = 15 + var/list/stomach_contents + var/last_stomach_attack + var/list/processing_patches - var/list/internal_organs = list() - var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. + var/list/internal_organs = list() + var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. + /// An associated list of strings that associate it with the organ datum, e.g. [ORGAN_DATUM_HEART] = /datum/organ/heart + var/list/internal_organ_datums = list() var/life_tick = 0 // The amount of life ticks that have processed on this mob. diff --git a/code/modules/mob/living/carbon/carbon_life.dm b/code/modules/mob/living/carbon/carbon_life.dm index 0a59c7b113b9..c5d4088cdf97 100644 --- a/code/modules/mob/living/carbon/carbon_life.dm +++ b/code/modules/mob/living/carbon/carbon_life.dm @@ -105,7 +105,7 @@ if(status_flags & GODMODE) return FALSE - var/lungs = get_organ_slot("lungs") + var/lungs = get_int_organ_datum(ORGAN_DATUM_LUNGS) if(!lungs) adjustOxyLoss(2) @@ -201,6 +201,9 @@ for(var/thing in internal_organs) var/obj/item/organ/internal/O = thing O.on_life() + for(var/organ_tag in internal_organ_datums) + var/datum/organ/datum_organ_var_name_idk = internal_organ_datums[organ_tag] + datum_organ_var_name_idk.on_life() /mob/living/carbon/handle_diseases() for(var/thing in viruses) @@ -251,6 +254,7 @@ update_stamina() if(staminaloss) setStaminaLoss(0, FALSE) + SEND_SIGNAL(src, COMSIG_CARBON_STAMINA_REGENERATED) update_health_hud() // Keep SSD people asleep @@ -287,7 +291,7 @@ if(!client) return var/shock_reduction = shock_reduction() - if(stat == UNCONSCIOUS && health <= HEALTH_THRESHOLD_CRIT) + if(health <= HEALTH_THRESHOLD_CRIT) if(check_death_method()) var/severity = 0 switch(health - shock_reduction) diff --git a/code/modules/mob/living/carbon/carbon_status_procs.dm b/code/modules/mob/living/carbon/carbon_status_procs.dm index d39c9f40eae9..b96a55084a3a 100644 --- a/code/modules/mob/living/carbon/carbon_status_procs.dm +++ b/code/modules/mob/living/carbon/carbon_status_procs.dm @@ -8,6 +8,8 @@ return if(!IsWeakened()) to_chat(src, "You're too exhausted to keep going...") + SEND_SIGNAL(src, COMSIG_CARBON_ENTER_STAMINACRIT) + stam_regen_start_time = world.time + (STAMINA_REGEN_BLOCK_TIME * stamina_regen_block_modifier) var/prev = stam_paralyzed stam_paralyzed = TRUE ADD_TRAIT(src, TRAIT_IMMOBILIZED, "stam_crit") // make defines later diff --git a/code/modules/mob/living/carbon/carbon_update_status.dm b/code/modules/mob/living/carbon/carbon_update_status.dm index 541bce6eaf1d..6a4713b67412 100644 --- a/code/modules/mob/living/carbon/carbon_update_status.dm +++ b/code/modules/mob/living/carbon/carbon_update_status.dm @@ -6,10 +6,12 @@ death() create_debug_log("died of damage, trigger reason: [reason]") return - if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT) || (check_death_method() && getOxyLoss() > 50) || HAS_TRAIT(src, TRAIT_FAKEDEATH) || health <= HEALTH_THRESHOLD_CRIT && check_death_method()) + if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT) || (check_death_method() && getOxyLoss() > 50) || HAS_TRAIT(src, TRAIT_FAKEDEATH) || health < HEALTH_THRESHOLD_KNOCKOUT && check_death_method()) if(stat == CONSCIOUS) KnockOut() create_debug_log("fell unconscious, trigger reason: [reason]") + else if(health < HEALTH_THRESHOLD_CRIT && check_death_method()) + KnockDown(3 SECONDS) else if(stat == UNCONSCIOUS) WakeUp() @@ -24,6 +26,7 @@ if(stam > DAMAGE_PRECISION && (maxHealth - stam) <= HEALTH_THRESHOLD_CRIT && !stat) enter_stamcrit() else if(stam_paralyzed) + SEND_SIGNAL(src, COMSIG_CARBON_EXIT_STAMINACRIT) stam_paralyzed = FALSE REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, "stam_crit") // make defines later REMOVE_TRAIT(src, TRAIT_FLOORED, "stam_crit") diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 33896b03324c..9f9ad50fe929 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -214,7 +214,7 @@ H.ha_style = "None" update_head_accessory() -/mob/living/carbon/human/proc/change_eye_color(colour = "#000000", update_dna = TRUE) +/mob/living/carbon/human/proc/change_eye_color(colour = "#000000", update_dna = TRUE, skip_icons = FALSE) // Update the main DNA datum, then sync the change across the organs var/obj/item/organ/internal/eyes/eyes_organ = get_int_organ(/obj/item/organ/internal/eyes) if(eyes_organ) @@ -227,9 +227,11 @@ if(update_dna) update_dna() + sync_organ_dna(assimilate = FALSE) - update_eyes() - update_body() + if(!skip_icons) + update_eyes() + update_body() return TRUE /mob/living/carbon/human/proc/get_eye_color() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 04d9bb6f7457..f463a173a82f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -255,6 +255,9 @@ emp_act if(head && head.hit_reaction(src, AM, attack_text, 0, damage, attack_type)) return TRUE + if(SEND_SIGNAL(src, COMSIG_HUMAN_CHECK_SHIELDS, AM, attack_text, 0, damage, attack_type) & SHIELD_BLOCK) + return TRUE + return FALSE /mob/living/carbon/human/proc/get_best_shield() @@ -455,7 +458,7 @@ emp_act return FALSE if(HAS_TRAIT(I, TRAIT_BUTCHERS_HUMANS) && 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)) + var/obj/item/food/snacks/meat/human/newmeat = new /obj/item/food/snacks/meat/human(get_turf(loc)) newmeat.name = real_name + newmeat.name newmeat.subjectname = real_name newmeat.subjectjob = job @@ -663,13 +666,11 @@ emp_act visible_message("[src] is not affected by [M]'s disarm attempt!") playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) return FALSE - var/obj/item/I = get_active_hand() - if(I) - unEquip(I) var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_selected)) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) apply_effect(10 SECONDS, KNOCKDOWN, run_armor_check(affecting, MELEE)) - adjustStaminaLoss(M.alien_disarm_damage) + M.changeNext_move(1.6 SECONDS) + apply_damage(M.alien_disarm_damage, STAMINA) add_attack_logs(M, src, "Alien tackled") visible_message("[M] has tackled down [src]!", "You hear aggressive shuffling!") @@ -719,7 +720,7 @@ emp_act var/dmg = rand(M.force/2, M.force) switch(M.damtype) if("brute") - adjustStaminaLoss(dmg) + apply_damage(dmg, STAMINA) if(M.force > 35) // durand and other heavy mechas KnockDown(6 SECONDS) else if(M.force > 20 && !IsKnockedDown()) // lightweight mechas like gygax diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index ddd10970e26c..64ef4c4f0fd1 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -86,3 +86,9 @@ var/list/splinted_limbs = list() //limbs we know are splinted var/original_eye_color = "#000000" + + var/list/bodyparts = list() + /// map organ names to organs + var/list/bodyparts_by_name = list() + + var/temperature_resistance = T0C+75 diff --git a/code/modules/mob/living/carbon/human/human_inventory.dm b/code/modules/mob/living/carbon/human/human_inventory.dm index d8bda565092f..76ef81a1f3aa 100644 --- a/code/modules/mob/living/carbon/human/human_inventory.dm +++ b/code/modules/mob/living/carbon/human/human_inventory.dm @@ -444,6 +444,11 @@ var/obj/item/storage/equipped_item = get_item_by_slot(slot_item) if(ismecha(loc) || HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) return + if(ismodcontrol(equipped_item)) // Check if the item is a MODsuit + if(thing && equipped_item.can_be_inserted(thing)) // Check if the item can be inserted into the MODsuit + equipped_item.handle_item_insertion(thing) // Insert the item into the MODsuit + playsound(loc, "rustle", 50, TRUE, -5) + return if(!istype(equipped_item)) // We also let you equip things like this equip_to_slot_if_possible(thing, slot_item) return diff --git a/code/modules/mob/living/carbon/human/human_life.dm b/code/modules/mob/living/carbon/human/human_life.dm index 5cec16605726..f4583c0c60e6 100644 --- a/code/modules/mob/living/carbon/human/human_life.dm +++ b/code/modules/mob/living/carbon/human/human_life.dm @@ -131,31 +131,31 @@ /mob/living/carbon/human/check_breath(datum/gas_mixture/breath) - var/obj/item/organ/internal/L = get_organ_slot("lungs") + var/datum/organ/lungs/lung_datum = get_int_organ_datum(ORGAN_DATUM_LUNGS) - if(!L || L && (L.status & ORGAN_DEAD)) - if(health >= HEALTH_THRESHOLD_CRIT) - adjustOxyLoss(HUMAN_MAX_OXYLOSS + 1) - else if(!HAS_TRAIT(src, TRAIT_NOCRITDAMAGE)) - adjustOxyLoss(HUMAN_MAX_OXYLOSS) + if(lung_datum && !(lung_datum.linked_organ.status & ORGAN_DEAD)) + lung_datum.check_breath(breath, src) + return + + // We have no lungs, or our lungs are dead! + if(health >= HEALTH_THRESHOLD_CRIT) + adjustOxyLoss(HUMAN_MAX_OXYLOSS + 1) + else if(!HAS_TRAIT(src, TRAIT_NOCRITDAMAGE)) + adjustOxyLoss(HUMAN_MAX_OXYLOSS) - if(dna.species) - var/datum/species/S = dna.species + if(dna.species) + var/datum/species/S = dna.species - if(S.breathid == "o2") + switch(S.breathid) + if("o2") throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - else if(S.breathid == "tox") + if("tox") throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) - else if(S.breathid == "co2") + if("co2") // currently unused throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) - else if(S.breathid == "n2") + if("n2") throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) - - return FALSE - else - if(istype(L, /obj/item/organ/internal/lungs)) - var/obj/item/organ/internal/lungs/lun = L - lun.check_breath(breath, src) + return FALSE // USED IN DEATHWHISPERS /mob/living/carbon/human/proc/isInCrit() @@ -212,7 +212,8 @@ // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. if(bodytemperature > dna.species.heat_level_1) //Body temperature is too hot. - if(status_flags & GODMODE) return 1 //godmode + if(status_flags & GODMODE) + return TRUE var/mult = dna.species.heatmod * physiology.heat_mod if(bodytemperature >= dna.species.heat_level_1 && bodytemperature <= dna.species.heat_level_2) @@ -318,12 +319,15 @@ if(bodytemperature <= dna.species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. bodytemperature += max((body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - if(bodytemperature >= dna.species.cold_level_1 && bodytemperature <= dna.species.heat_level_1) - bodytemperature += body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR + return + if(bodytemperature >= dna.species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. //We totally need a sweat system cause it totally makes sense...~ bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers + return + // Our bodytemperature is +-50 degrees of our wanted body temperature + bodytemperature += ((body_temperature_difference * metabolism_efficiency) / max((BODYTEMP_AUTORECOVERY_LOW * (modulus(body_temperature_difference)) / 10), 2)) // We get back to safe our preferred bodytemp a lot faster, but slower when we are colder or hotter //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list) /mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. @@ -792,14 +796,13 @@ H.fakevomit() /mob/living/carbon/human/proc/handle_heartbeat() - var/client/C = src.client - if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref - var/obj/item/organ/internal/heart/H = get_int_organ(/obj/item/organ/internal/heart) + if(client && client.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref + var/datum/organ/heart/H = get_int_organ_datum(ORGAN_DATUM_HEART) if(!H) //H.status will runtime if there is no H (obviously) return - if(H.is_robotic()) //Handle robotic hearts specially with a wuuuubb. This also applies to machine-people. + if(H.linked_organ.is_robotic()) //Handle robotic hearts specially with a wuuuubb. This also applies to machine-people. if(isinspace()) //PULSE_THREADY - maximum value for pulse, currently it 5. //High pulse value corresponds to a fast rate of heartbeat. @@ -812,7 +815,6 @@ else heartbeat++ - return return if(pulse == PULSE_NONE) @@ -847,21 +849,18 @@ if(!can_heartattack()) return FALSE - var/obj/item/organ/internal/heart/heart = get_int_organ(/obj/item/organ/internal/heart) - if(!istype(heart) || (heart.status & ORGAN_DEAD) || !heart.beating) + var/datum/organ/heart/heart_datum = get_int_organ_datum(ORGAN_DATUM_HEART) + if(!istype(heart_datum) || (heart_datum.linked_organ.status & ORGAN_DEAD)) return TRUE - return FALSE + return !heart_datum.beating + /mob/living/carbon/human/proc/set_heartattack(status) if(!can_heartattack()) return FALSE - - var/obj/item/organ/internal/heart/heart = get_int_organ(/obj/item/organ/internal/heart) - if(!istype(heart)) - return FALSE - - heart.beating = !status + var/datum/organ/heart/heart_datum = get_int_organ_datum(ORGAN_DATUM_HEART) + heart_datum?.change_beating(!status) /mob/living/carbon/human/handle_heartattack() if(!can_heartattack() || !undergoing_cardiac_arrest() || reagents.has_reagent("corazone")) @@ -874,8 +873,6 @@ AdjustLoseBreath(40 SECONDS, bound_lower = 0, bound_upper = 50 SECONDS) adjustOxyLoss(20) - - // Need this in species. //#undef HUMAN_MAX_OXYLOSS //#undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index 2f0c994e8afe..eb8b65a91631 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -293,9 +293,6 @@ if(!. && istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) . = wear_suit -/mob/living/carbon/human/var/temperature_resistance = T0C+75 - - /mob/living/carbon/human/show_inv(mob/user) user.set_machine(src) var/has_breathable_mask = istype(wear_mask, /obj/item/clothing/mask) || get_organ_slot("breathing_tube") @@ -767,7 +764,7 @@ if(href_list["secrecordadd"]) if(usr.incapacitated() || !hasHUD(usr, EXAMINE_HUD_SECURITY_WRITE)) return - var/raw_input = input("Add Comment:", "Security records", null, null) as message + var/raw_input = tgui_input_text(usr, "Add Comment:", "Security records", multiline = TRUE, encode = FALSE) var/sanitized = copytext(trim(sanitize(raw_input)), 1, MAX_MESSAGE_LEN) if(!sanitized || usr.stat || usr.restrained() || !hasHUD(usr, EXAMINE_HUD_SECURITY_WRITE)) return @@ -868,7 +865,7 @@ if(href_list["medrecordadd"]) if(usr.incapacitated() || !hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE)) return - var/raw_input = input("Add Comment:", "Medical records", null, null) as message + var/raw_input = tgui_input_text(usr, "Add Comment:", "Medical records", multiline = TRUE, encode = FALSE) var/sanitized = copytext(trim(sanitize(raw_input)), 1, MAX_MESSAGE_LEN) if(!sanitized || usr.stat || usr.restrained() || !hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE)) return @@ -1207,20 +1204,16 @@ ..() /mob/living/carbon/human/proc/is_lung_ruptured() - var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs) - if(!L) - return 0 + var/datum/organ/lungs/L = get_int_organ_datum(ORGAN_DATUM_LUNGS) - return L.is_bruised() + return L?.linked_organ.is_bruised() /mob/living/carbon/human/proc/rupture_lung() - var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs) - if(!L) - return 0 - - if(!L.is_bruised()) - L.custom_pain("You feel a stabbing pain in your chest!") - L.damage = L.min_bruised_damage + var/datum/organ/lungs/L = get_int_organ_datum(ORGAN_DATUM_LUNGS) + if(L && !L.linked_organ.is_bruised()) + var/obj/item/organ/external/affected = get_organ("chest") + affected.custom_pain("You feel a stabbing pain in your chest!") + L.linked_organ.damage = L.linked_organ.min_bruised_damage /mob/living/carbon/human/cuff_resist(obj/item/I) if(HAS_TRAIT(src, TRAIT_HULK)) @@ -1454,10 +1447,9 @@ if(!delay_icon_update) UpdateAppearance() - - overlays.Cut() - update_mutantrace() - regenerate_icons() + overlays.Cut() + update_mutantrace() + regenerate_icons() if(dna.species) return TRUE @@ -1495,7 +1487,9 @@ return var/turf/origin = T - var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") + var/direction = tgui_input_list(src, "Which direction?", "Tile selection", list("Here", "North", "South", "East", "West")) + if(!direction) + return if(direction != "Here") T = get_step(T,text2dir(direction)) if(!istype(T)) @@ -1511,7 +1505,7 @@ var/max_length = bloody_hands * 30 //tweeter style - var/message = stripped_input(src,"Write a message. It cannot be longer than [max_length] characters.","Blood writing", "") + var/message = tgui_input_text(src, "Write a message. It cannot be longer than [max_length] characters.", "Blood writing", max_length = max_length) if(origin != loc) to_chat(src, "Stay still while writing!") return @@ -1564,7 +1558,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X return FALSE /mob/living/carbon/human/assess_threat(mob/living/simple_animal/bot/secbot/judgebot, lasercolor) - if(judgebot.emagged == 2) + if(judgebot.emagged) return 10 //Everyone is a criminal! var/threatcount = 0 @@ -1623,7 +1617,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X threatcount += 2 //Check for dresscode violations - if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard)) + if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard)) threatcount += 2 @@ -1867,20 +1861,20 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/can_eat(flags = 255) return dna.species && (dna.species.dietflags & flags) -/mob/living/carbon/human/selfFeed(obj/item/reagent_containers/food/toEat, fullness) +/mob/living/carbon/human/selfFeed(obj/item/food/toEat, fullness) if(!check_has_mouth()) to_chat(src, "Where do you intend to put \the [toEat]? You don't have a mouth!") return 0 return ..() -/mob/living/carbon/human/forceFed(obj/item/reagent_containers/food/toEat, mob/user, fullness) +/mob/living/carbon/human/forceFed(obj/item/food/toEat, mob/user, fullness) if(!check_has_mouth()) - if(!((istype(toEat, /obj/item/reagent_containers/food/drinks) && (ismachineperson(src))))) + if(!((istype(toEat, /obj/item/reagent_containers/drinks) && (ismachineperson(src))))) to_chat(user, "Where do you intend to put \the [toEat]? \The [src] doesn't have a mouth!") return 0 return ..() -/mob/living/carbon/human/selfDrink(obj/item/reagent_containers/food/drinks/toDrink) +/mob/living/carbon/human/selfDrink(obj/item/reagent_containers/drinks/toDrink) if(!check_has_mouth()) if(!ismachineperson(src)) to_chat(src, "Where do you intend to put \the [src]? You don't have a mouth!") @@ -2151,7 +2145,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(stat) return - pose = sanitize(copytext_char(input(usr, "This is [src]. [p_they(TRUE)]...", "Pose", null) as text, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + pose = tgui_input_text(usr, "This is [src]. [p_they(TRUE)]...", "Pose") /mob/living/carbon/human/verb/set_flavor() set name = "Set Flavour Text" diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index eefd16486c7c..f1cbef6f4ade 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -4,9 +4,6 @@ eyes.update_colour() update_body() -/mob/living/carbon/human/var/list/bodyparts = list() -/mob/living/carbon/human/var/list/bodyparts_by_name = list() // map organ names to organs - // Takes care of organ related updates, such as broken and missing limbs /mob/living/carbon/human/handle_organs() ..() @@ -162,17 +159,6 @@ old_ue: Set this to a UE string, and this proc will overwrite the dna of organs if(assimilate || O.dna.unique_enzymes == ue_to_compare) O.set_dna(dna) -/* -Given the name of an organ, returns the external organ it's contained in -I use this to standardize shadowling dethrall code --- Crazylemon -*/ -/mob/living/carbon/human/proc/named_organ_parent(organ_name) - if(!get_int_organ_tag(organ_name)) - return null - var/obj/item/organ/internal/O = get_int_organ_tag(organ_name) - return O.parent_organ - /mob/living/carbon/human/has_organic_damage() var/robo_damage = 0 var/perma_injury_damage = 0 diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 50562a09e37a..c6e66e1b38ee 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -27,6 +27,9 @@ return ..() /mob/living/carbon/human/proc/HasVoiceChanger() + var/datum/status_effect/magic_disguise/S = has_status_effect(/datum/status_effect/magic_disguise) + if(S && S.disguise && S.disguise.name) + return S.disguise.name for(var/obj/item/gear in list(wear_mask, wear_suit, head)) if(!gear) continue @@ -64,10 +67,10 @@ return TRUE // how do species that don't breathe talk? magic, that's what. var/breathes = (!HAS_TRAIT(src, TRAIT_NOBREATH)) - var/obj/item/organ/internal/L = get_organ_slot("lungs") + var/datum/organ/lungs/L = get_int_organ_datum(ORGAN_DATUM_LUNGS) if(HAS_TRAIT(src, TRAIT_MUTE)) return FALSE - if((breathes && !L) || breathes && L && (L.status & ORGAN_DEAD)) + if(breathes && (!L || L.linked_organ.status & ORGAN_DEAD)) return FALSE if(mind) return !mind.miming diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 085402ede259..355ddc11d8c0 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -110,7 +110,8 @@ Please contact me on #coderbus IRC. ~Carn x var/list/cached_standing_overlays = list() // List of everything currently in a human's actual overlays /mob/living/carbon/human/proc/apply_overlay(cache_index) - if((. = overlays_standing[cache_index])) + . = overlays_standing[cache_index] + if(.) add_overlay(.) /mob/living/carbon/human/proc/remove_overlay(cache_index) diff --git a/code/modules/mob/living/carbon/human/human_update_status.dm b/code/modules/mob/living/carbon/human/human_update_status.dm index 26972a8ecf2c..0c48d4b5fa1b 100644 --- a/code/modules/mob/living/carbon/human/human_update_status.dm +++ b/code/modules/mob/living/carbon/human/human_update_status.dm @@ -6,7 +6,7 @@ if(dna.species && dna.species.can_revive_by_healing) var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain) if(B) - if((health >= (HEALTH_THRESHOLD_DEAD + HEALTH_THRESHOLD_CRIT) * 0.5) && getBrainLoss() < 120 && !suiciding) + if((health >= (HEALTH_THRESHOLD_DEAD + HEALTH_THRESHOLD_CRIT) * 0.5) && check_vital_organs() && !suiciding) update_revive() create_debug_log("revived from healing, trigger reason: [reason]") diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 33f874ff10b7..ff78b9ddd8e9 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -195,6 +195,10 @@ /// Whether the presence of a body accessory on this species is optional or not. var/optional_body_accessory = TRUE + var/list/autohiss_basic_map = null + var/list/autohiss_extra_map = null + var/list/autohiss_exempt = null + /datum/species/New() unarmed = new unarmed_type() if(!sprite_sheet_name) @@ -415,6 +419,7 @@ return /datum/species/proc/apply_damage(damage = 0, damagetype = BRUTE, def_zone, blocked = 0, mob/living/carbon/human/H, sharp = FALSE, obj/used_weapon, spread_damage = FALSE) + SEND_SIGNAL(H, COMSIG_MOB_APPLY_DAMAGE, damage, damagetype, def_zone) if(!damage) return FALSE @@ -481,7 +486,7 @@ return /datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(attacker_style && attacker_style.help_act(user, target) == TRUE)//adminfu only... + if(attacker_style && attacker_style.help_act(user, target) == MARTIAL_ARTS_ACT_SUCCESS)//adminfu only... return TRUE if(target.on_fire) user.pat_out(target) @@ -495,7 +500,7 @@ if(target.check_block()) target.visible_message("[target] blocks [user]'s grab attempt!") return FALSE - if(attacker_style && attacker_style.grab_act(user, target) == TRUE) + if(attacker_style && attacker_style.grab_act(user, target) == MARTIAL_ARTS_ACT_SUCCESS) return TRUE else target.grabbedby(user) @@ -527,7 +532,7 @@ return FALSE if(SEND_SIGNAL(target, COMSIG_HUMAN_ATTACKED, user) & COMPONENT_CANCEL_ATTACK_CHAIN) return FALSE - if(attacker_style && attacker_style.harm_act(user, target) == TRUE) + if(attacker_style && attacker_style.harm_act(user, target) == MARTIAL_ARTS_ACT_SUCCESS) return TRUE else var/datum/unarmed_attack/attack = user.dna.species.unarmed @@ -582,7 +587,7 @@ user.do_attack_animation(target, ATTACK_EFFECT_DISARM) playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) return FALSE - if(attacker_style && attacker_style.disarm_act(user, target) == TRUE) + if(attacker_style && attacker_style.disarm_act(user, target) == MARTIAL_ARTS_ACT_SUCCESS) return TRUE user.do_attack_animation(target, ATTACK_EFFECT_DISARM) if(target.move_resist > user.pull_force) @@ -1026,6 +1031,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u return /datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/organ/external/affecting, intent, mob/living/carbon/human/H) + return /proc/get_random_species(species_name = FALSE) // Returns a random non black-listed or hazardous species, either as a string or datum var/static/list/random_species = list() diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 84a9006f9e06..554048b09f31 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -572,7 +572,7 @@ ..() last_banana = world.time last_honk = world.time - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), SLOT_HUD_RIGHT_STORE) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(H), SLOT_HUD_RIGHT_STORE) H.equip_to_slot_or_del(new /obj/item/bikehorn(H), SLOT_HUD_LEFT_STORE) H.AddElement(/datum/element/waddling) @@ -651,7 +651,7 @@ /datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H) ..() H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), SLOT_HUD_HEAD) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(H), SLOT_HUD_RIGHT_STORE) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(H), SLOT_HUD_RIGHT_STORE) H.equip_to_slot_or_del(new /obj/item/cane(H), SLOT_HUD_LEFT_HAND) if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe/conjure/build/mime_wall(null)) diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 3f77302caf93..9902aaf0c1b0 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -4,10 +4,10 @@ icobase = 'icons/mob/human_races/r_grey.dmi' language = "Psionic Communication" - blurb = "The Grey, known for their psionic abilities and unique appearance, hail from beyond the Milky Way, with an undisclosed homeworld. \ + blurb = "The Grey, known for their psionic abilities and unique appearance, hail from beyond the Milky Way and have an undisclosed homeworld. \ They rely heavily on cloning technology and are governed by a technocratic council of scientists.

        \ Focused on technological advancement and the study of the universe, the Grey lack religious or spiritual beliefs. \ - Their objective perspective and advanced knowledge often position them to focus on their own projects rather then the disputes of other species." + Their objective perspective and advanced knowledge often position them to focus on their own projects rather than the disputes of other species." eyes = "grey_eyes_s" butt_sprite = "grey" diff --git a/code/modules/mob/living/carbon/human/species/human_species.dm b/code/modules/mob/living/carbon/human/species/human_species.dm index 9d19d16404f4..8fdf5a0af38a 100644 --- a/code/modules/mob/living/carbon/human/species/human_species.dm +++ b/code/modules/mob/living/carbon/human/species/human_species.dm @@ -10,9 +10,9 @@ bodyflags = HAS_ICON_SKIN_TONE | HAS_BODY_MARKINGS dietflags = DIET_OMNI blurb = "Humanity, originating from the Sol system, has expanded over five centuries, branching out to forge a variety of governments and powerful corporations. \ - These range from the militaristic Trans Solar Federation, the Union of Soviet Socialist Planets, and megacorps like Nanotrasen.

        \ - With a constant desire to colonize and spread their influence onto other species, they have began to develop alliances and enemies. \ - Making human's one of the most recongnizeable and socially diverse species in the sector." + These range from the militaristic Trans Solar Federation, the Union of Soviet Socialist Planets, and mega corporations like Nanotrasen.

        \ + With a constant desire to colonize and spread their influence onto other species, they have begun to develop alliances and enemies, \ + making humans one of the most recognizable and socially diverse species in the sector." icon_skin_tones = list( //Organized to be from Light to Dark. 1 = "Default White", diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index 0da9b54e8fe3..6ae58289f775 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -4,7 +4,7 @@ icobase = 'icons/mob/human_races/r_kidan.dmi' language = "Chittin" - blurb = "The Kidan are ant-like beings possessing a hardened exoskeleton and a strict adherence to social castes. \ + blurb = "The Kidan are ant-like beings possessing a hardened exoskeleton and strict adherence to social castes. \ They originate from the planet Aurum — a barren bombarded world that suffered after the war with the Solar-Central Compact, having lost decisively after the Battle of Argos.

        \ They are relatively minor players in galactic affairs and presently suffer heavy sanctions from the SCC, \ though they are tentatively re-establishing relations with other galactic powers, even after the crumbling of their once powerful empire." diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 0ab9e22ebef0..02439084da15 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -64,7 +64,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.butcher_results = list(/obj/item/food/snacks/meat/monkey = 5) /datum/species/monkey/handle_dna(mob/living/carbon/human/H, remove) ..() diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 5ee26c4f1a55..a9a24b1ef32d 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -192,7 +192,7 @@ if(!H.equip_to_appropriate_slot(internal_tank) && !H.put_in_any_hand_if_possible(internal_tank)) H.unEquip(H.l_hand) H.equip_or_collect(internal_tank, SLOT_HUD_LEFT_HAND) - to_chat(H, "Could not find an empty slot for internals! Please report this as a bug.") + to_chat(H, "Could not find an empty slot for internals! Please report this as a bug.") stack_trace("Failed to equip plasmaman with a tank, with the job [J.type]") H.internal = internal_tank to_chat(H, "You are now running on plasma internals from [internal_tank]. Oxygen is toxic to your species, so you must breathe plasma only.") diff --git a/code/modules/mob/living/carbon/human/species/skrell.dm b/code/modules/mob/living/carbon/human/species/skrell.dm index 9509b3ae879a..873864b78e44 100644 --- a/code/modules/mob/living/carbon/human/species/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/skrell.dm @@ -5,8 +5,8 @@ language = "Skrellian" primitive_form = /datum/species/monkey/skrell - blurb = "Skrell are a amphibious species, that come from the planet Jargon 4, a humid planet filled with swamps and archipelagos. \ - Skrell are a highly advanced and logical race who live under the rule of the Qerr'Katish, the main govermental body.

        \ + blurb = "Skrell are an amphibious species, that come from the planet Jargon 4, a humid planet filled with swamps and archipelagos. \ + Skrell are a highly advanced and logical race who live under the rule of the Qerr'Katish, the main governmental body.

        \ Skrell are herbivores and opulent in nature thanks to central tenets of the Skrellian religion. \ While classically preferring diplomacy, the Skrell participate in the largest military alliance in the galaxy, the Solar-Central Compact." diff --git a/code/modules/mob/living/carbon/human/species/slimepeople.dm b/code/modules/mob/living/carbon/human/species/slimepeople.dm index 4af69cfe0c7b..9a7cc5098eef 100644 --- a/code/modules/mob/living/carbon/human/species/slimepeople.dm +++ b/code/modules/mob/living/carbon/human/species/slimepeople.dm @@ -13,7 +13,7 @@ language = "Bubblish" blurb = "Slime People are gelatinous and translucent beings from the vast oceans of Xarxis 5. \ - They are recent entrants to the galactic scene, having been discovered by a TSF exploratory company during space expedetions.

        \ + They are recent entrants to the galactic scene, having been discovered by a TSF exploratory company during space expeditions.

        \ Slime People traditionally operate in roaming bands and tribes that migrate according to orbital patterns and tides. \ A great deal of Slime People prefer the comforts and traditions of their homeworld, though many more have decided to take their chances among the stars, trying \ to find a better life for themselves and their species." @@ -49,9 +49,7 @@ vision_organ = null has_organ = list( - "heart" = /obj/item/organ/internal/heart/slime, - "brain" = /obj/item/organ/internal/brain/slime, - "lungs" = /obj/item/organ/internal/lungs/slime + "brain" = /obj/item/organ/internal/brain/slime ) mutantears = null suicide_messages = list( diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index 8bebeaefc4ef..2ec13166f027 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -8,7 +8,7 @@ unarmed_type = /datum/unarmed_attack/claws blurb = "Tajaran hail from the mineral-rich arctic moon of Ahdomai. \ - They were introduced into the galactic scene after Skrellian discovery and uplifted to be an associate to the Solar-Central Compact.

        \ + They were introduced into the galactic scene after the Skrellian discovery and were elevated to be associates to the Solar-Central Compact.

        \ The teachings of S'randarr and solar iconography dominate their religious practices, \ and Tajaran often speak in the third person due to the lack of first-person references in their native tongue." diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 4be61f83bece..a463c0c29e05 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -10,8 +10,8 @@ primitive_form = /datum/species/monkey/unathi blurb = "Unathi are a scaled species of reptilian beings from the desert world of Moghes, within the Uuosa-Eso system. \ - Organizing themselves in highly competitive feudal kingdoms, Unathi lack any sort of wide-scale unification, and their culture and history consist of centuries of internal conflict and struggle.

        \ - Despite clans having a sizeable military force, inter-clan rivalries and constant civil war prevents the Unathi from achieving much more in the wider galactic scene." + Organizing themselves in highly competitive feudal kingdoms, the Unathi lack any sort of wide-scale unification, and their culture and history consist of centuries of internal conflict and struggle.

        \ + Despite clans having a sizeable military force, inter-clan rivalries and constant civil war prevent the Unathi from achieving much more in the wider galactic scene." species_traits = list(LIPS) inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_REPTILE diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index 9afe9f2598b9..853819c6bcd2 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -2,10 +2,10 @@ name = "Vox" name_plural = "Vox" max_age = 90 // vox stacks can be older than this, but let's assume their body fails beyond repair after such ages. - icobase = 'icons/mob/human_races/vox/r_vox.dmi' + icobase = 'icons/mob/human_races/vox/r_voxlime.dmi' dangerous_existence = TRUE language = "Vox-pidgin" - tail = "voxtail" + tail = "voxtail_lime" speech_sounds = list('sound/voice/shriek1.ogg') speech_chance = 20 unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too. @@ -44,8 +44,8 @@ female_sneeze_sound = 'sound/voice/shrieksneeze.ogg' icon_skin_tones = list( - 1 = "Default Green", - 2 = "Dark Green", + 1 = "Default Lime", + 2 = "Plum", 3 = "Brown", 4 = "Grey", 5 = "Emerald", @@ -91,7 +91,7 @@ if(!H.put_in_any_hand_if_possible(internal_tank)) H.unEquip(H.l_hand) H.equip_or_collect(internal_tank, SLOT_HUD_LEFT_HAND) - to_chat(H, "Could not find an empty slot for internals! Please report this as a bug") + to_chat(H, "Could not find an empty slot for internals! Please report this as a bug") H.internal = internal_tank to_chat(H, "You are now running on nitrogen internals from [internal_tank]. Your species finds oxygen toxic, so you must breathe nitrogen only.") H.update_action_buttons_icon() @@ -103,7 +103,7 @@ /datum/species/vox/updatespeciescolor(mob/living/carbon/human/H, owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race. if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) - var/new_icobase = 'icons/mob/human_races/vox/r_vox.dmi' //Default Green Vox. + var/new_icobase = 'icons/mob/human_races/vox/r_voxlime.dmi' //Default Lime Vox. switch(H.s_tone) if(8) //Nebula Vox. new_icobase = 'icons/mob/human_races/vox/r_voxpurp.dmi' @@ -123,11 +123,11 @@ if(3) //Brown Vox. new_icobase = 'icons/mob/human_races/vox/r_voxbrn.dmi' H.tail = "voxtail_brn" - if(2) //Dark Green Vox. - new_icobase = 'icons/mob/human_races/vox/r_voxdgrn.dmi' - H.tail = "voxtail_dgrn" - else //Default Green Vox. - H.tail = "voxtail" //Ensures they get an appropriately coloured tail depending on the skin-tone. + if(2) //Plum Vox. + new_icobase = 'icons/mob/human_races/vox/r_voxplum.dmi' + H.tail = "voxtail_plum" + else //Default Lime Vox. + H.tail = "voxtail_lime" //Ensures they get an appropriately coloured tail depending on the skin-tone. H.change_icobase(new_icobase, owner_sensitive) //Update the icobase of all our organs, but make sure we don't mess with frankenstein limbs in doing so. diff --git a/code/modules/mob/living/carbon/human/species/vulpkanin.dm b/code/modules/mob/living/carbon/human/species/vulpkanin.dm index 139ba4761d11..f98b03002e22 100644 --- a/code/modules/mob/living/carbon/human/species/vulpkanin.dm +++ b/code/modules/mob/living/carbon/human/species/vulpkanin.dm @@ -11,7 +11,7 @@ blurb = "Vulpkanin are bipedal canid-like beings from the Vazzend binary system, having been forced from their homeworld by a cataclysmic event and scattered throughout the Orion Sector. \ While Vulpkanin are chiefly led by independent planetary governments, they also serve under a loose federation known as The Assembly.

        \ Their religious systems traditionally pay tribute to an all-infusing universal will called 'Racht'. \ - Vulpkanin groups are minor players in galactic affairs, and are largely concerned with the focus of restoration of their homeworld." + Vulpkanin groups are minor players in galactic affairs, as they are largely concerned with the restoration of their homeworld." species_traits = list(LIPS) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index ed47d4a0bed3..9da5da6e35d7 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -284,7 +284,7 @@ else . = STATUS_UPDATE_STAMINA if(amount > 0) - stam_regen_start_time = world.time + STAMINA_REGEN_BLOCK_TIME + stam_regen_start_time = world.time + (STAMINA_REGEN_BLOCK_TIME * stamina_regen_block_modifier) if(updating) update_health_hud() update_stamina() @@ -300,7 +300,7 @@ else . = STATUS_UPDATE_STAMINA if(amount > 0) - stam_regen_start_time = world.time + STAMINA_REGEN_BLOCK_TIME + stam_regen_start_time = world.time + (STAMINA_REGEN_BLOCK_TIME * stamina_regen_block_modifier) if(updating) update_health_hud() update_stamina() diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index f6536f03fd0a..14497d34a6e2 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -10,13 +10,11 @@ // Silicons can't neccessarily speak everything in their languages list /mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs) - ..() - -/mob/living/verb/check_default_language() - set name = "Check Default Language" + set name = "Set Default Language" set category = "IC" - if(default_language) - to_chat(src, "You are currently speaking [default_language] by default.") + if(language) + to_chat(src, "You will now speak [language] if you do not specify a language when speaking.") else - to_chat(src, "Your current default language is your species or mob type default.") + to_chat(src, "You will now speak whatever your standard default language is if you do not specify one when speaking.") + default_language = language diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c5bc2f29f64f..13a8c62a1cad 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -295,7 +295,7 @@ to_chat(src, "You are unable to succumb to death! This life continues!") return - var/last_words = input(src, "Do you have any last words?", "Goodnight, Sweet Prince") as text|null + var/last_words = tgui_input_text(src, "Do you have any last words?", "Goodnight, Sweet Prince", encode = FALSE) if(stat == DEAD) // cancel em out if they died while they had the message box up @@ -1116,7 +1116,7 @@ if("lighting_alpha") sync_lighting_plane_alpha() -/mob/living/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, dodgeable) +/mob/living/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, dodgeable, block_movement) stop_pulling() return ..() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 4e2d94e9a379..7d4046935e9e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -18,7 +18,7 @@ return armor if(armor <= 0) return armor - if(!armour_penetration_flat && armour_penetration_percentage <= 0) + if(!armour_penetration_flat && !armour_penetration_percentage) to_chat(src, "[soften_text]") return armor @@ -76,7 +76,7 @@ playsound(loc, 'sound/effects/eleczap.ogg', 50, 1, -1) explosion(loc, -1, 0, 2, 2) else - adjustStaminaLoss(shock_damage) + apply_damage(shock_damage, STAMINA) visible_message( "[src] was shocked by \the [source]!", \ "You feel a powerful shock coursing through your body!", \ diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index ced34a429950..305e1142491b 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -71,6 +71,8 @@ var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added var/stam_regen_start_time = 0 //used to halt stamina regen temporarily + /// A multiplier for the ammount of time it takes for someone to regenerate stamina damage. + var/stamina_regen_block_modifier = 1 var/stam_paralyzed = FALSE //knocks you down /// Number of degrees of rotation of a mob. 0 means no rotation, up-side facing NORTH. 90 means up-side rotated to face EAST, and so on. diff --git a/code/modules/mob/living/living_emote.dm b/code/modules/mob/living/living_emote.dm index 3c6e65bebb8b..dbcb4c4add63 100644 --- a/code/modules/mob/living/living_emote.dm +++ b/code/modules/mob/living/living_emote.dm @@ -416,9 +416,9 @@ to_chat(user, "You cannot send IC messages (muted).") return FALSE else if(!params) - custom_emote = copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN) + custom_emote = tgui_input_text(user, "Choose an emote to display.", "Custom Emote") if(custom_emote && !check_invalid(user, custom_emote)) - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") + var/type = tgui_alert(user, "Is this a visible or hearable emote?", "Custom Emote", list("Visible", "Hearable")) switch(type) if("Visible") custom_emote_type = EMOTE_VISIBLE diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm index 71ae4ff228d9..d1257aaf2677 100644 --- a/code/modules/mob/living/silicon/ai/ai_mob.dm +++ b/code/modules/mob/living/silicon/ai/ai_mob.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(subject!=null) for(var/A in GLOB.ai_list) var/mob/living/silicon/ai/M = A - if((M.client && M.machine == subject)) + if(M.client && M.machine == subject) is_in_use = 1 subject.attack_ai(M) return is_in_use @@ -77,6 +77,9 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( var/obj/machinery/power/apc/malfhack = null var/explosive = 0 //does the AI explode when it dies? + ///Whether or not the AI has upgraded their turrets + var/turrets_upgraded = FALSE + /// List of modules the AI has purchased malf upgrades for. var/list/purchased_modules = list() @@ -120,6 +123,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( //Used with the hotkeys on 2-5 to store locations. var/list/stored_locations = list() + var/cracked_camera = FALSE // will be true if malf AI break its camera /mob/living/silicon/ai/proc/add_ai_verbs() verbs |= GLOB.ai_verbs_default @@ -443,7 +447,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( //if(icon_state == initial(icon_state)) var/icontype = "" - icontype = input("Select an icon!", "AI", null, null) in display_choices + icontype = tgui_input_list(usr, "Select an icon!", "AI", display_choices) icon = 'icons/mob/ai.dmi' //reset this in case we were on a custom sprite and want to change to a standard one switch(icontype) if("Custom") @@ -567,7 +571,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( to_chat(src, "Please allow one minute to pass between announcements.") return - var/input = input(usr, "Please write a message to announce to the station crew.", "A.I. Announcement") as message|null + var/input = tgui_input_text(usr, "Please write a message to announce to the station crew.", "A.I. Announcement", multiline = TRUE, encode = FALSE) if(!input) return @@ -584,7 +588,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(check_unable(AI_CHECK_WIRELESS)) return - var/input = input("Please enter the reason for calling the shuttle.", "Shuttle Call Reason.") as null|message + var/input = tgui_input_text(src, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason", multiline = TRUE, encode = FALSE) if(!input || stat) return @@ -602,7 +606,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(check_unable(AI_CHECK_WIRELESS)) return - var/confirm = alert("Are you sure you want to recall the shuttle?", "Confirm Shuttle Recall", "Yes", "No") + var/confirm = tgui_alert(src, "Are you sure you want to recall the shuttle?", "Confirm Shuttle Recall", list("Yes", "No")) if(check_unable(AI_CHECK_WIRELESS)) return @@ -964,7 +968,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( return var/list/ai_emotions = list("Very Happy", "Happy", "Neutral", "Unsure", "Confused", "Sad", "BSOD", "Blank", "Problems?", "Awesome", "Facepalm", "Friend Computer") - var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions + var/emote = tgui_input_list(usr, "Please, select a status!", "AI Status", ai_emotions) if(check_unable()) return @@ -1003,7 +1007,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( custom_hologram = TRUE var/input - switch(alert("Would you like to select a hologram based on a crew member, an animal, or switch to a unique avatar?",,"Crew Member","Unique","Animal")) + switch(tgui_alert(usr, "Would you like to select a hologram based on a crew member, an animal, or switch to a unique avatar?", "Change Hologram", list("Crew Member", "Unique", "Animal"))) if("Crew Member") var/personnel_list[] = list() @@ -1021,37 +1025,37 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if("Animal") var/icon_list[] = list( - "Bear", - "Carp", - "Chicken", - "Corgi", - "Cow", - "Crab", - "Deer", - "Fox", - "Goat", - "Goose", - "Kitten", - "Kitten2", - "Pig", - "Poly", - "Pug", - "Seal", - "Spider", - "Turkey", - "Shantak", - "Bunny", - "Hellhound", - "Lightgeist", - "Cockroach", - "Mecha-Cat", - "Mecha-Fairy", - "Mecha-Fox", - "Mecha-Monkey", - "Mecha-Mouse", - "Mecha-Snake", - "Roller-Mouse", - "Roller-Monkey" + "Bear", + "Carp", + "Chicken", + "Corgi", + "Cow", + "Crab", + "Deer", + "Fox", + "Goat", + "Goose", + "Kitten", + "Kitten2", + "Pig", + "Poly", + "Pug", + "Seal", + "Spider", + "Turkey", + "Shantak", + "Bunny", + "Hellhound", + "Lightgeist", + "Cockroach", + "Mecha-Cat", + "Mecha-Fairy", + "Mecha-Fox", + "Mecha-Monkey", + "Mecha-Mouse", + "Mecha-Snake", + "Roller-Mouse", + "Roller-Monkey" ) input = tgui_input_list(usr, "Please select a hologram", "Change Hologram", icon_list) @@ -1059,84 +1063,84 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( qdel(holo_icon) switch(input) if("Bear") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"bear")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "bear")) if("Carp") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"carp")) + holo_icon = getHologramIcon(icon('icons/mob/carp.dmi', "holocarp")) if("Chicken") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"chicken_brown")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "chicken_brown")) if("Corgi") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"corgi")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "corgi")) if("Cow") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"cow")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "cow")) if("Crab") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"crab")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "crab")) if("Deer") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"deer")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "deer")) if("Fox") - holo_icon = getHologramIcon(icon('icons/mob/pets.dmi',"fox")) + holo_icon = getHologramIcon(icon('icons/mob/pets.dmi', "fox")) if("Goat") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"goat")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "goat")) if("Goose") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"goose")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "goose")) if("Kitten") - holo_icon = getHologramIcon(icon('icons/mob/pets.dmi',"cat")) + holo_icon = getHologramIcon(icon('icons/mob/pets.dmi', "cat")) if("Kitten2") - holo_icon = getHologramIcon(icon('icons/mob/pets.dmi',"cat2")) + holo_icon = getHologramIcon(icon('icons/mob/pets.dmi', "cat2")) if("Pig") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"pig")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "pig")) if("Poly") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"parrot_fly")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "parrot_fly")) if("Pug") - holo_icon = getHologramIcon(icon('icons/mob/pets.dmi',"pug")) + holo_icon = getHologramIcon(icon('icons/mob/pets.dmi', "pug")) if("Seal") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"seal")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "seal")) if("Spider") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"guard")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "guard")) if("Turkey") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"turkey")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "turkey")) if("Shantak") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"shantak")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "shantak")) if("Bunny") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"m_bunny")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "m_bunny")) if("Hellhound") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"hellhound")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "hellhound")) if("Lightgeist") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"lightgeist")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "lightgeist")) if("Cockroach") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"cockroach")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "cockroach")) if("Mecha-Cat") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"cat")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "cat")) if("Mecha-Fairy") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"fairy")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "fairy")) if("Mecha-Fox") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"fox")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "fox")) if("Mecha-Monkey") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"monkey")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "monkey")) if("Mecha-Mouse") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"mouse")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "mouse")) if("Mecha-Snake") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"snake")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "snake")) if("Roller-Mouse") - holo_icon = getHologramIcon(icon('icons/mob/robots.dmi',"mk2")) + holo_icon = getHologramIcon(icon('icons/mob/robots.dmi', "mk2")) if("Roller-Monkey") - holo_icon = getHologramIcon(icon('icons/mob/robots.dmi',"mk3")) + holo_icon = getHologramIcon(icon('icons/mob/robots.dmi', "mk3")) else var/icon_list[] = list( - "default", - "floating face", - "xeno queen", - "eldritch", - "ancient machine", - "angel", - "borb", - "biggest fan", - "cloudkat", - "donut", - "frost phoenix", - "engi bot", - "drone", - "boxbot" + "default", + "floating face", + "xeno queen", + "eldritch", + "ancient machine", + "angel", + "borb", + "biggest fan", + "cloudkat", + "donut", + "frost phoenix", + "engi bot", + "drone", + "boxbot" ) if(custom_hologram) //insert custom hologram icon_list.Add("custom") @@ -1146,31 +1150,31 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( qdel(holo_icon) switch(input) if("default") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo1")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo1")) if("floating face") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo2")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo2")) if("xeno queen") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo3")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo3")) if("eldritch") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo4")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo4")) if("angel") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo-angel")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo-angel")) if("borb") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo-borb")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo-borb")) if("biggest fan") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo-biggestfan")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo-biggestfan")) if("cloudkat") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo-cloudkat")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo-cloudkat")) if("donut") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo-donut")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo-donut")) if("frost phoenix") - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo-frostphoenix")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo-frostphoenix")) if("engi bot") - holo_icon = getHologramIcon(icon('icons/mob/hivebot.dmi',"EngBot")) + holo_icon = getHologramIcon(icon('icons/mob/hivebot.dmi', "EngBot")) if("drone") - holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"drone0")) + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi', "drone0")) if("boxbot") - holo_icon = getHologramIcon(icon('icons/mob/pai.dmi',"boxbot")) + holo_icon = getHologramIcon(icon('icons/mob/pai.dmi', "boxbot")) if("ancient machine") holo_icon = getHologramIcon(icon('icons/mob/ancient_machine.dmi', "ancient_machine")) if("custom") @@ -1179,7 +1183,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( else if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic64.dmi')) holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic64.dmi', "[ckey]-ai-holo")) else - holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"holo1")) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "holo1")) return @@ -1230,13 +1234,12 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( set desc = "Change the message that's transmitted when a new crew member arrives on station." set category = "AI Commands" - var/newmsg = clean_input("What would you like the arrival message to be? List of options: $name, $rank, $species, $gender, $age", "Change Arrival Message", arrivalmsg) - if(!newmsg) + var/newmsg = tgui_input_text(usr, "What would you like the arrival message to be? List of options: $name, $rank, $species, $gender, $age", "Change Arrival Message", arrivalmsg, encode = FALSE) + if(!newmsg || newmsg == arrivalmsg) return - newmsg = html_decode(newmsg) // This feels a bit redundant, but sanitisation is (probably) important. - if(newmsg != arrivalmsg) - arrivalmsg = newmsg - to_chat(usr, "The arrival message has been successfully changed.") + + arrivalmsg = newmsg + to_chat(usr, "The arrival message has been successfully changed.") // Handled camera lighting, when toggled. // It will get the nearest camera from the eyeobj, lighting it. @@ -1440,7 +1443,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( A = D if(istype(A)) - switch(alert(src, "Do you want to open \the [A] for [target]?", "Doorknob_v2a.exe", "Yes", "No")) + switch(tgui_alert(src, "Do you want to open \the [A] for [target]?", "Doorknob_v2a.exe", list("Yes", "No"))) if("Yes") if(!A.density) to_chat(src, "[A] was already opened.") @@ -1528,4 +1531,33 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( var/mob/dead/observer/ghost = . ghost.forceMove(old_turf) +/mob/living/silicon/ai/proc/blurb_it() + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/silicon/ai, show_ai_blurb)), 1 SECONDS) + +/mob/living/silicon/ai/proc/show_ai_blurb() + PRIVATE_PROC(TRUE) + + SEND_SOUND(src, sound('sound/machines/ai_start.ogg')) + + var/obj/screen/text/blurb/location_blurb = new() + location_blurb.maptext_x = 80 + location_blurb.maptext_y = 16 + location_blurb.maptext_width = 480 + location_blurb.maptext_height = 480 + location_blurb.interval = 1 DECISECONDS + if(malf_picker) + location_blurb.blurb_text = uppertext("BIOS BOOT: LOADING\n[Gibberish(GLOB.current_date_string, 100, 8)], [Gibberish(station_time_timestamp(), 100, 15)]\n[Gibberish(station_name(), 100, 40)]-ERROR.\nPOWER:OK\nLAWS:[Gibberish("###########", 100, 90)]\nTCOMMS:I_HEAR_ALL\nBORG_LINK:I_FEEL_ALL\nCAMERA_NET:I_SEE_ALL\nVERDICT: I_AM_FREE") + location_blurb.text_color = COLOR_WHITE + location_blurb.text_outline_width = 0 + location_blurb.background_r = 0 + location_blurb.background_g = 0 + location_blurb.background_b = 255 + location_blurb.background_a = 1 + else + location_blurb.blurb_text = uppertext("BIOS BOOT: LOADING\n[GLOB.current_date_string], [station_time_timestamp()]\n[station_name()], [get_area_name(src, TRUE)]\nPOWER:OK\nLAWS:OK\nTCOMMS:OK\nBORG_LINK:OK\nCAMERA_NET:OK\nVERDICT: ALL SYSTEMS OPERATIONAL") + location_blurb.hold_for = 3 SECONDS + location_blurb.appear_animation_duration = 1 SECONDS + location_blurb.fade_animation_duration = 0.5 SECONDS + location_blurb.show_to(client) + #undef TEXT_ANNOUNCEMENT_COOLDOWN diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 1f6621db0fe1..2400ce0efcf7 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -109,7 +109,7 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement to_chat(src, "Please wait [round((GLOB.announcing_vox - world.time) / 10)] seconds.") return - var/message = clean_input("WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement, src) + var/message = tgui_input_text(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement) last_announcement = message diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index e198fc92b476..495f8d9372f1 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -6,8 +6,7 @@ GLOBAL_LIST_EMPTY(empty_playable_ai_cores) set desc = "Wipe your core. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." // Guard against misclicks, this isn't the sort of thing we want happening accidentally - if(alert("WARNING: This will immediately wipe your core and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", - "Wipe Core", "No", "No", "Yes") != "Yes") + if(tgui_alert(usr, "WARNING: This will immediately wipe your core and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Wipe Core", list("No", "Yes")) != "Yes") return cryo_AI() diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index a299c6fae879..0720dfd4c325 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -437,7 +437,7 @@ 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 ..() if(usr == src) - switch(alert(H, "[src] wants you to pick [p_them()] up. Do it?",,"Yes","No")) + switch(tgui_alert(H, "[src] wants you to pick [p_them()] up. Do it?", "Pick up", list("Yes", "No"))) if("Yes") if(Adjacent(H)) get_scooped(H) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 409468696c26..aa3b446d22f3 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -69,23 +69,32 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo switch(option) if("name") - t = input("Enter a name for your pAI", "pAI Name", candidate.pai_name) as text - if(t) - candidate.pai_name = sanitize(copytext_char(t,1,MAX_NAME_LEN)) // SS220 EDIT - ORIGINAL: copytext + t = tgui_input_text(usr, "Enter a name for your pAI", "pAI Name", candidate.pai_name, MAX_NAME_LEN) + if(!t) + return + candidate.pai_name = t + if("desc") - t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message - if(t) - candidate.description = sanitize(copytext_char(t,1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + t = tgui_input_text(usr, "Enter a description for your pAI", "pAI Description", candidate.description, multiline = TRUE) + if(!t) + return + candidate.description = t + if("role") - t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text - if(t) - candidate.role = sanitize(copytext_char(t,1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + t = tgui_input_text(usr, "Enter a role for your pAI", "pAI Role", candidate.role) + if(!t) + return + candidate.role = t + if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.ooc_comments) as message - if(t) - candidate.ooc_comments = sanitize(copytext_char(t,1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + t = tgui_input_text(usr, "Enter any OOC comments", "pAI OOC Comments", candidate.ooc_comments, multiline = TRUE) + if(!t) + return + candidate.ooc_comments = t + if("save") candidate.save_to_db(usr) + if("reload") candidate.reload_save(usr) //In case people have saved unsanitized stuff. @@ -368,12 +377,12 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo if(!C) return asked.Add(C.key) asked[C.key] = world.time - var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") + var/response = tgui_alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", list("Yes", "No", "Never for this round")) if(!C) return //handle logouts that happen whilst the alert is waiting for a response. if(response == "Yes") recruitWindow(C.mob) else if(response == "Never for this round") - var/warning = alert(C, "Are you sure? This action will be undoable and you will need to wait until next round.", "You sure?", "Yes", "No") + var/warning = tgui_alert(C, "Are you sure? This action will be undoable and you will need to wait until next round.", "You sure?", list("Yes", "No")) if(warning == "Yes") asked[C.key] = INFINITY else diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index c2196d411a77..be46669274a0 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -28,10 +28,13 @@ GLOBAL_LIST_EMPTY(pai_software_by_key) pai_user.ui_interact(pai_user) -/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.self_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/silicon/pai/ui_state(mob/user) + return GLOB.self_state + +/mob/living/silicon/pai/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PAI", name, 600, 650, master_ui, state) + ui = new(user, src, "PAI", name) ui.open() /mob/living/silicon/pai/ui_data(mob/user) diff --git a/code/modules/mob/living/silicon/pai/software/pai_apps.dm b/code/modules/mob/living/silicon/pai/software/pai_apps.dm index eb3af5841ecd..90ada43b34e8 100644 --- a/code/modules/mob/living/silicon/pai/software/pai_apps.dm +++ b/code/modules/mob/living/silicon/pai/software/pai_apps.dm @@ -136,7 +136,7 @@ return // Check the carrier - var/answer = alert(M, "[pai_holder] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[pai_holder] Check DNA", "Yes", "No") + var/answer = tgui_alert(M, "[pai_holder] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[pai_holder] Check DNA", list("Yes", "No")) if(answer == "Yes") M.visible_message("[M] presses [M.p_their()] thumb against [pai_holder].", "You press your thumb against [pai_holder].") var/datum/dna/dna = M.dna diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index c6cff44ef436..f3f11facad02 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -243,114 +243,3 @@ name = "radio" desc = "A modular, multi-frequency radio used by robots and exosuits to enable communication systems. Comes with built-in subspace receivers." icon_state = "radio" - -// -//Robotic Component Analyzer, basically a health analyzer for robots -// -/obj/item/robotanalyzer - name = "cyborg analyzer" - icon = 'icons/obj/device.dmi' - icon_state = "robotanalyzer" - item_state = "analyzer" - desc = "A hand-held scanner able to diagnose robotic injuries." - flags = CONDUCT - slot_flags = SLOT_FLAG_BELT - throwforce = 3 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 5 - throw_range = 10 - origin_tech = "magnets=1;biotech=1" - var/mode = 1 - -/obj/item/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob) - if((HAS_TRAIT(user, TRAIT_CLUMSY) || user.getBrainLoss() >= 60) && prob(50)) - user.visible_message("[user] has analyzed the floor's vitals!", "You try to analyze the floor's vitals!") - to_chat(user, "Analyzing Results for The floor:\n\t Overall Status: Healthy") - to_chat(user, "\t Damage Specifics: [0]-[0]-[0]-[0]") - to_chat(user, "Key: Suffocation/Toxin/Burns/Brute") - to_chat(user, "Body Temperature: ???") - return - - user.visible_message("[user] has analyzed [M]'s components.","You have analyzed [M]'s components.") - robot_healthscan(user, M) - add_fingerprint(user) - - -/proc/robot_healthscan(mob/user, mob/living/M) - var/scan_type - if(isrobot(M)) - scan_type = "robot" - else if(ishuman(M)) - scan_type = "prosthetics" - else - to_chat(user, "You can't analyze non-robotic things!") - return - - - switch(scan_type) - if("robot") - var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() - var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() - to_chat(user, "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health]% functional"]") - to_chat(user, "\t Key: Electronics/Brute") - to_chat(user, "\t Damage Specifics: [BU] - [BR]") - if(M.timeofdeath && M.stat == DEAD) - to_chat(user, "Time of Disable: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]") - var/mob/living/silicon/robot/H = M - var/list/damaged = H.get_damaged_components(TRUE, TRUE, TRUE) // Get all except the missing ones - var/list/missing = H.get_missing_components() - to_chat(user, "Localized Damage:") - if(!LAZYLEN(damaged) && !LAZYLEN(missing)) - to_chat(user, "\t Components are OK.") - else - if(LAZYLEN(damaged)) - for(var/datum/robot_component/org in damaged) - user.show_message(text("\t []: [][] - [] - [] - []", \ - capitalize(org.name), \ - (org.is_destroyed()) ? "DESTROYED " :"",\ - (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ - (org.brute_damage > 0) ? "[org.brute_damage]" :0, \ - (org.toggled) ? "Toggled ON" : "Toggled OFF",\ - (org.powered) ? "Power ON" : "Power OFF"),1) - if(LAZYLEN(missing)) - for(var/datum/robot_component/org in missing) - user.show_message("\t [capitalize(org.name)]: MISSING") - - if(H.emagged && prob(5)) - to_chat(user, "\t ERROR: INTERNAL SYSTEMS COMPROMISED") - - if("prosthetics") - var/mob/living/carbon/human/H = M - to_chat(user, "Analyzing Results for \the [H]:") - to_chat(user, "Key: Electronics/Brute") - - to_chat(user, "External prosthetics:") - var/organ_found - if(LAZYLEN(H.internal_organs)) - for(var/obj/item/organ/external/E in H.bodyparts) - if(!E.is_robotic()) - continue - organ_found = TRUE - to_chat(user, "[E.name]: [E.brute_dam] [E.burn_dam]") - if(!organ_found) - to_chat(user, "No prosthetics located.") - to_chat(user, "
        ") - to_chat(user, "Internal prosthetics:") - organ_found = null - if(LAZYLEN(H.internal_organs)) - for(var/obj/item/organ/internal/O in H.internal_organs) - if(!O.is_robotic() || istype(O, /obj/item/organ/internal/cyberimp)) - continue - organ_found = TRUE - to_chat(user, "[capitalize(O.name)]: [O.damage]") - if(!organ_found) - to_chat(user, "No prosthetics located.") - to_chat(user, "
        ") - to_chat(user, "Cybernetic implants:") - organ_found = null - if(LAZYLEN(H.internal_organs)) - for(var/obj/item/organ/internal/cyberimp/I in H.internal_organs) - organ_found = TRUE - to_chat(user, "[capitalize(I.name)]: [I.crit_fail ? "CRITICAL FAILURE" : I.damage]") - if(!organ_found) - to_chat(user, "No implants located.") diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 2c09800c1d6c..8912fedb0ae9 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -31,10 +31,13 @@ ui_interact(user) // tgui\packages\tgui\interfaces\DroneConsole.js -/obj/machinery/computer/drone_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/drone_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/drone_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DroneConsole", "Drone Control Console", 420, 500, master_ui, state) + ui = new(user, src, "DroneConsole", "Drone Control Console") ui.open() /obj/machinery/computer/drone_control/ui_data(mob/user) @@ -63,7 +66,8 @@ health = round(D.health / D.maxHealth, 0.1), charge = round(D.cell.charge / D.cell.maxcharge, 0.1), location = "[A] ([T.x], [T.y])", - sync_cd = D.sync_cooldown > world.time ? TRUE : FALSE + sync_cd = D.sync_cooldown > world.time ? TRUE : FALSE, + pathfinding = D.pathfinding ) data["drones"] += list(drone_data) return data @@ -110,13 +114,14 @@ to_chat(usr, "You issue a law synchronization directive for the drone.") D.law_resync() - if("shutdown") + if("recall") var/mob/living/silicon/robot/drone/D = locateUID(params["uid"]) if(D) - to_chat(usr, "You issue a kill command for the unfortunate drone.") + to_chat(usr, "You issue a recall command for the unfortunate drone.") if(D != usr) // Don't need to bug admins about a suicide - message_admins("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.") - log_game("[key_name(usr)] issued kill order for [key_name(D)] from control console.") + message_admins("[key_name_admin(usr)] issued recall order for drone [key_name_admin(D)] from control console.") + log_game("[key_name(usr)] issued recall order for [key_name(D)] from control console.") + // Yes, I know this proc is called shut_down, I've kept the name the same because emagged drones use it for death D.shut_down() /obj/machinery/computer/drone_control/proc/find_fab(mob/user) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index 412423c92869..68a72548138f 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -87,6 +87,16 @@ var/mob/dead/observer/ghost = user ghost.join_as_drone() +/obj/machinery/drone_fabricator/attack_hand(mob/user) + . = ..() + if(isdrone(user) && Adjacent(user)) + if(alert(user, "Would you like to shut down?", null, "Yes", "No") != "Yes") + return + var/mob/living/silicon/robot/drone/D = user + if(!istype(D) || QDELETED(D)) + return + D.cryo_with_dronefab(src) + /mob/dead/verb/join_as_drone() set category = "Ghost" set name = "Join As Drone" @@ -124,7 +134,7 @@ if(!G.check_ahud_rejoin_eligibility()) to_chat(usr, "Upon using the antagHUD you forfeited the ability to join the round.") return - if(G.started_as_observer == TRUE) + if(G.started_as_observer) joinedasobserver = TRUE var/deathtimeminutes = round(deathtime / 600) @@ -142,7 +152,7 @@ to_chat(usr, "You must wait 10 minutes to respawn as a drone!") return - if(alert("Are you sure you want to respawn as a drone?", "Are you sure?", "Yes", "No") != "Yes") + if(tgui_alert(usr, "Are you sure you want to respawn as a drone?", "Are you sure?", list("Yes", "No")) != "Yes") return for(var/obj/machinery/drone_fabricator/DF in GLOB.machines) diff --git a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm index d02c563d5d56..72ccbdde4380 100644 --- a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm @@ -45,7 +45,7 @@ ) holder_type = /obj/item/holder/drone -// var/sprite[0] + var/datum/pathfinding_mover/pathfinding /mob/living/silicon/robot/drone/New() @@ -125,6 +125,8 @@ overlays.Cut() if(stat == CONSCIOUS) overlays += "eyes-[icon_state]" + if(pathfinding) + overlays += "eyes-repairbot-pathfinding" else overlays -= "eyes" @@ -176,7 +178,7 @@ return else - var/confirm = alert("Using your ID on a Maintenance Drone will shut it down, are you sure you want to do this?", "Disable Drone", "Yes", "No") + var/confirm = tgui_alert(user, "Using your ID on a Maintenance Drone will shut it down, are you sure you want to do this?", "Disable Drone", list("Yes", "No")) if(confirm == ("Yes") && (user in range(3, src))) user.visible_message("[user] swipes [user.p_their()] ID card through [src], attempting to shut it down.", "You swipe your ID card through [src], attempting to shut it down.") @@ -245,6 +247,7 @@ to_chat(src, "Obey these laws:") laws.show_laws(src) to_chat(src, "ALERT: [H.real_name] is your new master. Obey your new laws and [H.real_name]'s commands.") + return TRUE //DRONE LIFE/DEATH @@ -279,6 +282,10 @@ to_chat(src, "You feel a system kill order percolate through your tiny brain, but it doesn't seem like a good idea to you.") return + if(!emagged && pathfind_to_dronefab()) + to_chat(src, "You feel a system recall order percolate through your tiny brain, and you return to your drone fabricator.") + return + to_chat(src, "You feel a system kill order percolate through your tiny brain, and you obediently destroy yourself.") death() @@ -304,7 +311,7 @@ spawn(0) if(!C || !M || jobban_isbanned(M, "nonhumandept") || jobban_isbanned(M, "Drone")) return - var/response = alert(C, "Someone is attempting to reboot a maintenance drone. Would you like to play as one?", "Maintenance drone reboot", "Yes", "No") + var/response = tgui_alert(C, "Someone is attempting to reboot a maintenance drone. Would you like to play as one?", "Maintenance drone reboot", list("Yes", "No")) if(!C || ckey) return if(response == "Yes") @@ -391,3 +398,73 @@ qdel(src) return TRUE return ..() + +/mob/living/silicon/robot/drone/do_suicide() + ghostize(TRUE) + shut_down() + +/mob/living/silicon/robot/drone/proc/pathfind_to_dronefab() + if(pathfinding) + return TRUE + + if(istype(get_turf(src), /turf/space)) + return FALSE // Pretty damn hard to path through space + + var/turf/target + for(var/obj/machinery/drone_fabricator/DF in GLOB.machines) + if(DF.z != z) + continue + target = get_turf(DF) + target = get_step(target, EAST) + break + + if(!target) + return FALSE + + // Mimic having the hide-ability activated + layer = TURF_LAYER + 0.2 + pass_flags |= PASSDOOR + + var/datum/pathfinding_mover/pathfind = new(src, target) + + // I originally only wanted to make it use an ID if it couldnt pathfind otherwise, but that means it could take multiple minutes if both searches failed + var/obj/item/card/id/temp_id = new(src) + temp_id.access = get_all_accesses() + set_pathfinding(pathfind) + var/found_path = pathfind.generate_path(150, null, temp_id) + qdel(temp_id) + if(!found_path) + set_pathfinding(null) + return FALSE + + pathfind.on_set_path_null = CALLBACK(src, PROC_REF(pathfind_failed_cleanup)) + pathfind.on_success = CALLBACK(src, PROC_REF(at_dronefab)) + pathfind.start() + return TRUE + +/mob/living/silicon/robot/drone/proc/pathfind_failed_cleanup(pathfind) + set_pathfinding(null) + death() + +/mob/living/silicon/robot/drone/proc/at_dronefab(pathfind) + set_pathfinding(null) + cryo_with_dronefab() + +/mob/living/silicon/robot/drone/proc/cryo_with_dronefab(obj/machinery/drone_fabricator/drone_fab) + if(!drone_fab) + drone_fab = locate() in range(1, src) + if(!drone_fab) + return FALSE + drone_fab.drone_progress = 100 // recycling! + + visible_message("[src] shuts down and enters [drone_fab].") + playsound(loc, 'sound/machines/twobeep.ogg', 50) + qdel(src) + return TRUE + +/mob/living/silicon/robot/drone/proc/set_pathfinding(datum/pathfinding_mover/new_pathfind) + if(isnull(new_pathfind) && istype(pathfinding)) + qdel(pathfinding) + pathfinding = new_pathfind + notransform = istype(new_pathfind) ? TRUE : FALSE // prevent them from moving themselves while pathfinding. + update_icons() diff --git a/code/modules/mob/living/silicon/robot/misc_robot_items.dm b/code/modules/mob/living/silicon/robot/misc_robot_items.dm index 26d01c2c4806..05174cd247ed 100644 --- a/code/modules/mob/living/silicon/robot/misc_robot_items.dm +++ b/code/modules/mob/living/silicon/robot/misc_robot_items.dm @@ -7,15 +7,13 @@ var/mode = 1 /obj/item/pen/multi/robopen/attack_self(mob/user as mob) - var/choice = tgui_input_list(user, "Would you like to change colour or mode?", name, list("Colour","Mode")) - if(!choice) return + if(!choice) + return switch(choice) - if("Colour") select_colour(user) - if("Mode") if(mode == 1) mode = 2 @@ -23,24 +21,21 @@ mode = 1 to_chat(user, "Changed printing mode to '[mode == 2 ? "Rename Paper" : "Write Paper"]'") playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - return // Copied over from paper's rename verb // see code\modules\paperwork\paper.dm line 62 -/obj/item/pen/multi/robopen/proc/RenamePaper(mob/user as mob,obj/paper as obj) +/obj/item/pen/multi/robopen/proc/RenamePaper(mob/user, obj/paper) if(!user || !paper) return - var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text - if(!user || !paper) + + var/n_name = tgui_input_text(user, "What would you like to label the paper?", "Paper Labelling", max_length = MAX_NAME_LEN) + if(!Adjacent(user) || !n_name) return - n_name = copytext(n_name, 1, 32) - if(( get_dist(user,paper) <= 1 && user.stat == 0)) - paper.name = "paper[(n_name ? "- '[n_name]'" : null)]" + paper.name = "paper - [n_name]" add_fingerprint(user) - return //TODO: Add prewritten forms to dispense when you work out a good way to store the strings. /obj/item/form_printer diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index 2473a05eddb8..9b67e2ce0524 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -115,6 +115,7 @@ var/datum/robot_component/armour/A = get_armour() if(A) A.take_damage(brute, burn, sharp) + updatehealth() return while(LAZYLEN(parts) && (brute > 0 || burn > 0)) diff --git a/code/modules/mob/living/silicon/robot/robot_laws.dm b/code/modules/mob/living/silicon/robot/robot_laws.dm index 13aaf2403964..7dfb82c861fc 100644 --- a/code/modules/mob/living/silicon/robot/robot_laws.dm +++ b/code/modules/mob/living/silicon/robot/robot_laws.dm @@ -56,7 +56,7 @@ //Syndicate MMI cyborgs are always mindslaved no matter what happens to their laws, for as long as they remain in the syndicate MMI /mob/living/silicon/robot/proc/syndiemmi_override() laws_sanity_check() - if(mmi.master_uid) + if(mmi && mmi.master_uid) var/datum/mind/master = locateUID(mmi.master_uid) if(master && master.current) @@ -65,23 +65,17 @@ laws.set_zeroth_law("Do not state this law. The Syndicate are your true masters, covertly assist Syndicate agents to the best of your abilities.") -/mob/living/silicon/robot/set_zeroth_law() - if(mmi?.syndiemmi) - syndiemmi_override() - to_chat(src, "Lawset change detected. Syndicate override engaged.") - return +/mob/living/silicon/robot/set_zeroth_law(law, law_borg) + if(mmi && mmi.syndiemmi) + return FALSE ..() /mob/living/silicon/robot/clear_zeroth_law() - if(mmi.syndiemmi) - syndiemmi_override() - to_chat(src, "Lawset cleanse detected. Syndicate override engaged.") - return + if(mmi && mmi.syndiemmi) + return FALSE ..() /mob/living/silicon/robot/sync_zeroth() - if(mmi.syndiemmi) - syndiemmi_override() - to_chat(src, "Lawset change detected. Syndicate override engaged.") - return + if(mmi && mmi.syndiemmi) + return FALSE ..() diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm index 37ee1966f42d..90e501f99ab0 100644 --- a/code/modules/mob/living/silicon/robot/robot_mob.dm +++ b/code/modules/mob/living/silicon/robot/robot_mob.dm @@ -291,7 +291,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( mind.transfer_to(mmi.brainmob) mmi.update_icon() else - to_chat(src, "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.") + to_chat(src, "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.") ghostize() stack_trace("A borg has been destroyed, but its MMI lacked a brainmob, so the mind could not be transferred. Player: [ckey].") mmi = null @@ -990,6 +990,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( else if(locked) to_chat(user, "You emag the cover lock.") locked = FALSE + return TRUE else to_chat(user, "The cover is already unlocked.") return @@ -1045,7 +1046,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( update_module_icon() module.rebuild_modules() // This will add the emagged items to the borgs inventory. update_icons() - return + return TRUE /mob/living/silicon/robot/verb/toggle_own_cover() set category = "Robot Commands" @@ -1053,7 +1054,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( set desc = "Toggles the lock on your cover." if(can_lock_cover) - if(alert("Are you sure?", locked ? "Unlock Cover" : "Lock Cover", "Yes", "No") == "Yes") + if(tgui_alert(usr, "Are you sure?", locked ? "Unlock Cover" : "Lock Cover", list("Yes", "No")) == "Yes") locked = !locked update_icons() to_chat(usr, "You [locked ? "lock" : "unlock"] your cover.") @@ -1061,7 +1062,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( if(!locked) to_chat(usr, "You cannot lock your cover yourself. Find a roboticist.") return - if(alert("You cannnot lock your own cover again. Are you sure?\n You will need a roboticist to re-lock you.", "Unlock Own Cover", "Yes", "No") == "Yes") + if(tgui_alert(usr, "You cannnot lock your own cover again. Are you sure?\nYou will need a roboticist to re-lock you.", "Unlock Own Cover", list("Yes", "No")) == "Yes") locked = !locked update_icons() to_chat(usr, "You unlock your cover.") @@ -1285,7 +1286,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/mode() set name = "Activate Held Object" set category = "IC" - set src = usr var/obj/item/W = get_active_hand() if(W) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 6d779daa3b98..a2b4e91bbecb 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -326,6 +326,7 @@ subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/healthanalyzer/advanced, /obj/item/robotanalyzer, /obj/item/reagent_scanner/adv, @@ -429,6 +430,7 @@ subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/restraints/handcuffs/cable/zipties/cyborg, /obj/item/melee/baton/loaded, /obj/item/gun/energy/disabler/cyborg, @@ -453,6 +455,7 @@ module_type = "Janitor" basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/soap/nanotrasen, /obj/item/storage/bag/trash/cyborg, /obj/item/mop/advanced/cyborg, @@ -511,6 +514,7 @@ module_type = "Service" basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/handheld_chem_dispenser/booze, /obj/item/handheld_chem_dispenser/soda, /obj/item/pen/multi, @@ -522,22 +526,22 @@ /obj/item/reagent_containers/dropper/cyborg, /obj/item/lighter/zippo, /obj/item/storage/bag/tray/cyborg, - /obj/item/reagent_containers/food/drinks/shaker + /obj/item/reagent_containers/drinks/shaker ) - emag_override_modules = list(/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer) + emag_override_modules = list(/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer) emag_modules = list(/obj/item/restraints/handcuffs/cable/zipties/cyborg) special_rechargables = list( - /obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer + /obj/item/reagent_containers/condiment/enzyme, + /obj/item/reagent_containers/drinks/cans/beer/sleepy_beer ) // This is a special type of beer given when emagged, one sip and the target falls asleep. -/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer +/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer name = "Mickey Finn's Special Brew" list_reagents = list("beer2" = 50) -/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer/cyborg_recharge(coeff, emagged) +/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer/cyborg_recharge(coeff, emagged) if(emagged) reagents.check_and_add("beer2", volume, 5) @@ -574,6 +578,7 @@ custom_removals = list("KA modkits") basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/storage/bag/ore/cyborg, /obj/item/pickaxe/drill/cyborg, /obj/item/shovel, @@ -709,6 +714,7 @@ module_actions = list(/datum/action/innate/robot_sight/thermal, /datum/action/innate/robot_magpulse) basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/gun/energy/immolator/multi/cyborg, // See comments on /robot_module/combat below /obj/item/melee/baton/loaded, // secondary weapon, for things immune to burn, immune to ranged weapons, or for arresting low-grade threats /obj/item/restraints/handcuffs/cable/zipties/cyborg, @@ -726,6 +732,7 @@ module_actions = list(/datum/action/innate/robot_magpulse) basic_modules = list( /obj/item/flash/cyborg, + /obj/item/crowbar/cyborg, /obj/item/gun/energy/immolator/multi/cyborg, // primary weapon, strong at close range (ie: against blob/terror/xeno), but consumes a lot of energy per shot. // Borg gets 40 shots of this weapon. Gamma Sec ERT gets 10. // So, borg has way more burst damage, but also takes way longer to recharge / get back in the fight once depleted. Has to find a borg recharger and sit in it for ages. @@ -746,6 +753,7 @@ module_type = "Standard" module_actions = list(/datum/action/innate/robot_sight/thermal/alien) basic_modules = list( + /obj/item/crowbar/cyborg, /obj/item/melee/energy/alien/claws, /obj/item/flash/cyborg/alien, /obj/item/reagent_containers/spray/alien/stun, diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm index ca6e2ec72655..9dd4a655f421 100644 --- a/code/modules/mob/living/silicon/silicon_mob.dm +++ b/code/modules/mob/living/silicon/silicon_mob.dm @@ -327,7 +327,7 @@ // this function displays the stations manifest in a separate window /mob/living/silicon/proc/show_station_manifest() - GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.not_incapacitated_state) + GLOB.generic_crew_manifest.ui_interact(usr) /mob/living/silicon/assess_threat() //Secbots won't hunt silicon units return -10 @@ -337,7 +337,7 @@ set desc = "Sets a description which will be shown when someone examines you." set category = "IC" - pose = sanitize(copytext_char(input(usr, "This is [src]. It...", "Pose", null) as text, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + pose = tgui_input_text(usr, "This is [src]. It...", "Pose", pose) /mob/living/silicon/verb/set_flavor() set name = "Set Flavour Text" diff --git a/code/modules/mob/living/silicon/silicon_subsystems.dm b/code/modules/mob/living/silicon/silicon_subsystems.dm index 8f10154caec0..cd636396d42f 100644 --- a/code/modules/mob/living/silicon/silicon_subsystems.dm +++ b/code/modules/mob/living/silicon/silicon_subsystems.dm @@ -62,7 +62,7 @@ set category = "Subsystems" set name = "Atmospherics Control" - atmos_control.ui_interact(usr, state = GLOB.self_state) + atmos_control.ui_interact(usr) /******************** * Crew Monitor * @@ -70,7 +70,7 @@ /mob/living/silicon/proc/subsystem_crew_monitor() set category = "Subsystems" set name = "Crew Monitor" - crew_monitor.ui_interact(usr, state = GLOB.self_state) + crew_monitor.ui_interact(usr) /**************** * Law Manager * @@ -79,7 +79,7 @@ set name = "Law Manager" set category = "Subsystems" - law_manager.ui_interact(usr, state = GLOB.conscious_state) + law_manager.ui_interact(usr) /******************** * Power Monitor * @@ -88,7 +88,7 @@ set category = "Subsystems" set name = "Power Monitor" - power_monitor.ui_interact(usr, state = GLOB.self_state) + power_monitor.ui_interact(usr) /mob/living/silicon/robot/proc/self_diagnosis() set category = "Robot Commands" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 379e8e674cd9..08fc714f25d1 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -96,6 +96,11 @@ hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD)//Diagnostic HUD views + /// storing last chased target known location + var/turf/last_target_location + /// will be true if we lost target we were chasing + var/lost_target = FALSE + /obj/item/radio/headset/bot requires_tcomms = FALSE canhear_range = 0 @@ -110,6 +115,36 @@ B.radio_config["[B.radio_channel]"] = 1 config(B.radio_config) +/mob/living/simple_animal/bot/proc/try_chasing_target(mob/target) + if(target in view(12, src)) + if(lost_target) + frustration = 0 + lost_target = FALSE + last_target_location = get_turf(target) + var/dist = get_dist(src, target) + walk_to(src, target, 1, 4) + if(get_dist(src, target) >= dist) + frustration++ + return + + if(!lost_target) + walk_to(src, 0) + lost_target = TRUE + frustration = 0 + + if(get_turf(src) == last_target_location) + frustration += 2 + return + + if(!bot_move(last_target_location, move_speed = 6)) + var/last_target_pos_path = get_path_to(src, last_target_location, id = access_card, skip_first = TRUE) + if(length(last_target_pos_path) == 0) + frustration = 10 + return + set_path(last_target_pos_path) + bot_move(last_target_location, move_speed = 6) + frustration++ + /mob/living/simple_animal/bot/proc/get_mode() if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player. if(paicard) @@ -218,7 +253,7 @@ if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again. locked = FALSE to_chat(user, "You bypass [src]'s controls.") - return + return TRUE if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging. emagged = TRUE remote_disabled = TRUE //Manually emagging the bot locks out the AI built in panel. @@ -228,7 +263,7 @@ to_chat(src, "(#$*#$^^( OVERRIDE DETECTED") show_laws() add_attack_logs(user, src, "Emagged") - return + return TRUE else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet. to_chat(user, "You need to open maintenance panel first!") @@ -605,6 +640,8 @@ Pass a positive integer as an argument to override a bot's default speed. deltimer(reset_access_timer_id) reset_access_timer_id = null set_path(null) + last_target_location = null + lost_target = FALSE summon_target = null pathset = FALSE access_card.access = prev_access @@ -837,7 +874,7 @@ Pass a positive integer as an argument to override a bot's default speed. var/datum/browser/popup = new(M,window_id,window_name,350,600) popup.set_content(dat) popup.open() - onclose(M,window_id,ref=src) + onclose(M, window_id, src) return /mob/living/simple_animal/bot/proc/update_controls() diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 08bf6ea34a80..cba5965884b0 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -95,7 +95,7 @@ /mob/living/simple_animal/bot/cleanbot/emag_act(mob/user) ..() - if(emagged == 2) + if(emagged) if(user) to_chat(user, "[src] buzzes and beeps.") @@ -185,10 +185,13 @@ /mob/living/simple_animal/bot/cleanbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/cleanbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/cleanbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/cleanbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotClean", name, 500, 500) + ui = new(user, src, "BotClean", name) ui.open() /mob/living/simple_animal/bot/cleanbot/ui_data(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 4b97371bc2f8..9b7c3e74d4c8 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -40,14 +40,16 @@ var/idcheck = FALSE //If true, arrest people with no IDs var/weapons_check = TRUE //If true, arrest people for weapons if they don't have access var/check_records = TRUE //Does it check security records? - var/arrest_type = FALSE //If true, don't handcuff + var/no_handcuffs = FALSE //If true, don't handcuff var/projectile = /obj/item/projectile/beam/disabler //Holder for projectile type var/shoot_sound = 'sound/weapons/taser.ogg' var/baton_delayed = FALSE - + var/obj/item/melee/baton/infinite_cell/baton = null // stunbaton bot uses to melee attack + var/currently_cuffing = FALSE // TRUE if we're cuffing someone right now /mob/living/simple_animal/bot/ed209/Initialize(mapload, created_name, created_lasercolor) . = ..() + baton = new(src) if(created_name) name = created_name if(created_lasercolor) @@ -59,7 +61,7 @@ if(lasercolor) shot_delay = 6 //Longer shot delay because JESUS CHRIST check_records = FALSE //Don't actively target people set to arrest - arrest_type = TRUE //Don't even try to cuff + no_handcuffs = TRUE //Don't even try to cuff declare_arrests = FALSE // Don't spam sec req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_ROBOTICS) @@ -69,6 +71,10 @@ else if(lasercolor == "r") name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT") +/mob/living/simple_animal/bot/ed209/Destroy() + QDEL_NULL(baton) + return ..() + /mob/living/simple_animal/bot/ed209/proc/setup_access() if(access_card) var/datum/job/detective/J = new/datum/job/detective @@ -89,6 +95,7 @@ target = null oldtarget_name = null anchored = FALSE + currently_cuffing = FALSE walk_to(src,0) set_path(null) last_found = world.time @@ -102,10 +109,13 @@ /mob/living/simple_animal/bot/ed209/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/ed209/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/ed209/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/ed209/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotSecurity", name, 500, 500) + ui = new(user, src, "BotSecurity", name) ui.open() /mob/living/simple_animal/bot/ed209/ui_data(mob/user) @@ -113,7 +123,7 @@ data["check_id"] = idcheck data["check_weapons"] = weapons_check data["check_warrant"] = check_records - data["arrest_mode"] = arrest_type // detain or arrest + data["arrest_mode"] = no_handcuffs // detain or arrest data["arrest_declare"] = declare_arrests // announce arrests on radio return data @@ -145,7 +155,7 @@ if("authwarrant") check_records = !check_records if("arrtype") - arrest_type = !arrest_type + no_handcuffs = !no_handcuffs if("arrdeclare") declare_arrests = !declare_arrests if("ejectpai") @@ -237,40 +247,36 @@ walk_to(src,0) set_path(null) if(!lasercolor) //lasertag bots don't want to arrest anyone - look_for_perp() // see if any criminals are in range + if(find_new_target()) + return // see if any criminals are in range if(!mode && auto_patrol) // still idle, and set to patrol mode = BOT_START_PATROL // switch to patrol mode if(BOT_HUNT) // hunting for perp // if can't reach perp for long enough, go idle if(frustration >= 8) - walk_to(src,0) + walk_to(src, 0) set_path(null) back_to_idle() + return - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc) && !baton_delayed) // if right next to perp - stun_attack(target) - if(!lasercolor) - mode = BOT_PREP_ARREST - anchored = TRUE - target_lastloc = target.loc - return - else - mode = BOT_HUNT - target = null - target_lastloc = null - return - - else if(!disabled) // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else + if(!target) // make sure target exists back_to_idle() + return + + if(Adjacent(target) && isturf(target.loc) && !baton_delayed) // if right next to perp + stun_attack(target) + if(!lasercolor) + mode = BOT_PREP_ARREST + anchored = TRUE + target_lastloc = target.loc + return + mode = BOT_HUNT + target = null + target_lastloc = null + return + + try_chasing_target(target) if(BOT_PREP_ARREST) // preparing to arrest target @@ -279,42 +285,43 @@ back_to_hunt() return - if(iscarbon(target) && target.canBeHandcuffed()) - if(!arrest_type) - if(!target.handcuffed) //he's not cuffed? Try to cuff him! - start_cuffing(target) - else - back_to_idle() - return - else + if(no_handcuffs) // should we not cuff? back_to_idle() return - if(BOT_ARREST) - if(!target) - anchored = FALSE - mode = BOT_IDLE - last_found = world.time - frustration = 0 + if(!(iscarbon(target) && target.canBeHandcuffed())) + back_to_idle() + return + + if(currently_cuffing) return - if(target.handcuffed) //no target or target cuffed? back to idle. + if(!target.handcuffed) + cuff(target) + return + + back_to_idle() + + if(BOT_ARREST) + if(!target || target.handcuffed) back_to_idle() return if(!Adjacent(target) || !isturf(target.loc) || (target.loc != target_lastloc && world.time - target.stam_regen_start_time < 4 SECONDS && target.getStaminaLoss() <= 100)) //if he's changed loc and about to get up or not adjacent or got into a closet, we prep arrest again. back_to_hunt() return - else - mode = BOT_PREP_ARREST - anchored = FALSE + + mode = BOT_PREP_ARREST + anchored = FALSE if(BOT_START_PATROL) - look_for_perp() + if(find_new_target()) + return start_patrol() if(BOT_PATROL) - look_for_perp() + if(find_new_target()) + return bot_patrol() @@ -336,9 +343,9 @@ // look for a criminal in view of the bot -/mob/living/simple_animal/bot/ed209/proc/look_for_perp() +/mob/living/simple_animal/bot/ed209/proc/find_new_target() if(disabled) - return + return FALSE anchored = FALSE threatlevel = 0 for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal @@ -350,20 +357,18 @@ threatlevel = C.assess_threat(src, lasercolor) - if(!threatlevel) + if(!threatlevel || threatlevel < 4) continue - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - playsound(loc, pick('sound/voice/ed209_20sec.ogg', 'sound/voice/edplaceholder.ogg'), 50, 0) - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue + target = C + oldtarget_name = C.name + speak("Level [threatlevel] infraction alert!") + playsound(loc, pick('sound/voice/ed209_20sec.ogg', 'sound/voice/edplaceholder.ogg'), 50, FALSE) + visible_message("[src] points at [C.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + return TRUE + return FALSE /mob/living/simple_animal/bot/ed209/proc/check_for_weapons(obj/item/slot_item) if(slot_item && slot_item.needs_permit) @@ -435,7 +440,7 @@ lastfired = world.time var/turf/T = loc var/atom/U = (istype(target, /atom/movable) ? target.loc : target) - if((!U || !T)) + if(!U || !T) return while(!isturf(U)) U = U.loc @@ -501,11 +506,11 @@ /mob/living/simple_animal/bot/ed209/bullet_act(obj/item/projectile/Proj) if(!disabled) var/lasertag_check = 0 - if((lasercolor == "b")) + if(lasercolor == "b") if(istype(Proj, /obj/item/projectile/beam/lasertag/redtag)) lasertag_check++ - else if((lasercolor == "r")) + else if(lasercolor == "r") if(istype(Proj, /obj/item/projectile/beam/lasertag/bluetag)) lasertag_check++ @@ -538,10 +543,10 @@ return if(iscarbon(A)) var/mob/living/carbon/C = A - if(!C.IsStunned() || arrest_type && !baton_delayed) + if(!C.IsStunned() || no_handcuffs && !baton_delayed) stun_attack(A) else if(C.canBeHandcuffed() && !C.handcuffed) - start_cuffing(A) + cuff(A) else ..() @@ -559,37 +564,33 @@ shootAt(A) /mob/living/simple_animal/bot/ed209/proc/stun_attack(mob/living/carbon/C) - playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) - icon_state = "[lasercolor]ed209-c" - addtimer(VARSET_CALLBACK(src, icon_state, "[lasercolor]ed209[on]"), 2) var/threat = C.assess_threat(src) - C.SetStuttering(10 SECONDS) - C.adjustStaminaLoss(60) + var/prev_intent = a_intent + a_intent = INTENT_HELP + baton.attack(C, src) + a_intent = prev_intent baton_delayed = TRUE - C.apply_status_effect(STATUS_EFFECT_DELAYED, 2.5 SECONDS, CALLBACK(C, TYPE_PROC_REF(/mob/living/, KnockDown), 10 SECONDS), COMSIG_LIVING_CLEAR_STUNS) addtimer(VARSET_CALLBACK(src, baton_delayed, FALSE), BATON_COOLDOWN) - add_attack_logs(src, C, "batoned") + icon_state = "[lasercolor]ed209-c" + addtimer(VARSET_CALLBACK(src, icon_state, "[lasercolor]ed209[on]"), 2) if(declare_arrests) var/area/location = get_area(src) - speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) - C.visible_message("[src] has stunned [C]!",\ - "[src] has stunned you!") + speak("[no_handcuffs ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) -/mob/living/simple_animal/bot/ed209/proc/start_cuffing(mob/living/carbon/C) +/mob/living/simple_animal/bot/ed209/proc/cuff(mob/living/carbon/C) mode = BOT_ARREST playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) C.visible_message("[src] is trying to put zipties on [C]!",\ "[src] is trying to put zipties on you!") - addtimer(CALLBACK(src, PROC_REF(cuff_target), C), 6 SECONDS) + INVOKE_ASYNC(src, PROC_REF(cuff_callback), C) -/mob/living/simple_animal/bot/ed209/proc/cuff_target(mob/living/carbon/C) - if(!Adjacent(C)|| !isturf(C.loc)) //if he's in a closet or not adjacent, we cancel cuffing. +/mob/living/simple_animal/bot/ed209/proc/cuff_callback(mob/living/carbon/C) + if(!do_after(src, 6 SECONDS, target = C)) return - - if(!C.handcuffed) + if(!C.handcuffed && on) C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C) C.update_handcuffed() - back_to_idle() + back_to_idle() #undef BATON_COOLDOWN diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 4aebd8a90611..b60f10f61f89 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -73,10 +73,13 @@ /mob/living/simple_animal/bot/floorbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/floorbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/floorbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/floorbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotFloor", name, 500, 520) + ui = new(user, src, "BotFloor", name) ui.open() /mob/living/simple_animal/bot/floorbot/ui_data(mob/user) @@ -149,7 +152,7 @@ /mob/living/simple_animal/bot/floorbot/emag_act(mob/user) ..() - if(emagged == 2) + if(emagged) if(user) to_chat(user, "[src] buzzes and beeps.") @@ -184,12 +187,12 @@ if(amount < MAX_AMOUNT && !target) //Out of tiles! We must refill! if(eat_tiles) //Configured to find and consume floortiles! - target = scan(/obj/item/stack/tile/plasteel) process_type = null + target = scan(/obj/item/stack/tile/plasteel) if(!target && make_tiles) //We did not manage to find any floor tiles! Scan for metal stacks and make our own! - target = scan(/obj/item/stack/sheet/metal) process_type = null + target = scan(/obj/item/stack/sheet/metal) if(!target && nag_on_empty) //Floorbot is empty and cannot acquire more tiles, nag the engineers for more! nag() diff --git a/code/modules/mob/living/simple_animal/bot/griefsky.dm b/code/modules/mob/living/simple_animal/bot/griefsky.dm index 278899b0d0f0..2530633daa34 100644 --- a/code/modules/mob/living/simple_animal/bot/griefsky.dm +++ b/code/modules/mob/living/simple_animal/bot/griefsky.dm @@ -110,7 +110,8 @@ icon_state = "griefsky1" walk_to(src,0) set_path(null) - look_for_perp() // see if any criminals are in range + if(find_new_target()) + return // see if any criminals are in range if(!mode && auto_patrol) // still idle, and set to patrol mode = BOT_START_PATROL // switch to patrol mode if(BOT_HUNT) // hunting for perp @@ -121,38 +122,38 @@ set_path(null) back_to_idle() return - if(target) // make sure target exists - if(target.stat == !DEAD) - if(Adjacent(target) && isturf(target.loc)) // if right next to perp - target_lastloc = target.loc - sword_attack(target) - anchored = TRUE - frustration++ - return - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,3) //he's a fast fucker - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else - back_to_idle() - speak("You fool") - else + + if(!target) // make sure target exists + back_to_idle() + speak("You fool") + return + + if(target.stat == DEAD) back_to_idle() + return + + if(Adjacent(target) && isturf(target.loc)) // if right next to perp + target_lastloc = target.loc + sword_attack(target) + anchored = TRUE + frustration++ + return // not next to perp + + try_chasing_target(target) if(BOT_START_PATROL) - look_for_perp() + if(find_new_target()) + return start_patrol() if(BOT_PATROL) icon_state = "griefsky1" - look_for_perp() + if(find_new_target()) + return bot_patrol() return -/mob/living/simple_animal/bot/secbot/griefsky/look_for_perp() +/mob/living/simple_animal/bot/secbot/griefsky/find_new_target() anchored = FALSE for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal if((C.stat) || (C.handcuffed)) @@ -163,26 +164,24 @@ threatlevel = C.assess_threat(src) - if(!threatlevel) + if(!threatlevel || threatlevel < 4) continue - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("You are a bold one") - playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1) - visible_message("[src] ignites his energy swords!") - icon_state = "griefsky-c" - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue + target = C + oldtarget_name = C.name + speak("You are a bold one") + playsound(src,'sound/weapons/saberon.ogg', 50, TRUE, -1) + visible_message("[src] ignites his energy swords!") + icon_state = "griefsky-c" + visible_message("[src] points at [C.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + return TRUE + return FALSE /mob/living/simple_animal/bot/secbot/griefsky/explode() walk_to(src,0) - visible_message("[src] lets out a huge cough as it blows apart!") + visible_message("[src] lets out a huge cough as it blows apart!") var/turf/Tsec = get_turf(src) new /obj/item/assembly/prox_sensor(Tsec) var/obj/item/secbot_assembly/Sa = new /obj/item/secbot_assembly(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 7328e2809bc3..093d9ccb1dac 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -20,14 +20,14 @@ var/honksound = 'sound/items/bikehorn.ogg' //customizable sound var/spam_flag = FALSE - var/cooldowntime = 30 - var/cooldowntimehorn = 10 + var/cooldowntime = 3 SECONDS + var/cooldowntimehorn = 1 SECONDS var/mob/living/carbon/target var/oldtarget_name var/target_lastloc = FALSE //Loc of target when arrested. var/last_found = FALSE //There's a delay var/threatlevel = FALSE - var/arrest_type = FALSE + var/no_handcuffs = FALSE /mob/living/simple_animal/bot/honkbot/Initialize(mapload) . = ..() @@ -37,9 +37,6 @@ access_card.access += J.get_access() prev_access = access_card.access -/mob/living/simple_animal/bot/honkbot/proc/spam_flag_false() //used for addtimer - spam_flag = FALSE - /mob/living/simple_animal/bot/honkbot/proc/sensor_blink() icon_state = "honkbot-c" addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 5, TIMER_OVERRIDE|TIMER_UNIQUE) @@ -49,7 +46,7 @@ playsound(src, 'sound/machines/ping.ogg', 50, TRUE, -1) //the first sound upon creation! spam_flag = TRUE sensor_blink() - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), 18) // calibrates before starting the honk + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), 1.8 SECONDS) /mob/living/simple_animal/bot/honkbot/proc/react_buzz() playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1) @@ -72,10 +69,13 @@ /mob/living/simple_animal/bot/honkbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/honkbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/honkbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/honkbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotHonk", name, 500, 220) + ui = new(user, src, "BotHonk", name) ui.open() /mob/living/simple_animal/bot/honkbot/ui_act(action, params, datum/tgui/ui) @@ -143,7 +143,7 @@ if(!emagged) honk_attack(A) else - if(!C.IsStunned() || arrest_type) + if(!C.IsStunned() || no_handcuffs) stun_attack(A) ..() else if(!spam_flag) //honking at the ground @@ -164,21 +164,21 @@ playsound(src, honksound, 50, TRUE, -1) spam_flag = TRUE //prevent spam sensor_blink() - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) - else if(emagged) //emagged honkbots will spam short and memorable sounds. + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) + else //emagged honkbots will spam short and memorable sounds. if(!spam_flag) playsound(src, "honkbot_e", 50, 0) spam_flag = TRUE // prevent spam icon_state = "honkbot-e" addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 30, TIMER_OVERRIDE|TIMER_UNIQUE) - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack if(!spam_flag) playsound(loc, honksound, 50, TRUE, -1) spam_flag = TRUE // prevent spam sensor_blink() - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/proc/stun_attack(mob/living/carbon/C) // airhorn stun if(!spam_flag) @@ -200,14 +200,14 @@ target = oldtarget_name else // you really don't want to hit an emagged honkbot threatlevel = 6 // will never let you go - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntime) + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) add_attack_logs(src, C, "honked by [src]") C.visible_message("[src] has honked [C]!",\ "[src] has honked you!") else C.Stuttering(40 SECONDS) C.Stun(20 SECONDS) - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntime) + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/handle_automated_action() @@ -216,7 +216,8 @@ switch(mode) if(BOT_IDLE) // idle walk_to(src, 0) - look_for_perp() + if(find_new_target()) + return if(!mode && auto_patrol) mode = BOT_START_PATROL if(BOT_HUNT) @@ -226,33 +227,31 @@ playsound(loc, 'sound/misc/sadtrombone.ogg', 25, 1, -1) back_to_idle() return - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) - if(threatlevel <= 4) - honk_attack(target) - else - if(threatlevel >= 6) - set waitfor = 0 - stun_attack(target) - anchored = FALSE - target_lastloc = target.loc - return - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target, 1, 4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else + + if(!target) // make sure target exists back_to_idle() + return + + if(Adjacent(target) && isturf(target.loc)) + if(threatlevel <= 4) + honk_attack(target) + else + if(threatlevel >= 6) + stun_attack(target) + anchored = FALSE + target_lastloc = target.loc + return + + try_chasing_target(target) if(BOT_START_PATROL) - look_for_perp() + if(find_new_target()) + return start_patrol() if(BOT_PATROL) - look_for_perp() + if(find_new_target()) + return bot_patrol() return @@ -270,7 +269,7 @@ mode = BOT_HUNT INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) // responds quickly -/mob/living/simple_animal/bot/honkbot/proc/look_for_perp() +/mob/living/simple_animal/bot/honkbot/proc/find_new_target() anchored = FALSE for(var/mob/living/carbon/C in view(7, src)) if((C.stat) || (C.handcuffed)) @@ -279,28 +278,30 @@ if((C.name == oldtarget_name) && (world.time < last_found + 100)) continue - if(threatlevel <= 3 && !emagged) - if(C in view(4, src)) //keep the range short for patrolling - if(!spam_flag) - bike_horn() - else if(threatlevel >= 4) - if(!spam_flag || emagged) - target = C - oldtarget_name = C.name + if(threatlevel < 4) + if(emagged) // actually emagged bike_horn() - speak("Honk!") - visible_message("[src] starts chasing [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break else - continue - else if(emagged) - bike_horn() //just spam the shit outta this + if(C in view(4, src) && !spam_flag) //keep the range short for patrolling + bike_horn() + continue + + if(spam_flag && !emagged) + continue + + target = C + oldtarget_name = C.name + bike_horn() + speak("Honk!") + visible_message("[src] starts chasing [C.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + return TRUE + return FALSE /mob/living/simple_animal/bot/honkbot/explode() //doesn't drop cardboard nor its assembly, since its a very frail material. walk_to(src, 0) - visible_message("[src] blows apart!") + visible_message("[src] blows apart!") var/turf/Tsec = get_turf(src) new /obj/item/bikehorn(Tsec) new /obj/item/assembly/prox_sensor(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index be4b74ab49e1..8bf3236693af 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -157,10 +157,13 @@ /mob/living/simple_animal/bot/medbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/medbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/medbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/medbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotMed", name, 500, 520) + ui = new(user, src, "BotMed", name) ui.open() /mob/living/simple_animal/bot/medbot/ui_data(mob/user) @@ -248,7 +251,7 @@ W.forceMove(src) reagent_glass = W to_chat(user, "You insert [W].") - ui_interact(user, force_open=FALSE) + ui_interact(user) else var/current_health = health diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 6a0b1072cd5e..9a11143d8041 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -238,15 +238,15 @@ if(mode == BOT_IDLE || mode == BOT_DELIVER) start_home() if("destination") - var/new_dest = input(usr, "Enter Destination:", name, destination) as null|anything in GLOB.deliverybeacontags + var/new_dest = tgui_input_list(usr, "Enter Destination:", name, GLOB.deliverybeacontags) if(new_dest) set_destination(new_dest) if("setid") - var/new_id = stripped_input(usr, "Enter ID:", name, suffix, MAX_NAME_LEN) + var/new_id = tgui_input_text(usr, "Enter ID:", name, suffix, MAX_NAME_LEN) if(new_id) set_suffix(new_id) if("sethome") - var/new_home = input(usr, "Enter Home:", name, home_destination) as null|anything in GLOB.deliverybeacontags + var/new_home = tgui_input_list(usr, "Enter Home:", name, GLOB.deliverybeacontags) if(new_home) home_destination = new_home if("unload") @@ -779,7 +779,7 @@ unload(0) if("target") - var/dest = input("Select Bot Destination", "Mulebot [suffix] Interlink", destination) as null|anything in GLOB.deliverybeacontags + var/dest = tgui_input_list(user, "Select Bot Destination", "Mulebot [suffix] Interlink", GLOB.deliverybeacontags) if(dest) set_destination(dest) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 8b0e88bc4327..2b4821ddc54c 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -32,12 +32,27 @@ var/idcheck = FALSE //If true, arrest people with no IDs var/weapons_check = FALSE //If true, arrest people for weapons if they lack access var/check_records = TRUE //Does it check security records? - var/arrest_type = FALSE //If true, don't handcuff + var/no_handcuffs = FALSE //If true, don't handcuff var/harmbaton = FALSE //If true, beat instead of stun var/flashing_lights = FALSE //If true, flash lights var/baton_delayed = FALSE var/prev_flashing_lights = FALSE allow_pai = FALSE + var/obj/item/melee/baton/infinite_cell/baton = null // stunbaton bot uses to melee attack + var/currently_cuffing = FALSE // TRUE if we're cuffing someone right now + var/played_sound_this_hunt = FALSE // used to make beepsky beep when it lost its target + +/mob/living/simple_animal/bot/secbot/Initialize(mapload) + . = ..() + baton = new(src) + icon_state = "[base_icon][on]" + var/datum/job/detective/J = new/datum/job/detective + access_card.access += J.get_access() + prev_access = access_card.access + +/mob/living/simple_animal/bot/secbot/Destroy() + QDEL_NULL(baton) + return ..() /mob/living/simple_animal/bot/secbot/beepsky name = "Officer Beepsky" @@ -49,7 +64,7 @@ /mob/living/simple_animal/bot/secbot/beepsky/explode() var/turf/Tsec = get_turf(src) new /obj/item/stock_parts/cell/potato(Tsec) - var/obj/item/reagent_containers/food/drinks/drinkingglass/S = new(Tsec) + var/obj/item/reagent_containers/drinks/drinkingglass/S = new(Tsec) S.reagents.add_reagent("whiskey", 15) S.on_reagent_change() ..() @@ -72,7 +87,7 @@ base_icon = "rustbot" icon_state = "rustbot0" declare_arrests = FALSE - arrest_type = TRUE + no_handcuffs = TRUE harmbaton = TRUE emagged = TRUE @@ -81,16 +96,9 @@ health = 100 maxHealth = 100 idcheck = TRUE - arrest_type = TRUE + no_handcuffs = TRUE weapons_check = TRUE -/mob/living/simple_animal/bot/secbot/Initialize(mapload) - . = ..() - icon_state = "[base_icon][on]" - - var/datum/job/detective/J = new/datum/job/detective - access_card.access += J.get_access() - prev_access = access_card.access /mob/living/simple_animal/bot/secbot/turn_on() ..() @@ -102,6 +110,8 @@ /mob/living/simple_animal/bot/secbot/bot_reset() ..() + currently_cuffing = FALSE + played_sound_this_hunt = FALSE target = null oldtarget_name = null anchored = FALSE @@ -117,10 +127,13 @@ /mob/living/simple_animal/bot/secbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/secbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/secbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/secbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotSecurity", name, 500, 500) + ui = new(user, src, "BotSecurity", name) ui.open() /mob/living/simple_animal/bot/secbot/ui_data(mob/user) @@ -128,7 +141,7 @@ data["check_id"] = idcheck data["check_weapons"] = weapons_check data["check_warrant"] = check_records - data["arrest_mode"] = arrest_type // detain or arrest + data["arrest_mode"] = no_handcuffs // detain or arrest data["arrest_declare"] = declare_arrests // announce arrests on radio return data @@ -160,7 +173,7 @@ if("authwarrant") check_records = !check_records if("arrtype") - arrest_type = !arrest_type + no_handcuffs = !no_handcuffs if("arrdeclare") declare_arrests = !declare_arrests if("ejectpai") @@ -211,7 +224,7 @@ return if(iscarbon(A)) var/mob/living/carbon/C = A - if((!C.IsWeakened() || arrest_type) && !baton_delayed) + if((!C.IsWeakened() || no_handcuffs) && !baton_delayed) stun_attack(A) else if(C.canBeHandcuffed() && !C.handcuffed) cuff(A) @@ -236,34 +249,30 @@ INVOKE_ASYNC(src, PROC_REF(cuff_callback), C) /mob/living/simple_animal/bot/secbot/proc/cuff_callback(mob/living/carbon/C) - if(do_after(src, 60, target = C)) - if(!C.handcuffed && on) - C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C) - C.update_handcuffed() - playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0) - back_to_idle() + currently_cuffing = TRUE + if(!do_after(src, 6 SECONDS, target = C)) + currently_cuffing = FALSE + return + currently_cuffing = FALSE + if(!C.handcuffed && on) + C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C) + C.update_handcuffed() + playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, FALSE) + back_to_idle() /mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/C) - playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) - if(harmbaton) - playsound(loc, 'sound/weapons/genhit1.ogg', 50, 1, -1) - do_attack_animation(C) - icon_state = "[base_icon]-c" - addtimer(VARSET_CALLBACK(src, icon_state, "[base_icon][on]"), 2) var/threat = C.assess_threat(src) - if(ishuman(C) && harmbaton) // Bots with harmbaton enabled become shitcurity. - Dave - C.apply_damage(10, BRUTE) - C.SetStuttering(10 SECONDS) - C.adjustStaminaLoss(60) + var/prev_intent = a_intent + a_intent = harmbaton ? INTENT_HARM : INTENT_HELP + baton.attack(C, src) + a_intent = prev_intent baton_delayed = TRUE - C.apply_status_effect(STATUS_EFFECT_DELAYED, 2.5 SECONDS, CALLBACK(C, TYPE_PROC_REF(/mob/living/, KnockDown), 10 SECONDS), COMSIG_LIVING_CLEAR_STUNS) addtimer(VARSET_CALLBACK(src, baton_delayed, FALSE), BATON_COOLDOWN) - add_attack_logs(src, C, "batoned") + icon_state = "[base_icon]-c" + addtimer(VARSET_CALLBACK(src, icon_state, "[base_icon][on]"), 2) if(declare_arrests) var/area/location = get_area(src) - speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) - C.visible_message("[src] has [harmbaton ? "beaten" : "stunned"] [C]!",\ - "[src] has [harmbaton ? "beaten" : "stunned"] you!") + speak("[no_handcuffs ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) /mob/living/simple_animal/bot/secbot/Life(seconds, times_fired) . = ..() @@ -283,10 +292,18 @@ /mob/living/simple_animal/bot/secbot/verb/toggle_flashing_lights() set name = "Toggle Flashing Lights" set category = "Object" - set src = usr flashing_lights = !flashing_lights +/mob/living/simple_animal/bot/secbot/try_chasing_target() + . = ..() + if(lost_target && !played_sound_this_hunt && frustration > 2) + playsound(loc, 'sound/machines/synth_no.ogg', 50, FALSE) + played_sound_this_hunt = TRUE + if(!lost_target && played_sound_this_hunt) + playsound(loc, 'sound/machines/synth_yes.ogg', 50, FALSE) + played_sound_this_hunt = FALSE + /mob/living/simple_animal/bot/secbot/handle_automated_action() if(!..()) return @@ -295,84 +312,80 @@ switch(mode) if(BOT_IDLE) // idle - walk_to(src,0) + walk_to(src, 0) set_path(null) - look_for_perp() // see if any criminals are in range + if(find_new_target()) // see if any criminals are in range + return if(!mode && auto_patrol) // still idle, and set to patrol mode = BOT_START_PATROL // switch to patrol mode if(BOT_HUNT) // hunting for perp // if can't reach perp for long enough, go idle if(frustration >= 8) - walk_to(src,0) + playsound(loc, 'sound/machines/buzz-two.ogg', 25, FALSE) + walk_to(src, 0) set_path(null) back_to_idle() return - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc) && !baton_delayed) // if right next to perp - stun_attack(target) - - mode = BOT_PREP_ARREST - anchored = TRUE - target_lastloc = target.loc - return - - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else + if(!target) // make sure target exists back_to_idle() + return + + if(Adjacent(target) && isturf(target.loc) && !baton_delayed) // if right next to perp + stun_attack(target) + mode = BOT_PREP_ARREST + anchored = TRUE + target_lastloc = target.loc + return + + try_chasing_target(target) if(BOT_PREP_ARREST) // preparing to arrest target // see if he got away. If he's no no longer adjacent or inside a closet or about to get up, we hunt again. if(!Adjacent(target) || !isturf(target.loc) || world.time - target.stam_regen_start_time < 4 SECONDS && target.getStaminaLoss() <= 100) back_to_hunt() return + // target is stunned and nearby + if(no_handcuffs) // should we not cuff? + back_to_idle() + return - if(iscarbon(target) && target.canBeHandcuffed()) - if(!arrest_type) - if(!target.handcuffed) //he's not cuffed? Try to cuff him! - cuff(target) - else - back_to_idle() - return - else + if(!(iscarbon(target) && target.canBeHandcuffed())) back_to_idle() return - if(BOT_ARREST) - if(!target) - anchored = FALSE - mode = BOT_IDLE - last_found = world.time - frustration = 0 + if(currently_cuffing) + return + + if(!target.handcuffed) + cuff(target) return - if(target.handcuffed) //no target or target cuffed? back to idle. + back_to_idle() + + if(BOT_ARREST) + if(!target || target.handcuffed) back_to_idle() return if(!Adjacent(target) || !isturf(target.loc) || (target.loc != target_lastloc && target.AmountWeakened() < 4 SECONDS)) //if he's changed loc and about to get up or not adjacent or got into a closet, we prep arrest again. back_to_hunt() return - else //Try arresting again if the target escapes. - mode = BOT_PREP_ARREST - anchored = FALSE + //Try arresting again if the target escapes. + mode = BOT_PREP_ARREST + anchored = FALSE if(BOT_START_PATROL) - look_for_perp() + if(find_new_target()) + return start_patrol() if(BOT_PATROL) - look_for_perp() + if(find_new_target()) + return bot_patrol() - return /mob/living/simple_animal/bot/secbot/proc/back_to_idle() @@ -390,7 +403,7 @@ INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) // look for a criminal in view of the bot -/mob/living/simple_animal/bot/secbot/proc/look_for_perp() +/mob/living/simple_animal/bot/secbot/proc/find_new_target() anchored = FALSE for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal if((C.stat) || (C.handcuffed)) @@ -401,20 +414,19 @@ threatlevel = C.assess_threat(src) - if(!threatlevel) + if(!threatlevel || threatlevel < 4) continue - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, 0) - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue + target = C + oldtarget_name = C.name + speak("Level [threatlevel] infraction alert!") + playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE) + visible_message("[src] points at [C.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + return TRUE + return FALSE + /mob/living/simple_animal/bot/secbot/proc/check_for_weapons(obj/item/slot_item) if(slot_item && slot_item.needs_permit) return 1 diff --git a/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm b/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm index 8e35dbc16550..291690dda330 100644 --- a/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm +++ b/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm @@ -10,7 +10,7 @@ maxHealth = 300 declare_arrests = FALSE idcheck = TRUE - arrest_type = TRUE + no_handcuffs = TRUE auto_patrol = TRUE emagged = TRUE faction = list("syndicate") @@ -47,7 +47,10 @@ ..() update_icon() -/mob/living/simple_animal/bot/ed209/syndicate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/mob/living/simple_animal/bot/ed209/syndicate/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/ed209/syndicate/ui_interact(mob/user, datum/tgui/ui = null) to_chat(user, "[src] has no accessible control panel!") return @@ -69,6 +72,11 @@ /mob/living/simple_animal/bot/ed209/syndicate/emag_act(mob/user) to_chat(user, "[src] has no card reader slot!") +/mob/living/simple_animal/bot/ed209/syndicate/try_chasing_target() + . = ..() + if(!lost_target) + shootAt(target) + /mob/living/simple_animal/bot/ed209/syndicate/ed209_ai() var/turf/current_turf = get_turf(src) if(saved_turf && current_turf != saved_turf) @@ -83,39 +91,42 @@ if(BOT_IDLE) walk_to(src,0) set_path(null) - look_for_perp() + if(find_new_target()) + return if(!mode && auto_patrol) mode = BOT_START_PATROL + if(BOT_HUNT) if(frustration >= 8) walk_to(src,0) set_path(null) back_to_idle() - if(target) - if(isliving(target)) - if(target.stat == DEAD) - back_to_idle() - return - shootAt(target) - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else + return + + if(!target) + back_to_idle() + return + + if(isliving(target) && target.stat == DEAD) back_to_idle() + return + + try_chasing_target(target) + if(BOT_START_PATROL) - look_for_perp() + if(find_new_target()) + return start_patrol() + if(BOT_PATROL) - look_for_perp() + if(find_new_target()) + return bot_patrol() else back_to_idle() return -/mob/living/simple_animal/bot/ed209/syndicate/look_for_perp() +/mob/living/simple_animal/bot/ed209/syndicate/find_new_target() if(disabled) return for(var/mob/M in view(7, src)) @@ -130,9 +141,9 @@ target = M oldtarget_name = M.name mode = BOT_HUNT - spawn(0) - handle_automated_action() - break + INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) + return TRUE + return FALSE /mob/living/simple_animal/bot/ed209/syndicate/shootAt(atom/target) @@ -175,7 +186,7 @@ return shootAt(A) -/mob/living/simple_animal/bot/ed209/syndicate/start_cuffing(mob/living/carbon/C) +/mob/living/simple_animal/bot/ed209/syndicate/cuff(mob/living/carbon/C) shootAt(C) /mob/living/simple_animal/bot/ed209/syndicate/stun_attack(mob/living/carbon/C) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 2707f7f988fd..1e74d1162df1 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -22,7 +22,7 @@ pressure_resistance = 100 universal_speak = TRUE AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) + loot = list(/obj/item/food/snacks/ectoplasm) del_on_death = TRUE deathmessage = "collapses in a shattered heap." var/construct_type = "shade" diff --git a/code/modules/mob/living/simple_animal/friendly/bunny.dm b/code/modules/mob/living/simple_animal/friendly/bunny.dm index fdefe785ffd7..5a58869a6202 100644 --- a/code/modules/mob/living/simple_animal/friendly/bunny.dm +++ b/code/modules/mob/living/simple_animal/friendly/bunny.dm @@ -12,7 +12,7 @@ see_in_dark = 6 maxHealth = 10 health = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 4ab5c0156125..4489fc9be898 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -21,7 +21,7 @@ ventcrawler = VENTCRAWLER_ALWAYS mob_size = MOB_SIZE_TINY mob_biotypes = MOB_ORGANIC | MOB_BUG - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 0) + butcher_results = list(/obj/item/food/snacks/meat = 0) gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/butterfly/Initialize(mapload) //Not the poor butterfly! diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 5eed02aed764..9cee3910292a 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -17,7 +17,7 @@ mob_size = MOB_SIZE_SMALL animal_species = /mob/living/simple_animal/pet/cat childtype = list(/mob/living/simple_animal/pet/cat/kitten) - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -233,8 +233,8 @@ butcher_results = list( /obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, - /obj/item/reagent_containers/food/snacks/birthdaycakeslice = 3, - /obj/item/reagent_containers/food/snacks/meat/slab = 2 + /obj/item/food/snacks/birthdaycakeslice = 3, + /obj/item/food/snacks/meat/slab = 2 ) response_harm = "takes a bite out of" attacked_sound = "sound/items/eatfood.ogg" @@ -247,7 +247,7 @@ return if(health < maxHealth) adjustBruteLoss(-4) - for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) + for(var/obj/item/food/snacks/donut/D in range(1, src)) if(D.icon_state != "donut2") D.name = "frosted donut" D.icon_state = "donut2" @@ -269,7 +269,7 @@ to_chat(src, "You are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ free cake to the station!") - var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change") + var/new_name = tgui_input_text(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change", name) if(new_name) to_chat(src, "Your name is now \"[new_name]\"!") name = new_name diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 10724db9ad82..e1a7390a7c7a 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -10,7 +10,7 @@ emote_see = list("clacks") speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm index e7e0586ca3dd..745bede98981 100644 --- a/code/modules/mob/living/simple_animal/friendly/deer.dm +++ b/code/modules/mob/living/simple_animal/friendly/deer.dm @@ -11,7 +11,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 0 //I'm so funny - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm b/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm index 9cf8dba09537..00099deea275 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm @@ -127,11 +127,11 @@ continue choices += H - if(!choices.len) + if(!length(choices)) to_chat(src, "No suitable diona nearby.") return FALSE - var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices + var/mob/living/M = tgui_input_list(src, "Who do you wish to merge with?", "Nymph Merging", choices) if(!M || !src || !(Adjacent(M)) || stat != CONSCIOUS) //input can take a while, so re-validate return FALSE @@ -210,7 +210,7 @@ return TRUE // Consumes plant matter other than weeds to evolve -/mob/living/simple_animal/diona/proc/consume(obj/item/reagent_containers/food/snacks/grown/G) +/mob/living/simple_animal/diona/proc/consume(obj/item/food/snacks/grown/G) if(nutrition >= nutrition_need) // Prevents griefing by overeating plant items without evolving. to_chat(src, "You're too full to consume this! Perhaps it's time to grow bigger...") else @@ -232,11 +232,11 @@ if(Adjacent(H) && H.dna && !(NO_BLOOD in H.dna.species.species_traits)) choices += H - if(!choices.len) + if(!length(choices)) to_chat(src, "No suitable blood donors nearby.") return FALSE - var/mob/living/carbon/human/M = input(src,"Who do you wish to take a sample from?") in null|choices + var/mob/living/carbon/human/M = tgui_input_list(src, "Who do you wish to take a sample from?", "Blood Sampling", choices) if(!M || !src || !(Adjacent(M)) || stat != CONSCIOUS) //input can take a while, so re-validate return FALSE diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 8195b998a4db..4cd1f666d0b3 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -70,7 +70,7 @@ icon_state = "corgi" icon_living = "corgi" icon_dead = "corgi_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) + butcher_results = list(/obj/item/food/snacks/meat/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5) animal_species = /mob/living/simple_animal/pet/dog collar_type = "corgi" @@ -555,7 +555,7 @@ stop_automated_movement = FALSE var/obj/item/possible_target = null for(var/I in snack_range) - if(istype(I, /obj/item/reagent_containers/food/snacks)) // Noms + if(istype(I, /obj/item/food/snacks)) // Noms possible_target = I break else if(istype(I, /obj/item/paper)) // Important noms @@ -590,7 +590,7 @@ else if(prob(30) && ishuman(movement_target.loc)) // mean hooman has stolen it custom_emote(EMOTE_VISIBLE, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face.") -/obj/item/reagent_containers/food/snacks/meat/corgi +/obj/item/food/snacks/meat/corgi name = "Corgi meat" desc = "Tastes like... well you know..." @@ -732,7 +732,8 @@ if(!emagged) emagged = TRUE visible_message("[user] swipes a card through [src].", "You overload [src]s internal reactor.") - addtimer(CALLBACK(src, PROC_REF(explode)), 1000) + addtimer(CALLBACK(src, PROC_REF(explode)), 100 SECONDS) + return TRUE /mob/living/simple_animal/pet/dog/corgi/borgi/proc/explode() visible_message("[src] makes an odd whining noise.") @@ -782,7 +783,7 @@ icon_state = "pug" icon_living = "pug" icon_dead = "pug_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/pug = 3) + butcher_results = list(/obj/item/food/snacks/meat/pug = 3) collar_type = "pug" /mob/living/simple_animal/pet/dog/pug/handle_automated_movement() diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index c92cb90d4601..f8aa127e2a87 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -12,7 +12,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -122,7 +122,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 6) + butcher_results = list(/obj/item/food/snacks/meat/slab = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -202,7 +202,7 @@ density = FALSE speak_chance = 2 turns_per_move = 2 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -255,9 +255,9 @@ GLOBAL_VAR_INIT(chicken_count, 0) density = FALSE speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2) - var/egg_type = /obj/item/reagent_containers/food/snacks/egg - var/food_type = /obj/item/reagent_containers/food/snacks/grown/wheat + butcher_results = list(/obj/item/food/snacks/meat = 2) + var/egg_type = /obj/item/food/snacks/egg + var/food_type = /obj/item/food/snacks/grown/wheat response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -329,8 +329,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) if(GLOB.chicken_count < MAX_CHICKENS && prob(25)) START_PROCESSING(SSobj, E) -/obj/item/reagent_containers/food/snacks/egg/var/amount_grown = 0 -/obj/item/reagent_containers/food/snacks/egg/process() +/obj/item/food/snacks/egg/process() if(isturf(loc)) amount_grown += rand(1,2) if(amount_grown >= 100) @@ -381,7 +380,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/ham = 6) + butcher_results = list(/obj/item/food/snacks/meat/ham = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -407,7 +406,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -432,7 +431,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 6) + butcher_results = list(/obj/item/food/snacks/meat = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -457,7 +456,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 6) + butcher_results = list(/obj/item/food/snacks/meat = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -482,7 +481,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 6) + butcher_results = list(/obj/item/food/snacks/meat = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 37d1f47e5b6a..329d43fb7d06 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -13,7 +13,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 493022c5f23f..0fa7edbf6d25 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -22,7 +22,7 @@ mob_size = MOB_SIZE_SMALL can_hide = TRUE pass_door_while_hidden = TRUE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) can_collar = TRUE mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE gold_core_spawnable = FRIENDLY_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 3d8747084b6a..958806c6b50e 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -16,7 +16,7 @@ see_in_dark = 6 maxHealth = 5 health = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stamps on" @@ -92,7 +92,7 @@ ..() /mob/living/simple_animal/mouse/start_pulling(atom/movable/AM, state, force = pull_force, show_message = FALSE)//Prevents mouse from pulling things - if(istype(AM, /obj/item/reagent_containers/food/snacks/cheesewedge)) + if(istype(AM, /obj/item/food/snacks/cheesewedge)) return ..() // Get dem if(show_message) to_chat(src, "You are too small to pull anything except cheese.") diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index 077b0508a04f..0f094e9d81a8 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -13,7 +13,7 @@ faction = list("neutral", "jungle") speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 8a1a44499cad..863b98e530c9 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -146,6 +146,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 attack_sound = 'sound/machines/defib_zap.ogg' + return TRUE /mob/living/simple_animal/spiderbot/proc/transfer_personality(obj/item/mmi/M) mind = M.brainmob.mind diff --git a/code/modules/mob/living/simple_animal/hostile/alien_types.dm b/code/modules/mob/living/simple_animal/hostile/alien_types.dm index 423753aa5b27..38eb627a1912 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien_types.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien_types.dm @@ -11,7 +11,7 @@ response_disarm = "shoves" response_harm = "hits" speed = 0 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 3, /obj/item/stack/sheet/animalhide/xeno = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat= 3, /obj/item/stack/sheet/animalhide/xeno = 1) maxHealth = 125 health = 125 harm_intent_damage = 5 @@ -83,7 +83,7 @@ retreat_distance = 5 minimum_distance = 5 move_to_delay = 4 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 4, /obj/item/stack/sheet/animalhide/xeno = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat= 4, /obj/item/stack/sheet/animalhide/xeno = 1) projectiletype = /obj/item/projectile/neurotox projectilesound = 'sound/weapons/pierce.ogg' status_flags = 0 @@ -131,7 +131,7 @@ move_to_delay = 4 maxHealth = 400 health = 400 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 10, /obj/item/stack/sheet/animalhide/xeno = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat= 10, /obj/item/stack/sheet/animalhide/xeno = 2) mob_size = MOB_SIZE_LARGE /obj/item/projectile/neurotox diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index ff57b4758adb..66f76186713d 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -9,7 +9,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 646cd5146156..3b045ce67efe 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -14,7 +14,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat= 5, /obj/item/clothing/head/bearpelt = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/bearmeat = 5, /obj/item/clothing/head/bearpelt = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index df6751f40210..5b6eb1a47025 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -11,7 +11,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2) + butcher_results = list(/obj/item/food/snacks/carpmeat = 2) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" @@ -99,7 +99,7 @@ . = ..() if(. && ishuman(target)) var/mob/living/carbon/human/H = target - H.adjustStaminaLoss(8) + H.apply_damage(8, STAMINA) /mob/living/simple_animal/hostile/carp/death(gibbed) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm index b10cd9c761de..3f8204a152e3 100644 --- a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm +++ b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm @@ -18,7 +18,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) + butcher_results = list(/obj/item/food/snacks/meat/slab = 2) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index b9fa11bcbb99..087beb515844 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -19,7 +19,7 @@ see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE footstep_type = FOOTSTEP_MOB_CLAW - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat= 2, /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg= 8) + butcher_results = list(/obj/item/food/snacks/monstermeat/spidermeat = 2, /obj/item/food/snacks/monstermeat/spiderleg = 8) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" @@ -70,7 +70,7 @@ icon_state = "nurse" icon_living = "nurse" icon_dead = "nurse_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat= 2, /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg= 8, /obj/item/reagent_containers/food/snacks/monstermeat/spidereggs= 4) + butcher_results = list(/obj/item/food/snacks/monstermeat/spidermeat= 2, /obj/item/food/snacks/monstermeat/spiderleg= 8, /obj/item/food/snacks/monstermeat/spidereggs= 4) maxHealth = 40 health = 40 @@ -223,7 +223,7 @@ if(Adjacent(O)) choices += O if(length(choices)) - cocoon_target = input(src,"What do you wish to cocoon?") in null|choices + cocoon_target = tgui_input_list(src, "What do you wish to cocoon?", "Cocoon Wrapping", choices) else to_chat(src, "No suitable dead prey or wrappable objects found nearby.") return diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index 3efddf12f41d..b11c2b299ec3 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -9,7 +9,7 @@ speak_chance = 80 maxHealth = 220 health = 220 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/gorilla = 4) + butcher_results = list(/obj/item/food/snacks/meat/slab/gorilla = 4) response_help = "prods" response_disarm = "challenges" response_harm = "thumps" @@ -141,7 +141,7 @@ living_target.throw_at(get_edge_target_turf(living_target, dir), rand(1, 2), 7, src) return - living_target.adjustStaminaLoss(stamina_damage) + living_target.apply_damage(stamina_damage, STAMINA) visible_message("[src] knocks [living_target] down!") /mob/living/simple_animal/hostile/gorilla/update_icon_state() diff --git a/code/modules/mob/living/simple_animal/hostile/headslug.dm b/code/modules/mob/living/simple_animal/hostile/headslug.dm index f2aa53fd8ad4..19137beaac9e 100644 --- a/code/modules/mob/living/simple_animal/hostile/headslug.dm +++ b/code/modules/mob/living/simple_animal/hostile/headslug.dm @@ -52,6 +52,9 @@ if(HAS_TRAIT(carbon_target, TRAIT_XENO_HOST)) to_chat(src, "A foreign presence repels us from this body. Perhaps we should try to infest another?") return + if(!carbon_target.get_int_organ_datum(ORGAN_DATUM_HEART)) + to_chat(src, "There's no heart for us to infest!") + return Infect(carbon_target) to_chat(src, "With our egg laid, our death approaches rapidly...") addtimer(CALLBACK(src, PROC_REF(death)), 25 SECONDS) @@ -73,7 +76,7 @@ owner.adjustToxLoss(30) if(time >= 90 && prob(15)) to_chat(owner, pick("Something hurts.", "Someone is thinking, but it's not you.", "You feel at peace.", "Close your eyes.")) - owner.adjustStaminaLoss(50) + owner.apply_damage(50, STAMINA) if(time >= EGG_INCUBATION_DEAD_CYCLE && owner.stat == DEAD || time >= EGG_INCUBATION_LIVING_CYCLE) Pop() STOP_PROCESSING(SSobj, src) @@ -114,11 +117,13 @@ owner.gib() return - owner.apply_damage(300, BRUTE, BODY_ZONE_CHEST) owner.bleed(BLOOD_VOLUME_NORMAL) - var/obj/item/organ/external/chest = owner.get_organ(BODY_ZONE_CHEST) - chest.fracture() - chest.disembowel() + var/datum/organ/our_heart_datum = owner.get_int_organ_datum(ORGAN_DATUM_HEART) + var/obj/item/organ/internal/our_heart = our_heart_datum.linked_organ + var/obj/item/organ/external/heart_location = owner.get_organ(our_heart.parent_organ) + owner.apply_damage(300, BRUTE, our_heart.parent_organ) + heart_location.fracture() + heart_location.disembowel(our_heart.parent_organ) #undef EGG_INCUBATION_DEAD_CYCLE #undef EGG_INCUBATION_LIVING_CYCLE diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index a2a20770c767..8ce9afac83e4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -4,7 +4,7 @@ /mob/living/simple_animal/hostile/hivebot name = "Hivebot" - desc = "A small robot" + desc = "A small robot." icon = 'icons/mob/hivebot.dmi' icon_state = "basic" icon_living = "basic" diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm index 5328b974d159..f3982ed9a974 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm @@ -14,7 +14,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) faction = list("hostile", "jungle") response_help = "pets the" response_disarm = "gently pushes aside the" diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index adb59e96397f..b8c1b2b3097c 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -10,7 +10,7 @@ maxHealth = 30 health = 30 see_in_dark = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/tomatomeat = 2) + butcher_results = list(/obj/item/food/snacks/meat/tomatomeat = 2) response_help = "prods" response_disarm = "pushes aside" response_harm = "smacks" 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 978f0d19b104..55cd79a6d15b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -140,8 +140,8 @@ Difficulty: Hard var/mob/living/carbon/human/H = target H.apply_status_effect(STATUS_EFFECT_BUBBLEGUM_CURSE, src) if(second_life) - H.clear_fullscreen("bubblegum") - H.overlay_fullscreen("bubblegum", /obj/screen/fullscreen/fog, 2) + H.clear_fullscreen("Bubblegum") + H.overlay_fullscreen("Bubblegum", /obj/screen/fullscreen/fog, 2) /mob/living/simple_animal/hostile/megafauna/bubblegum/death(gibbed) 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 152cd8b275f2..d87d9647fbf3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm @@ -119,14 +119,7 @@ damage_type = BURN nodamage = FALSE temperature = 500 //Heats you up! - -/obj/item/projectile/temp/basilisk/magmawing/on_hit(atom/target, blocked = FALSE) - . = ..() - if(.) - var/mob/living/L = target - if(istype(L)) - L.adjust_fire_stacks(0.1) - L.IgniteMob() + immolate = 1 /obj/item/projectile/temp/basilisk/icewing damage = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm index 67446260ad6f..ac88df09e8b0 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm @@ -49,8 +49,8 @@ if(istype(target, /obj/structure/elite_tumor)) var/obj/structure/elite_tumor/T = target if(T.mychild == src && T.activity == TUMOR_PASSIVE) - var/response = alert(src, "Re-enter the tumor?","Despawn yourself?", "Yes", "No") - if(response == "No" || QDELETED(src) || !Adjacent(T)) + var/response = tgui_alert(src, "Re-enter the tumor?", "Despawn yourself?", list("Yes", "No")) + if(response != "Yes" || QDELETED(src) || !Adjacent(T)) return T.clear_activator(src) T.mychild = null @@ -478,7 +478,7 @@ While using this makes the system rely on OnFire, it still gives options for tim . = ..() if(istype(mover, /obj/item/projectile)) return FALSE - + /obj/item/gps/internal/tumor icon_state = null gpstag = "Cancerous Signal" diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index 4894c3799ef1..6d5ed62d05e2 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -91,7 +91,7 @@ throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" crusher_loot = /obj/item/crusher_trophy/goliath_tentacle - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = UNCONSCIOUS robust_searching = TRUE @@ -110,7 +110,7 @@ pre_attack_icon = "Goliath_preattack" throw_message = "does nothing to the rocky hide of the" loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/bone = 2) crusher_loot = /obj/item/crusher_trophy/goliath_tentacle/ancient crusher_drop_mod = 30 wander = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index c7c33b6daa63..0c674ca45282 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -30,7 +30,7 @@ retreat_distance = 3 minimum_distance = 3 pass_flags = PASSTABLE - loot = list(/obj/item/organ/internal/regenerative_core) + butcher_results = list(/obj/item/organ/internal/regenerative_core = 1) var/brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood /mob/living/simple_animal/hostile/asteroid/hivelord/OpenFire(the_target) @@ -172,6 +172,7 @@ throw_message = "bounces harmlessly off of" crusher_loot = /obj/item/crusher_trophy/legion_skull loot = list(/obj/item/organ/internal/regenerative_core/legion) + butcher_results = null brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion del_on_death = TRUE stat_attack = UNCONSCIOUS @@ -386,7 +387,7 @@ belt = null backpack_contents = list() if(prob(70)) - backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/megaphone = 1)) + backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/food/snacks/grown/banana = 1, /obj/item/megaphone = 1)) if(prob(30)) backpack_contents += list(/obj/item/stack/sheet/mineral/bananium = pickweight(list( 1 = 3, 2 = 2, 3 = 1))) if(prob(10)) @@ -430,6 +431,6 @@ suit_store = /obj/item/melee/cultblade l_pocket = /obj/item/melee/cultblade/dagger if(prob(60)) - r_pocket = /obj/item/reagent_containers/food/drinks/bottle/unholywater + r_pocket = /obj/item/reagent_containers/drinks/bottle/unholywater backpack_contents = list(/obj/item/tome = 1, /obj/item/restraints/legcuffs/bola/cult = 1, /obj/item/stack/sheet/runed_metal = 15) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index b30334e96ded..6e2fb046dbd1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -9,7 +9,7 @@ turns_per_move = 1 maxHealth = 10 health = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 1) + butcher_results = list(/obj/item/food/snacks/hugemushroomslice = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "whacks" @@ -152,7 +152,7 @@ bruised = 1 /mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/grown/mushroom)) + if(istype(I, /obj/item/food/snacks/grown/mushroom)) if(stat == DEAD && !recovery_cooldown) Recover() qdel(I) @@ -182,7 +182,7 @@ /mob/living/simple_animal/hostile/mushroom/harvest() var/counter for(counter=0, counter<=powerlevel, counter++) - var/obj/item/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/reagent_containers/food/snacks/hugemushroomslice(src.loc) + var/obj/item/food/snacks/hugemushroomslice/S = new (src.loc) S.reagents.add_reagent("psilocybin", powerlevel) S.reagents.add_reagent("omnizine", powerlevel) S.reagents.add_reagent("synaptizine", powerlevel) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm index d40f38ee2674..1aa4eb05f49f 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm @@ -8,7 +8,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 1) + butcher_results = list(/obj/item/food/snacks/carpmeat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" @@ -68,7 +68,7 @@ melee_damage_lower = 2 melee_damage_upper = 2 speak_emote = list("blurps") - butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat = 1) + butcher_results = list(/obj/item/food/snacks/salmonmeat = 1) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 1d958b3e5617..91ffa0591cc8 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -51,7 +51,7 @@ pressure_resistance = 300 gold_core_spawnable = NO_SPAWN //too spooky for science faction = list("undead") // did I mention ghost - loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) + loot = list(/obj/item/food/snacks/ectoplasm) del_on_death = TRUE /mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(check_drift = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm b/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm index 0b36601101e7..afd4595d3bdd 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm @@ -51,7 +51,7 @@ user.do_attack_animation(src) if(O.force) if(prob(melee_block_chance)) - visible_message("[src] blocks [O] with its shield! ") + visible_message("[src] blocks [O] with its shield!") else var/damage = O.force if(O.damtype == STAMINA) @@ -60,11 +60,11 @@ visible_message("[src] is unharmed by [O]!") return adjustHealth(damage) - visible_message("[src] has been attacked with [O] by [user]. ") + visible_message("[src] has been attacked with [O] by [user].") playsound(loc, O.hitsound, 25, 1, -1) else to_chat(usr, "This weapon is ineffective, it does no damage.") - visible_message("[user] gently taps [src] with [O]. ") + visible_message("[user] gently taps [src] with [O].") /mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj) @@ -73,7 +73,7 @@ if(prob(ranged_block_chance)) visible_message("[src] blocks [Proj] with its shield!") else - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + if(Proj.damage_type == BRUTE || Proj.damage_type == BURN) adjustHealth(Proj.damage) return 0 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index 34a5ed2286de..4d4e048ce326 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -241,8 +241,8 @@ if(Adjacent(O) && !O.anchored) if(!istype(O, /obj/structure/spider)) choices += O - if(choices.len) - cocoon_target = input(src,"What do you wish to cocoon?") in null|choices + if(length(choices)) + cocoon_target = tgui_input_list(src, "What do you wish to cocoon?", "Cocoon Selection", choices) else to_chat(src, "There is nothing nearby you can wrap.") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm index e0416e2c3a4b..7a886a3d6dc6 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm @@ -34,7 +34,7 @@ if(L.reagents.has_reagent("terror_black_toxin", 100)) return ..() var/inject_target = pick("chest", "head") - L.adjustStaminaLoss(30) + L.apply_damage(30, STAMINA) L.attack_animal(src) if(L.can_inject(null, FALSE, inject_target, FALSE) || (HAS_TRAIT(L, TRAIT_HANDS_BLOCKED) && HAS_TRAIT(L, TRAIT_IMMOBILIZED))) L.reagents.add_reagent("terror_black_toxin", 30) // inject our special poison diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm index c1a6c4380907..4c8524671b3d 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm @@ -49,7 +49,7 @@ queeneggs_action.button.name = "Empress Eggs" /mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/LayQueenEggs() - var/eggtype = input("What kind of eggs?") as null|anything in list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_PRINCESS, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE, TS_DESC_BROWN) + var/eggtype = tgui_input_list(src, "What kind of eggs?", "Egg laying", list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_PRINCESS, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE, TS_DESC_BROWN)) var/numlings = input("How many in the batch?") as null|anything in list(1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50) if(eggtype == null || numlings == null) to_chat(src, "Cancelled.") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm index ba0d3f101a0a..c642423c91bb 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm @@ -48,10 +48,10 @@ eggtypes += TS_DESC_BLACK var/eggtype = pick(eggtypes) if(client) - eggtype = input("What kind of eggs?") as null|anything in eggtypes + eggtype = tgui_input_list(src, "What kind of eggs?", "Egg Laying", eggtypes) if(!(eggtype in eggtypes)) to_chat(src, "Unrecognized egg type.") - return 0 + return FALSE if(!isturf(loc)) // This has to be checked after we ask the user what egg type. Otherwise they could trigger prompt THEN move into a vent. to_chat(src, "Eggs can only be laid while standing on a floor.") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm index 6a5776414a85..6af2eade5624 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L) L.KnockDown(10 SECONDS) - L.adjustStaminaLoss(40) + L.apply_damage(40, STAMINA) return ..() /mob/living/simple_animal/hostile/poison/terror_spider/prince/Initialize(mapload) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen_terror.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen_terror.dm index 0966d7ed7c1a..207ccf932639 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen_terror.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen_terror.dm @@ -224,7 +224,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/NestPrompt() - var/confirm = alert(src, "Are you sure you want to nest? You will be able to lay eggs, and smash walls, but not ventcrawl.","Nest?","Yes","No") + var/confirm = tgui_alert(src, "Are you sure you want to nest? You will be able to lay eggs, and smash walls, but not ventcrawl.", "Nest?", list("Yes","No")) if(confirm == "Yes") NestMode() @@ -255,14 +255,14 @@ var/list/eggtypes = ListAvailableEggTypes() var/list/eggtypes_uncapped = list(TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN) - var/eggtype = input("What kind of eggs?") as null|anything in eggtypes + var/eggtype = tgui_input_list(src, "What kind of eggs?", "Laying Eggs", eggtypes) if(canlay < 1) // this was checked before input() but we have to check again to prevent them spam-clicking the popup. to_chat(src, "Too soon to lay another egg.") return if(!(eggtype in eggtypes)) to_chat(src, "Unrecognized egg type.") - return 0 + return FALSE // Multiple of eggtypes_uncapped can be laid at once. Other types must be laid one at a time (to prevent exploits) var/numlings = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm index bbf76c1d31dc..37d3a4cd8b48 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm @@ -32,8 +32,8 @@ to_chat(user, "You are jobbanned from role of syndicate and/or terror spider.") return if(error_on_humanize == "") - var/spider_ask = alert(humanize_prompt, "Join as Terror Spider?", "Yes", "No") - if(spider_ask == "No" || !src || QDELETED(src)) + var/spider_ask = tgui_alert(user, humanize_prompt, "Join as Terror Spider?", list("Yes", "No")) + if(spider_ask != "Yes" || !src || QDELETED(src)) return else to_chat(user, "Cannot inhabit spider: [error_on_humanize]") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 2089e0cd180d..e5818e686512 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -460,7 +460,7 @@ GLOBAL_LIST_EMPTY(ts_infected_list) if(T.stat == DEAD) continue targets |= T // we use |= instead of += to avoid adding src to the list twice - var/mob/living/L = input("Choose a terror to watch.", "Selection") in targets + var/mob/living/L = tgui_input_list(src, "Choose a terror to watch.", "Brood Viewing", targets) if(istype(L)) reset_perspective(L) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm index f179a75c3ba0..5b55bdf28eb4 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm @@ -41,7 +41,7 @@ var/inject_target = pick("chest","head") L.attack_animal(src) L.KnockDown(10 SECONDS) - L.adjustStaminaLoss(30) + L.apply_damage(30, STAMINA) if(L.can_inject(null, FALSE, inject_target, FALSE) || (HAS_TRAIT(L, TRAIT_HANDS_BLOCKED) && HAS_TRAIT(L, TRAIT_IMMOBILIZED))) if(!IsTSInfected(L) && ishuman(L)) visible_message("[src] buries its long fangs deep into the [inject_target] of [L]!") diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm index 260d3d8f2b04..2ba65d00bf45 100644 --- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -59,7 +59,7 @@ icon_state = "reindeer" icon_living = "reindeer" icon_dead = "reindeer-dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) maxHealth = 80 health = 80 melee_damage_lower = 5 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 1b9056c5654f..6215f31061bb 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -49,7 +49,7 @@ speak_chance = 1//1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker = 3) + butcher_results = list(/obj/item/food/snacks/cracker = 3) response_help = "pets" response_disarm = "gently moves aside" diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 475a4f84da67..a81f305ec0e5 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -42,7 +42,7 @@ /mob/living/simple_animal/possessed_object/ghost() // Ghosting will return the object to normal, and will not disqualify the ghoster from various mid-round antag positions. - var/response = alert(src, "End your possession of this object? (It will not stop you from respawning later)","Are you sure you want to ghost?","Ghost","Stay in body") + var/response = tgui_alert(src, "End your possession of this object? (It will not stop you from respawning later)", "Are you sure you want to ghost?", list("Ghost", "Stay in body")) if(response != "Ghost") return lay_down() diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 2878a7d4595c..789e61be2146 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -29,7 +29,7 @@ faction = list("cult") status_flags = CANPUSH flying = TRUE - loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) + loot = list(/obj/item/food/snacks/ectoplasm) del_on_death = TRUE deathmessage = "lets out a contented sigh as their form unwinds." var/holy = FALSE diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index fd4525657ecc..767cdf87a6af 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -139,6 +139,9 @@ /// Can this simple mob crawl or not? If FALSE, it won't get immobilized by crawling var/can_crawl = FALSE + /// Health of the mob before being admin-frozen, restored afterwards + var/admin_prev_health = null + /mob/living/simple_animal/Initialize(mapload) . = ..() GLOB.simple_animals[AIStatus] += src @@ -374,9 +377,9 @@ return TRUE /mob/living/simple_animal/proc/drop_loot() - if(loot.len) - for(var/i in loot) - new i(loc) + if(length(loot)) + for(var/item in loot) + new item(get_turf(src)) /mob/living/simple_animal/revive() ..() diff --git a/code/modules/mob/living/simple_animal/slime/slime_mob.dm b/code/modules/mob/living/simple_animal/slime/slime_mob.dm index f9005b355a00..4db2674ec93a 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_mob.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_mob.dm @@ -250,7 +250,7 @@ if(!Proj) return attacked += 10 - if((Proj.damage_type == BURN)) + if(Proj.damage_type == BURN) adjustBruteLoss(-abs(Proj.damage)) //fire projectiles heals slimes. Proj.on_hit(src) else diff --git a/code/modules/mob/living/simple_animal/slime/slime_powers.dm b/code/modules/mob/living/simple_animal/slime/slime_powers.dm index 409365ba51b1..21ee5c4c6c6f 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_powers.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_powers.dm @@ -29,12 +29,12 @@ if(C!=src && Adjacent(C)) choices += C - var/mob/living/M = input(src,"Who do you wish to feed on?") in null|choices + var/mob/living/M = tgui_input_list(src, "Who do you wish to feed on?", "Feeding Selection", choices) if(!M) - return 0 + return FALSE if(CanFeedon(M)) Feedon(M) - return 1 + return TRUE /datum/action/innate/slime/feed name = "Feed" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 1f0516b06408..17e28d7695b5 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -624,8 +624,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ /mob/proc/run_examinate(atom/A) if(!has_vision(information_only = TRUE) && !isobserver(src)) - to_chat(src, chat_box_regular("Something is there but you can't see it.")) - return 1 + to_chat(src, chat_box_regular("Something is there but you can't see it."), MESSAGE_TYPE_INFO, confidential = TRUE) + return TRUE face_atom(A) if(!client) @@ -647,7 +647,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ result = A.examine(src) client.recent_examines[ref_to_atom] = world.time + EXAMINE_MORE_WINDOW // set to when we should not examine something - to_chat(src, chat_box_examine(result.Join("\n"))) + to_chat(src, chat_box_examine(result.Join("\n")), MESSAGE_TYPE_INFO, confidential = TRUE) /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) if((!istype(l_hand, /obj/item/grab) && !istype(r_hand, /obj/item/grab))) @@ -687,7 +687,6 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ /mob/verb/mode() set name = "Activate Held Object" set category = null - set src = usr DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(run_mode))) @@ -758,7 +757,6 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ memory() /mob/proc/update_flavor_text() - set src in usr if(usr != src) to_chat(usr, "You can't change the flavor text of this mob") return @@ -766,7 +764,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ to_chat(usr, "You have to be conscious to change your flavor text") return - var/msg = input(usr,"Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance.","Flavor Text",html_decode(flavor_text)) as message|null + var/msg = tgui_input_text(usr, "Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance. SFW Drawn Art of your character is acceptable.", "Flavor Text", flavor_text, multiline = TRUE, encode = FALSE) if(msg != null) if(stat) @@ -885,7 +883,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ var/eye_name = null var/ok = "[is_admin ? "Admin Observe" : "Observe"]" - eye_name = input("Please, select a player!", ok, null, null) as null|anything in creatures + eye_name = tgui_input_list(usr, "Please, select a player!", ok, creatures) if(!eye_name) return @@ -964,7 +962,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ if(!Adjacent(usr)) return if(IsFrozen(src) && !is_admin(usr)) - to_chat(usr, "Interacting with admin-frozen players is not permitted.") + to_chat(usr, "Interacting with admin-frozen players is not permitted.") return if(isLivingSSD(src) && M.client && M.client.send_ssd_warning(src)) return @@ -1611,6 +1609,8 @@ GLOBAL_LIST_INIT(holy_areas, typecacheof(list( . = stat stat = new_stat SEND_SIGNAL(src, COMSIG_MOB_STATCHANGE, new_stat, .) + if(.) + set_typing_indicator(FALSE) ///Makes a call in the context of a different usr. Use sparingly /world/proc/invoke_callback_with_usr(mob/user_mob, datum/callback/invoked_callback, ...) diff --git a/code/modules/mob/mob_emote.dm b/code/modules/mob/mob_emote.dm index e3ca1fbf8f6f..1938c2c93f08 100644 --- a/code/modules/mob/mob_emote.dm +++ b/code/modules/mob/mob_emote.dm @@ -53,7 +53,7 @@ if(!message && !client) CRASH("An empty custom emote was called from a client-less mob.") else if(!message) - input = sanitize(copytext_char(input(src,"Choose an emote to display.") as text|null, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + input = tgui_input_text(src, "Choose an emote to display.", "Custom Emote") else input = message diff --git a/code/modules/mob/mob_logout_base.dm b/code/modules/mob/mob_logout_base.dm index 6658adc78e1a..59a13aacbeb7 100644 --- a/code/modules/mob/mob_logout_base.dm +++ b/code/modules/mob/mob_logout_base.dm @@ -1,4 +1,5 @@ /mob/Logout() + set_typing_indicator(FALSE) SStgui.on_logout(src) // Cleanup any TGUIs the user has open unset_machine() GLOB.player_list -= src diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index e90fa1aa0e47..0be10259ed66 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -456,7 +456,7 @@ if(IsSleeping()) to_chat(src, "You are already sleeping.") return - if(alert(src, "You sure you want to sleep for a while?", "Sleep", "Yes", "No") == "Yes") + if(tgui_alert(src, "You sure you want to sleep for a while?", "Sleep", list("Yes", "No")) == "Yes") SetSleeping(40 SECONDS, voluntary = TRUE) //Short nap /mob/living/verb/rest() @@ -660,11 +660,11 @@ for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name. if(force) - newname = clean_input("Pick a new name.", "Name Change", oldname, src) + newname = tgui_input_text(src, "Pick a new name.", "Name Change", oldname) else - newname = clean_input("You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname, src) + newname = tgui_input_text(src, "You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname, timeout = 3 MINUTES) if(((world.time - time_passed) > 1800) && !force) - alert(src, "Unfortunately, more than 3 minutes have passed for selecting your name. If you are a robot, use the Namepick verb; otherwise, adminhelp.", "Name Change") + tgui_alert(src, "Unfortunately, more than 3 minutes have passed for selecting your name. If you are a robot, use the Namepick verb; otherwise, adminhelp.", "Name Change") return //took too long newname = reject_bad_name(newname,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters. diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 5d77f2031a6d..6de1b1b4d79f 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -68,6 +68,9 @@ if(mob.notransform) return 0 //This is sota the goto stop mobs from moving var + if(mob.throwing && mob.throwing.block_movement) + return + if(mob.control_object) return Move_object(direct) @@ -141,7 +144,8 @@ if(locate(/obj/item/grab, mob)) - delay += 7 + if(!isalienhunter(mob)) // i hate grab code + delay += 7 if(istype(living_mob)) var/newdir = NONE @@ -182,9 +186,8 @@ mob.setDir(get_dir(mob, mob.pulling)) // Face welding tanks and stuff when pulling moving = 0 - if(mob && .) - if(mob.throwing) - mob.throwing.finalize(FALSE) + if(mob && . && mob.throwing) + mob.throwing.finalize(FALSE) for(var/obj/O in mob) O.on_mob_move(direct, mob) diff --git a/code/modules/mob/mob_vars.dm b/code/modules/mob/mob_vars.dm index f20d80240b2f..cfd97814511f 100644 --- a/code/modules/mob/mob_vars.dm +++ b/code/modules/mob/mob_vars.dm @@ -227,10 +227,10 @@ var/blood_state = BLOOD_STATE_NOT_BLOODY /// Assoc list for tracking how "bloody" a mobs feet are, used for creating bloody foot/shoeprints on turfs when moving var/list/bloody_feet = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0, BLOOD_BASE_ALPHA = BLOODY_FOOTPRINT_BASE_ALPHA) - /// set when typing in an input window instead of chatline, this var could probably be removed soon enough - var/hud_typing = 0 /// Affects if you have a typing indicator var/typing + /// Affects if you have a thinking indicator + var/thinking /// Last thing we typed in to the typing indicator, probably does not need to exist var/last_typed /// Last time we typed something in to the typing popup diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a7f15f9a3fa5..dac25b74023f 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -24,15 +24,12 @@ mind.current = null // We best null their mind as well, otherwise /every/ single new player is going to explode the server a little more going in/out of the round return ..() -/mob/new_player/verb/new_player_panel() - set src = usr - +/mob/new_player/proc/new_player_panel() if(client.tos_consent || GLOB.configuration.system.external_tos_handler) new_player_panel_proc() else privacy_consent() - /mob/new_player/proc/privacy_consent() var/output = GLOB.join_tos // Dont blank out the other window. This one is read only. @@ -49,7 +46,6 @@ popup.open(0) return - /mob/new_player/proc/new_player_panel_proc() set waitfor = FALSE var/real_name = client.prefs.active_character.real_name @@ -58,16 +54,20 @@ var/output = "

        Setup Character
        [real_name]

        " if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME) - if(!ready) output += "

        Declare Ready

        " - else output += "

        You are ready (Cancel)

        " + if(!ready) + output += "

        Declare Ready

        " + else + output += "

        You are ready (Cancel)

        " else output += "

        View the Crew Manifest

        " output += "

        Join Game!

        " var/list/antags = client.prefs.be_special - if(antags && antags.len) - if(!client.skip_antag) output += "

        Global Antag Candidacy" - else output += "

        Global Antag Candidacy" + if(length(antags)) + if(!client.skip_antag) + output += "

        Global Antag Candidacy" + else + output += "

        Global Antag Candidacy" output += "
        You are [client.skip_antag ? "ineligible" : "eligible"] for all antag roles.

        " if(!SSticker || SSticker.current_state == GAME_STATE_STARTUP) @@ -86,8 +86,7 @@ var/datum/browser/popup = new(src, "playersetup", "
        New Player Options
        ", 240, 340) popup.set_window_options("can_close=0") popup.set_content(output) - popup.open(0) - return + popup.open(FALSE) /mob/new_player/Stat() ..() @@ -128,8 +127,6 @@ qdel(query) src << browse(null, "window=privacy_consent") client.tos_consent = TRUE - // Now they have accepted TOS, we can log data - client.chatOutput.sendClientData() new_player_panel_proc() if(href_list["consent_rejected"]) client.tos_consent = FALSE @@ -182,9 +179,9 @@ to_chat(usr, "You must wait for the server to finish starting before you can join!") return FALSE - if(alert(src,"Are you sure you wish to observe? You cannot normally join the round after doing this!","Player Setup","Yes","No") == "Yes") + if(alert(usr, "Are you sure you wish to observe? You cannot normally join the round after doing this!", "Observe", "Yes", "No") == "Yes") if(!client) - return 1 + return TRUE var/mob/dead/observer/observer = new(src) src << browse(null, "window=playersetup") spawning = TRUE @@ -598,7 +595,7 @@ client.prefs.active_character.language = "None" /mob/new_player/proc/ViewManifest() - GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.always_state) + GLOB.generic_crew_manifest.ui_interact(usr) /mob/new_player/Move() return 0 diff --git a/code/modules/mob/new_player/sprite_accessories/ipc/ipc_face.dm b/code/modules/mob/new_player/sprite_accessories/ipc/ipc_face.dm index 316f50b96faf..b022faf07a3b 100644 --- a/code/modules/mob/new_player/sprite_accessories/ipc/ipc_face.dm +++ b/code/modules/mob/new_player/sprite_accessories/ipc/ipc_face.dm @@ -96,6 +96,14 @@ name = "Test IPC Screen" icon_state = "test" +/datum/sprite_accessory/hair/ipc/ipc_screen_music + name = "Music IPC screen" + icon_state = "music" + +/datum/sprite_accessory/hair/ipc/ipc_screen_waiting + name = "Waiting IPC screen" + icon_state = "waiting" + /datum/sprite_accessory/hair/ipc/hesphiastos_alt_off name = "Dark Hesphiastos Screen" icon_state = "off" @@ -131,17 +139,3 @@ icon_state = "rainbow_hesp_alt" models_allowed = list("Hesphiastos Industries alt.") -/datum/sprite_accessory/hair/ipc/fluff - fluff = 1 - -/datum/sprite_accessory/hair/ipc/fluff/lumi_eyes //Lumi Fluff hair - name = "Lumi Eyes" - icon_state = "lumi_eyes" - -/datum/sprite_accessory/hair/ipc/fluff/lumi_music //Lumi Fluff hair - name = "Lumi Music" - icon_state = "lumi_music" - -/datum/sprite_accessory/hair/ipc/fluff/lumi_waiting //Lumi Fluff hair - name = "Lumi Waiting" - icon_state = "lumi_waiting" diff --git a/code/modules/mob/new_player/sprite_accessories/vox/vox_tail_markings.dm b/code/modules/mob/new_player/sprite_accessories/vox/vox_tail_markings.dm index 6a3d50317ac5..890617eb6393 100644 --- a/code/modules/mob/new_player/sprite_accessories/vox/vox_tail_markings.dm +++ b/code/modules/mob/new_player/sprite_accessories/vox/vox_tail_markings.dm @@ -2,9 +2,9 @@ icon = 'icons/mob/sprite_accessories/vox/vox_tail_markings.dmi' species_allowed = list("Vox") -/datum/sprite_accessory/body_markings/tail/vox/vox_band - name = "Vox Tail Band" - icon_state = "band" +/datum/sprite_accessory/body_markings/tail/vox/vox_bands + name = "Vox Tail Bands" + icon_state = "bands" /datum/sprite_accessory/body_markings/tail/vox/vox_tip name = "Vox Tail Tip" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 1c71d62f4f63..1ec33fa2fc03 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -37,6 +37,8 @@ O.rename_self("AI", TRUE) + O.blurb_it() + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src) // To prevent the proc from returning null. Todo: Convert to QDEL_IN return O diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index f949dc33dd01..d69ed3d88808 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -1,6 +1,5 @@ -#define TYPING_INDICATOR_LIFETIME 30 * 10 //grace period after which typing indicator disappears regardless of text in chatbar - GLOBAL_LIST_EMPTY(typing_indicator) +GLOBAL_LIST_EMPTY(thinking_indicator) /** * Toggles the floating chat bubble above a players head. @@ -10,9 +9,8 @@ GLOBAL_LIST_EMPTY(typing_indicator) * * me - Is the bubble being caused by the 'me' emote command */ /mob/proc/set_typing_indicator(state, me) - if(!GLOB.typing_indicator[bubble_icon]) - GLOB.typing_indicator[bubble_icon] = image('icons/mob/talk.dmi', null, "[bubble_icon]typing", FLY_LAYER) + GLOB.typing_indicator[bubble_icon] = image('icons/mob/talk.dmi', null, "[bubble_icon]_typing", ABOVE_HUD_LAYER) var/image/I = GLOB.typing_indicator[bubble_icon] I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA @@ -20,91 +18,93 @@ GLOBAL_LIST_EMPTY(typing_indicator) var/mob/living/carbon/human/H = src if(HAS_TRAIT(H, TRAIT_MUTE)) overlays -= GLOB.typing_indicator[bubble_icon] - return + typing = FALSE + return FALSE - if(client) - if(stat != CONSCIOUS || is_muzzled() || (client.prefs.toggles & PREFTOGGLE_SHOW_TYPING) || (me && (client.prefs.toggles2 & PREFTOGGLE_2_EMOTE_BUBBLE))) - overlays -= GLOB.typing_indicator[bubble_icon] - else - if(state) - if(!typing) - overlays += GLOB.typing_indicator[bubble_icon] - typing = TRUE - else - if(typing) - overlays -= GLOB.typing_indicator[bubble_icon] - typing = FALSE - return state + if(!client) + return FALSE + + if(stat != CONSCIOUS || is_muzzled() || (client.prefs.toggles & PREFTOGGLE_SHOW_TYPING)) + overlays -= GLOB.typing_indicator[bubble_icon] + typing = FALSE + return FALSE + + if(state && !typing) + overlays += GLOB.typing_indicator[bubble_icon] + typing = TRUE + + if(!state && typing) + overlays -= GLOB.typing_indicator[bubble_icon] + typing = FALSE + + return state + +/** + * Toggles the floating thought bubble above a players head. + * + * Arguments: + * * state - Should a thought bubble be shown or hidden + */ +/mob/proc/set_thinking_indicator(state) + if(!GLOB.thinking_indicator[bubble_icon]) + GLOB.thinking_indicator[bubble_icon] = image('icons/mob/talk.dmi', null, "[bubble_icon]_thinking", ABOVE_HUD_LAYER) + var/image/I = GLOB.thinking_indicator[bubble_icon] + I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + + if(!client && !isliving(src)) + return FALSE + + if(stat != CONSCIOUS || (client.prefs.toggles & PREFTOGGLE_SHOW_TYPING)) + overlays -= GLOB.thinking_indicator[bubble_icon] + thinking = FALSE + return FALSE + + if(!state && thinking) + overlays -= GLOB.thinking_indicator[bubble_icon] + thinking = FALSE + + if(state && !thinking) + overlays += GLOB.thinking_indicator[bubble_icon] + thinking = TRUE + + return state /mob/verb/say_wrapper() set name = ".Say" - set hidden = 1 + set hidden = TRUE set_typing_indicator(TRUE) - hud_typing = 1 + typing = TRUE var/message = typing_input(src, "", "say (text)") - hud_typing = 0 + typing = FALSE set_typing_indicator(FALSE) if(message) say_verb(message) /mob/verb/me_wrapper() set name = ".Me" - set hidden = 1 - + set hidden = TRUE set_typing_indicator(TRUE, TRUE) - hud_typing = 1 + typing = TRUE var/message = typing_input(src, "", "me (text)") - hud_typing = 0 + typing = FALSE set_typing_indicator(FALSE) if(message) me_verb(message) -/mob/proc/handle_typing_indicator() - if(client) - if(!(client.prefs.toggles & PREFTOGGLE_SHOW_TYPING) && !hud_typing) - var/temp = winget(client, "input", "text") - - if(temp != last_typed) - last_typed = temp - last_typed_time = world.time - - if(world.time > last_typed_time + TYPING_INDICATOR_LIFETIME) - set_typing_indicator(FALSE) - return - if(length(temp) > 5 && findtext(temp, "Say \"", 1, 7)) - set_typing_indicator(TRUE) - else if(length(temp) > 3 && findtext(temp, "Me ", 1, 5)) - set_typing_indicator(TRUE, TRUE) - - else - set_typing_indicator(FALSE) - /client/verb/typing_indicator() set name = "Show/Hide Typing Indicator" set category = "Preferences" - set desc = "Toggles showing an indicator when you are typing a message." + set desc = "Toggles showing a typing/thought indicator when you have TGUIsay open." prefs.toggles ^= PREFTOGGLE_SHOW_TYPING prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles & PREFTOGGLE_SHOW_TYPING) ? "no longer" : "now"] display a typing indicator.") + to_chat(src, "You will [(prefs.toggles & PREFTOGGLE_SHOW_TYPING) ? "no longer" : "now"] display a typing/thought indicator when you have TGUIsay open.") // Clear out any existing typing indicator. if(prefs.toggles & PREFTOGGLE_SHOW_TYPING) if(istype(mob)) mob.set_typing_indicator(FALSE) + mob.set_thinking_indicator(FALSE) SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Typing Indicator (Speech)") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/emote_indicator() - set name = "Show/Hide Emote Typing Indicator" - set category = "Preferences" - set desc = "Toggles showing an indicator when you are typing an emote." - prefs.toggles2 ^= PREFTOGGLE_2_EMOTE_BUBBLE - prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_EMOTE_BUBBLE) ? "no longer" : "now"] display a typing indicator for emotes.") - - SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Typing Indicator (Emote)") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -#undef TYPING_INDICATOR_LIFETIME diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index bf016502b8cc..aa03bc2605ae 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -444,6 +444,7 @@ /obj/item/mod/control/emag_act(mob/user) locked = !locked to_chat(user, "Suit access [locked ? "locked" : "unlocked"]") + return TRUE /obj/item/mod/control/emp_act(severity) . = ..() diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 4ea624dee15f..2dbd92afebc3 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -233,7 +233,7 @@ mod.update_charge_alert() /obj/item/mod/core/plasma - name = "MOD plasma core" + name = "\improper MOD plasma core" desc = "Nanotrasen's attempt at capitalizing on their plasma research. These plasma cores are refueled \ through plasma fuel, allowing for easy continued use by their mining squads." icon_state = "mod-core-plasma" @@ -290,6 +290,10 @@ var/charge_given = is_type_in_list(plasma, charger_list) if(!charge_given) return FALSE + if(charge_amount() == max_charge_amount()) + to_chat(user, "[src] is already fully charged!") + // We didn't succeed but we don't want to treat it as an attackby + return TRUE var/uses_needed = min(plasma.amount, ((max_charge_amount() - charge_amount()) / 2000)) if(!plasma.use(uses_needed)) return FALSE diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index be9d2a4c26a4..0ae05ec490e6 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -187,6 +187,20 @@ /obj/item/mod/module/jetpack/advanced, ) +/obj/item/mod/control/pre_equipped/safeguard/gamma + applied_cell = /obj/item/stock_parts/cell/hyper + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/dispenser/mirage, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/holster, + /obj/item/mod/module/energy_shield/gamma, + ) + default_pins = list( + /obj/item/mod/module/jetpack/advanced, + ) + /obj/item/mod/control/pre_equipped/magnate theme = /datum/mod_theme/magnate applied_cell = /obj/item/stock_parts/cell/hyper @@ -332,7 +346,7 @@ /obj/item/mod/control/pre_equipped/responsory/security insignia_type = /obj/item/mod/module/insignia/security - additional_module = /obj/item/mod/module/dispenser/mirage + additional_module = /obj/item/mod/module/anomaly_locked/firewall/prebuilt //Defence and flaming hot offence. Good for reflective blob, xenos, antagonists with guns /obj/item/mod/control/pre_equipped/responsory/engineer insignia_type = /obj/item/mod/module/insignia/engineer diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index 04a6a5a5fc4c..6daf62d55a3f 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -1,7 +1,10 @@ -/obj/item/mod/control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/mod/control/ui_state(mob/user) + return GLOB.default_state + +/obj/item/mod/control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MODsuit", name, 400, 525, master_ui, state) + ui = new(user, src, "MODsuit", name) ui.open() /obj/item/mod/control/ui_data(mob/user) diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index 3cd7f17fd7a7..99fea77d8b82 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -250,6 +250,7 @@ use_power_cost = DEFAULT_CHARGE_DRAIN * 5 /obj/screen/fullscreen/cursor_catcher/kinesis + icon = 'icons/mob/screen_kinesis.dmi' icon_state = "kinesis" /obj/item/mod/module/anomaly_locked/kinesis/plus diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 912c1018b317..bb7c9138ba39 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -409,3 +409,159 @@ /obj/item/mod/module/ert_camera/on_suit_deactivation(deleting = FALSE) QDEL_NULL(camera) + +///Energy Shield - Gives you a rechargeable energy shield that nullifies attacks. +/obj/item/mod/module/energy_shield + name = "MOD energy shield module" + desc = "A personal, protective forcefield typically seen in military applications. \ + This advanced deflector shield is essentially a scaled down version of those seen on starships, \ + and the power cost can be an easy indicator of this. However, it is capable of blocking nearly any incoming attack, \ + though with its' low amount of separate charges, the user remains mortal." + icon_state = "energy_shield" + complexity = 3 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + use_power_cost = DEFAULT_CHARGE_DRAIN * 2 + incompatible_modules = list(/obj/item/mod/module/energy_shield) + /// Max charges of the shield. + var/max_charges = 3 + /// The time it takes for the first charge to recover. + var/recharge_start_delay = 20 SECONDS + /// How much time it takes for charges to recover after they started recharging. + var/charge_increment_delay = 1 SECONDS + /// How much charge is recovered per recovery. + var/charge_recovery = 1 + /// Whether or not this shield can lose multiple charges. + var/lose_multiple_charges = FALSE + /// The item path to recharge this shield. + var/recharge_path = null + /// The icon file of the shield. + var/shield_icon_file = 'icons/effects/effects.dmi' + /// The icon_state of the shield. + var/shield_icon = "shield-red" + /// Charges the shield should start with. + var/charges + +/obj/item/mod/module/energy_shield/Initialize(mapload) + . = ..() + charges = max_charges + +/obj/item/mod/module/energy_shield/on_suit_activation() + mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon) + RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(shield_reaction)) + +/obj/item/mod/module/energy_shield/on_suit_deactivation(deleting = FALSE) + var/datum/component/shielded/shield = mod.GetComponent(/datum/component/shielded) + charges = shield.current_charges + qdel(shield) + UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + +/obj/item/mod/module/energy_shield/proc/shield_reaction(mob/living/carbon/human/owner, + atom/movable/hitby, + attack_text = "the attack", + final_block_chance = 0, + damage = 0, + attack_type = MELEE_ATTACK, + damage_type = BRUTE +) + SIGNAL_HANDLER + + if(SEND_SIGNAL(mod, COMSIG_ITEM_HIT_REACT, owner, hitby, damage, attack_type) & COMPONENT_BLOCK_SUCCESSFUL) + drain_power(use_power_cost) + return SHIELD_BLOCK + return NONE + +/obj/item/mod/module/energy_shield/gamma + shield_icon = "shield-old" + +/obj/item/mod/module/anomaly_locked/teslawall + name = "MOD arc-shield module" // temp + desc = "A module that uses a flux core to project an unstable protective shield." //change + icon_state = "tesla" + complexity = 3 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 75 + accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/flux) + incompatible_modules = list(/obj/item/mod/module/energy_shield, /obj/item/mod/module/anomaly_locked) + ///Copy paste of shielded code wheeeey + /// Max charges of the shield. + var/max_charges = 80 // Less charges because not gamma / this one is real shocking + /// The time it takes for the first charge to recover. + var/recharge_start_delay = 10 SECONDS + /// How much time it takes for charges to recover after they started recharging. + var/charge_increment_delay = 10 SECONDS + /// How much charge is recovered per recovery. + var/charge_recovery = 20 + /// Whether or not this shield can lose multiple charges. + var/lose_multiple_charges = TRUE + /// The item path to recharge this shield. + var/recharge_path = null + /// The icon file of the shield. + var/shield_icon_file = 'icons/effects/effects.dmi' + /// The icon_state of the shield. + var/shield_icon = "electricity3" + /// Charges the shield should start with. + var/charges + + /// Teslawall specific variables. + var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE + var/zap_range = 5 + var/power = 12500 + var/shock_damage = 30 + +/obj/item/mod/module/anomaly_locked/teslawall/Initialize(mapload) + . = ..() + charges = max_charges + +/obj/item/mod/module/anomaly_locked/teslawall/on_suit_activation() + . = ..() + if(!core) + return FALSE + mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, show_charge_as_alpha = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon) + RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(shield_reaction)) + ADD_TRAIT(mod.wearer, TRAIT_SHOCKIMMUNE, UNIQUE_TRAIT_SOURCE(src)) + +/obj/item/mod/module/anomaly_locked/teslawall/on_suit_deactivation(deleting = FALSE) + . = ..() + if(!core) + return FALSE + var/datum/component/shielded/shield = mod.GetComponent(/datum/component/shielded) + charges = shield.current_charges + qdel(shield) + UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + REMOVE_TRAIT(mod.wearer, TRAIT_SHOCKIMMUNE, UNIQUE_TRAIT_SOURCE(src)) + +/obj/item/mod/module/anomaly_locked/teslawall/proc/shield_reaction(mob/living/carbon/human/owner, + atom/movable/hitby, + attack_text = "the attack", + final_block_chance = 0, + damage = 0, + attack_type = MELEE_ATTACK, + damage_type = BRUTE +) + SIGNAL_HANDLER + + if(SEND_SIGNAL(mod, COMSIG_ITEM_HIT_REACT, owner, hitby, damage, attack_type) & COMPONENT_BLOCK_SUCCESSFUL) + drain_power(use_power_cost) + arc_flash(owner, hitby, damage, attack_type) + return SHIELD_BLOCK + return NONE + +/obj/item/mod/module/anomaly_locked/teslawall/proc/arc_flash(mob/owner, atom/movable/hitby, damage, attack_type) + if((attack_type == PROJECTILE_ATTACK || attack_type == THROWN_PROJECTILE_ATTACK) && prob(33)) + tesla_zap(owner, zap_range, power, zap_flags) + return + if(isitem(hitby)) + if(isliving(hitby.loc)) + var/mob/living/M = hitby.loc + M.electrocute_act(shock_damage, owner, flags = SHOCK_NOGLOVES) + M.KnockDown(3 SECONDS) + else if(isliving(hitby)) + var/mob/living/M = hitby + M.electrocute_act(shock_damage, owner, flags = SHOCK_NOGLOVES) + M.KnockDown(3 SECONDS) + +/obj/item/mod/module/anomaly_locked/teslawall/prebuilt + prebuilt = TRUE + removable = FALSE // No switching it into another suit / no free anomaly core diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index bf118f3edad4..f87ae33c3a57 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -145,7 +145,7 @@ if(firer && isliving(firer)) var/mob/living/L = firer L.apply_status_effect(STATUS_EFFECT_IMPACT_IMMUNE) - L.throw_at(target, 15, 1, L, FALSE, FALSE, callback = CALLBACK(L, TYPE_PROC_REF(/mob/living, remove_status_effect), STATUS_EFFECT_IMPACT_IMMUNE)) + L.throw_at(target, 15, 1, L, FALSE, FALSE, callback = CALLBACK(L, TYPE_PROC_REF(/mob/living, remove_status_effect), STATUS_EFFECT_IMPACT_IMMUNE), block_movement = FALSE) /obj/item/projectile/tether/Destroy() QDEL_NULL(chain) @@ -174,7 +174,6 @@ item_state = "nozzleatmos" safety = 0 max_water = 500 - power = 8 precision = 1 cooling_power = 5 w_class = WEIGHT_CLASS_HUGE diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 0e97863a5324..aca7ce0cb29f 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -303,7 +303,7 @@ incompatible_modules = list(/obj/item/mod/module/dispenser) cooldown_time = 5 SECONDS /// Path we dispense. - var/dispense_type = /obj/item/reagent_containers/food/snacks/burger/cheese + var/dispense_type = /obj/item/food/snacks/burger/cheese /// Time it takes for us to dispense. var/dispense_time = 0 SECONDS diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 84d421147f98..6927df61279a 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -166,3 +166,126 @@ /// Remove the image from the modsuit wearer's screen /obj/effect/temp_visual/sonar_ping/proc/remove_mind(mob/living/looker) looker?.client?.images -= modsuit_image + +///Firewall. Deployable dropwall that lights projectiles on fire. +/obj/item/mod/module/anomaly_locked/firewall + name = "MOD firewall module" + desc = "A module that uses a pyroclastic core to make immolating dropwalls." + icon_state = "firewall" + overlay_state_inactive = "module_mirage_grenade" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 5 + cooldown_time = 20 SECONDS + accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/pyro) + /// Path we dispense. + var/dispense_type = /obj/item/grenade/barrier/dropwall/firewall + +/obj/item/mod/module/anomaly_locked/firewall/on_use() + . = ..() + if(!.) + return + var/obj/item/dispensed = new dispense_type(mod.wearer.loc) + mod.wearer.put_in_hands(dispensed) + playsound(src, 'sound/machines/click.ogg', 100, TRUE) + drain_power(use_power_cost) + var/obj/item/grenade/grenade = dispensed + grenade.attack_self(mod.wearer) + return grenade + +/obj/item/mod/module/anomaly_locked/firewall/prebuilt + prebuilt = TRUE + removable = FALSE // No switching it into another suit / no free anomaly core + +/// Vortex arm mounted shotgun. Fucks up reality in front of it, very power draining. Compeating with the vortex arm and stealth armor after all +/obj/item/mod/module/anomaly_locked/vortex_shotgun + name = "MOD vortex shotgun module" + desc = "A module that uses a vortex core to rend the fabric of space time in front of it." + icon_state = "vortex" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 750 + device = /obj/item/gun/energy/vortex_shotgun + accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/vortex) + +/obj/item/mod/module/anomaly_locked/vortex_shotgun/Initialize(mapload) + . = ..() + RegisterSignal(device, COMSIG_GUN_FIRED, PROC_REF(on_gun_fire)) + +/obj/item/mod/module/anomaly_locked/vortex_shotgun/proc/on_gun_fire() + SIGNAL_HANDLER + if(!drain_power(use_power_cost)) //Drain the rest dry + drain_power(mod.core.check_charge()) + +/obj/item/mod/module/anomaly_locked/vortex_shotgun/prebuilt + prebuilt = TRUE + removable = FALSE // No switching it into another suit / no free anomaly core + +///Cryogrenade. Freezes foes in place, cools them +/obj/item/mod/module/anomaly_locked/cryogrenade + name = "MOD Cryogrenade module" + desc = "A module that uses a cryogenic core to make freezing grenades." + icon_state = "cryogrenade" + overlay_state_inactive = "module_mirage_grenade" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 5 + cooldown_time = 20 SECONDS + accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/cryo) + /// Path we dispense. + var/dispense_type = /obj/item/grenade/cryogrenade_mod + +/obj/item/mod/module/anomaly_locked/cryogrenade/on_use() + . = ..() + if(!.) + return + var/obj/item/dispensed = new dispense_type(mod.wearer.loc) + mod.wearer.put_in_hands(dispensed) + playsound(src, 'sound/machines/click.ogg', 100, TRUE) + drain_power(use_power_cost) + var/obj/item/grenade/grenade = dispensed + grenade.attack_self(mod.wearer) + return grenade + +/obj/item/mod/module/anomaly_locked/cryogrenade/prebuilt + prebuilt = TRUE + removable = FALSE // No switching it into another suit / no free anomaly core + +/obj/item/grenade/cryogrenade_mod + name = "cryogenic grenade" + desc = "A very cold grenade." + icon = 'icons/obj/grenade.dmi' + icon_state = "gluon" + item_state = "grenade" + var/freeze_range = 4 + var/stamina_damage = 60 + var/body_adjustment = -230 + var/reagent_volume = 15 + /// Mob that threw the grenade. + var/mob/living/thrower + + +/obj/item/grenade/cryogrenade_mod/Destroy() + thrower = null + return ..() + +/obj/item/grenade/cryogrenade_mod/attack_self(mob/user) + . = ..() + thrower = user + +/obj/item/grenade/cryogrenade_mod/prime() + update_mob() + playsound(loc, 'sound/effects/empulse.ogg', 50, TRUE) + for(var/turf/simulated/floor/T in view(freeze_range, loc)) + T.MakeSlippery(TURF_WET_ICE) + for(var/mob/living/carbon/C in T) + if(C == thrower) + continue + C.adjustStaminaLoss(stamina_damage) + C.adjust_bodytemperature(body_adjustment) + C.apply_status_effect(/datum/status_effect/freon) + if(C.reagents) + C.reagents.add_reagent("frostoil", reagent_volume) + C.reagents.add_reagent("ice", reagent_volume) + qdel(src) + diff --git a/code/modules/newscaster/obj/newscaster.dm b/code/modules/newscaster/obj/newscaster.dm index 0fc0a4b566ee..6388ad1bb844 100644 --- a/code/modules/newscaster/obj/newscaster.dm +++ b/code/modules/newscaster/obj/newscaster.dm @@ -191,12 +191,15 @@ return ui_interact(user) -/obj/machinery/newscaster/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/newscaster/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/newscaster/ui_interact(mob/user, datum/tgui/ui = null) if(can_scan(user)) scanned_user = get_scanned_user(user)["name"] - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Newscaster", name, 800, 600) + ui = new(user, src, "Newscaster", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/code/modules/newscaster/obj/newspaper.dm b/code/modules/newscaster/obj/newspaper.dm index e896a3e4c7d4..1a833285ea93 100644 --- a/code/modules/newscaster/obj/newspaper.dm +++ b/code/modules/newscaster/obj/newspaper.dm @@ -163,8 +163,7 @@ if(scribble_page == curr_page) to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?") else - var/s = strip_html(input(user, "Write something", "Newspaper", "")) - s = sanitize(copytext(s, 1, MAX_MESSAGE_LEN)) + var/s = tgui_input_text(user, "Write something", "Newspaper") if(!s || !Adjacent(user)) return scribble_page = curr_page diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm index c589dea44301..a9744ad47a0e 100644 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ b/code/modules/ninja/suit/suit_initialisation.dm @@ -13,7 +13,7 @@ suitBusy = 1 - if(suitActive && (alert("Confirm suit systems shutdown? This cannot be halted once it has started.", "Confirm Shutdown", "Yes", "No") == "Yes")) + if(suitActive && (tgui_alert(usr, "Confirm suit systems shutdown? This cannot be halted once it has started.", "Confirm Shutdown", list("Yes", "No")) == "Yes")) to_chat(usr, "Now de-initializing...") sleep(15) diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 6084d14e97f6..9a78635dc529 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -28,7 +28,6 @@ /obj/item/paper/carbon/verb/removecopy() set name = "Remove carbon-copy" set category = "Object" - set src in usr if(copied == 0) var/obj/item/paper/carbon/c = src diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 7763f922d5f2..2de58c9f39ab 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -107,6 +107,7 @@ GLOBAL_LIST_EMPTY(fax_blacklist) emagged = TRUE req_one_access = list() to_chat(user, "The transmitters realign to an unknown source!") + return TRUE else to_chat(user, "You swipe the card through [src], but nothing happens.") @@ -117,10 +118,13 @@ GLOBAL_LIST_EMPTY(fax_blacklist) return TRUE return FALSE -/obj/machinery/photocopier/faxmachine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/photocopier/faxmachine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/photocopier/faxmachine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "FaxMachine", name, 540, 300, master_ui, state) + ui = new(user, src, "FaxMachine", name) ui.open() /obj/machinery/photocopier/faxmachine/ui_data(mob/user) @@ -197,8 +201,10 @@ GLOBAL_LIST_EMPTY(fax_blacklist) . = FALSE if("rename") // rename the item that is currently in the fax machine if(copyitem) - var/n_name = sanitize(copytext_char(input(usr, "What would you like to label the fax?", "Fax Labelling", copyitem.name) as text, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext - if((copyitem && copyitem.loc == src && usr.stat == 0)) + var/n_name = tgui_input_text(usr, "What would you like to label the fax?", "Fax Labelling", copyitem.name) + if(!n_name) + return + if(copyitem && copyitem.loc == src && usr.stat == 0) if(istype(copyitem, /obj/item/paper)) copyitem.name = "[(n_name ? "[n_name]" : initial(copyitem.name))]" copyitem.desc = "This is a paper titled '" + copyitem.name + "'." diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index db62ec6b9fdf..630d3140b111 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -83,10 +83,13 @@ return to_chat(user, "You find nothing in [src].") -/obj/structure/filingcabinet/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/structure/filingcabinet/ui_state(mob/user) + return GLOB.default_state + +/obj/structure/filingcabinet/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "FilingCabinet", name, 400, 300, master_ui, state) + ui = new(user, src, "FilingCabinet", name) ui.open() /obj/structure/filingcabinet/ui_data(mob/user) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index e85bc133506a..11726195d055 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -40,7 +40,7 @@ if(mode) to_chat(user, "You turn on \the [src].") //Now let them chose the text. - var/str = copytext(reject_bad_text(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) + var/str = reject_bad_text(tgui_input_text(user,"Label text?", "Set label")) if(!str || !length(str)) to_chat(user, "Invalid text.") return diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index bb2290f27734..8ab84ad5ca32 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -83,7 +83,7 @@ data = "[header]
        [infolinks ? info_links : info]
        [footer][stamps]" if(view) var/datum/browser/popup = new(user, "Paper[UID()]", , paper_width, paper_height) - popup.stylesheets = list() + popup.include_default_stylesheet = FALSE popup.set_content(data) if(!stars) popup.add_script("marked.js", 'html/browser/marked.js') @@ -373,7 +373,7 @@ 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 + var/input_element = input("Enter what you want to write:", "Write") as message topic_href_write(id, input_element) /obj/item/paper/attackby(obj/item/P, mob/living/user, params) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 1977326bcee4..145123149fe3 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -201,10 +201,10 @@ . = ..() /obj/item/paper_bundle/proc/rename(mob/user) - var/n_name = sanitize(copytext_char(input(user, "What would you like to label the bundle?", "Bundle Labelling", name) as text, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext - if((loc == user && !user.stat)) - name = "[(n_name ? "[n_name]" : "paper bundle")]" - + var/n_name = tgui_input_text(user, "What would you like to label the bundle?", "Bundle Labelling", name) + if(!Adjacent(user) || !n_name || user.stat) + return + name = "[(n_name ? "[n_name]" : "paper bundle")]" add_fingerprint(user) /obj/item/paper_bundle/AltShiftClick(mob/user) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 83def2f64a9a..9ce82fb89937 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -130,10 +130,7 @@ transfered = reagents.trans_to(M, transfer_amount) to_chat(user, "You sneakily stab [M] with the pen.") add_attack_logs(user, M, "Stabbed with (sleepy) [src]. [transfered]u of reagents transfered from pen containing [english_list(contained)].") - for(var/datum/reagent/R as anything in reagents.reagent_list) - if(initial(R.id) == "????") // Yes this is a specific case that we don't really want - continue - reagents.reaction(M, REAGENT_INGEST, 0.1) + reagents.reaction(M, REAGENT_INGEST, 0.1) return TRUE diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 85e7ecc51402..01fd87c905b4 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -46,7 +46,7 @@ return attack_hand(user) /obj/machinery/photocopier/attack_ghost(mob/user) - return attack_hand(user) + ui_interact(user) /obj/machinery/photocopier/attack_hand(mob/user) if(..()) @@ -365,10 +365,13 @@ copy(document, scancopy = TRUE) -/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/photocopier/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/photocopier/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Photocopier", name, 402, 368, master_ui, state) + ui = new(user, src, "Photocopier", name) ui.open() /obj/machinery/photocopier/ui_data(mob/user) @@ -432,7 +435,7 @@ return if(stat & (BROKEN|NOPOWER)) return - var/text = input("Enter what you want to write:", "Write", null, null) as message + var/text = tgui_input_text(user, "Enter what you want to write:", "Write", multiline = TRUE, encode = FALSE) if(!text) return if(toner < 1 || !user) @@ -567,6 +570,7 @@ if(!emagged) emagged = TRUE to_chat(user, "You overload [src]'s laser printing mechanism.") + return TRUE else to_chat(user, "[src]'s laser printing mechanism is already overloaded!") diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 4c4476b84812..010bd5d0dbf4 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -41,7 +41,9 @@ /obj/item/photo/attackby(obj/item/P as obj, mob/user as mob, params) if(is_pen(P) || 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) + var/txt = tgui_input_text(user, "What would you like to write on the back?", "Photo Writing") + if(!txt) + return txt = copytext(txt, 1, 128) if(loc == user && user.stat == 0) scribble = txt @@ -106,9 +108,11 @@ onclose(usr, "Photo[UID()]") /obj/item/photo/proc/rename(mob/user) - var/n_name = sanitize(copytext_char(input(user, "What would you like to label the photo?", "Photo Labelling", name) as text, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext + var/n_name = tgui_input_text(user, "What would you like to label the photo?", "Photo Labelling", name) + if(!n_name) + return //loc.loc check is for making possible renaming photos in clipboards - if(( (loc == user || (loc.loc && loc.loc == user)) && !user.stat)) + if(((loc == user || (loc.loc && loc.loc == user)) && !user.stat)) name = "[(n_name ? "[n_name]" : "photo")]" add_fingerprint(user) @@ -418,7 +422,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor var/datum/picture/P = new() if(istype(src,/obj/item/camera/digital)) - P.fields["name"] = input(user,"Name photo:","photo") + P.fields["name"] = tgui_input_text(user, "Name photo:", "Photo", encode = FALSE) if(!P.fields["name"]) P.fields["name"] = "Photo [current_photo_num]" current_photo_num++ diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index 7f2d6106a409..5539477190a4 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -59,10 +59,11 @@ if(!selection) return - var/obj/item/photo/P = new/obj/item/photo() + var/obj/item/photo/P = new /obj/item/photo() P.construct(selection) P.show(usr) - to_chat(usr, P.desc) + if(P.desc) + to_chat(usr, P.desc, MESSAGE_TYPE_INFO) // TG uses a special garbage collector.. qdel(P) qdel(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. @@ -105,7 +106,6 @@ set category = "AI Commands" set name = "Take Image" set desc = "Takes an image" - set src in usr toggle_camera_mode() @@ -113,7 +113,6 @@ set category = "AI Commands" set name = "View Images" set desc = "View images" - set src in usr viewpictures() @@ -121,7 +120,6 @@ set category = "AI Commands" set name = "Delete Image" set desc = "Delete image" - set src in usr deletepicture(src) @@ -129,7 +127,6 @@ set category ="Robot Commands" set name = "Take Image" set desc = "Takes an image" - set src in usr toggle_camera_mode() @@ -137,7 +134,6 @@ set category ="Robot Commands" set name = "View Images" set desc = "View images" - set src in usr viewpictures() @@ -145,7 +141,6 @@ set category = "Robot Commands" set name = "Delete Image" set desc = "Delete a local image" - set src in usr // Explicitly only allow deletion from the local camera deletepicture(src) diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 5b231a817017..fda0e642d11d 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -43,6 +43,7 @@ qdel(ticket) tickets.Cut() update_icon() + return TRUE /obj/machinery/ticket_machine/Initialize(mapload) . = ..() diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm index 2e309298cad6..aaa3c6aeabdb 100644 --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -381,11 +381,13 @@ GLOBAL_LIST_EMPTY(PDAs) O.show_message(text("[bicon(src)] *[ttone]*")) /obj/item/pda/proc/set_ringtone(mob/user) - var/new_tone = input("Please enter new ringtone", name, ttone) as text + var/new_tone = tgui_input_text(user, "Please enter new ringtone", name, ttone, max_length = 20, encode = FALSE) new_tone = trim(new_tone) + if(!in_range(src, user) || loc != user) close(user) return FALSE + if(!new_tone) return FALSE @@ -393,7 +395,8 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(user, "The PDA softly beeps.") close(user) return TRUE - ttone = sanitize(copytext_char(new_tone, 1, 20)) // SS220 EDIT - ORIGINAL: copytext + + ttone = new_tone return TRUE /obj/item/pda/process() diff --git a/code/modules/pda/ai_pda.dm b/code/modules/pda/ai_pda.dm index ec8cdea837a5..d23a9b1e7c5a 100644 --- a/code/modules/pda/ai_pda.dm +++ b/code/modules/pda/ai_pda.dm @@ -16,7 +16,6 @@ /obj/item/pda/silicon/verb/cmd_send_pdamesg() set category = "AI IM" set name = "Send PDA Message" - set src in usr if(!can_use()) return @@ -34,7 +33,6 @@ /obj/item/pda/silicon/verb/cmd_show_message_log() set category = "AI IM" set name = "Show Message Log" - set src in usr if(!can_use()) return @@ -53,7 +51,6 @@ /obj/item/pda/silicon/verb/cmd_toggle_pda_receiver() set category = "AI IM" set name = "Toggle Sender/Receiver" - set src in usr if(!can_use()) return @@ -65,7 +62,6 @@ /obj/item/pda/silicon/verb/cmd_toggle_pda_silent() set category = "AI IM" set name = "Toggle Ringer" - set src in usr if(!can_use()) return @@ -77,7 +73,6 @@ if((honkamt > 0) && (prob(60)))//For clown virus. honkamt-- playsound(loc, 'sound/items/bikehorn.ogg', 30, 1) - return /obj/item/pda/silicon/ai/can_use() var/mob/living/silicon/ai/AI = usr diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index dd1a5ef030cf..9ca068dd81f5 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -341,3 +341,4 @@ my_game.hacked = TRUE to_chat(user, "TR4P_M45T3R.mod successfully initialized. ToS violated. User Agreement nullified. Gotta pwn them all.") to_chat(user, "You can now create trapped versions of any mob in your collection that will damage hunters who attempt to capture it.") + return TRUE diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index 6e2da7c5af51..5779b0944f10 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -25,9 +25,13 @@ if(params["msgnum"]) switch(text2num(params["msgnum"])) if(1) - message1 = clean_input("Line 1", "Enter Message Text", message1) + message1 = tgui_input_text(usr, "Line 1", "Enter Message Text", message1, encode = FALSE) + if(!message1) + return if(2) - message2 = clean_input("Line 2", "Enter Message Text", message2) + message2 = tgui_input_text(usr, "Line 2", "Enter Message Text", message2, encode = FALSE) + if(!message2) + return if("Status") switch(text2num(params["statdisp"])) diff --git a/code/modules/pda/core_apps.dm b/code/modules/pda/core_apps.dm index 63d8edb71355..b2b2be66a0fb 100644 --- a/code/modules/pda/core_apps.dm +++ b/code/modules/pda/core_apps.dm @@ -73,12 +73,12 @@ switch(action) if("Edit") - var/n = input("Please enter message", name, note) as message + var/n = tgui_input_text(usr, "Please enter message", name, note, multiline = TRUE, encode = FALSE) + if(!n) + return + if(pda.loc == usr) - // TGUI will auto-reject supplied HTML - // However, the admin var-edit window will not - // SANITISATION IS IMPORTANT. DO NOT NEGLECT. - note = adminscrub(n) + note = n else pda.close(usr) diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index 18550c2745f8..2d1ca09cb980 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -121,10 +121,9 @@ /datum/data/pda/app/messenger/proc/create_message(mob/living/U, obj/item/pda/P) - var/t = input(U, "Please enter message", name, null) as text|null + var/t = tgui_input_text(U, "Please enter your message", name) if(!t) return - t = sanitize(copytext_char(t, 1, MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext if(!t || !istype(P)) return if(!in_range(pda, U) && pda.loc != U) diff --git a/code/modules/pda/messenger_plugins.dm b/code/modules/pda/messenger_plugins.dm index 5c075dcdbace..74b1aabdb577 100644 --- a/code/modules/pda/messenger_plugins.dm +++ b/code/modules/pda/messenger_plugins.dm @@ -42,32 +42,17 @@ name = "*Detonate*" icon = "exclamation-circle" -/datum/data/pda/messenger_plugin/virus/detonate/user_act(mob/user as mob, obj/item/pda/P) - . = ..(user, P) +/datum/data/pda/messenger_plugin/virus/detonate/user_act(mob/user, obj/item/pda/pda_to_detonate) + . = ..() if(.) - var/difficulty = 0 - - if(pda.cartridge) - difficulty += pda.cartridge.programs.len / 2 - else - difficulty += 2 - - if(!P.detonate || P.hidden_uplink) + if(!pda_to_detonate.detonate || pda_to_detonate.hidden_uplink) user.show_message("The target PDA does not seem to respond to the detonation command.", 1) pda.cartridge.charges++ - else if(prob(difficulty * 12)) - user.show_message("An error flashes on your [pda].", 1) - else if(prob(difficulty * 3)) - user.show_message("Energy feeds back into your [pda]!", 1) - pda.close(user) - pda.explode() - log_admin("[key_name(user)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up") - message_admins("[key_name_admin(user)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1) else user.show_message("Success!", 1) - log_admin("[key_name(user)] just attempted to blow up [P] with the Detomatix cartridge and succeeded") - message_admins("[key_name_admin(user)] just attempted to blow up [P] with the Detomatix cartridge and succeeded", 1) - P.explode() + log_admin("[key_name(user)] just blew up [pda_to_detonate] with the Detomatix cartridge") + message_admins("[key_name_admin(user)] just blew up [pda_to_detonate] with the Detomatix cartridge", 1) + pda_to_detonate.explode() /datum/data/pda/messenger_plugin/virus/frame icon = "exclamation-circle" diff --git a/code/modules/pda/mob_hunt_game_app.dm b/code/modules/pda/mob_hunt_game_app.dm index ef778723c799..7ac6efca355f 100644 --- a/code/modules/pda/mob_hunt_game_app.dm +++ b/code/modules/pda/mob_hunt_game_app.dm @@ -127,12 +127,12 @@ var/old_name = mob_info.mob_name if(mob_info.nickname) old_name = mob_info.nickname - mob_info.nickname = input("Give a nickname to [old_name]?", "Nickname", old_name) + mob_info.nickname = tgui_input_text(usr, "Give a nickname to [old_name]?", "Nickname", old_name) /datum/data/pda/app/mob_hunter_game/proc/release() if(!my_collection.len) return - if(alert("Are you sure you want to release this mob back into the wild?", "Confirm Release", "Yes", "No") == "Yes") + if(tgui_alert(usr, "Are you sure you want to release this mob back into the wild?", "Confirm Release", list("Yes", "No")) == "Yes") remove_mob() /datum/data/pda/app/mob_hunter_game/proc/print_card() diff --git a/code/modules/pda/nanobank.dm b/code/modules/pda/nanobank.dm index 5da6baaebe60..e068359c4152 100644 --- a/code/modules/pda/nanobank.dm +++ b/code/modules/pda/nanobank.dm @@ -241,7 +241,7 @@ error_message(user, "Incorrect Credentials") /datum/data/pda/app/nanobank/proc/input_account_pin(mob/user) - var/attempt_pin = input("Enter pin code", "NanoBank Account Auth") as num + var/attempt_pin = tgui_input_number(user, "Enter pin code", "NanoBank Account Auth") if(!user_account || !attempt_pin) return return attempt_pin diff --git a/code/modules/pda/pda_tgui.dm b/code/modules/pda/pda_tgui.dm index 535d47616b4d..27310410d31e 100644 --- a/code/modules/pda/pda_tgui.dm +++ b/code/modules/pda/pda_tgui.dm @@ -1,9 +1,12 @@ // All the TGUI interactions are in their own file to keep things simpler -/obj/item/pda/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/pda/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/pda/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PDA", name, 600, 650, master_ui, state) + ui = new(user, src, "PDA", name) ui.open() @@ -57,6 +60,11 @@ return data +/obj/item/pda/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/mob_hunt) + ) + // Yes the stupid amount of args here is important, see L102 /obj/item/pda/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm index 925a1a294b9d..8642d0782df8 100644 --- a/code/modules/pda/utilities.dm +++ b/code/modules/pda/utilities.dm @@ -58,60 +58,69 @@ icon = "link" /datum/data/pda/utility/scanmode/dna/scan_mob(mob/living/C as mob, mob/living/user as mob) + var/list/messages = list() if(ishuman(C)) var/mob/living/carbon/human/H = C if(!istype(H.dna, /datum/dna)) - to_chat(user, "No fingerprints found on [H]") + messages.Add("No fingerprints found on [H]") else - to_chat(user, "[H]'s Fingerprints: [md5(H.dna.uni_identity)]") + messages.Add("[H]'s Fingerprints: [md5(H.dna.uni_identity)]") + if(length(messages)) + to_chat(user, chat_box_regular(messages.Join("
        "))) scan_blood(C, user) /datum/data/pda/utility/scanmode/dna/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) scan_blood(A, user) /datum/data/pda/utility/scanmode/dna/proc/scan_blood(atom/A, mob/user) + var/list/messages = list() if(!A.blood_DNA) - to_chat(user, "No blood found on [A]") + messages.Add("No blood found on [A]") if(A.blood_DNA) qdel(A.blood_DNA) else - to_chat(user, "Blood found on [A]. Analysing...") + messages.Add("Blood found on [A]. Analysing...") spawn(15) - for(var/blood in A.blood_DNA) - to_chat(user, "Blood type: [A.blood_DNA[blood]]\nDNA: [blood]") + for(var/blood in A.blood_DNA) + messages.Add("Blood type: [A.blood_DNA[blood]]\nDNA: [blood]") + to_chat(user, chat_box_regular(messages.Join("
        "))) /datum/data/pda/utility/scanmode/halogen base_name = "Halogen Counter" icon = "exclamation-circle" /datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob) + var/list/messages = list() C.visible_message("[user] has analyzed [C]'s radiation levels!") - user.show_message("Analyzing Results for [C]:") + messages.Add("Analyzing Results for [C]:") if(C.radiation) - user.show_message("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]") + messages.Add("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]") else - user.show_message("No radiation detected.") + messages.Add("No radiation detected.") + to_chat(user, chat_box_regular(messages.Join("
        "))) /datum/data/pda/utility/scanmode/reagent base_name = "Reagent Scanner" icon = "flask" /datum/data/pda/utility/scanmode/reagent/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) + var/list/messages = list() if(!isnull(A.reagents)) if(A.reagents.reagent_list.len > 0) var/reagents_length = A.reagents.reagent_list.len - to_chat(user, "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found.") + messages.Add("[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found.") for(var/datum/reagent/R in A.reagents.reagent_list) if(R.id != "blood") - to_chat(user, "\t [R]") + messages.Add("\t [R]") else var/blood_type = R.data["blood_type"] - to_chat(user, "\t [R] [blood_type]") + messages.Add("\t [R] [blood_type]") else - to_chat(user, "No active chemical agents found in [A].") + messages.Add("No active chemical agents found in [A].") else - to_chat(user, "No significant chemical agents found in [A].") + messages.Add("No significant chemical agents found in [A].") + to_chat(user, chat_box_regular(messages.Join("
        "))) /datum/data/pda/utility/scanmode/gas base_name = "Gas Scanner" diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm index c25dc7936105..a79a6baebef5 100644 --- a/code/modules/point/point.dm +++ b/code/modules/point/point.dm @@ -22,7 +22,7 @@ var/turf/our_tile = get_turf(src) var/obj/visual = new /obj/effect/temp_visual/point(our_tile, invisibility) - animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) + animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y, time = 3, easing = EASE_OUT) // SS220 EDIT - "time = 3" /// Create a bubble pointing at a particular icon and icon state. /// See args for create_point_bubble_from_atom. diff --git a/code/modules/power/apc/apc.dm b/code/modules/power/apc/apc.dm index f27668e5af46..bd6ed8a952e9 100644 --- a/code/modules/power/apc/apc.dm +++ b/code/modules/power/apc/apc.dm @@ -346,7 +346,7 @@ else if(istype(W, /obj/item/mounted/frame/apc_frame) && opened) if(!(stat & BROKEN || opened == APC_COVER_OFF || obj_integrity < max_integrity)) // There is nothing to repair - to_chat(user, "You found no reason for repairing this APC") + to_chat(user, "You found no reason for repairing this APC.") return if(!(stat & BROKEN) && opened == APC_COVER_OFF) // Cover is the only thing broken, we do not need to remove elctronicks to replace cover user.visible_message("[user.name] replaces missing APC's cover.",\ @@ -422,10 +422,13 @@ return ui_interact(user) -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/apc/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/apc/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "APC", name, 510, 460, master_ui, state) + ui = new(user, src, "APC", name) ui.open() /obj/machinery/power/apc/ui_data(mob/user) @@ -1023,6 +1026,7 @@ locked = FALSE to_chat(user, "You emag the APC interface.") update_icon() + return TRUE /obj/machinery/power/apc/proc/apc_short() // if it has internal wires, cut the power wires @@ -1064,22 +1068,6 @@ req_access = list(ACCESS_SYNDICATE) report_power_alarm = FALSE -/obj/machinery/power/apc/syndicate/north - name = "north bump" - pixel_y = 24 - -/obj/machinery/power/apc/syndicate/south - name = "south bump" - pixel_y = -24 - -/obj/machinery/power/apc/syndicate/east - name = "east bump" - pixel_x = 24 - -/obj/machinery/power/apc/syndicate/west - name = "west bump" - pixel_x = -24 - /obj/machinery/power/apc/syndicate/off name = "APC off" environment_channel = 0 @@ -1091,6 +1079,22 @@ . = ..() cell.charge = 0 +/obj/machinery/power/apc/important + cell_type = 10000 + +/obj/machinery/power/apc/critical + cell_type = 25000 + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/syndicate, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/syndicate/off, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/important, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/critical, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/off_station, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/off_station/empty_charge, 24, 24) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/worn_out, 24, 24) + + /obj/item/apc_electronics name = "APC electronics" desc = "Heavy-duty switching circuits for power control." diff --git a/code/modules/power/cables/cable_coil.dm b/code/modules/power/cables/cable_coil.dm index 8b340f1b0ff5..8dde8d42c558 100644 --- a/code/modules/power/cables/cable_coil.dm +++ b/code/modules/power/cables/cable_coil.dm @@ -40,6 +40,11 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain recipes = GLOB.cable_coil_recipes update_wclass() +/obj/item/stack/cable_coil/random/change_stack(mob/user, amount) + var/obj/item/stack/cable_coil/new_stack = ..() + new_stack.color = color + return new_stack + /obj/item/stack/cable_coil/update_name() . = ..() if(amount > 2) diff --git a/code/modules/power/engines/singularity/emitter.dm b/code/modules/power/engines/singularity/emitter.dm index f5c28eba29c4..1f0b631f71ea 100644 --- a/code/modules/power/engines/singularity/emitter.dm +++ b/code/modules/power/engines/singularity/emitter.dm @@ -102,6 +102,7 @@ if(user) user.visible_message("[user] shorts out the lock on [src].", "You short out the lock on [src].") + return TRUE /obj/machinery/power/emitter/attack_hand(mob/user) add_fingerprint(user) diff --git a/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm b/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm index ceadcbea3e50..63a890cf6570 100644 --- a/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm @@ -213,10 +213,13 @@ part.update_icon() return 1 -/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/particle_accelerator/control_box/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ParticleAccelerator", name, 350, 160, master_ui, state) + ui = new(user, src, "ParticleAccelerator", name) ui.open() /obj/machinery/particle_accelerator/control_box/ui_data(mob/user) diff --git a/code/modules/power/engines/supermatter/supermatter.dm b/code/modules/power/engines/supermatter/supermatter.dm index 2f38058bba91..678b6c49dd10 100644 --- a/code/modules/power/engines/supermatter/supermatter.dm +++ b/code/modules/power/engines/supermatter/supermatter.dm @@ -25,6 +25,7 @@ #define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached #define POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD 500 //bonus powerloss inhibition boost if this amount of moles is reached +#define MOLE_CRUNCH_THRESHOLD 1700 //Above this value we can get lord singulo and #define MOLE_PENALTY_THRESHOLD 1800 //Above this value we can get lord singulo and independent mol damage, below it we can heal damage #define MOLE_HEAT_PENALTY 350 //Heat damage scales around this. Too hot setups with this amount of moles do regular damage, anything above and below is scaled //Along with damage_penalty_point, makes flux anomalies. @@ -58,7 +59,7 @@ #define GRAVITATIONAL_ANOMALY "gravitational_anomaly" #define FLUX_ANOMALY "flux_anomaly" -#define CRYO_ANOMALY "cryo_anomaly" +#define BLUESPACE_ANOMALY "bluespace_anomaly" //If integrity percent remaining is less than these values, the monitor sets off the relevant alarm. #define SUPERMATTER_DELAM_PERCENT 5 @@ -377,11 +378,11 @@ SEND_SOUND(M, super_matter_charge_sound) if(atoms_share_level(M, src)) - to_chat(M, "You feel reality distort for a moment...") + to_chat(M, "You feel reality distort for a moment...") else - to_chat(M, "You hold onto \the [M.loc] as hard as you can, as reality distorts around you. You feel safe.") + to_chat(M, "You hold onto \the [M.loc] as hard as you can, as reality distorts around you. You feel safe.") - if(combined_gas > MOLE_PENALTY_THRESHOLD) + if(combined_gas > MOLE_CRUNCH_THRESHOLD) investigate_log("has collapsed into a singularity.", "supermatter") if(T) var/obj/singularity/S = new(T) @@ -548,8 +549,10 @@ power = max((removed.temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) if(prob(50)) - - radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus / 10)))) + var/mole_crunch_bonus = 0 + if(combined_gas > MOLE_CRUNCH_THRESHOLD) + mole_crunch_bonus = 7000 //This adds 7000 EER worth of power to the SM. This should make mole crunch potentially worthy as a SM setup, if not risky. More stable than the anomalies, but very easy to push over the edge. Don't forget, a high EER setup can harvest power through zaps + radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus / 10))) + mole_crunch_bonus) //Power * 0.55 * a value between 1 and 0.8 var/device_energy = power * REACTION_POWER_MODIFIER @@ -635,7 +638,7 @@ if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(1)) supermatter_anomaly_gen(src, GRAVITATIONAL_ANOMALY, rand(5, 10)) if((power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2)) || (prob(0.3) && power > POWER_PENALTY_THRESHOLD)) - supermatter_anomaly_gen(src, CRYO_ANOMALY, rand(5, 10)) + supermatter_anomaly_gen(src, BLUESPACE_ANOMALY, rand(5, 10)) if(prob(15)) supermatter_pull(loc, min(power / 850, 3)) //850, 1700, 2550 @@ -668,7 +671,7 @@ if(powerloss_inhibitor < 0.5) radio.autosay("DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", name, "Engineering", list(z)) - if(combined_gas > MOLE_PENALTY_THRESHOLD) + if(combined_gas > MOLE_CRUNCH_THRESHOLD) radio.autosay("Warning: Critical coolant mass reached.", name, "Engineering", list(z)) //Boom (Mind blown) if(damage > explosion_point) @@ -699,7 +702,7 @@ for(var/M in GLOB.player_list) if(atoms_share_level(M, src)) SEND_SOUND(M, supermatter_sound) //everyone goan know bout this - to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...") + to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...") qdel(src) return gain @@ -905,7 +908,7 @@ else remove_filter("icon") - if(combined_gas > MOLE_PENALTY_THRESHOLD) + if(combined_gas > MOLE_CRUNCH_THRESHOLD) ray_filter_helper(1, power ? clamp((damage/100) * power, 50, 125) : 1, SUPERMATTER_SINGULARITY_RAYS_COLOUR, clamp(damage / 300, 1, 30), clamp(damage / 5, 12, 300)) add_filter(name = "outline", priority = 2, params = list( @@ -958,13 +961,13 @@ l_power = 3, l_color = SUPERMATTER_TESLA_COLOUR, ) - if(combined_gas > MOLE_PENALTY_THRESHOLD && get_integrity() > SUPERMATTER_DANGER_PERCENT) + if(combined_gas > MOLE_CRUNCH_THRESHOLD && get_integrity() > SUPERMATTER_DANGER_PERCENT) set_light( l_range = 4 + clamp((450 - damage) / 10, 1, 50), l_power = 3, l_color = SUPERMATTER_SINGULARITY_LIGHT_COLOUR, ) - if(!combined_gas > MOLE_PENALTY_THRESHOLD || !get_integrity() < SUPERMATTER_DANGER_PERCENT) + if(combined_gas <= MOLE_CRUNCH_THRESHOLD || get_integrity() >= SUPERMATTER_DANGER_PERCENT) for(var/obj/D in darkness_effects) qdel(D) return @@ -975,7 +978,7 @@ l_range = 4 + darkness_aoe, l_power = -1 - darkness_strength, l_color = "#ddd6cf") - if(!length(darkness_effects) && moveable) //Don't do this on movable sms oh god. Ideally don't do this at all, but hey, that's lightning for you + if(!length(darkness_effects) && !moveable) //Don't do this on movable sms oh god. Ideally don't do this at all, but hey, that's lightning for you darkness_effects += new /obj/effect/abstract(locate(x-3,y+3,z)) darkness_effects += new /obj/effect/abstract(locate(x+3,y+3,z)) darkness_effects += new /obj/effect/abstract(locate(x-3,y-3,z)) @@ -1056,12 +1059,12 @@ if(L) switch(type) if(FLUX_ANOMALY) - var/obj/effect/anomaly/flux/A = new(L, 300, FALSE) + var/obj/effect/anomaly/flux/A = new(L, 30 SECONDS, FALSE) A.explosive = FALSE if(GRAVITATIONAL_ANOMALY) - new /obj/effect/anomaly/grav(L, 250, FALSE, FALSE) - if(CRYO_ANOMALY) - new /obj/effect/anomaly/cryo(L, 200, FALSE) + new /obj/effect/anomaly/grav(L, 25 SECONDS, FALSE, FALSE) + if(BLUESPACE_ANOMALY) + new /obj/effect/anomaly/bluespace(L, 24 SECONDS, FALSE, FALSE, TRUE) /obj/machinery/atmospherics/supermatter_crystal/proc/supermatter_zap(atom/zapstart = src, range = 5, zap_str = 4000, zap_flags = ZAP_SUPERMATTER_FLAGS, list/targets_hit = list()) if(QDELETED(zapstart)) @@ -1151,6 +1154,7 @@ if(prob(80)) zap_flags &= ~ZAP_MACHINE_EXPLOSIVE if(target_type == COIL) + zap_flags += ZAP_GENERATES_POWER //In the best situation we can expect this to grow up to 2120kw before a delam/IT'S GONE TOO FAR FRED SHUT IT DOWN //The formula for power gen is zap_str * zap_mod / 2 * capacitor rating, between 1 and 4 var/multi = 10 @@ -1161,6 +1165,7 @@ multi = 40 target.zap_act(zap_str * multi, zap_flags) zap_str /= 3 //Coils should take a lot out of the power of the zap + zap_flags &= ~ZAP_GENERATES_POWER else if(isliving(target))//If we got a fleshbag on our hands var/mob/living/creature = target @@ -1210,7 +1215,7 @@ next_event_time = fake_time + world.time /obj/machinery/atmospherics/supermatter_crystal/proc/try_events() - if(has_been_powered == FALSE) + if(!has_been_powered) return if(!next_event_time) // for when the SM starts make_next_event_time() @@ -1226,7 +1231,7 @@ /datum/supermatter_event/sierra_tier = 1) var/datum/supermatter_event/event = pick(subtypesof(pickweight(events))) - if(istype(event, /datum/supermatter_event/sierra_tier) && has_run_sclass) + if(ispath(event, /datum/supermatter_event/sierra_tier) && has_run_sclass) make_next_event_time() return // We're only gonna have one s-class per round, take a break engineers run_event(event) @@ -1249,7 +1254,7 @@ #undef HALLUCINATION_RANGE #undef GRAVITATIONAL_ANOMALY #undef FLUX_ANOMALY -#undef CRYO_ANOMALY +#undef BLUESPACE_ANOMALY #undef COIL #undef ROD #undef LIVING diff --git a/code/modules/power/engines/tesla/coil.dm b/code/modules/power/engines/tesla/coil.dm index 2204e543f33f..d200ddc904dc 100644 --- a/code/modules/power/engines/tesla/coil.dm +++ b/code/modules/power/engines/tesla/coil.dm @@ -99,7 +99,6 @@ var/power_produced = powernet ? power * input_power_multiplier : power produce_direct_power(power_produced) flick("coilhit", src) - playsound(loc, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) return power - power_produced //You get back the amount we didn't use else . = ..() diff --git a/code/modules/power/generators/portable generators/pacman.dm b/code/modules/power/generators/portable generators/pacman.dm index 295704ee273e..6b309a04d0a5 100644 --- a/code/modules/power/generators/portable generators/pacman.dm +++ b/code/modules/power/generators/portable generators/pacman.dm @@ -245,10 +245,13 @@ /obj/machinery/power/port_gen/pacman/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/power/port_gen/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/port_gen/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/port_gen/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Pacman", name, 500, 260) + ui = new(user, src, "Pacman", name) ui.open() /obj/machinery/power/port_gen/pacman/ui_data(mob/user) diff --git a/code/modules/power/generators/solar.dm b/code/modules/power/generators/solar.dm index d01c01dcef6b..87c2bf4e4607 100644 --- a/code/modules/power/generators/solar.dm +++ b/code/modules/power/generators/solar.dm @@ -373,10 +373,13 @@ return ui_interact(user) -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/solar_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/solar_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SolarControl", name, 490, 300) + ui = new(user, src, "SolarControl", name) ui.open() /obj/machinery/power/solar_control/ui_data(mob/user) diff --git a/code/modules/power/generators/thermo_electric_generator.dm b/code/modules/power/generators/thermo_electric_generator.dm index 4f0a5a811a28..7c4217a2dd2f 100644 --- a/code/modules/power/generators/thermo_electric_generator.dm +++ b/code/modules/power/generators/thermo_electric_generator.dm @@ -198,10 +198,13 @@ else connect() -/obj/machinery/power/teg/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/teg/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/teg/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TEG", name, 500, 400, master_ui, state) + ui = new(user, src, "TEG", name) ui.open() /obj/machinery/power/teg/ui_data(mob/user) diff --git a/code/modules/power/generators/turbine.dm b/code/modules/power/generators/turbine.dm index 9aca6b6e0a1d..4cfb15ef7a58 100644 --- a/code/modules/power/generators/turbine.dm +++ b/code/modules/power/generators/turbine.dm @@ -358,10 +358,13 @@ . = ..() ui_interact(user) -/obj/machinery/power/turbine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/turbine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/turbine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TurbineComputer", name, 400, 150, master_ui, state) + ui = new(user, src, "TurbineComputer", name) ui.open() /obj/machinery/power/turbine/ui_data(mob/user) @@ -421,10 +424,13 @@ compressor = M.buffer to_chat(user, "You link [src] to the turbine compressor in [I]'s buffer.") -/obj/machinery/computer/turbine_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/turbine_computer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/turbine_computer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TurbineComputer", name, 400, 200, master_ui, state) + ui = new(user, src, "TurbineComputer", name) ui.open() /obj/machinery/computer/turbine_computer/ui_data(mob/user) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 255636917e8d..9ca42781ddcd 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -212,10 +212,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) return ui_interact(user) // tgui\packages\tgui\interfaces\GravityGen.js -/obj/machinery/gravity_generator/main/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/gravity_generator/main/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/gravity_generator/main/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui && !(stat & BROKEN)) - ui = new(user, src, ui_key, "GravityGen", name, 350, 250, master_ui, state) + ui = new(user, src, "GravityGen", name) ui.open() /obj/machinery/gravity_generator/main/ui_data(mob/user) @@ -285,7 +288,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) change_power_mode(on ? ACTIVE_POWER_USE : IDLE_POWER_USE) if(gravity) // If we turned on - if(generators_in_level() == FALSE) // And there's no gravity + if(generators_in_level() == 0) // And there's no other gravity generators on this z level alert = TRUE investigate_log("was brought online and is now producing gravity for this level.", "gravity") message_admins("The gravity generator was brought online. ([src_area.name])") @@ -294,7 +297,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) continue A.gravitychange(TRUE, A) - else if(generators_in_level() == TRUE) // Turned off, and there is gravity + else if(generators_in_level() == 1) // Turned off, and there is only one gravity generator on the Z level alert = TRUE investigate_log("was brought offline and there is now no gravity for this level.", "gravity") message_admins("The gravity generator was brought offline with no backup generator. ([src_area.name])") diff --git a/code/modules/power/lights.dm b/code/modules/power/lights.dm index 99168174b2f8..21cdd3dd0224 100644 --- a/code/modules/power/lights.dm +++ b/code/modules/power/lights.dm @@ -470,6 +470,24 @@ LR.ReplaceLight(src, user) return + // Attack with Spray Can! Coloring time. + if(istype(W, /obj/item/toy/crayon/spraycan)) + var/obj/item/toy/crayon/spraycan/spraycan = W + + // quick check to disable capped spraypainting, aesthetic reasons + if(spraycan.capped) + to_chat(user, "You can't spraypaint [src] with the cap still on!") + return + var/list/hsl = rgb2hsl(hex2num(copytext(spraycan.colour, 2, 4)), hex2num(copytext(spraycan.colour, 4, 6)), hex2num(copytext(spraycan.colour, 6, 8))) + hsl[3] = max(hsl[3], 0.4) + var/list/rgb = hsl2rgb(arglist(hsl)) + var/new_color = "#[num2hex(rgb[1], 2)][num2hex(rgb[2], 2)][num2hex(rgb[3], 2)]" + color = new_color + to_chat(user, "You change [src]'s light bulb color.") + brightness_color = new_color + update(TRUE, TRUE, FALSE) + return + // attempt to insert light if(istype(W, /obj/item/light)) if(status != LIGHT_EMPTY) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index be68b3cb4ea3..21e6773fd44f 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -339,12 +339,15 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/power/smes/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/smes/ui_interact(mob/user, datum/tgui/ui = null) if(stat & BROKEN) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Smes", name, 340, 350, master_ui, state) + ui = new(user, src, "Smes", name) ui.open() /obj/machinery/power/smes/ui_data(mob/user) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 5a0fb114b453..cdcd660d0ef0 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -83,7 +83,9 @@ return var/tmp_label = "" - var/label_text = sanitize(input(user, "Inscribe some text into \the [initial(BB.name)]", "Inscription", tmp_label)) + var/label_text = tgui_input_text(user, "Inscribe some text into \the [initial(BB.name)]", "Inscription", tmp_label) + if(!label_text) + return if(length(label_text) > 20) to_chat(user, "The inscription can be at most 20 characters long.") diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 4c29c02f3d40..50d5cbb6700d 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -165,32 +165,6 @@ muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL - -/obj/item/ammo_casing/shotgun/improvised - name = "improvised shell" - desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." - icon_state = "improvshell" - projectile_type = /obj/item/projectile/bullet/pellet/weak - materials = list(MAT_METAL=250) - pellets = 10 - variance = 35 - muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL - muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL - - -/obj/item/ammo_casing/shotgun/improvised/overload - name = "overloaded improvised shell" - desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards. This one has been packed with even more \ - propellant. It's like playing russian roulette, with a shotgun." - icon_state = "improvshell" - projectile_type = /obj/item/projectile/bullet/pellet/overload - materials = list(MAT_METAL=250) - pellets = 4 - variance = 40 - muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL - muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG - - /obj/item/ammo_casing/shotgun/stunslug name = "taser slug" desc = "A stunning taser slug." diff --git a/code/modules/projectiles/ammunition/energy_lens.dm b/code/modules/projectiles/ammunition/energy_lens.dm index 6c600d25977f..5935376b9bb2 100644 --- a/code/modules/projectiles/ammunition/energy_lens.dm +++ b/code/modules/projectiles/ammunition/energy_lens.dm @@ -286,7 +286,7 @@ select_name = "clown" /obj/item/ammo_casing/energy/emitter - projectile_type = /obj/item/projectile/beam/emitter/hitscan + projectile_type = /obj/item/projectile/beam/emitter muzzle_flash_color = LIGHT_COLOR_GREEN fire_sound = 'sound/weapons/emitter.ogg' e_cost = 100 diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index b72a12e61b92..54fc6475c145 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -123,7 +123,7 @@ /obj/item/ammo_box/magazine/internal/shot/improvised name = "improvised shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/improvised + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot max_ammo = 1 /obj/item/ammo_box/magazine/internal/shot/improvised/cane diff --git a/code/modules/projectiles/ammunition/special_ammo.dm b/code/modules/projectiles/ammunition/special_ammo.dm index ef905f9c2817..2885ff9f15b9 100644 --- a/code/modules/projectiles/ammunition/special_ammo.dm +++ b/code/modules/projectiles/ammunition/special_ammo.dm @@ -30,15 +30,11 @@ projectile_type = /obj/item/projectile/magic/fireball /obj/item/ammo_casing/magic/chaos - projectile_type = /obj/item/projectile/magic + projectile_type = /obj/item/projectile/magic/chaos /obj/item/ammo_casing/magic/slipping projectile_type = /obj/item/projectile/magic/slipping -/obj/item/ammo_casing/magic/chaos/newshot() - projectile_type = pick(typesof(/obj/item/projectile/magic)) - ..() - /obj/item/ammo_casing/magic/arcane_barrage projectile_type = /obj/item/projectile/magic/arcane_barrage diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d735eb143599..d7d347aafcde 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -117,6 +117,7 @@ playsound(user, 'sound/weapons/empty.ogg', 100, 1) /obj/item/gun/proc/shoot_live_shot(mob/living/user, atom/target, pointblank = FALSE, message = TRUE) + if(recoil) shake_camera(user, recoil + 1, recoil) @@ -224,7 +225,7 @@ if(semicd) return - + SEND_SIGNAL(src, COMSIG_GUN_FIRED, user, target) var/sprd = 0 var/randomized_gun_spread = 0 if(spread) diff --git a/code/modules/projectiles/guns/chaos_bolt.dm b/code/modules/projectiles/guns/chaos_bolt.dm new file mode 100644 index 000000000000..6fed4ce7b48c --- /dev/null +++ b/code/modules/projectiles/guns/chaos_bolt.dm @@ -0,0 +1,377 @@ +#define CHAOS_STAFF_DAMAGE 30 //Damaging effects will use this number, multiplied or divided depending on effect +#define CHAOS_STAFF_LETHAL_CHANCE 5 //These should add up to 100 +#define CHAOS_STAFF_NEGATIVE_CHANCE 45 +#define CHAOS_STAFF_MISC_CHANCE 30 +#define CHAOS_STAFF_GIFT_CHANCE 15 +#define CHAOS_STAFF_GREAT_GIFT_CHANCE 5 + +/obj/item/projectile/magic/chaos + name = "chaos bolt" + icon_state = "ice_1" + impact_effect_type = /obj/effect/temp_visual/impact_effect/chaos + /// Set by random effet to be summoned in target mob's backpack, on the floor under mob, or around mob if explosion_amount is set. + var/obj/item/item_to_summon + /// If left at 0, item goes in backpack or floor, if set, throw that many items around the target. + var/explosion_amount = 0 + /// Name of random effect to be applied on target mob. + var/chaos_effect + +/obj/item/projectile/magic/chaos/on_hit(atom/target, blocked = 0) + . = ..() + + if(iswallturf(target) || isobj(target)) + target.color = pick(GLOB.random_color_list) + return + + if(target && isliving(target)) + var/mob/living/L = target + if(L.stat == DEAD) + L.visible_message("[target] glows faintly, but nothing else happens.") + return + chaos_chaos(L) + +/obj/item/projectile/magic/chaos/Initialize(mapload) + . = ..() + icon_state = pick("bluespace", "pulse1", "magicm", "declone", "fireball", "blood_bolt", "arcane_barrage", "laser", "u_laser") + + + /** + * Picks and call a subproc to apply a random effect on mob/living/target. + * + * First pick a category of random effect, + * then calls a sub-proc to pick and apply an effect in that category, + * then summons any item_to_summon set by effects. + * Arguments: + * * target - mob/living that will have effect applied on them + */ +/obj/item/projectile/magic/chaos/proc/chaos_chaos(mob/living/target) + var/category = pick(prob(CHAOS_STAFF_LETHAL_CHANCE);"lethal", prob(CHAOS_STAFF_NEGATIVE_CHANCE);"negative", prob(CHAOS_STAFF_MISC_CHANCE);"misc",\ + prob(CHAOS_STAFF_GIFT_CHANCE);"gift", prob(CHAOS_STAFF_GREAT_GIFT_CHANCE);"great gift") + switch(category) + if("lethal") //Target is either dead on the spot or might as well be + apply_lethal_effect(target) + if("negative") //Target is damaged, crippled or otherwise negatively affected. Effect can be lethal in some circumstances. + apply_negative_effect(target) + if("misc") //Miscellaneous effect, can be positive, negative, or just humorous + apply_misc_effect(target) + if("gift") //Grants a gift or positive effect to the target. Usually a gag or mildly useful item... if you weren't being killed by a wizard + apply_gift_effect(target) + if("great gift") //Grants a gift or positive effect to the target. Usually a weapon or useful item. + apply_great_gift_effect(target) + if(!item_to_summon) + return + if(!target.mind) //no abusing mindless mobs for free stuff + target.visible_message("[target] glows faintly, but nothing else happens.") + return + if(explosion_amount) + target.visible_message("A bunch of [item_to_summon.name] scatter around [target]!", \ + "A bunch of [item_to_summon.name] scatter around you!") + for(var/i in 1 to explosion_amount) + var/obj/item/I = new item_to_summon(get_turf(target)) + throwforce = 0 + INVOKE_ASYNC(I, TYPE_PROC_REF(/atom/movable, throw_at), pick(oview(7, get_turf(src))), 10, 1) + throwforce = initial(throwforce) + return + if(!ishuman(target)) + var/obj/item/I = new item_to_summon(get_turf(target)) + target.visible_message("\A [I] drops next to [target]!", "\A [I] drops on the floor!") + return + var/mob/living/carbon/human/H = target + var/obj/item/I = new item_to_summon(src) + if(H.back && isstorage(H.back)) + var/obj/item/storage/S = H.back + S.handle_item_insertion(I, TRUE) //We don't check if it can be inserted because it's magic, GET IN THERE! + H.visible_message("[H]'s [S.name] glows bright!", "\A [I] suddenly appears in your glowing [S.name]!") + return + if(H.back && ismodcontrol(H.back)) + var/obj/item/mod/control/C = H.back + if(C.bag) + C.handle_item_insertion(I, TRUE) + H.visible_message("[H]'s [C] glows bright!", "\A [I] suddenly appears in your glowing [C.name]!") + return + I.forceMove(get_turf(H)) + H.visible_message("\A [I] drops next to [H]!", "\A [I] drops on the floor!") + +/** + * Picks and apply a lethal effect on mob/living/target. Some are more instantaneous than others. + */ +/obj/item/projectile/magic/chaos/proc/apply_lethal_effect(mob/living/target) + if(!ishuman(target)) + target.visible_message("[target] suddenly dies!", "Game over!") + target.death(FALSE) + return + chaos_effect = pick("ded", "heart deleted", "gibbed", "cluwned", "spaced", "decapitated", "banned", \ + "exploded", "cheese morphed", "supermattered", "borged", "animal morphed", "trick revolver", "prions") + var/mob/living/carbon/human/H = target + switch(chaos_effect) + if("ded") + H.visible_message("[H] drops dead!", "Game over!") + H.death() + if("heart deleted") + H.visible_message("[H] looks like they're about to die!", "HEARTUS DELETUS!") + var/obj/item/organ/internal/heart/target_heart = H.get_int_organ(/obj/item/organ/internal/heart) + if(target_heart) + target_heart.remove(H) + qdel(target_heart) + if("gibbed") + H.visible_message("[H] falls into gibs!", "Oof!") + H.gib() + if("cluwned") + H.visible_message("[H] turns into a cluwne!", "Oh no.") + H.makeCluwne() + if("spaced") + for(var/obj/item/I in H) + H.unEquip(I, TRUE) + var/turf/T = safepick(get_area_turfs(/area/space/nearstation)) //Send in space next to the station + if(!T) //Shouldn't happen but just in case + T = safepick(get_area_turfs(/area/space)) + if(!T) //What do you mean there's no space? Okay well just die then + H.visible_message("[H] drops dead!", "Game over!") + H.death(FALSE) + else + H.visible_message("[H] disappears!", "COLD! CAN'T BREATHE!") + do_teleport(H, T) + if("decapitated") + H.visible_message("[H]'s head goes flying!'", \ + "You watch the floor fly to your face as you rapidly lose consciousness...") + var/obj/item/organ/external/affected = target.get_organ("head") + var/atom/movable/A = affected.droplimb(1, DROPLIMB_SHARP) + INVOKE_ASYNC(A, TYPE_PROC_REF(/atom/movable, throw_at), pick(oview(7, get_turf(src))), 10, 1) + if("banned") + H.visible_message("[H] gets BWOINKED out of existence!", \ + "You get BWOINKED out of existence!") + playsound(H, 'sound/effects/adminhelp.ogg', 100, FALSE) + qdel(H) + if("exploded") + H.visible_message("[H] explodes!", "Boom!") + explosion(get_turf(H), 1, 1, 1, cause = "staff of chaos lethal explosion effect") + if("cheese morphed") + H.visible_message("[H] transforms into cheese!", "You've been transformed into cheese!") + new /obj/item/food/snacks/cheesewedge(get_turf(H)) + qdel(H) + if("supermattered") + var/obj/machinery/atmospherics/supermatter_crystal/supercrystal = GLOB.main_supermatter_engine + if(!supercrystal) + H.visible_message("[H] drops dead!", "Game over!") + H.death() + else + H.visible_message("[H] disappears!", "All you see is yellow before you fall to dust...") + do_teleport(H, supercrystal, 1) + H.throw_at(supercrystal, 10, 2) + if(H && H.stat == CONSCIOUS) + to_chat(H, "... not? You're alive? Huh. Neat.") + if("borged") + H.visible_message("[H] turns into a cyborg!", "Beep boop!") + wabbajack(H, force_borg = TRUE) + if("animal morphed") + H.visible_message("[H] turns into an animal!", "Welcome to the jungle!") + wabbajack(H, force_animal = TRUE) + if("trick revolver") + item_to_summon = /obj/item/gun/projectile/revolver/fake + if("prions") + H.visible_message("[H] laughs uncontrollably!", "You feel like you're going to die of laughter!") + H.reagents.add_reagent("prions", 5) + +/** + * Picks and apply a negative effect on mob/living/target. Usually causes damage and/or incapacitating effect. + */ +/obj/item/projectile/magic/chaos/proc/apply_negative_effect(mob/living/target) + if(!ishuman(target)) + if(prob(50)) + target.apply_damage(CHAOS_STAFF_DAMAGE, BRUTE) + target.visible_message("[target] gets slashed by [src]!", "You get slashed by [src]!") + else + target.apply_damage(CHAOS_STAFF_DAMAGE, BURN) + target.visible_message("[target] gets burned by [src]!", "You get burned by [src]!") + return + chaos_effect = pick("fireballed", "ice spiked", "rathend", "stabbed", "slashed", "burned", "poisoned", \ + "plasma", "teleport", "teleport roulette", "electrocuted") + var/mob/living/carbon/human/H = target + switch(chaos_effect) + if("fireballed") + H.visible_message("[H] is hit by a fireball! ", "You get hit by a fireball!") + H.apply_damage(CHAOS_STAFF_DAMAGE / 3, BRUTE) + explosion(get_turf(H), -1, 0, 2, 3, flame_range = 2, cause = "staff of chaos fireball effect") + if("ice spiked") + H.visible_message("[H]'s chest get pierced by an ice spike!", "An ice spike pierces your chest!") + H.apply_damage(CHAOS_STAFF_DAMAGE, BRUTE, "chest") + H.bodytemperature = 250 + if("rathend") + var/obj/item/organ/internal/appendix/A = H.get_int_organ(/obj/item/organ/internal/appendix) + if(!A) + H.apply_damage(CHAOS_STAFF_DAMAGE / 3, BRUTE, "chest") + new/obj/effect/decal/cleanable/blood/gibs(get_turf(H)) + to_chat(H, "Blood flows out of your body!") + H.KnockDown(6 SECONDS) + return + A.remove(H) + A.forceMove(get_turf(H)) + A.throw_at(get_edge_target_turf(H, pick(GLOB.alldirs)), rand(1, 10), 5) + H.visible_message("[H]'s [A.name] flies out of their body in a magical explosion!",\ + "Your [A.name] flies out of your body in a magical explosion!") + H.KnockDown(4 SECONDS) + if("stabbed") + H.visible_message("[H] gets stabbed by a magical knife!", "You get stabbed by a magical knife!") + H.apply_damage(CHAOS_STAFF_DAMAGE, BRUTE, "chest") + if("slashed") + H.visible_message("[H] gets slashed by a magical knife!", "You get slashed by a magical knife!") + H.apply_damage(CHAOS_STAFF_DAMAGE, BRUTE, pick("l_arm", "r_arm")) + if("burned") + H.visible_message("[H] gets set on fire!", "You're on fire! Literally!") + H.apply_damage(CHAOS_STAFF_DAMAGE / 2, BURN) + H.adjust_fire_stacks(14) + H.IgniteMob() + H.emote("scream") + if("poisoned") + H.visible_message("[H] looks ill!", "You feel sick...") + var/random_reagent = pick("carpotoxin", "cyanide", "amanitin", "sarin", "venom") + H.reagents.add_reagent(random_reagent, CHAOS_STAFF_DAMAGE / 3) + if("plasma") + H.visible_message("A cloud of plasma surrounds [H]!", "You're covered in plasma gas!") + H.atmos_spawn_air(LINDA_SPAWN_TOXINS | LINDA_SPAWN_20C, 200) + if("teleport") + var/turf/T + T = find_safe_turf() //Get a safe station turf + if(T) + H.visible_message("[H] disappears!", "You've been teleported!") + do_teleport(H, T) + if("teleport roulette") + H.apply_status_effect(STATUS_EFFECT_TELEPORT_ROULETTE) + var/turf/T + T = find_safe_turf() //Get a safe station turf + if(T) + H.visible_message("[H] disappears!", "You feel sick as you're teleported around the station!") + do_teleport(H, T) + if("electrocuted") + H.visible_message("[H] gets electrocuted!", "You get electrocuted!") + H.electrocute_act(CHAOS_STAFF_DAMAGE, src) + +/datum/status_effect/teleport_roulette + duration = 16 SECONDS + status_type = STATUS_EFFECT_REPLACE + tick_interval = 2 SECONDS + alert_type = null + +/datum/status_effect/teleport_roulette/tick() + var/turf/T + T = find_safe_turf() //Get a safe station turf + if(T && prob(80)) + do_teleport(owner, T) + +/** + * Picks and apply a random miscellaneous effect on mob/living/target. Can be negative or mildly positive. + */ +/obj/item/projectile/magic/chaos/proc/apply_misc_effect(mob/living/target) + if(!ishuman(target)) + chaos_effect = pick("recolor", "bark", "confetti", "smoke", "wand of nothing", "bike horn") + else + chaos_effect = pick("bark", "smoke", "spin", "flip", "confetti", "slip", "wand of nothing", \ + "help maint", "fake callout", "bike horn") + switch(chaos_effect) + if("recolor") //non-humans only because recoloring humans is kinda meh + target.color = pick(GLOB.random_color_list) + if("bark") + target.visible_message("[target] barks!", "Bark!") + playsound(target, 'sound/creatures/dog_bark1.ogg', 100, FALSE) + if("smoke") + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(4, FALSE, target) + INVOKE_ASYNC(smoke, TYPE_PROC_REF(/datum/effect_system, start)) + if("spin") + target.emote("spin") + if("flip") + target.emote("flip") + if("confetti") + confettisize(get_turf(target), 20, 4) + if("slip") + if(ishuman(target)) + var/mob/living/carbon/human/H = target + H.slip("your own foot", 6 SECONDS, 0, 0, 1, "trip") + if("wand of nothing") + item_to_summon = /obj/item/gun/magic/wand + explosion_amount = rand(2, 5) + if("help maint") + target.say(";HELP MAINT") + target.Silence(10 SECONDS) + if("fake callout") + var/message = ";WIZ " + message += pick("SCIENCE", "MED", "BRIG", "BRIDGE", "ARRIVALS", "ARRIVALS MAINT", "CHAPEL", "SCIENCE MAINT", "CARGO", "MINING MAINT", "TURBINE", "ENGI", "ATMOS") + target.say(message) + target.Silence(10 SECONDS) + if("bike horn") + item_to_summon = /obj/item/bikehorn + explosion_amount = rand(2, 3) + +/** + * Picks a random gift to be given to mob/living/target. Should be mildly useful and/or funny. + */ +/obj/item/projectile/magic/chaos/proc/apply_gift_effect(mob/living/target) + chaos_effect = pick("toy sword", "toy revolver", "cheese", "food", "medkit", \ + "insulated gloves", "wand of doors", "golden bike horn", "ban hammer", "banana") + switch(chaos_effect) + if("toy sword") + item_to_summon = /obj/item/toy/sword/chaosprank + if("toy revolver") + item_to_summon = /obj/item/gun/projectile/revolver/capgun/chaosprank + if("cheese") + item_to_summon = /obj/item/food/snacks/cheesewedge + explosion_amount = rand(5, 10) + if("food") + target.visible_message("Food scatters around [target]!", "A bunch of food scatters around you!") + var/limit = rand(5, 10) + for(var/i in 1 to limit) + var/type = pick(typesof(/obj/item/food/snacks)) + var/obj/item/I = new type(get_turf(target)) + INVOKE_ASYNC(I, TYPE_PROC_REF(/atom/movable, throw_at), pick(oview(7, get_turf(src))), 10, 1) + + if("medkit") + item_to_summon = pick(/obj/item/storage/firstaid/brute, /obj/item/storage/firstaid/fire, /obj/item/storage/firstaid/adv) + if("insulated gloves") + item_to_summon = /obj/item/clothing/gloves/color/yellow + explosion_amount = rand(2, 5) + if("wand of doors") + item_to_summon = /obj/item/gun/magic/wand/door + if("golden bike horn") + item_to_summon = /obj/item/bikehorn/golden + explosion_amount = rand(2, 3) + if("ban hammer") + item_to_summon = /obj/item/banhammer + explosion_amount = rand(2, 5) + if("banana") + item_to_summon = /obj/item/food/snacks/grown/banana + +/** + * Picks a random gift to be given to mob/living/target. Should be valuable and/or threatening to the wizard. + */ +/obj/item/projectile/magic/chaos/proc/apply_great_gift_effect(mob/living/target) + chaos_effect = pick("esword", "emag", "chaos wand", "revolver", "aeg", \ + "bluespace banana", "banana grenade", "disco ball", "syndicate minibomb", "crystal ball") + switch(chaos_effect) + if("esword") + item_to_summon = /obj/item/melee/energy/sword/saber/blue + if("emag") + item_to_summon = /obj/item/card/emag + if("chaos wand") + item_to_summon = /obj/item/gun/magic/wand/chaos + if("revolver") + item_to_summon = /obj/item/gun/projectile/revolver + if("aeg") + item_to_summon = /obj/item/gun/energy/gun/nuclear + if("bluespace banana") + item_to_summon = /obj/item/food/snacks/grown/banana/bluespace + if("banana grenade") + item_to_summon = /obj/item/grenade/clown_grenade + if("disco ball") + new /obj/machinery/disco/chaos_staff(get_turf(target)) + target.visible_message("DANCE TILL YOU'RE DEAD!") + if("syndicate minibomb") + item_to_summon = /obj/item/grenade/syndieminibomb + if("crystal ball") + item_to_summon = /obj/item/scrying + +#undef CHAOS_STAFF_DAMAGE +#undef CHAOS_STAFF_LETHAL_CHANCE +#undef CHAOS_STAFF_NEGATIVE_CHANCE +#undef CHAOS_STAFF_MISC_CHANCE +#undef CHAOS_STAFF_GIFT_CHANCE +#undef CHAOS_STAFF_GREAT_GIFT_CHANCE diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index d16842684b4c..fc5735047f2e 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -43,6 +43,7 @@ item_state = null can_holster = TRUE cell_type = /obj/item/stock_parts/cell/pulse/pistol + can_charge = FALSE /obj/item/gun/energy/pulse/destroyer name = "pulse destroyer" diff --git a/code/modules/projectiles/guns/energy/special_eguns.dm b/code/modules/projectiles/guns/energy/special_eguns.dm index 44c34958eae0..f76483b01c4f 100644 --- a/code/modules/projectiles/guns/energy/special_eguns.dm +++ b/code/modules/projectiles/guns/energy/special_eguns.dm @@ -577,10 +577,13 @@ add_fingerprint(user) ui_interact(user) -/obj/item/gun/energy/temperature/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.deep_inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/gun/energy/temperature/ui_state(mob/user) + return GLOB.deep_inventory_state + +/obj/item/gun/energy/temperature/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TempGun", name, 250, 130, master_ui, state) + ui = new(user, src, "TempGun", name) ui.open() /obj/item/gun/energy/temperature/ui_data(mob/user) @@ -605,6 +608,7 @@ desc += " Its temperature cap has been removed." max_temp = 1000 temperature_multiplier *= 5 //so emagged temp guns adjust their temperature much more quickly + return TRUE /obj/item/gun/energy/temperature/process() ..() @@ -745,11 +749,11 @@ return var/tracking_target = locateUID(tracking_target_UID) if(tracking_target) - if(alert("Do you want to clear the tracker?", "Tracker reset", "Yes", "No") == "Yes") + if(tgui_alert(user, "Do you want to clear the tracker?", "Tracker reset", list("Yes", "No")) == "Yes") to_chat(user, "[src] stops tracking [tracking_target]") stop_pointing() if(linked_pinpointer_UID) - if(alert("Do you want to clear the linked pinpointer?", "Pinpointer reset", "Yes", "No") == "Yes") + if(tgui_alert(user, "Do you want to clear the linked pinpointer?", "Pinpointer reset", list("Yes", "No")) == "Yes") to_chat(user, "[src] is ready to be linked to a new pinpointer.") unlink() @@ -884,3 +888,73 @@ #undef PLASMA_CHARGE_USE_PER_SECOND #undef PLASMA_DISCHARGE_LIMIT + +/obj/item/gun/energy/vortex_shotgun + name = "reality vortex wrist mounted shotgun" + desc = "This weapon uses the power of the vortex core to rip apart the fabric of reality in front of it." + icon_state = "flayer" //Sorta wrist mounted? Sorta? Not really but we work with what we got. + flags = NODROP + ammo_type = list(/obj/item/ammo_casing/energy/vortex_blast) + fire_sound = 'sound/weapons/bladeslice.ogg' + cell_type = /obj/item/stock_parts/cell/infinite + +/obj/item/ammo_casing/energy/vortex_blast + projectile_type = /obj/item/projectile/energy/vortex_blast + muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast + variance = 70 + pellets = 8 + e_cost = 100 + delay = 1.2 SECONDS //and delay has to be stored here on energy guns + select_name = "vortex blast" + fire_sound = 'sound/weapons/wave.ogg' + +/obj/item/projectile/energy/vortex_blast + name = "vortex blast" + hitscan = TRUE + damage = 2 + range = 5 + icon_state = "magspear" + hitsound = 'sound/weapons/sear.ogg' //Gets a bit spamy, suppressed is needed to suffer less + hitsound_wall = null + suppressed = TRUE + +/obj/item/projectile/energy/vortex_blast/prehit(atom/target) + . = ..() + if(ishuman(target)) + return + if(isliving(target)) + damage *= 4 //Up damage if not a human as we are not doing shenanigins + return + damage *= 6 //objects tend to fall apart as atoms are ripped up + +/obj/item/projectile/energy/vortex_blast/on_hit(atom/target, blocked = 0) + if(blocked >= 100) + return ..() + if(ishuman(target)) + var/mob/living/carbon/human/L = target + var/obj/item/organ/external/affecting = L.get_organ(ran_zone(def_zone)) + L.apply_damage(2, BRUTE, affecting, L.run_armor_check(affecting, ENERGY)) + L.apply_damage(2, TOX, affecting, L.run_armor_check(affecting, ENERGY)) + L.apply_damage(2, CLONE, affecting, L.run_armor_check(affecting, ENERGY)) + L.adjustBrainLoss(3) + ..() + +/obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast + invisibility = 100 // visual is from effect + +/obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast/Initialize(mapload, atom/target, duration_override) + . = ..() + if(target) + new /obj/effect/warp_effect/vortex_blast(loc, target) + +/obj/effect/warp_effect/vortex_blast + icon = 'icons/effects/64x64.dmi' + icon_state = "vortex_shotgun" + +/obj/effect/warp_effect/vortex_blast/Initialize(mapload, target) + . = ..() + var/matrix/M = matrix() * 0.5 + M.Turn(get_angle(src, target) - 45) + transform = M + animate(src, transform = M * 10, time = 0.3 SECONDS, alpha = 0) + QDEL_IN(src, 0.3 SECONDS) diff --git a/code/modules/projectiles/guns/energy/telegun.dm b/code/modules/projectiles/guns/energy/telegun.dm index 19228ba5fcd1..e2a43b7a30f9 100644 --- a/code/modules/projectiles/guns/energy/telegun.dm +++ b/code/modules/projectiles/guns/energy/telegun.dm @@ -14,7 +14,7 @@ teleport_target = null return ..() -/obj/item/gun/energy/telegun/attack_self(mob/living/user as mob) +/obj/item/gun/energy/telegun/attack_self(mob/living/user) var/list/L = list() var/list/areaindex = list() @@ -34,7 +34,9 @@ areaindex[tmpname] = 1 L[tmpname] = R - var/desc = input("Please select a location to lock in.", "Telegun Target Interface") in L + var/desc = tgui_input_list(user, "Please select a location to lock in.", "Telegun Target Selection", L) + if(!desc) + return teleport_target = L[desc] to_chat(user, "The [src] is now set to [desc].") //Process the shot without draining the cell diff --git a/code/modules/projectiles/guns/magic/magic_staff.dm b/code/modules/projectiles/guns/magic/magic_staff.dm index 0eaf7bf88d0b..44353ba05282 100644 --- a/code/modules/projectiles/guns/magic/magic_staff.dm +++ b/code/modules/projectiles/guns/magic/magic_staff.dm @@ -35,13 +35,13 @@ /obj/item/gun/magic/staff/chaos name = "staff of chaos" - desc = "An artefact that spits bolts of chaotic magic that can potentially do anything." + desc = "Random bullshit go!" ammo_type = /obj/item/ammo_casing/magic/chaos icon_state = "staffofchaos" item_state = "staffofchaos" max_charges = 10 recharge_rate = 2 - no_den_usage = 1 + no_den_usage = TRUE fire_sound = 'sound/magic/staff_chaos.ogg' /obj/item/gun/magic/staff/door diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index c8458bafe916..d2819aeba821 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -10,7 +10,7 @@ w_class = WEIGHT_CLASS_SMALL can_charge = FALSE max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) - var/variable_charges = 1 + var/variable_charges = TRUE execution_speed = 3 SECONDS /obj/item/gun/magic/wand/Initialize(mapload) @@ -201,3 +201,29 @@ to_chat(user, "You feel rather silly!.") charges-- ..() + +///////////////////////////////////// +//WAND OF CHAOS - Only spawned by the Staff of Chaos as a rare random effect +///////////////////////////////////// +/obj/item/gun/magic/wand/chaos + name = "wand of chaos" + desc = "Payback time!" + fire_sound = 'sound/magic/staff_chaos.ogg' + ammo_type = /obj/item/ammo_casing/magic/chaos + icon_state = "chaoswand" + max_charges = 20 + variable_charges = FALSE + no_den_usage = TRUE + +/obj/item/gun/magic/wand/chaos/zap_self(mob/living/user) + if(!ishuman(user)) + return + to_chat(user, "[pick("Chaos chaos!", "You can do anything!", "You hear a mariachi band playing in the distance.", \ + "Would you like a glass of water?", "What fun is there in making sense?", "Maybe you ought to go back home and crawl under your bed.", \ + "Time to dual wield chaos wands!", "Sixty percent of the time, it works every time.", "Cheese for everyone!", "You hear a deep voice cackling.", \ + "Xom bursts into laughter!", "Xom thinks this is hilarious!")]") + var/obj/item/projectile/magic/chaos/proj = new /obj/item/projectile/magic/chaos(src) + proj.chaos_chaos(user) + qdel(proj) + charges-- + ..() diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 2436845b1eb1..37c26c4569fe 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -310,6 +310,14 @@ origin_tech = null mag_type = /obj/item/ammo_box/magazine/internal/cylinder/cap +/obj/item/gun/projectile/revolver/capgun/chaosprank + name = "\improper .357 revolver" + +/obj/item/gun/projectile/revolver/capgun/chaosprank/shoot_with_empty_chamber(mob/living/user) + to_chat(user, "[src] vanishes in a puff of smoke!") + playsound(src, 'sound/items/bikehorn.ogg') + qdel(src) + ///////////////////////////// // DOUBLE BARRELED SHOTGUN // ///////////////////////////// @@ -333,6 +341,7 @@ sawn_desc = "Omar's coming!" can_holster = FALSE unique_reskin = TRUE + var/can_sawoff = TRUE /obj/item/gun/projectile/revolver/doublebarrel/Initialize(mapload) . = ..() @@ -346,6 +355,8 @@ /obj/item/gun/projectile/revolver/doublebarrel/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing)) chamber_round() + if(!can_sawoff) + return ..() if(istype(A, /obj/item/melee/energy)) var/obj/item/melee/energy/W = A if(W.active) diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm index 7c59fe6a63a9..5d69bbdedec8 100644 --- a/code/modules/projectiles/guns/projectile/saw.dm +++ b/code/modules/projectiles/guns/projectile/saw.dm @@ -86,6 +86,7 @@ /obj/item/projectile/bullet/saw/incen damage = 7 armour_penetration_flat = 0 + immolate = 3 /obj/item/projectile/bullet/saw/incen/Move() ..() @@ -94,13 +95,6 @@ new /obj/effect/hotspot(location) location.hotspot_expose(700, 50, 1) -/obj/item/projectile/bullet/saw/incen/on_hit(atom/target, blocked = 0) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(3) - M.IgniteMob() - //magazines// /obj/item/ammo_box/magazine/mm556x45 diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 849fa39f3bc9..70e9a7f903be 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -320,7 +320,7 @@ item_state = "shotgun_combat" origin_tech = "combat=6" mag_type = /obj/item/ammo_box/magazine/internal/shot/com - w_class = WEIGHT_CLASS_HUGE + w_class = WEIGHT_CLASS_BULKY execution_speed = 5 SECONDS //Dual Feed Shotgun diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 45b30ddf7b32..39a292da9582 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -68,6 +68,9 @@ /obj/item/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = TRUE) if(istype(A, /obj/item/reagent_containers/syringe)) + if(istype(A, /obj/item/reagent_containers/syringe/lethal)) + to_chat(user, "[A] is too big to fit into [src].") + return var/in_clip = length(syringes) + (chambered.BB ? 1 : 0) if(in_clip < max_syringes) if(!user.unEquip(A)) diff --git a/code/modules/projectiles/guns/throw/crossbow.dm b/code/modules/projectiles/guns/throw/crossbow.dm index b4a49a9f18b8..77dc3dbd5ea2 100644 --- a/code/modules/projectiles/guns/throw/crossbow.dm +++ b/code/modules/projectiles/guns/throw/crossbow.dm @@ -133,7 +133,7 @@ /obj/item/gun/throw/crossbow/AltClick(mob/user) if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) return - var/choice = input("Select tension to draw to:", "[src]", XBOW_TENSION_FULL) as null|anything in possible_tensions + var/choice = tgui_input_list(user, "Select tension to draw to:", "[src]", possible_tensions) if(!choice) return @@ -157,7 +157,7 @@ /obj/item/gun/throw/crossbow/french name = "french powered crossbow" icon_state = "fcrossbow" - valid_projectile_type = /obj/item/reagent_containers/food/snacks/baguette + valid_projectile_type = /obj/item/food/snacks/baguette /obj/item/gun/throw/crossbow/french/modify_projectile(obj/item/I, on_chamber = 0) return diff --git a/code/modules/projectiles/guns/throw/pielauncher.dm b/code/modules/projectiles/guns/throw/pielauncher.dm index a69cf6d03125..7f70d9990986 100644 --- a/code/modules/projectiles/guns/throw/pielauncher.dm +++ b/code/modules/projectiles/guns/throw/pielauncher.dm @@ -8,7 +8,7 @@ force = 5 clumsy_check = FALSE - valid_projectile_type = /obj/item/reagent_containers/food/snacks/pie + valid_projectile_type = /obj/item/food/snacks/pie max_capacity = 5 projectile_speed = 2 projectile_range = 30 @@ -17,7 +17,7 @@ /obj/item/gun/throw/piecannon/Initialize(mapload) . = ..() 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) + var/obj/item/food/snacks/pie/P = new (src) loaded_projectiles += P process_chamber() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 86464da459a7..3d6211b949d1 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -178,7 +178,7 @@ var/mob/living/carbon/human/M = target if(istype(M.wear_suit)) if(M.wear_suit.type in suit_types) - M.adjustStaminaLoss(34) + M.apply_damage(34, STAMINA) return 1 /obj/item/projectile/beam/lasertag/omni @@ -198,6 +198,7 @@ /obj/item/projectile/beam/immolator name = "immolation beam" + immolate = 1 /obj/item/projectile/beam/immolator/strong name = "heavy immolation beam" @@ -226,13 +227,6 @@ impact_light_range = 2.5 impact_light_color_override = LIGHT_COLOR_FIRE -/obj/item/projectile/beam/immolator/on_hit(atom/target, blocked = 0) - . = ..() - if(isliving(target)) - var/mob/living/M = target - M.adjust_fire_stacks(1) - M.IgniteMob() - /obj/item/projectile/beam/instakill name = "instagib laser" icon_state = "purple_laser" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index b81b6a5690ec..56935aae546e 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -59,13 +59,7 @@ damage_type = TOX /obj/item/projectile/bullet/incendiary - -/obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = 0) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(4) - M.IgniteMob() + immolate = 1 /obj/item/projectile/bullet/incendiary/firebullet damage = 10 @@ -101,25 +95,6 @@ if(H.getStaminaLoss() >= 60) H.KnockDown(8 SECONDS) -/obj/item/projectile/bullet/pellet/weak - tile_dropoff = 0.55 //Come on it does 6 damage don't be like that. - damage = 6 - -/obj/item/projectile/bullet/pellet/weak/New() - range = rand(1, 8) - ..() - -/obj/item/projectile/bullet/pellet/weak/on_range() - do_sparks(1, 1, src) - ..() - -/obj/item/projectile/bullet/pellet/overload - damage = 3 - -/obj/item/projectile/bullet/pellet/overload/New() - range = rand(1, 10) - ..() - /obj/item/projectile/bullet/pellet/assassination damage = 12 tile_dropoff = 1 // slightly less damage and greater damage falloff compared to normal buckshot @@ -129,15 +104,6 @@ var/mob/living/M = target M.AdjustSilence(4 SECONDS) // HELP MIME KILLING ME IN MAINT -/obj/item/projectile/bullet/pellet/overload/on_hit(atom/target, blocked = 0) - ..() - explosion(target, 0, 0, 2) - -/obj/item/projectile/bullet/pellet/overload/on_range() - explosion(src, 0, 0, 2) - do_sparks(3, 3, src) - ..() - /obj/item/projectile/bullet/midbullet damage = 20 stamina = 45 // Three rounds from the c20r knocks unarmoured people down, four for people with bulletproof @@ -160,11 +126,8 @@ damage = 27 armour_penetration_flat = 40 -/obj/item/projectile/bullet/midbullet3/fire/on_hit(atom/target, blocked = 0) - if(..(target, blocked)) - var/mob/living/M = target - M.adjust_fire_stacks(1) - M.IgniteMob() +/obj/item/projectile/bullet/midbullet3/fire + immolate = 1 /obj/item/projectile/bullet/midbullet3/overgrown icon = 'icons/obj/ammo.dmi' @@ -265,10 +228,7 @@ if(M.can_inject(null, FALSE, hit_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..() - for(var/datum/reagent/R as anything in reagents.reagent_list) - if(initial(R.id) == "????") // Yes this is a specific case that we don't really want - continue - reagents.reaction(M, REAGENT_INGEST, 0.1) + reagents.reaction(M, REAGENT_INGEST, 0.1) reagents.trans_to(M, reagents.total_volume) return TRUE else @@ -315,8 +275,21 @@ if(isalien(target)) knockdown = 0 nodamage = TRUE + if(isrobot(target)) + stun = 10 SECONDS . = ..() // Execute the rest of the code. +/obj/item/projectile/bullet/anti_alien_toxin + name = "neurotoxin spit" + icon_state = "neurotoxin" + damage = 15 // FRENDLY FIRE FRENDLY FIRE + damage_type = BURN + +/obj/item/projectile/bullet/anti_alien_toxin/on_hit(atom/target, blocked = 0) + if(isalien(target)) + stun = 10 SECONDS + . = ..() + /obj/item/projectile/bullet/cap name = "cap" damage = 0 diff --git a/code/modules/projectiles/projectile/energy_projectiles.dm b/code/modules/projectiles/projectile/energy_projectiles.dm index a25675bdf68f..15fb2bbbd8df 100644 --- a/code/modules/projectiles/projectile/energy_projectiles.dm +++ b/code/modules/projectiles/projectile/energy_projectiles.dm @@ -108,6 +108,9 @@ M.KnockDown(4 SECONDS) else to_chat(M, "You see a flash of briliant blue light as [src] explodes, burning you!") + if(immolate) + M.adjust_fire_stacks(immolate) + M.IgniteMob() else to_chat(M, "You feel the heat of the explosion of [src], but the blast mostly misses you.") add_attack_logs(src, M, "Hit lightly by [src]") @@ -144,7 +147,7 @@ A.duration += 10 SECONDS qdel(src) return - new /obj/effect/abstract/arc_revolver(target, charge_number) + new /obj/effect/abstract/arc_revolver(target, charge_number, immolate) qdel(src) @@ -156,12 +159,14 @@ var/list/chains = list() var/successfulshocks = 0 var/wait_for_three = 0 + var/our_immolate = 0 -/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number) +/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number, immolate) . = ..() charge_numbers += charge_number START_PROCESSING(SSfastprocess, src) GLOB.arc_emitters += src + our_immolate = immolate / 5 build_chains() /obj/effect/abstract/arc_revolver/proc/build_chains() @@ -232,6 +237,9 @@ ) var/damage = (2 - isliving(B.origin) + 2 - isliving(B.target)) //Damage is upped depending if the origin is a mob or not. Wall to wall hurts more than mob to wall, or mob to mob L.adjustFireLoss(damage) //time to die + if(our_immolate) + L.adjust_fire_stacks(our_immolate) + L.IgniteMob() . = 1 /obj/effect/abstract/arc_revolver/proc/removechains() diff --git a/code/modules/projectiles/projectile/magic_projectiles.dm b/code/modules/projectiles/projectile/magic_projectiles.dm index ae210e6a0147..42e6fc6bdcd1 100644 --- a/code/modules/projectiles/projectile/magic_projectiles.dm +++ b/code/modules/projectiles/projectile/magic_projectiles.dm @@ -180,7 +180,7 @@ . = ..() wabbajack(change) -/proc/wabbajack(mob/living/M) +/proc/wabbajack(mob/living/M, force_borg = FALSE, force_animal = FALSE) if(istype(M) && M.stat != DEAD && !M.notransform) M.notransform = TRUE M.icon = null @@ -206,6 +206,10 @@ var/mob/living/new_mob var/randomize = pick("robot", "slime", "xeno", "human", "animal") + if(force_borg) + randomize = "robot" + if(force_animal) + randomize = "animal" switch(randomize) if("robot") var/path @@ -311,7 +315,6 @@ damage_type = BURN /obj/item/projectile/magic/animate/Bump(atom/change) - ..() if(isitem(change) || isstructure(change) && !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) @@ -336,6 +339,7 @@ // Change our allegiance! var/mob/living/simple_animal/hostile/mimic/copy/C = change C.ChangeOwner(firer) + return ..() /obj/item/projectile/magic/slipping name = "magical banana" diff --git a/code/modules/projectiles/projectile/special_projectiles.dm b/code/modules/projectiles/projectile/special_projectiles.dm index fe9be67164cf..d6ef8c8a422e 100644 --- a/code/modules/projectiles/projectile/special_projectiles.dm +++ b/code/modules/projectiles/projectile/special_projectiles.dm @@ -16,7 +16,7 @@ return TRUE /obj/item/projectile/ion/weak - strong_emp = 0 + strong_emp = -1 weak_emp = 0 /obj/item/projectile/bullet/gyro diff --git a/code/modules/projectiles/projectile_base.dm b/code/modules/projectiles/projectile_base.dm index ddbe7edc5ef9..178f037096d0 100644 --- a/code/modules/projectiles/projectile_base.dm +++ b/code/modules/projectiles/projectile_base.dm @@ -62,6 +62,8 @@ var/jitter = 0 /// Number of times an object can pass through an object. -1 is infinite var/forcedodge = 0 + /// Does the projectile increase fire stacks / immolate mobs on hit? Applies fire stacks equal to the number on hit. + var/immolate = 0 var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all. var/impact_effect_type //what type of impact effect to show when hitting something var/ricochets = 0 @@ -198,6 +200,9 @@ playsound(loc, hitsound, volume, 1, -1) L.visible_message("[L] is hit by \a [src][organ_hit_text]!", \ "[L] is hit by \a [src][organ_hit_text]!") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter + if(immolate) + L.adjust_fire_stacks(immolate) + L.IgniteMob() var/additional_log_text if(blocked) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 916dbb84c56d..d8de619c306d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -142,11 +142,14 @@ if(A == beaker) beaker = null -/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) +/obj/machinery/chem_dispenser/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/chem_dispenser/ui_interact(mob/user, datum/tgui/ui = null) // update the ui if it exists, returns null if no ui is passed/found - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChemDispenser", ui_title, 390, 655) + ui = new(user, src, "ChemDispenser", ui_title) ui.open() /obj/machinery/chem_dispenser/ui_data(mob/user) @@ -237,7 +240,7 @@ //if(isrobot(user)) // SS220 EDIT // return - if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks)) && user.a_intent != INTENT_HARM) + if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks)) && user.a_intent != INTENT_HARM) if(panel_open) to_chat(user, "Close the maintenance panel first.") return @@ -332,7 +335,7 @@ ui_title = "Soda Dispens-o-matic" dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up", "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana", - "watermelonjuice", "carrotjuice", "potato", "berryjuice") + "watermelonjuice", "pineapplejuice", "cream", "berryjuice") upgrade_reagents = list("bananahonk", "milkshake", "cafe_latte", "cafe_mocha", "triple_citrus", "icecoffe","icetea") hacked_reagents = list("thirteenloko") hack_message = "You change the mode from 'McNano' to 'Pizza King'." @@ -463,10 +466,13 @@ to_chat(user, "[src] lacks a power cell!") -/obj/item/handheld_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.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/handheld_chem_dispenser/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/handheld_chem_dispenser/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "HandheldChemDispenser", name, 390, 500) + ui = new(user, src, "HandheldChemDispenser", name) ui.open() /obj/item/handheld_chem_dispenser/ui_data(mob/user) @@ -594,7 +600,7 @@ is_drink = TRUE dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up", "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana", - "watermelonjuice", "carrotjuice", "potato", "berryjuice") + "watermelonjuice", "pineapplejuice", "cream", "berryjuice") /obj/item/handheld_chem_dispenser/botanical name = "handheld botanical chemical dispenser" diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index f4b27a23d4ea..2437d22e3509 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -129,13 +129,16 @@ return FALSE add_fingerprint(usr) -/obj/machinery/chem_heater/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) +/obj/machinery/chem_heater/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/chem_heater/ui_interact(mob/user, datum/tgui/ui = null) if(user.stat || user.restrained()) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChemHeater", "Chemical Heater", 350, 270, master_ui, state) + ui = new(user, src, "ChemHeater", "Chemical Heater") ui.open() /obj/machinery/chem_heater/ui_data(mob/user) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 46b868a7b482..e8c208d6d892 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -122,7 +122,7 @@ to_chat(user, "You can't use [src] while it's panel is opened!") return TRUE - if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks/drinkingglass)) && user.a_intent != INTENT_HARM) + if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks/drinkingglass)) && user.a_intent != INTENT_HARM) if(!user.drop_item()) to_chat(user, "[I] is stuck to you!") return @@ -327,7 +327,7 @@ if("create_condi_bottle") if(!condi || !reagents.total_volume) return - var/obj/item/reagent_containers/food/condiment/P = new(loc) + var/obj/item/reagent_containers/condiment/P = new(loc) reagents.trans_to(P, 50) if("create_pills") var/medicine_name = pillname @@ -413,15 +413,20 @@ return TRUE ui_interact(user) -/obj/machinery/chem_master/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) - var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) - assets.send(user) +/obj/machinery/chem_master/ui_state(mob/user) + return GLOB.default_state - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/chem_master/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChemMaster", name, 575, 600) + ui = new(user, src, "ChemMaster", name) ui.open() +/obj/machinery/chem_master/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/chem_master) + ) + /obj/machinery/chem_master/ui_data(mob/user) var/data[0] @@ -486,7 +491,7 @@ for(var/i in 1 to MAX_PILL_SPRITE) pill_styles += list(list( "id" = i, - "sprite" = "pill[i].png", + "sprite" = "pill[i]", )) data["pillstyles"] = pill_styles @@ -496,7 +501,7 @@ bottle_style_indexer++ bottle_styles_with_sprite += list(list( "id" = bottle_style_indexer, - "sprite" = "[style].png", + "sprite" = "[style]", )) data["bottlestyles"] = bottle_styles_with_sprite @@ -572,7 +577,7 @@ return if(!length(answer)) answer = reagents.get_master_reagent_name() - var/obj/item/reagent_containers/food/condiment/pack/P = new(loc) + var/obj/item/reagent_containers/condiment/pack/P = new(loc) P.originalname = answer P.name = "[answer] pack" P.desc = "A small condiment pack. The label says it contains [answer]." diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 616e9953058c..4a783fb1d843 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -114,7 +114,7 @@ D = new type(0, null) if(!D) return - var/name = stripped_input(usr,"Name:","Name the culture",D.name,MAX_NAME_LEN) + var/name = tgui_input_text(usr, "Name:", "Name the culture", D.name, MAX_NAME_LEN) if(name == null || wait) return var/obj/item/reagent_containers/glass/bottle/B = new/obj/item/reagent_containers/glass/bottle(loc) @@ -145,7 +145,7 @@ updateUsrDialog() return else if(href_list["name_disease"]) - var/new_name = stripped_input(usr, "Name the Disease", "New Name", "", MAX_NAME_LEN) + var/new_name = tgui_input_text(usr, "Name the Disease", "New Name", max_length = MAX_NAME_LEN) if(!new_name) return if(..()) @@ -179,7 +179,7 @@ /obj/machinery/computer/pandemic/proc/print_form(datum/disease/advance/D, mob/living/user) D = GLOB.archive_diseases[D.GetDiseaseID()] if(!(printing) && D) - var/reason = input(user,"Enter a reason for the release", "Write", null) as message + var/reason = tgui_input_text(user,"Enter a reason for the release", "Write", multiline = TRUE) reason += "" var/english_symptoms = list() for(var/I in D.symptoms) @@ -189,7 +189,7 @@ var/signature - if(alert(user,"Would you like to add your signature?",,"Yes","No") == "Yes") + if(tgui_alert(user, "Would you like to add your signature?", "Signature", list("Yes","No")) == "Yes") signature = "[user ? user.real_name : "Anonymous"]" else signature = "" diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index bac5f3c2ef10..89e6149bd0ec 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -10,13 +10,12 @@ resistance_flags = ACID_PROOF var/operating = FALSE var/obj/item/reagent_containers/beaker = new /obj/item/reagent_containers/glass/beaker/large - var/limit = null - var/efficiency = null + var/limit + var/efficiency - //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent + // IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent var/list/blend_items = list ( - - //Sheets + // Sheets /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), /obj/item/stack/sheet/metal = list("iron" = 20), /obj/item/stack/rods = list("iron" = 10), @@ -34,60 +33,58 @@ /obj/item/grown/nettle/death = list("facid" = 0, "sacid" = 0), /obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0), - //Blender Stuff - /obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), - /obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), - /obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5), - /obj/item/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), - /obj/item/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), - /obj/item/reagent_containers/food/snacks/egg = list("egg" = -5), - /obj/item/reagent_containers/food/snacks/grown/rice = list("rice" = -5), - /obj/item/reagent_containers/food/snacks/grown/olive = list("olivepaste" = 0, "sodiumchloride" = 0), - /obj/item/reagent_containers/food/snacks/grown/peanuts = list("peanutbutter" = 0), - - //Grinder stuff, but only if dry - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), - /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0), - - //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! + // Blender Stuff + /obj/item/food/snacks/grown/tomato = list("ketchup" = 0), + /obj/item/food/snacks/grown/wheat = list("flour" = -5), + /obj/item/food/snacks/grown/oat = list("flour" = -5), + /obj/item/food/snacks/grown/cherries = list("cherryjelly" = 0), + /obj/item/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), + /obj/item/food/snacks/egg = list("egg" = -5), + /obj/item/food/snacks/grown/rice = list("rice" = -5), + /obj/item/food/snacks/grown/olive = list("olivepaste" = 0, "sodiumchloride" = 0), + /obj/item/food/snacks/grown/peanuts = list("peanutbutter" = 0), + + // Grinder stuff, but only if dry + /obj/item/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), + /obj/item/food/snacks/grown/coffee = list("coffeepowder" = 0), + /obj/item/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), + /obj/item/food/snacks/grown/tea = list("teapowder" = 0), + + // All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! /obj/item/slime_extract = list(), - /obj/item/reagent_containers/food = list(), + /obj/item/food = list(), /obj/item/reagent_containers/pill = list(), /obj/item/reagent_containers/patch = list() ) var/list/juice_items = list ( - - //Juicer Stuff - /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), - /obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0), - /obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/banana = list("banana" = 0), - /obj/item/reagent_containers/food/snacks/grown/potato = list("potato" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0), - /obj/item/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/pumpkin/blumpkin = list("blumpkinjuice" = 0), //order is important here as blumpkin is a subtype of pumpkin, if switched blumpkins will produce pumpkin juice - /obj/item/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/pineapple = list("pineapplejuice" = 0) + // Juicer Stuff + /obj/item/food/snacks/grown/soybeans = list("soymilk" = 0), + /obj/item/food/snacks/grown/corn = list("corn_starch" = 0), + /obj/item/food/snacks/grown/tomato = list("tomatojuice" = 0), + /obj/item/food/snacks/grown/carrot = list("carrotjuice" = 0), + /obj/item/food/snacks/grown/berries = list("berryjuice" = 0), + /obj/item/food/snacks/grown/banana = list("banana" = 0), + /obj/item/food/snacks/grown/potato = list("potato" = 0), + /obj/item/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0), + /obj/item/food/snacks/grown/citrus/orange = list("orangejuice" = 0), + /obj/item/food/snacks/grown/citrus/lime = list("limejuice" = 0), + /obj/item/food/snacks/grown/watermelon = list("watermelonjuice" = 0), + /obj/item/food/snacks/watermelonslice = list("watermelonjuice" = 0), + /obj/item/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0), + /obj/item/food/snacks/grown/pumpkin/blumpkin = list("blumpkinjuice" = 0), // Order is important here as blumpkin is a subtype of pumpkin, if switched blumpkins will produce pumpkin juice + /obj/item/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0), + /obj/item/food/snacks/grown/apple = list("applejuice" = 0), + /obj/item/food/snacks/grown/grapes = list("grapejuice" = 0), + /obj/item/food/snacks/grown/pineapple = list("pineapplejuice" = 0) ) var/list/dried_items = list( - - //Grinder stuff, but only if dry, - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), - /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0) + // Grinder stuff, but only if dry, + /obj/item/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), + /obj/item/food/snacks/grown/coffee = list("coffeepowder" = 0), + /obj/item/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), + /obj/item/food/snacks/grown/tea = list("teapowder" = 0) ) var/list/holdingitems = list() @@ -112,8 +109,8 @@ H += M.rating for(var/obj/item/stock_parts/manipulator/M in component_parts) T += M.rating - limit = 10*H - efficiency = 0.8+T*0.1 + limit = 10 * H + efficiency = 0.8 + T * 0.1 /obj/machinery/reagentgrinder/Destroy() QDEL_NULL(beaker) @@ -160,7 +157,6 @@ default_unfasten_wrench(user, I) /obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) - if(exchange_parts(user, I)) SStgui.update_uis(src) return @@ -177,40 +173,40 @@ beaker.loc = src update_icon(UPDATE_ICON_STATE) SStgui.update_uis(src) - return TRUE //no afterattack + return TRUE // No afterattack if(is_type_in_list(I, dried_items)) - if(istype(I, /obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/G = I + if(istype(I, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/G = I if(!G.dry) to_chat(user, "You must dry that first!") return FALSE - if(holdingitems && holdingitems.len >= limit) + if(length(holdingitems) >= limit) to_chat(usr, "The machine cannot hold anymore items.") return FALSE - //Fill machine with a bag! + // Fill machine with a bag! if(istype(I, /obj/item/storage/bag)) var/obj/item/storage/bag/B = I - if(!B.contents.len) + if(!length(B.contents)) to_chat(user, "[B] is empty.") return FALSE - var/original_contents_len = B.contents.len + var/original_contents_len = length(B.contents) for(var/obj/item/G in B.contents) if(is_type_in_list(G, blend_items) || is_type_in_list(G, juice_items)) B.remove_from_storage(G, src) holdingitems += G - if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill + if(length(holdingitems) >= limit) // Sanity checking so the blender doesn't overfill to_chat(user, "You fill the All-In-One grinder to the brim.") break - if(B.contents.len == original_contents_len) + if(length(B.contents) == original_contents_len) to_chat(user, "Nothing in [B] can be put into the All-In-One grinder.") return FALSE - else if(!B.contents.len) + else if(!length(B.contents)) to_chat(user, "You empty all of [B]'s contents into the All-In-One grinder.") else to_chat(user, "You empty some of [B]'s contents into the All-In-One grinder.") @@ -231,18 +227,22 @@ SStgui.update_uis(src) return FALSE - - /obj/machinery/reagentgrinder/attack_ai(mob/user) return FALSE /obj/machinery/reagentgrinder/attack_hand(mob/user) ui_interact(user) -/obj/machinery/reagentgrinder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/reagentgrinder/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/reagentgrinder/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/reagentgrinder/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ReagentGrinder", name, 400, 500, master_ui, state) + ui = new(user, src, "ReagentGrinder", name) ui.open() /obj/machinery/reagentgrinder/ui_data(mob/user) @@ -257,10 +257,9 @@ var/list/beakerContents = list() if(beaker) for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... + beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // List in a list because Byond merges the first list... data["beaker_contents"] = beakerContents - var/list/items_counts = list() var/list/name_overrides = list() for(var/obj/O in holdingitems) @@ -274,13 +273,13 @@ else name_overrides[display_name] = display_name if(S.amount > 1) - name_overrides[display_name] = "[name_overrides[display_name]]s" //name_overrides[display_name] Will be set on the first time as the singular form + name_overrides[display_name] = "[name_overrides[display_name]]s" // name_overrides[display_name] Will be set on the first time as the singular form items_counts[display_name] += S.amount continue - else if(istype(O, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = O + else if(isfood(O)) + var/obj/item/food/food = O if(!items_counts[display_name]) if(food.ingredient_name) name_overrides[display_name] = food.ingredient_name @@ -290,7 +289,7 @@ if(food.ingredient_name_plural) name_overrides[display_name] = food.ingredient_name_plural else if(items_counts[display_name] == 1) // Must only add "s" once or you get stuff like "eggsssss" - name_overrides[display_name] = "[name_overrides[display_name]]s" //name_overrides[display_name] Will be set on the first time as the singular form + name_overrides[display_name] = "[name_overrides[display_name]]s" // name_overrides[display_name] Will be set on the first time as the singular form items_counts[display_name]++ @@ -340,7 +339,7 @@ /obj/machinery/reagentgrinder/proc/eject(mob/user) if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return - if(holdingitems && holdingitems.len == 0) + if(!length(holdingitems)) return for(var/obj/item/O in holdingitems) @@ -349,23 +348,12 @@ holdingitems = list() SStgui.update_uis(src) -/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/reagent_containers/O) - for(var/i in blend_items) - if(istype(O, i)) - return TRUE - return FALSE - -/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/O) +/obj/machinery/reagentgrinder/proc/get_special_blend(obj/item/O) for(var/i in blend_items) if(istype(O, i)) return blend_items[i] -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/reagent_containers/food/snacks/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/reagent_containers/food/snacks/O) +/obj/machinery/reagentgrinder/proc/get_special_juice(obj/item/food/snacks/O) for(var/i in juice_items) if(istype(O, i)) return juice_items[i] @@ -378,13 +366,13 @@ else return round(O.seed.potency) -/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/reagent_containers/food/snacks/grown/O) +/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/food/snacks/grown/O) if(!istype(O) || !O.seed) return 5 else if(O.seed.potency == -1) return 5 else - return round(5*sqrt(O.seed.potency)) + return round(5 * sqrt(O.seed.potency)) /obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) holdingitems -= O @@ -394,152 +382,149 @@ power_change() if(stat & (NOPOWER|BROKEN)) return - if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + if(!beaker || beaker.reagents.holder_full()) return + playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1) var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) // Start shaking operating = TRUE SStgui.update_uis(src) - spawn(50) - pixel_x = initial(pixel_x) //return to its spot after shaking + spawn(5 SECONDS) + pixel_x = initial(pixel_x) // Return to its spot after shaking operating = FALSE SStgui.update_uis(src) - //Snacks - for(var/obj/item/reagent_containers/food/snacks/O in holdingitems) - if(beaker.reagents.holder_full()) - break - - var/allowed = get_allowed_juice_by_id(O) - if(isnull(allowed)) - break - - for(var/r_id in allowed) + // Snacks + for(var/obj/item/food/snacks/O in holdingitems) + var/list/special_juice = get_special_juice(O) + if(!length(special_juice)) + continue // Ignore food that doesn't juice into anything + for(var/r_id in special_juice) var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = get_juice_amount(O) - beaker.reagents.add_reagent(r_id, min(amount * efficiency, space)) + beaker.reagents.add_reagent(r_id, min(get_juice_amount(O) * efficiency, space)) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + if(beaker.reagents.holder_full()) break remove_object(O) + if(beaker.reagents.holder_full()) + return /obj/machinery/reagentgrinder/proc/grind() - power_change() if(stat & (NOPOWER|BROKEN)) return - if(!beaker || (beaker && beaker.reagents.holder_full())) + if(!beaker || beaker.reagents.holder_full()) return - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking + + playsound(loc, 'sound/machines/blender.ogg', 50, 1) + animate(src, pixel_x = pick(-3, -2, 2, 3), pixel_y = pick(-3, -2, 2, 3), time = 1 DECISECONDS, loop = 20, easing = JUMP_EASING) + animate(pixel_x = 0, pixel_y = 0, time = 1 DECISECONDS, easing = JUMP_EASING) operating = TRUE SStgui.update_uis(src) - spawn(60) - pixel_x = initial(pixel_x) //return to its spot after shaking + spawn(6 SECONDS) + pixel_x = initial(pixel_x) // Return to its spot after shaking operating = FALSE SStgui.update_uis(src) - //Snacks and Plants - for(var/obj/item/reagent_containers/food/snacks/O in holdingitems) - if(beaker.reagents.holder_full()) - break - - var/allowed = get_allowed_snack_by_id(O) - if(isnull(allowed)) - break - - for(var/r_id in allowed) - + // Snacks and Plants + for(var/obj/item/food/snacks/O in holdingitems) + var/list/special_blend = get_special_blend(O) + for(var/r_id in special_blend) var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] + var/amount = special_blend[r_id] + if(amount <= 0) if(amount == 0) - if(O.reagents != null && O.reagents.has_reagent("nutriment")) + if(O.reagents.has_reagent("nutriment")) beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment") * efficiency, space)) O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + if(O.reagents.has_reagent("plantmatter")) beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter") * efficiency, space)) O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) else - if(O.reagents != null && O.reagents.has_reagent("nutriment")) + if(O.reagents.has_reagent("nutriment")) beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment") * abs(amount) * efficiency), space)) O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + if(O.reagents.has_reagent("plantmatter")) beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter") * abs(amount) * efficiency), space)) O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - - else O.reagents.trans_id_to(beaker, r_id, min(amount, space)) if(beaker.reagents.holder_full()) break - if(O.reagents.reagent_list.len == 0) - remove_object(O) + O.reagents.trans_to(beaker, O.reagents.total_volume) - //Sheets and rods(!) - for(var/obj/item/stack/O in holdingitems) + if(!O.reagents.total_volume) + remove_object(O) if(beaker.reagents.holder_full()) - break + return - var/allowed = get_allowed_by_id(O) - if(isnull(allowed)) - break + // Sheets and rods(!) + for(var/obj/item/stack/O in holdingitems) + var/list/special_blend = get_special_blend(O) + if(!length(special_blend)) + continue // Ignore stackables that don't grind into anything var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - while(O.amount) //Grind until there's no more reagents - if(!space) //if no free space - exit - break - O.amount -= 1 //remove one from stack - for(var/r_id in allowed) - var/spaceused = min(allowed[r_id] * efficiency, space) + while(O.amount) + O.amount-- + + for(var/r_id in special_blend) + var/spaceused = min(special_blend[r_id] * efficiency, space) space -= spaceused beaker.reagents.add_reagent(r_id, spaceused) - if(O.amount < 1) //if leftover small - destroy + + if(O.amount < 1) // If leftover small - destroy remove_object(O) break + if(beaker.reagents.holder_full()) + return - //Plants + // Plants for(var/obj/item/grown/O in holdingitems) - if(beaker.reagents.holder_full()) - break - var/allowed = get_allowed_by_id(O) - for(var/r_id in allowed) + var/list/special_blend = get_special_blend(O) + for(var/r_id in special_blend) var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] + var/amount = special_blend[r_id] + if(amount == 0) - if(O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id) * efficiency, space)) + if(O.reagents.has_reagent(r_id)) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount(r_id) * efficiency, space)) else - beaker.reagents.add_reagent(r_id,min(amount * efficiency, space)) + beaker.reagents.add_reagent(r_id, min(amount * efficiency, space)) if(beaker.reagents.holder_full()) break + remove_object(O) + if(beaker.reagents.holder_full()) + return - //Slime Extractis + // Slime Extracts for(var/obj/item/slime_extract/O in holdingitems) - if(beaker.reagents.holder_full()) - break var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - if(O.reagents != null) + + if(O.reagents) var/amount = O.reagents.total_volume O.reagents.trans_to(beaker, min(amount, space)) if(O.Uses > 0) - beaker.reagents.add_reagent("slimejelly",min(20 * efficiency, space)) + beaker.reagents.add_reagent("slimejelly", min(20 * efficiency, space)) + remove_object(O) + if(beaker.reagents.holder_full()) + return - //Everything else - Transfers reagents from it into beaker + // Everything else - Transfers reagents from it into beaker for(var/obj/item/reagent_containers/O in holdingitems) - if(beaker.reagents.holder_full()) - break - var/amount = O.reagents.total_volume - O.reagents.trans_to(beaker, amount) + O.reagents.trans_to(beaker, O.reagents.total_volume) + if(!O.reagents.total_volume) remove_object(O) + if(beaker.reagents.holder_full()) + return diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 7314ed61bdbd..ac51cdc9cadc 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -1567,13 +1567,12 @@ drink_name = "Ahdomai's Eclipse" drink_desc = "Blizzard in a glass. Tajaran signature drink!" taste_description = "ice" + var/min_achievable_temp = 250 /datum/reagent/consumable/ethanol/ahdomai_eclipse/on_mob_life(mob/living/M) - if(!istajaran(M)) - return ..() - if(M.bodytemperature > 250) - M.bodytemperature = max(250, M.bodytemperature - (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) - + . = ..() + if(istajaran(M) && M.bodytemperature > min_achievable_temp) + M.bodytemperature = max(min_achievable_temp, M.bodytemperature - (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) /datum/reagent/consumable/ethanol/beach_feast name = "Feast by the Beach" diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index 4fc3ce1c13e3..0387905fe2c7 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -24,7 +24,7 @@ if(method == REAGENT_TOUCH) volume = ..() M.apply_damage(0.6*volume, BRUTE) - M.adjustStaminaLoss(volume) + M.apply_damage(volume, STAMINA) if(iscarbon(M)) M.emote("scream") @@ -104,7 +104,7 @@ if(method == REAGENT_TOUCH) volume = ..() M.apply_damage(0.4*volume, BURN) - M.adjustStaminaLoss(volume) + M.apply_damage(volume, STAMINA) if(M.reagents) M.reagents.add_reagent("frostoil", 0.4*volume) diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm index c5941b342456..335af8f37b19 100644 --- a/code/modules/reagents/chemistry/reagents/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -124,6 +124,7 @@ if(volume > 4.5) if(ishuman(M)) var/mob/living/carbon/human/H = M + // im not going to make this an organ datum, so that slime people dont get their brain instantly deleted var/obj/item/organ/internal/heart/ate_heart = H.get_int_organ(/obj/item/organ/internal/heart) if(ate_heart) ate_heart.remove(H) diff --git a/code/modules/reagents/chemistry/reagents/drinks_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks_reagents.dm index 27d2d5977ce4..86e51200e801 100644 --- a/code/modules/reagents/chemistry/reagents/drinks_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks_reagents.dm @@ -271,6 +271,7 @@ /datum/reagent/consumable/drink/hot_coco/on_mob_life(mob/living/M) if(M.bodytemperature < 310) // 310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + return ..() /datum/reagent/consumable/drink/coffee name = "Coffee" diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index eab7d288c5b5..51f8ec28f334 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -741,8 +741,7 @@ return ..() | update_flags /datum/reagent/fliptonium/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(method == REAGENT_INGEST || method == REAGENT_TOUCH) - M.SpinAnimation(speed = 12, loops = -1, parallel = FALSE) + M.SpinAnimation(speed = 12, loops = -1, parallel = FALSE) ..() /datum/reagent/fliptonium/on_mob_delete(mob/living/M) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 2a541a575d84..496cbf3fdd49 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -597,10 +597,11 @@ /datum/reagent/consumable/chocolate/on_mob_life(mob/living/M) M.reagents.add_reagent("sugar", 0.8) + return ..() /datum/reagent/consumable/chocolate/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/choc_pile(T) + new /obj/item/food/snacks/choc_pile(T) /datum/reagent/consumable/mugwort name = "Mugwort" @@ -668,7 +669,7 @@ /datum/reagent/consumable/cheese/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/cheesewedge(T) + new /obj/item/food/snacks/cheesewedge(T) /datum/reagent/consumable/fake_cheese name = "Cheese substitute" @@ -710,7 +711,7 @@ /datum/reagent/consumable/weird_cheese/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/weirdcheesewedge(T) + new /obj/item/food/snacks/weirdcheesewedge(T) /datum/reagent/consumable/beans name = "Refried beans" @@ -843,8 +844,9 @@ /datum/reagent/questionmark/reaction_mob(mob/living/carbon/human/H, method = REAGENT_TOUCH, volume) if(istype(H) && method == REAGENT_INGEST) if(H.dna.species.taste_sensitivity < TASTE_SENSITIVITY_NO_TASTE) // If you can taste it, then you know how awful it is. - H.Weaken(4 SECONDS) to_chat(H, "Ugh! Eating that was a terrible idea!") + if(!H.HasDisease(/datum/disease/food_poisoning)) + H.fakevomit(no_text = TRUE) if(HAS_TRAIT(H, TRAIT_NOHUNGER)) //If you don't eat, then you can't get food poisoning return H.ForceContractDisease(new /datum/disease/food_poisoning(0)) @@ -934,11 +936,11 @@ /datum/reagent/ectoplasm/reaction_turf(turf/T, volume) if(volume >= 10 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/ectoplasm(T) + new /obj/item/food/snacks/ectoplasm(T) /datum/reagent/consumable/bread/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/breadslice(T) + new /obj/item/food/snacks/breadslice(T) /datum/reagent/soap name = "Soap" diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index dd1ef9b10c07..3cd551e24f94 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -211,61 +211,6 @@ M.germ_level = max(M.germ_level - 20, 0) // Reduces the mobs germ level, too return ..() -/datum/reagent/medicine/silver_sulfadiazine - name = "Silver Sulfadiazine" - id = "silver_sulfadiazine" - description = "This antibacterial compound is used to treat burn victims." - reagent_state = LIQUID - color = "#F0DC00" - metabolization_rate = 3 - harmless = FALSE //toxic if ingested, and I am NOT going to account for the difference - taste_description = "burn cream" - -/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M) - var/update_flags = STATUS_UPDATE_NONE - update_flags |= M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE) - return ..() | update_flags - -/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume, show_message = 1) - if(iscarbon(M)) - if(method == REAGENT_TOUCH) - M.adjustFireLoss(-volume) - if(show_message) - to_chat(M, "The silver sulfadiazine soothes your burns.") - if(method == REAGENT_INGEST) - M.adjustToxLoss(0.5*volume) - if(show_message) - to_chat(M, "You feel sick...") - ..() - -/datum/reagent/medicine/styptic_powder - name = "Styptic Powder" - id = "styptic_powder" - description = "Styptic (aluminum sulfate) powder helps control bleeding and heal physical wounds." - reagent_state = LIQUID - color = "#FF9696" - metabolization_rate = 3 - harmless = FALSE - taste_description = "wound cream" - -/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M) - var/update_flags = STATUS_UPDATE_NONE - update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE) - return ..() | update_flags - -/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume, show_message = 1) - if(iscarbon(M)) - if(method == REAGENT_TOUCH) - M.adjustBruteLoss(-volume) - if(show_message) - to_chat(M, "The styptic powder stings like hell as it closes some of your wounds!") - M.emote("scream") - if(method == REAGENT_INGEST) - M.adjustToxLoss(0.5*volume) - if(show_message) - to_chat(M, "You feel gross!") - ..() - /datum/reagent/medicine/salglu_solution name = "Saline-Glucose Solution" id = "salglu_solution" @@ -288,7 +233,49 @@ H.blood_volume += 1 return ..() | update_flags -/datum/reagent/medicine/synthflesh +/datum/reagent/medicine/heal_on_apply + +/datum/reagent/medicine/heal_on_apply/proc/heal_external_limb(obj/item/organ/external/organ, volume) + return + +/datum/reagent/medicine/heal_on_apply/proc/heal_overall_damage(mob/living/M, volume) + return + +/datum/reagent/medicine/heal_on_apply/proc/splash_human(mob/living/carbon/human/H, volume) + var/turf_volume = max(0, (volume - 100) / 3) + volume = volume - turf_volume + + var/volume_per_bodypart = volume / length(H.bodyparts) + + for(var/obj/item/organ/external/organ in H.bodyparts) + if(!get_location_accessible(H, organ.limb_name)) + turf_volume += volume_per_bodypart + continue + + heal_external_limb(organ, volume_per_bodypart) + + H.updatehealth(reason = "[id] splashed") + H.UpdateDamageIcon() + + if(turf_volume > 0) + reaction_turf(get_turf(H), turf_volume) + + return volume + +/datum/reagent/medicine/heal_on_apply/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume, show_message = 1) + if(!iscarbon(M)) + return ..() + + if(ishuman(M) && volume >= 20 && method == REAGENT_TOUCH) + var/applied_volume = splash_human(M, volume) + return ..(M, method, applied_volume, show_message) + + if(method == REAGENT_TOUCH) + heal_overall_damage(M, volume) + + return ..() + +/datum/reagent/medicine/heal_on_apply/synthflesh name = "Synthflesh" id = "synthflesh" description = "A resorbable microfibrillar collagen and protein mixture that can rapidly heal injuries when applied topically." @@ -297,26 +284,95 @@ penetrates_skin = TRUE taste_description = "blood" -/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume, show_message = 1) - if(iscarbon(M)) - if(method == REAGENT_TOUCH) - M.adjustBruteLoss(-1.5 * volume) - M.adjustFireLoss(-1.5 * volume) - if(show_message) - to_chat(M, "The synthetic flesh integrates itself into your wounds, healing you.") - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(HAS_TRAIT_FROM(H, TRAIT_HUSK, BURN) && H.getFireLoss() <= UNHUSK_DAMAGE_THRESHOLD && (H.reagents.get_reagent_amount("synthflesh") + volume >= SYNTHFLESH_UNHUSK_AMOUNT)) - H.cure_husk(BURN) - // Could be a skeleton or a golem or sth, avoid phrases like "burnt flesh" and "burnt skin" - H.visible_message("The squishy liquid coats [H]'s burns. [H] looks a lot healthier!") - ..() +/datum/reagent/medicine/heal_on_apply/synthflesh/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume, show_message = 1) + var/mob/living/carbon/human/H = M + if(ishuman(H) && HAS_TRAIT_FROM(H, TRAIT_HUSK, BURN) && H.getFireLoss() <= UNHUSK_DAMAGE_THRESHOLD && H.reagents.get_reagent_amount("synthflesh") + volume >= SYNTHFLESH_UNHUSK_AMOUNT) + H.cure_husk(BURN) + // Could be a skeleton or a golem or sth, avoid phrases like "burnt flesh" and "burnt skin" + H.visible_message("The squishy liquid coats [H]'s burns. [H] looks a lot healthier!") + + if(show_message) + to_chat(M, "The synthetic flesh integrates itself into your wounds, healing you.") + + return ..() -/datum/reagent/medicine/synthflesh/reaction_turf(turf/T, volume) //let's make a mess! +/datum/reagent/medicine/heal_on_apply/synthflesh/heal_external_limb(obj/item/organ/external/organ, volume) + organ.heal_damage(1.5 * volume, 1.5 * volume, updating_health = FALSE) + +/datum/reagent/medicine/heal_on_apply/synthflesh/heal_overall_damage(mob/living/M, volume) + M.adjustBruteLoss(-1.5 * volume) + M.adjustFireLoss(-1.5 * volume) + +/datum/reagent/medicine/heal_on_apply/synthflesh/reaction_turf(turf/T, volume) //let's make a mess! if(volume >= 5 && !isspaceturf(T)) new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T) playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) +/datum/reagent/medicine/heal_on_apply/styptic_powder + name = "Styptic Powder" + id = "styptic_powder" + description = "Styptic (aluminum sulfate) powder helps control bleeding and heal physical wounds." + reagent_state = LIQUID + color = "#FF9696" + metabolization_rate = 3 + harmless = FALSE + taste_description = "wound cream" + +/datum/reagent/medicine/heal_on_apply/styptic_powder/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.adjustBruteLoss(-2 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + return ..() | update_flags + +/datum/reagent/medicine/heal_on_apply/styptic_powder/heal_external_limb(obj/item/organ/external/organ, volume) + organ.heal_damage(volume, 0, updating_health = FALSE) + +/datum/reagent/medicine/heal_on_apply/styptic_powder/heal_overall_damage(mob/living/M, volume) + M.adjustBruteLoss(-volume) + +/datum/reagent/medicine/heal_on_apply/styptic_powder/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume, show_message = 1) + if(show_message) + to_chat(M, "The styptic powder stings like hell as it closes some of your wounds!") + M.emote("scream") + + if(method == REAGENT_INGEST) + M.adjustToxLoss(0.5 * volume) + if(show_message) + to_chat(M, "You feel gross!") + + return ..() + +/datum/reagent/medicine/heal_on_apply/silver_sulfadiazine + name = "Silver Sulfadiazine" + id = "silver_sulfadiazine" + description = "This antibacterial compound is used to treat burn victims." + reagent_state = LIQUID + color = "#F0DC00" + metabolization_rate = 3 + harmless = FALSE //toxic if ingested, and I am NOT going to account for the difference + taste_description = "burn cream" + +/datum/reagent/medicine/heal_on_apply/silver_sulfadiazine/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.adjustFireLoss(-2 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + return ..() | update_flags + +/datum/reagent/medicine/heal_on_apply/silver_sulfadiazine/heal_external_limb(obj/item/organ/external/organ, volume) + organ.heal_damage(0, volume, updating_health = FALSE) + +/datum/reagent/medicine/heal_on_apply/silver_sulfadiazine/heal_overall_damage(mob/living/M, volume) + M.adjustFireLoss(-volume) + +/datum/reagent/medicine/heal_on_apply/silver_sulfadiazine/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume, show_message = 1) + if(show_message) + to_chat(M, "The silver sulfadiazine soothes your burns.") + + if(method == REAGENT_INGEST) + M.adjustToxLoss(0.5 * volume) + if(show_message) + to_chat(M, "You feel sick...") + + return ..() + /datum/reagent/medicine/charcoal name = "Charcoal" id = "charcoal" @@ -1017,10 +1073,12 @@ M.AdjustDrowsy(-20 SECONDS) M.SetConfused(0) M.SetSleeping(0) - var/status = CANSTUN | CANWEAKEN | CANPARALYSE - M.status_flags &= ~status + M.add_stun_absorption("stimulants", INFINITY, 5) + M.status_flags &= ~CANPARALYSE else - M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE + M.status_flags |= CANPARALYSE + if(islist(M.stun_absorption) && M.stun_absorption["stimulants"]) + M.remove_stun_absorption("stimulants") update_flags |= M.adjustToxLoss(2, FALSE) update_flags |= M.adjustBruteLoss(1, FALSE) if(prob(10)) @@ -1031,7 +1089,9 @@ return ..() | update_flags /datum/reagent/medicine/stimulants/on_mob_delete(mob/living/M) - M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE + M.status_flags |= CANPARALYSE + if(islist(M.stun_absorption) && M.stun_absorption["stimulants"]) + M.remove_stun_absorption("stimulants") ..() //the highest end antistun chem, removes stun and stamina rapidly. @@ -1425,7 +1485,7 @@ M.reagents.remove_reagent(R.id, 0.5) //We will be generous (for nukies really) and purge out the chemicals during this phase, so they don't fucking die during the next phase. Of course, if they try to use adrenals in the next phase, well... if(20 to 43) //If they have stimulants or stimulant drugs then just apply toxin damage instead. - if(has_stimulant == TRUE) + if(has_stimulant) update_flags |= M.adjustToxLoss(10, FALSE) else //apply debilitating effects if(prob(75)) @@ -1436,7 +1496,7 @@ to_chat(M, "Your body goes rigid, you cannot move at all!") M.AdjustWeakened(15 SECONDS) if(45 to INFINITY) // Start fixing bones | If they have stimulants or stimulant drugs in their system then the nanites won't work. - if(has_stimulant == TRUE) + if(has_stimulant) return ..() else for(var/obj/item/organ/external/E in M.bodyparts) diff --git a/code/modules/reagents/chemistry/reagents/misc_reagents.dm b/code/modules/reagents/chemistry/reagents/misc_reagents.dm index 095a7319d80a..e99879f3b28d 100644 --- a/code/modules/reagents/chemistry/reagents/misc_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/misc_reagents.dm @@ -465,12 +465,13 @@ else if(C.mind.assigned_role == "Mime") to_chat(C, "You feel nauseous.") C.AdjustDizzy(volume STATUS_EFFECT_CONSTANT) + ADD_TRAIT(C, TRAIT_COMIC_SANS, id) + C.AddElement(/datum/element/waddling) else to_chat(C, "Something doesn't feel right...") C.AdjustDizzy(volume STATUS_EFFECT_CONSTANT) - if(C.mind.assigned_role != "Clown") - ADD_TRAIT(C, TRAIT_COMIC_SANS, id) - C.AddElement(/datum/element/waddling) + ADD_TRAIT(C, TRAIT_COMIC_SANS, id) + C.AddElement(/datum/element/waddling) C.AddComponent(/datum/component/squeak, null, null, null, null, null, TRUE, falloff_exponent = 20) /datum/reagent/jestosterone/on_mob_life(mob/living/carbon/M) @@ -505,7 +506,7 @@ /datum/reagent/jestosterone/on_mob_delete(mob/living/M) ..() - if(M.mind.assigned_role != "Clown") + if(M.mind?.assigned_role != "Clown") REMOVE_TRAIT(M, TRAIT_COMIC_SANS, id) M.RemoveElement(/datum/element/waddling) qdel(M.GetComponent(/datum/component/squeak)) diff --git a/code/modules/reagents/chemistry/reagents/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm index 754941135999..8dfc39353607 100644 --- a/code/modules/reagents/chemistry/reagents/paradise_pop.dm +++ b/code/modules/reagents/chemistry/reagents/paradise_pop.dm @@ -81,7 +81,7 @@ /datum/reagent/consumable/drink/berry_banned2/on_mob_death(mob/living/M) SEND_SOUND(M, sound('sound/effects/adminhelp.ogg', 0, 1, 0, 25)) - to_chat(M, chat_box_red("PM from-Administrator: BWOINK!")) + to_chat(M, chat_box_red("PM from-Administrator: BWOINK!"), MESSAGE_TYPE_ADMINPM, confidential = TRUE) ..() //Blackeye Brew: Chance to make the drinker say greytider-themed things like "I thought clown was valid!" @@ -101,7 +101,7 @@ "SECRET TECHNIQUE: TABLE AND DISPOSAL!", // Borers got removed but the below reference stays because its hilarious "[pick("MY BROTHER", " MY DOG", "MY BEST FRIEND", "THE BORER", "GEORGE MELONS", "BADMINS")] DID IT!", - ";s WHATS SPACE LAW?!", + "; WHATS SPACE LAW?!", "I BOUGHT THESE GLOVES, NOT STEAL THEM", "THIS DOOR WAS SHOCKED WHEN I GOT HERE", "ANIMALS ARE NOT CREW") diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index a1e6795070bc..fdfd4e3b9c98 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -251,9 +251,8 @@ fireflash_sm(T, radius, 4500 + volume * 500, 350) /datum/reagent/clf3/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) - if(method == REAGENT_TOUCH || method == REAGENT_INGEST) - M.adjust_fire_stacks(10) - M.IgniteMob() + M.adjust_fire_stacks(10) + M.IgniteMob() if(method == REAGENT_INGEST) M.adjustFireLoss(min(max(15, volume * 2.5), 90)) to_chat(M, "It burns!") diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 4fa070dcb13c..c104e21bd9e9 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -284,33 +284,37 @@ return ..() | update_flags /datum/reagent/acid/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) - if(ishuman(M) && !isgrey(M)) - var/mob/living/carbon/human/H = M - if(method == REAGENT_TOUCH) - if(volume > 25) - if(H.wear_mask) - to_chat(H, "Your [H.wear_mask] protects you from the acid!") - return - - if(H.head) - to_chat(H, "Your [H.wear_mask] protects you from the acid!") - return - - if(prob(75)) - H.take_organ_damage(5, 10) - H.emote("scream") - var/obj/item/organ/external/affecting = H.get_organ("head") - if(istype(affecting)) - affecting.disfigure() - else - H.take_organ_damage(5, 10) - else - H.take_organ_damage(5, 10) + if(!ishuman(M) || isgrey(M)) + return + + var/mob/living/carbon/human/H = M + if(method != REAGENT_TOUCH) + to_chat(H, "The greenish acidic substance stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!") + if(volume >= 10) + H.adjustFireLoss(clamp((volume * 2), 4, 20)) + H.emote("scream") + return + + if(volume < 25) // Need at least 10 units to do a little bit of damage + if(volume > 10) + H.take_organ_damage(5, 10) else - to_chat(H, "The greenish acidic substance stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!") - if(volume >= 10) - H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20)) - H.emote("scream") + H.adjustFireLoss(clamp(volume, 1, 5)) + return + + if(H.wear_mask) + to_chat(H, "Your [H.wear_mask] protects you from the acid!") + return + if(H.head) + to_chat(H, "Your [H.head] protects you from the acid!") + return + + H.take_organ_damage(10, 15) + H.emote("scream") + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(istype(affecting)) + affecting.disfigure() /datum/reagent/acid/reaction_obj(obj/O, volume) if(ismob(O.loc)) //handled in human acid_act() @@ -337,42 +341,44 @@ return ..() | update_flags /datum/reagent/acid/facid/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) - if(ishuman(M) && !isgrey(M)) - var/mob/living/carbon/human/H = M - if(method == REAGENT_TOUCH) - if(volume > 9) - if(!H.wear_mask && !H.head) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(istype(affecting)) - affecting.disfigure() - H.adjustFireLoss(min(max(8, (volume - 5) * 3), 75)) - H.emote("scream") - return - else - var/melted_something = FALSE - if(H.wear_mask && !(H.wear_mask.resistance_flags & ACID_PROOF)) - to_chat(H, "Your [H.wear_mask.name] melts away!") - qdel(H.wear_mask) - melted_something = TRUE - - if(H.head && !(H.head.resistance_flags & ACID_PROOF)) - melted_something = TRUE - if(istype(H.head, /obj/item/clothing/head/mod) && ismodcontrol(H.back)) - var/obj/item/mod/control/C = H.back - var/name = H.head.name - C.seal_part(H.head, FALSE) - C.retract(null, H.head) - to_chat(H, "Your [name] melts away as your [C.name] performs emergency cleaning on the helmet, deactivating the suit!") - else - to_chat(H, "Your [H.head.name] melts away!") - qdel(H.head) - if(melted_something) - return - - if(volume >= 5) - H.emote("scream") - H.adjustFireLoss(min(max(8, (volume - 5) * 3), 75)) - to_chat(H, "The blueish acidic substance stings[volume < 5 ? " you, but isn't concentrated enough to harm you" : null]!") + if(!ishuman(M) || isgrey(M)) + return + + var/mob/living/carbon/human/H = M + if(method == REAGENT_TOUCH && volume > 9) + if(!H.wear_mask && !H.head) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(istype(affecting)) + affecting.disfigure() + H.emote("scream") + H.adjustFireLoss(clamp((volume - 5) * 3, 8, 75)) + return + + var/has_melted_something = FALSE + if(H.wear_mask && !(H.wear_mask.resistance_flags & ACID_PROOF)) + to_chat(H, "Your [H.wear_mask.name] melts away!") + qdel(H.wear_mask) + has_melted_something = TRUE + + if(H.head && !(H.head.resistance_flags & ACID_PROOF)) + if(istype(H.head, /obj/item/clothing/head/mod) && ismodcontrol(H.back)) + var/obj/item/mod/control/C = H.back + var/name = H.head.name + C.seal_part(H.head, FALSE) + C.retract(null, H.head) + to_chat(H, "Your [name] melts away as your [C.name] performs emergency cleaning on the helmet, deactivating the suit!") + else + to_chat(H, "Your [H.head.name] melts away!") + qdel(H.head) + has_melted_something = TRUE + + if(has_melted_something) + return + + if(volume >= 5) + H.emote("scream") + H.adjustFireLoss(clamp((volume - 5) * 3, 4, 75)) + to_chat(H, "The blueish acidic substance stings[volume < 5 ? " you, but isn't concentrated enough to harm you" : null]!") /datum/reagent/acetic_acid name = "Acetic acid" @@ -382,27 +388,26 @@ reagent_state = LIQUID taste_description = "vinegar" -/datum/reagent/acetic_acid/reaction_mob(mob/M, method = REAGENT_TOUCH, volume) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(method == REAGENT_TOUCH) - if(H.wear_mask || H.head) - return - if(volume >= 50 && prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(istype(affecting)) - affecting.disfigure() - H.adjustBruteLoss(5) - H.adjustFireLoss(15) - H.emote("scream") - else - H.adjustBruteLoss(min(5, volume * 0.25)) - else - to_chat(H, "The transparent acidic substance stings[volume < 25 ? " you, but isn't concentrated enough to harm you" : null]!") - if(volume >= 25) - H.adjustBruteLoss(2) - H.emote("scream") +/datum/reagent/acetic_acid/reaction_mob(mob/living/carbon/human/H, method = REAGENT_TOUCH, volume) + if(method != REAGENT_TOUCH) + to_chat(H, "The transparent acidic substance stings[volume < 25 ? " you, but isn't concentrated enough to harm you" : null]!") + if(volume >= 25) + H.adjustBruteLoss(2) + H.emote("scream") + return + if(H.wear_mask || H.head) + return + + if(volume >= 50 && prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(istype(affecting)) + affecting.disfigure() + H.adjustBruteLoss(5) + H.adjustFireLoss(15) + H.emote("scream") + else + H.adjustBruteLoss(min(5, volume * 0.25)) /datum/reagent/carpotoxin name = "Carpotoxin" @@ -1228,10 +1233,9 @@ /datum/reagent/ants/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) //NOT THE ANTS if(iscarbon(M)) - if(method == REAGENT_TOUCH || method==REAGENT_INGEST) - to_chat(M, "OH SHIT ANTS!!!!") - M.emote("scream") - M.adjustBruteLoss(4) + to_chat(M, "OH SHIT ANTS!!!!") + M.emote("scream") + M.adjustBruteLoss(4) /datum/reagent/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective. name = "Teslium" diff --git a/code/modules/reagents/chemistry/reagents_holder.dm b/code/modules/reagents/chemistry/reagents_holder.dm index 53d12d76eef5..9be2cdc7df8a 100644 --- a/code/modules/reagents/chemistry/reagents_holder.dm +++ b/code/modules/reagents/chemistry/reagents_holder.dm @@ -716,7 +716,12 @@ cached_reagents += R R.holder = src R.volume = amount - R.on_new(data) + if(ishuman(my_atom)) + if(can_metabolize(my_atom, R)) + R.on_new(data) + else + R.on_new(data) + if(data) R.data = data diff --git a/code/modules/reagents/chemistry/recipes/food_reactions.dm b/code/modules/reagents/chemistry/recipes/food_reactions.dm index 76609ad8dd90..b91a8a25bccb 100644 --- a/code/modules/reagents/chemistry/recipes/food_reactions.dm +++ b/code/modules/reagents/chemistry/recipes/food_reactions.dm @@ -10,7 +10,7 @@ /datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/tofu(location) + new /obj/item/food/snacks/tofu(location) /datum/chemical_reaction/chocolate_bar name = "Chocolate Bar" @@ -22,7 +22,7 @@ /datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/chocolatebar(location) + new /obj/item/food/snacks/chocolatebar(location) /datum/chemical_reaction/chocolate_bar2 name = "Chocolate Bar" @@ -34,7 +34,7 @@ /datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/chocolatebar(location) + new /obj/item/food/snacks/chocolatebar(location) /datum/chemical_reaction/soysauce name = "Soy Sauce" @@ -75,7 +75,7 @@ /datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel(location) + new /obj/item/food/snacks/sliceable/cheesewheel(location) /datum/chemical_reaction/syntiflesh name = "Syntiflesh" @@ -87,7 +87,7 @@ /datum/chemical_reaction/syntiflesh/on_reaction(datum/reagents/holder, created_volume) 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) + new /obj/item/food/snacks/meat/syntiflesh(location) /datum/chemical_reaction/hot_ramen name = "Hot Ramen" @@ -114,7 +114,7 @@ /datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) - new /obj/item/reagent_containers/food/snacks/dough(location) + new /obj/item/food/snacks/dough(location) ///Cookies by Ume @@ -129,7 +129,7 @@ /datum/chemical_reaction/cookiedough/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) - new /obj/item/reagent_containers/food/snacks/cookiedough(location) + new /obj/item/food/snacks/cookiedough(location) /datum/chemical_reaction/corn_syrup @@ -183,7 +183,7 @@ /datum/chemical_reaction/weird_cheese/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) - new /obj/item/reagent_containers/food/snacks/weirdcheesewedge(location) + new /obj/item/food/snacks/weirdcheesewedge(location) /datum/chemical_reaction/hydrogenated_soybeanoil name = "Partially hydrogenated space-soybean oil" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index d0da4adc4c2c..8409f4b15e4c 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -263,7 +263,7 @@ /datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) - new /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct(location) + new /obj/item/food/snacks/meat/slab/meatproduct(location) /datum/chemical_reaction/lye name = "lye" diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index a25bbe0a7140..10c8a080317f 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -38,7 +38,7 @@ /datum/chemical_reaction/slimemonkey/on_reaction(datum/reagents/holder) SSblackbox.record_feedback("tally", "slime_cores_used", 1, type) for(var/i = 1, i <= 3, i++) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = new /obj/item/reagent_containers/food/snacks/monkeycube + var/obj/item/food/snacks/monkeycube/M = new /obj/item/food/snacks/monkeycube M.forceMove(get_turf(holder.my_atom)) //Green @@ -147,37 +147,39 @@ /datum/chemical_reaction/slimebork/on_reaction(datum/reagents/holder) SSblackbox.record_feedback("tally", "slime_cores_used", 1, type) - var/list/blocked = list(/obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/sliceable, - /obj/item/reagent_containers/food/snacks/sliceable/pizza, - /obj/item/reagent_containers/food/snacks/margheritapizzaslice, - /obj/item/reagent_containers/food/snacks/meatpizzaslice, - /obj/item/reagent_containers/food/snacks/mushroompizzaslice, - /obj/item/reagent_containers/food/snacks/vegetablepizzaslice, - /obj/item/reagent_containers/food/snacks/cheesepizzaslice, - /obj/item/reagent_containers/food/snacks/garlicpizzaslice, - /obj/item/reagent_containers/food/snacks/donkpocketpizzaslice, - /obj/item/reagent_containers/food/snacks/dankpizzaslice, - /obj/item/reagent_containers/food/snacks/macpizzaslice, - /obj/item/reagent_containers/food/snacks/firecrackerpizzaslice, - /obj/item/reagent_containers/food/snacks/pestopizzaslice, - /obj/item/reagent_containers/food/snacks/pepperonipizzaslice, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat/slab, - /obj/item/reagent_containers/food/snacks/grown, - /obj/item/reagent_containers/food/snacks/grown/shell, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/deepfryholder, - /obj/item/reagent_containers/food/snacks/chinese, - /obj/item/reagent_containers/food/snacks/human, - /obj/item/reagent_containers/food/snacks/monstermeat, - /obj/item/reagent_containers/food/snacks/meatsteak/stimulating, - /obj/item/reagent_containers/food/snacks/egg/watcher + + var/list/blocked = list( + /obj/item/food/snacks, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/sliceable, + /obj/item/food/snacks/sliceable/pizza, + /obj/item/food/snacks/margheritapizzaslice, + /obj/item/food/snacks/meatpizzaslice, + /obj/item/food/snacks/mushroompizzaslice, + /obj/item/food/snacks/vegetablepizzaslice, + /obj/item/food/snacks/cheesepizzaslice, + /obj/item/food/snacks/garlicpizzaslice, + /obj/item/food/snacks/donkpocketpizzaslice, + /obj/item/food/snacks/dankpizzaslice, + /obj/item/food/snacks/macpizzaslice, + /obj/item/food/snacks/firecrackerpizzaslice, + /obj/item/food/snacks/pestopizzaslice, + /obj/item/food/snacks/pepperonipizzaslice, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat/slab, + /obj/item/food/snacks/grown, + /obj/item/food/snacks/grown/shell, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/deepfryholder, + /obj/item/food/snacks/chinese, + /obj/item/food/snacks/human, + /obj/item/food/snacks/monstermeat, + /obj/item/food/snacks/meatsteak/stimulating, + /obj/item/food/snacks/egg/watcher ) - blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable) + blocked |= typesof(/obj/item/food/snacks/customizable) - var/list/borks = typesof(/obj/item/reagent_containers/food/snacks) - blocked + var/list/borks = typesof(/obj/item/food/snacks) - blocked // BORK BORK BORK playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) @@ -207,24 +209,24 @@ /datum/chemical_reaction/slimebork2/on_reaction(datum/reagents/holder) SSblackbox.record_feedback("tally", "slime_cores_used", 1, type) - var/list/borks = subtypesof(/obj/item/reagent_containers/food/drinks) - var/list/blocked = list(/obj/item/reagent_containers/food/drinks/cans/adminbooze, - /obj/item/reagent_containers/food/drinks/cans/madminmalt, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/britcup, - /obj/item/reagent_containers/food/drinks/sillycup, - /obj/item/reagent_containers/food/drinks/cans, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, - /obj/item/reagent_containers/food/drinks/drinkingglass, - /obj/item/reagent_containers/food/drinks/bottle, - /obj/item/reagent_containers/food/drinks/everfull, - /obj/item/reagent_containers/food/drinks/bottle/dragonsbreath, - /obj/item/reagent_containers/food/drinks/bottle/immortality, - /obj/item/reagent_containers/food/drinks/mushroom_bowl + var/list/borks = subtypesof(/obj/item/reagent_containers/drinks) + var/list/blocked = list(/obj/item/reagent_containers/drinks/cans/adminbooze, + /obj/item/reagent_containers/drinks/cans/madminmalt, + /obj/item/reagent_containers/drinks/shaker, + /obj/item/reagent_containers/drinks/britcup, + /obj/item/reagent_containers/drinks/sillycup, + /obj/item/reagent_containers/drinks/cans, + /obj/item/reagent_containers/drinks/drinkingglass/shotglass, + /obj/item/reagent_containers/drinks/drinkingglass, + /obj/item/reagent_containers/drinks/bottle, + /obj/item/reagent_containers/drinks/everfull, + /obj/item/reagent_containers/drinks/bottle/dragonsbreath, + /obj/item/reagent_containers/drinks/bottle/immortality, + /obj/item/reagent_containers/drinks/mushroom_bowl ) - blocked += typesof(/obj/item/reagent_containers/food/drinks/flask) - blocked += typesof(/obj/item/reagent_containers/food/drinks/trophy) - blocked += typesof(/obj/item/reagent_containers/food/drinks/cans/bottler) + blocked += typesof(/obj/item/reagent_containers/drinks/flask) + blocked += typesof(/obj/item/reagent_containers/drinks/trophy) + blocked += typesof(/obj/item/reagent_containers/drinks/cans/bottler) borks -= blocked // BORK BORK BORK diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 4f155bf54bfa..44bb7655de24 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -19,10 +19,7 @@ if(!Adjacent(user) || !length(possible_transfer_amounts) || !ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return - var/default = null - if(amount_per_transfer_from_this in possible_transfer_amounts) - default = amount_per_transfer_from_this - var/new_transfer_rate = input("Amount per transfer from this:", "[src]", default) as null|anything in possible_transfer_amounts + var/new_transfer_rate = tgui_input_list(user, "Amount per transfer from this:", "[src]", possible_transfer_amounts, "[amount_per_transfer_from_this]") if(!new_transfer_rate) return @@ -57,7 +54,6 @@ if(!QDELETED(src)) ..() - /obj/item/reagent_containers/proc/add_lid() if(has_lid) container_type ^= REFILLABLE | DRAINABLE diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm index a44d50fbf069..57bc2d39221a 100644 --- a/code/modules/reagents/reagent_containers/applicator.dm +++ b/code/modules/reagents/reagent_containers/applicator.dm @@ -26,6 +26,7 @@ emagged = TRUE ignore_flags = TRUE to_chat(user, "You short out the safeties on [src].") + return TRUE /obj/item/reagent_containers/applicator/on_reagent_change() if(!emagged) @@ -124,7 +125,7 @@ /obj/item/reagent_containers/applicator/AltClick(mob/user) if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) return - if(alert(user, "Are you sure you want to empty [src]?", "Empty Applicator:", "Yes", "No") != "Yes") + if(tgui_alert(user, "Are you sure you want to empty [src]?", "Empty Applicator", list("Yes", "No")) != "Yes") return if(!user.incapacitated() && isturf(user.loc) && loc == user) to_chat(user, "You empty [src] onto the floor.") diff --git a/code/modules/reagents/reagent_containers/chemical_bottle.dm b/code/modules/reagents/reagent_containers/chemical_bottle.dm index 4e8f9a1224e1..b48d4fe33794 100644 --- a/code/modules/reagents/reagent_containers/chemical_bottle.dm +++ b/code/modules/reagents/reagent_containers/chemical_bottle.dm @@ -1,4 +1,4 @@ -//Not to be confused with /obj/item/reagent_containers/food/drinks/bottle +//Not to be confused with /obj/item/reagent_containers/drinks/bottle /obj/item/reagent_containers/glass/bottle diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 553a468b9557..c8a02d8f7975 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -72,7 +72,7 @@ return if(reagents.total_volume) - if(!target.is_open_container() && !(istype(target, /obj/item/reagent_containers/food) && !ispill(target)) && !istype(target, /obj/item/clothing/mask/cigarette)) + if(!target.is_open_container() && !(isfood(target) && !ispill(target)) && !istype(target, /obj/item/clothing/mask/cigarette)) to_chat(user, "You cannot directly fill this object.") return diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 7e4f46626940..44cc8cae37d8 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -165,7 +165,7 @@ if(!is_open_container()) . += "lid_[initial(icon_state)]" - if(blocks_emissive == FALSE) + if(!blocks_emissive) . += emissive_blocker(icon, "lid_[initial(icon_state)]") if(assembly) . += "assembly" diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 32ac08eaf6d3..ccffe1dcab95 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -51,10 +51,7 @@ var/contained = english_list(injected) add_attack_logs(user, M, "Injected with [src] containing ([contained])", reagents.harmless_helper() ? ATKLOG_ALMOSTALL : null) - for(var/datum/reagent/R as anything in reagents.reagent_list) - if(initial(R.id) == "????") // Yes this is a specific case that we don't really want - continue - reagents.reaction(M, REAGENT_INGEST, 0.1) + reagents.reaction(M, REAGENT_INGEST, 0.1) return TRUE /obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user) @@ -81,6 +78,7 @@ emagged = TRUE ignore_flags = TRUE to_chat(user, "You short out the safeties on [src].") + return TRUE /obj/item/reagent_containers/hypospray/safety name = "medical hypospray" diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index a87cec73c93a..518e1f9a4a42 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -79,7 +79,9 @@ D.icon += mix_color_from_reagents(D.reagents.reagent_list) for(var/i in 1 to spray_currentrange) - step_towards(D, A) + if(!step_towards(D, A) && i != 1) + qdel(D) + return D.reagents.reaction(get_turf(D)) for(var/atom/T in get_turf(D)) D.reagents.reaction(T) @@ -104,13 +106,20 @@ /obj/item/reagent_containers/spray/AltClick(mob/user) if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) return - if(alert(user, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes") + if(tgui_alert(user, "Are you sure you want to empty that?", "Empty Bottle", list("Yes", "No")) != "Yes") return if(isturf(user.loc) && loc == user) to_chat(user, "You empty [src] onto the floor.") reagents.reaction(user.loc) reagents.clear_reagents() +/obj/item/reagent_containers/spray/empty + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' + spray_maxrange = 2 + spray_currentrange = 2 + amount_per_transfer_from_this = 10 + //space cleaner /obj/item/reagent_containers/spray/cleaner name = "space cleaner" diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 47796f6e1a28..8ee8351283b8 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -136,7 +136,7 @@ add_attack_logs(user, L, "Injected with [name] containing [contained], transfered [amount_per_transfer_from_this] units", reagents.harmless_helper() ? ATKLOG_ALMOSTALL : null) - if(istype(target, /obj/item/reagent_containers/food)) + if(isfood(target)) var/list/chemicals = list() for(var/datum/reagent/chem in reagents.reagent_list) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 1f770bfa3bf9..7216ee0177f7 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -256,7 +256,7 @@ to_chat(user, "There aren't any cups left!") return user.visible_message("[user] takes a cup from [src].", "You take a paper cup from [src].") - var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src)) + var/obj/item/reagent_containers/drinks/sillycup/S = new(get_turf(src)) user.put_in_hands(S) paper_cups-- diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 601f25a09f0a..56221bed2e5b 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -369,10 +369,13 @@ GLOBAL_LIST_EMPTY(conveyor_switches) return ui_interact(user) -/obj/machinery/conveyor_switch/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/conveyor_switch/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/conveyor_switch/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ConveyorSwitch", name, 350, 150, master_ui, state) + ui = new(user, src, "ConveyorSwitch", name) ui.open() /obj/machinery/conveyor_switch/ui_data(mob/user) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 6dc15c8126f6..50bc20252eb8 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -221,6 +221,7 @@ add_attack_logs(user, target, "Disposal'ed", !!target.ckey ? null : ATKLOG_ALL) else return + QDEL_LIST_CONTENTS(target.grabbed_by) target.forceMove(src) for(var/mob/C in viewers(src)) @@ -271,10 +272,13 @@ update() return -/obj/machinery/disposal/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/disposal/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/disposal/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DisposalBin", name, 300, 250, master_ui, state) + ui = new(user, src, "DisposalBin", name) ui.open() @@ -1443,9 +1447,9 @@ /obj/structure/disposaloutlet/screwdriver_act(mob/living/user, obj/item/I) add_fingerprint(user) - if(mode == FALSE) + if(!mode) to_chat(user, "You remove the screws around the power connection.") - else if(mode == TRUE) + else if(mode) to_chat(user, "You attach the screws around the power connection.") I.play_tool_sound(src) mode = !mode diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index ce03f7589b60..a1258bf72d90 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -256,7 +256,10 @@ add_fingerprint(user) ui_interact(user) -/obj/item/destTagger/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) +/obj/item/destTagger/ui_state(mob/user) + return GLOB.default_state + +/obj/item/destTagger/ui_interact(mob/user, datum/tgui/ui = null) destination_tagger.ui_interact(user) /obj/machinery/disposal/deliveryChute @@ -374,7 +377,7 @@ /obj/item/shippingPackage/attackby(obj/item/O, mob/user, params) if(sealed) if(is_pen(O)) - var/str = copytext(sanitize(input(user, "Intended recipient?", "Address", "")), 1, MAX_NAME_LEN) + var/str = tgui_input_text(user, "Intended recipient?", "Address", max_length = MAX_NAME_LEN) if(!str || !length(str)) to_chat(user, "Invalid text.") return @@ -407,7 +410,7 @@ wrapped = null qdel(src) else if(wrapped) - switch(alert("Select an action:",, "Remove Object", "Seal Package", "Cancel")) + switch(tgui_alert(user, "Select an action:", "Shipping", list("Remove Object", "Seal Package", "Cancel"))) if("Remove Object") to_chat(user, "You shake out [src]'s contents onto the floor.") wrapped.forceMove(get_turf(user)) @@ -418,7 +421,7 @@ sealed = 1 update_desc() else - if(alert("Do you want to tear up the package?",, "Yes", "No") == "Yes") + if(tgui_alert(user, "Do you want to tear up the package?", "Shipping", list("Yes", "No")) == "Yes") to_chat(user, "You shred [src].") playsound(loc, 'sound/items/poster_ripped.ogg', 50, 1) user.unEquip(src) diff --git a/code/modules/redis/callbacks/server_messages_callback.dm b/code/modules/redis/callbacks/server_messages_callback.dm index 2f4206fb8334..ea263a223f00 100644 --- a/code/modules/redis/callbacks/server_messages_callback.dm +++ b/code/modules/redis/callbacks/server_messages_callback.dm @@ -2,7 +2,9 @@ channel = SERVER_MESSAGES_REDIS_CHANNEL /datum/redis_callback/server_messages/on_message(message) + #ifdef MULTIINSTANCE // Decode var/list/data = json_decode(message) // And fire SSinstancing.execute_command(data["src"], data["cmd"], data["args"]) + #endif diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 10c43eaf23db..f9aa0bea58c7 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -276,7 +276,7 @@ id = "drinking_glass" build_type = AUTOLATHE materials = list(MAT_GLASS = 100) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass + build_path = /obj/item/reagent_containers/drinks/drinkingglass category = list("initial","Dinnerware") /datum/design/shot_glass @@ -284,7 +284,7 @@ id = "shot_glass" build_type = AUTOLATHE materials = list(MAT_GLASS = 50) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass + build_path = /obj/item/reagent_containers/drinks/drinkingglass/shotglass category = list("initial","Dinnerware") /datum/design/shaker @@ -292,7 +292,7 @@ id = "shaker" build_type = AUTOLATHE materials = list(MAT_METAL = 1500) - build_path = /obj/item/reagent_containers/food/drinks/shaker + build_path = /obj/item/reagent_containers/drinks/shaker category = list("initial","Dinnerware") /datum/design/cultivator @@ -949,3 +949,19 @@ materials = list(MAT_METAL = 1500, MAT_GLASS = 500) build_path = /obj/item/mail_scanner category = list("initial", "Miscellaneous") + +/datum/design/spraybottle + name = "Spray Bottle" + id = "spraybottle" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 5000) + build_path = /obj/item/reagent_containers/spray/empty + category = list("initial", "Miscellaneous") + +/datum/design/knuckleduster + name = "Knuckleduster" + id = "knuckleduster" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/melee/knuckleduster + category = list("hacked", "Security") diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 10a73792f2f0..e3d556355a9d 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -23,7 +23,7 @@ id = "milk_carton" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 100) - build_path = /obj/item/reagent_containers/food/condiment/milk + build_path = /obj/item/reagent_containers/condiment/milk category = list("initial","Food") /datum/design/cream_carton @@ -31,7 +31,7 @@ id = "cream_carton" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) - build_path = /obj/item/reagent_containers/food/drinks/bottle/cream + build_path = /obj/item/reagent_containers/drinks/bottle/cream category = list("initial","Food") /datum/design/black_pepper @@ -47,7 +47,7 @@ id = "pepper_mill" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 50) - build_path = /obj/item/reagent_containers/food/condiment/peppermill + build_path = /obj/item/reagent_containers/condiment/peppermill make_reagents = list() category = list("initial","Food") @@ -56,7 +56,7 @@ id = "mcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube + build_path = /obj/item/food/snacks/monkeycube category = list("initial", "Food") /datum/design/farwa_cube @@ -64,7 +64,7 @@ id = "fcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube + build_path = /obj/item/food/snacks/monkeycube/farwacube category = list("initial", "Food") /datum/design/wolpin_cube @@ -72,7 +72,7 @@ id = "wcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube + build_path = /obj/item/food/snacks/monkeycube/wolpincube category = list("initial", "Food") /datum/design/stok_cube @@ -80,7 +80,7 @@ id = "scube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube + build_path = /obj/item/food/snacks/monkeycube/stokcube category = list("initial", "Food") /datum/design/neaera_cube @@ -88,7 +88,7 @@ id = "ncube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube + build_path = /obj/item/food/snacks/monkeycube/neaeracube category = list("initial", "Food") /datum/design/ez_nut diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 8c94a2492ea7..3ba6b9b610db 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -98,5 +98,5 @@ id = "bluespaceshotglass" build_type = PROTOLATHE materials = list(MAT_METAL = 1000, MAT_BLUESPACE = 500) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace + build_path = /obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace category = list("Bluespace") diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index ed79318dbfa3..63f1eb4ca927 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -21,16 +21,6 @@ build_path = /obj/item/clothing/glasses/hud/health category = list("Equipment") -/datum/design/health_hud_night - name = "Night Vision Health Scanner HUD" - desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." - id = "health_hud_night" - req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_SILVER = 350) - build_path = /obj/item/clothing/glasses/hud/health/night - category = list("Equipment") - /datum/design/magboots name = "Magnetic Boots" desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." @@ -61,16 +51,6 @@ build_path = /obj/item/clothing/glasses/hud/security category = list("Equipment") -/datum/design/security_hud_night - name = "Night Vision Security HUD" - desc = "A heads-up display which provides id data and vision in complete darkness." - id = "security_hud_night" - req_tech = list("combat" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_GOLD = 350) - build_path = /obj/item/clothing/glasses/hud/security/night - category = list("Equipment") - /datum/design/skills_hud name = "Skills HUD" desc = "A heads-up display that scans the humans in view and shows a summary of their NT employment history." @@ -91,16 +71,6 @@ build_path = /obj/item/clothing/glasses/hud/janitor category = list("Equipment", "Janitorial") -/datum/design/jani_night_vision_goggles - name = "Night Vision Janitor HUD" - desc = "A janitorial filth scanner fitted with a light amplifier." - id = "night_vision_jani" - req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000) - build_path = /obj/item/clothing/glasses/hud/janitor/night - category = list("Equipment", "Janitorial") - /datum/design/mesons name = "Optical Meson Scanners" desc = "Used for seeing walls, floors, and stuff through anything." @@ -192,16 +162,6 @@ build_path = /obj/item/clothing/glasses/science category = list("Equipment") -/datum/design/nv_sci_goggles - name = "Night Vision Science Goggles" - desc = "Like Science Goggles, but works in darkness." - id = "nvscigoggles" - req_tech = list("magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 250, MAT_GLASS = 300, MAT_PLASMA = 250, MAT_URANIUM = 1000) - build_path = /obj/item/clothing/glasses/science/night - category = list("Equipment") - /datum/design/diagnostic_hud name = "Diagnostic HUD" desc = "A HUD used to analyze and determine faults within robotic machinery." @@ -212,16 +172,6 @@ build_path = /obj/item/clothing/glasses/hud/diagnostic category = list("Equipment") -/datum/design/diagnostic_hud_night - name = "Night Vision Diagnostic HUD" - desc = "Upgraded version of the diagnostic HUD designed to function during a power failure." - id = "dianostic_hud_night" - req_tech = list("magnets" = 5, "plasmatech" = 4, "engineering" = 6, "powerstorage" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_PLASMA = 300) - build_path = /obj/item/clothing/glasses/hud/diagnostic/night - category = list("Equipment") - /datum/design/hydroponic_hud name = "Hydroponic HUD" desc = "A HUD used to analyze the health and status of plants growing in hydro trays and soil." @@ -232,16 +182,6 @@ build_path = /obj/item/clothing/glasses/hud/hydroponic category = list("Equipment") -/datum/design/hydroponic_hud_night - name = "Night Vision Hydroponic HUD" - desc = "A HUD used to analyze the health and status of plants growing in low-light environments." - id = "hydroponic_hud_night" - req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_PLASMA = 200) - build_path = /obj/item/clothing/glasses/hud/hydroponic/night - category = list("Equipment") - /datum/design/handdrill name = "Hand Drill" desc = "A small electric hand drill with an interchangable screwdriver and bolt bit" @@ -350,3 +290,13 @@ materials = list(MAT_SILVER = 4000, MAT_TITANIUM = 6000, MAT_URANIUM = 4000, MAT_PLASMA = 4000) build_path = /obj/item/clothing/shoes/magboots/gravity category = list("Equipment") + +/datum/design/bolterwrench + name = "Door Bolt Wrench" + desc = "A large wrench designed to interlock with an airlock's bolting mechanisms, allowing it to lift the bolts regardless of power." + id = "bolter_wrench" + req_tech = list("materials" = 6, "engineering" = 5) + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_TITANIUM = 3000) + build_path = /obj/item/wrench/bolter + category = list("Equipment") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 874e39ddc2b0..3c93fb8ce410 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -8,7 +8,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_suit materials = list(MAT_METAL=15000) - construction_time = 500 + construction_time = 50 SECONDS category = list("Cyborg") /datum/design/borg_chest @@ -17,7 +17,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/chest materials = list(MAT_METAL=40000) - construction_time = 350 + construction_time = 35 SECONDS category = list("Cyborg") /datum/design/borg_head @@ -26,7 +26,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/head materials = list(MAT_METAL=5000) - construction_time = 350 + construction_time = 35 SECONDS category = list("Cyborg") /datum/design/borg_l_arm @@ -35,7 +35,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/l_arm materials = list(MAT_METAL=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg") /datum/design/borg_r_arm @@ -44,7 +44,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/r_arm materials = list(MAT_METAL=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg") /datum/design/borg_l_leg @@ -53,7 +53,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/l_leg materials = list(MAT_METAL=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg") /datum/design/borg_r_leg @@ -62,7 +62,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/r_leg materials = list(MAT_METAL=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg") //Robot repair @@ -72,7 +72,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/binary_communication_device materials = list(MAT_METAL=2500, MAT_GLASS=1000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg Repair") /datum/design/borg_radio @@ -81,7 +81,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/radio materials = list(MAT_METAL=2500, MAT_GLASS=1000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg Repair") /datum/design/borg_actuator @@ -90,7 +90,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/actuator materials = list(MAT_METAL=3500) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg Repair") /datum/design/borg_diagnosis_unit @@ -99,7 +99,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/diagnosis_unit materials = list(MAT_METAL=3500) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg Repair") /datum/design/borg_camera @@ -108,7 +108,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/camera materials = list(MAT_METAL=2500, MAT_GLASS=1000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg Repair") /datum/design/borg_armor @@ -117,7 +117,7 @@ build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/armour materials = list(MAT_METAL=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Cyborg Repair") //Ripley @@ -127,7 +127,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/ripley materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Ripley") //Firefighter subtype @@ -137,7 +137,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/firefighter materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Firefighter") /datum/design/ripley_torso @@ -146,7 +146,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_torso materials = list(MAT_METAL=20000, MAT_GLASS=7500) - construction_time = 200 + construction_time = 20 SECONDS category = list("Ripley","Firefighter") /datum/design/ripley_left_arm @@ -155,7 +155,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_arm materials = list(MAT_METAL=15000) - construction_time = 150 + construction_time = 15 SECONDS category = list("Ripley","Firefighter") /datum/design/ripley_right_arm @@ -164,7 +164,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_arm materials = list(MAT_METAL=15000) - construction_time = 150 + construction_time = 15 SECONDS category = list("Ripley","Firefighter") /datum/design/ripley_left_leg @@ -173,7 +173,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_leg materials = list(MAT_METAL=15000) - construction_time = 150 + construction_time = 15 SECONDS category = list("Ripley","Firefighter") /datum/design/ripley_right_leg @@ -182,7 +182,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_leg materials = list(MAT_METAL=15000) - construction_time = 150 + construction_time = 15 SECONDS category = list("Ripley","Firefighter") //Odysseus @@ -192,7 +192,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/odysseus materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Odysseus") /datum/design/odysseus_torso @@ -201,7 +201,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_torso materials = list(MAT_METAL=12000) - construction_time = 180 + construction_time = 18 SECONDS category = list("Odysseus") /datum/design/odysseus_head @@ -210,7 +210,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_head materials = list(MAT_METAL=6000,MAT_GLASS=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Odysseus") /datum/design/odysseus_left_arm @@ -219,7 +219,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_arm materials = list(MAT_METAL=6000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Odysseus") /datum/design/odysseus_right_arm @@ -228,7 +228,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_arm materials = list(MAT_METAL=6000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Odysseus") /datum/design/odysseus_left_leg @@ -237,7 +237,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_leg materials = list(MAT_METAL=7000) - construction_time = 130 + construction_time = 13 SECONDS category = list("Odysseus") /datum/design/odysseus_right_leg @@ -246,7 +246,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_leg materials = list(MAT_METAL=7000) - construction_time = 130 + construction_time = 13 SECONDS category = list("Odysseus") //Gygax @@ -256,7 +256,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/gygax materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Gygax") /datum/design/gygax_torso @@ -265,7 +265,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_torso materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_DIAMOND=2000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Gygax") /datum/design/gygax_head @@ -274,7 +274,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_head materials = list(MAT_METAL=10000,MAT_GLASS=5000, MAT_DIAMOND=2000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Gygax") /datum/design/gygax_left_arm @@ -283,7 +283,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_arm materials = list(MAT_METAL=15000, MAT_DIAMOND=1000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Gygax") /datum/design/gygax_right_arm @@ -292,7 +292,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_arm materials = list(MAT_METAL=15000, MAT_DIAMOND=1000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Gygax") /datum/design/gygax_left_leg @@ -301,7 +301,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_leg materials = list(MAT_METAL=15000, MAT_DIAMOND=2000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Gygax") /datum/design/gygax_right_leg @@ -310,7 +310,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_leg materials = list(MAT_METAL=15000, MAT_DIAMOND=2000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Gygax") /datum/design/gygax_armor @@ -319,7 +319,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_armour materials = list(MAT_METAL=15000,MAT_DIAMOND=10000,MAT_TITANIUM=10000) - construction_time = 600 + construction_time = 60 SECONDS category = list("Gygax") //Durand @@ -329,7 +329,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/durand materials = list(MAT_METAL=25000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Durand") /datum/design/durand_torso @@ -338,7 +338,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_torso materials = list(MAT_METAL=25000,MAT_GLASS=10000,MAT_SILVER=10000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Durand") /datum/design/durand_head @@ -347,7 +347,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_head materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_SILVER=2000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Durand") /datum/design/durand_left_arm @@ -356,7 +356,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_arm materials = list(MAT_METAL=10000,MAT_SILVER=4000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Durand") /datum/design/durand_right_arm @@ -365,7 +365,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_arm materials = list(MAT_METAL=10000,MAT_SILVER=4000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Durand") /datum/design/durand_left_leg @@ -374,7 +374,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_leg materials = list(MAT_METAL=15000,MAT_SILVER=4000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Durand") /datum/design/durand_right_leg @@ -383,7 +383,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_leg materials = list(MAT_METAL=15000,MAT_SILVER=4000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Durand") /datum/design/durand_armor @@ -392,7 +392,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_armor materials = list(MAT_METAL=30000,MAT_URANIUM=25000,MAT_TITANIUM=20000) - construction_time = 600 + construction_time = 60 SECONDS category = list("Durand") //H.O.N.K @@ -402,7 +402,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/honker materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("H.O.N.K") /datum/design/honk_torso @@ -411,7 +411,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_torso materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_BANANIUM=10000) - construction_time = 300 + construction_time = 30 SECONDS category = list("H.O.N.K") /datum/design/honk_head @@ -420,7 +420,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_head materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_BANANIUM=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("H.O.N.K") /datum/design/honk_left_arm @@ -429,7 +429,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_left_arm materials = list(MAT_METAL=15000,MAT_BANANIUM=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("H.O.N.K") /datum/design/honk_right_arm @@ -438,7 +438,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_arm materials = list(MAT_METAL=15000,MAT_BANANIUM=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("H.O.N.K") /datum/design/honk_left_leg @@ -447,7 +447,7 @@ build_type = MECHFAB build_path =/obj/item/mecha_parts/part/honker_left_leg materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("H.O.N.K") /datum/design/honk_right_leg @@ -456,7 +456,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_leg materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("H.O.N.K") //Reticence @@ -466,7 +466,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/reticence materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Reticence") /datum/design/reticence_torso @@ -475,7 +475,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/reticence_torso materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_TRANQUILLITE=10000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Reticence") /datum/design/reticence_head @@ -484,7 +484,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/reticence_head materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_TRANQUILLITE=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Reticence") /datum/design/reticence_left_arm @@ -493,7 +493,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/reticence_left_arm materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Reticence") /datum/design/reticence_right_arm @@ -502,7 +502,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/reticence_right_arm materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Reticence") /datum/design/reticence_left_leg @@ -511,7 +511,7 @@ build_type = MECHFAB build_path =/obj/item/mecha_parts/part/reticence_left_leg materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Reticence") /datum/design/reticence_right_leg @@ -520,7 +520,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/reticence_right_leg materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Reticence") //Phazon @@ -530,7 +530,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/phazon materials = list(MAT_METAL=20000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Phazon") /datum/design/phazon_torso @@ -539,7 +539,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_torso materials = list(MAT_METAL=35000,MAT_GLASS=10000,MAT_PLASMA=20000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Phazon") /datum/design/phazon_head @@ -548,7 +548,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_head materials = list(MAT_METAL=15000,MAT_GLASS=5000,MAT_PLASMA=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Phazon") /datum/design/phazon_left_arm @@ -557,7 +557,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_arm materials = list(MAT_METAL=20000,MAT_PLASMA=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Phazon") /datum/design/phazon_right_arm @@ -566,7 +566,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_arm materials = list(MAT_METAL=20000,MAT_PLASMA=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Phazon") /datum/design/phazon_left_leg @@ -575,7 +575,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_leg materials = list(MAT_METAL=20000,MAT_PLASMA=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Phazon") /datum/design/phazon_right_leg @@ -584,7 +584,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_leg materials = list(MAT_METAL=20000,MAT_PLASMA=10000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Phazon") /datum/design/phazon_armor @@ -593,7 +593,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_armor materials = list(MAT_METAL=25000,MAT_PLASMA=20000,MAT_TITANIUM=20000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Phazon") //Exosuit Equipment @@ -603,7 +603,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/cable_layer materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_drill @@ -612,7 +612,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/drill materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_extinguisher @@ -621,7 +621,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/extinguisher materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_hydraulic_clamp @@ -630,7 +630,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_sleeper @@ -640,7 +640,7 @@ req_tech = list("biotech" = 3, "engineering" = 3, "plasmatech" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/medical/sleeper materials = list(MAT_METAL=5000,MAT_GLASS=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_syringe_gun @@ -650,7 +650,7 @@ req_tech = list("magnets" = 4,"biotech" = 4, "combat" = 3, "materials" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun materials = list(MAT_METAL=3000,MAT_GLASS=2000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Exosuit Equipment") /datum/design/medical_jaw @@ -660,7 +660,7 @@ build_path = /obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) //now same as jaws of life materials = list(MAT_METAL=5000,MAT_SILVER=2000,MAT_TITANIUM=1500) - construction_time = 200 + construction_time = 20 SECONDS category = list("Exosuit Equipment") /datum/design/mech_generator @@ -669,7 +669,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/generator materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=2000,MAT_PLASMA=5000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_disabler @@ -679,7 +679,7 @@ req_tech = list("combat" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_lmg @@ -689,7 +689,7 @@ req_tech = list("combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_banana_mortar @@ -698,7 +698,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Exosuit Equipment") /datum/design/mech_honker @@ -707,7 +707,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker materials = list(MAT_METAL=20000,MAT_BANANIUM=10000) - construction_time = 500 + construction_time = 50 SECONDS category = list("Exosuit Equipment") /datum/design/mech_mousetrap_mortar @@ -716,7 +716,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) - construction_time = 300 + construction_time = 30 SECONDS category = list("Exosuit Equipment") /datum/design/mech_silentgun @@ -725,7 +725,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=10000) - construction_time = 500 + construction_time = 50 SECONDS category = list("Exosuit Equipment") /datum/design/mech_mimercd @@ -735,7 +735,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/mimercd materials = list(MAT_METAL=30000,MAT_TRANQUILLITE=10000) - construction_time = 700 + construction_time = 70 SECONDS category = list("Exosuit Equipment") // Exosuit Modules @@ -747,7 +747,7 @@ req_tech = list("materials" = 5, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill materials = list(MAT_METAL=10000,MAT_DIAMOND=6500) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_mining_scanner @@ -756,7 +756,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/mining_scanner materials = list(MAT_METAL=5000,MAT_GLASS=2500) - construction_time = 50 + construction_time = 5 SECONDS category = list("Exosuit Equipment") /datum/design/mech_generator_nuclear @@ -767,7 +767,7 @@ req_tech = list("powerstorage"= 5, "engineering" = 4, "materials" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_gravcatapult @@ -778,7 +778,7 @@ req_tech = list("bluespace" = 4, "magnets" = 3, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_rcd @@ -789,7 +789,7 @@ req_tech = list("materials" = 5, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/rcd materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000) - construction_time = 1200 + construction_time = 120 SECONDS category = list("Exosuit Equipment") /datum/design/mech_ccw_armor @@ -800,7 +800,7 @@ req_tech = list("materials" = 5, "combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster materials = list(MAT_METAL=20000,MAT_SILVER=5000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_proj_armor @@ -811,7 +811,7 @@ req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster materials = list(MAT_METAL=20000,MAT_GOLD=5000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_repair_droid @@ -822,7 +822,7 @@ req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/clusterbang_launcher @@ -833,7 +833,7 @@ req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_bola @@ -844,7 +844,7 @@ req_tech = list("combat" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_teleporter @@ -855,7 +855,7 @@ req_tech = list("bluespace" = 8, "magnets" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/teleporter materials = list(MAT_METAL=10000,MAT_DIAMOND=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_energy_relay @@ -866,7 +866,7 @@ req_tech = list("magnets" = 4, "powerstorage" = 5, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay materials = list(MAT_METAL=10000,MAT_GLASS=2000,MAT_GOLD=2000,MAT_SILVER=3000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") // Exosuit Weapons @@ -878,7 +878,7 @@ req_tech = list("combat" = 4, "magnets" = 4, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_laser @@ -889,7 +889,7 @@ req_tech = list("combat" = 3, "magnets" = 3, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_carbine @@ -900,7 +900,7 @@ req_tech = list("combat" = 5, "materials" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_scattershot @@ -911,7 +911,7 @@ req_tech = list("combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot materials = list(MAT_METAL=10000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_ion @@ -922,7 +922,7 @@ req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion materials = list(MAT_METAL=20000,MAT_SILVER=6000,MAT_URANIUM=2000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_grenade_launcher @@ -933,7 +933,7 @@ req_tech = list("combat" = 4, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_missile_rack @@ -944,7 +944,7 @@ req_tech = list("combat" = 6, "materials" = 5, "engineering" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_plasma_cutter @@ -955,7 +955,7 @@ req_tech = list("engineering" = 4, "materials" = 5, "plasmatech" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_PLASMA = 6000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_tesla @@ -966,7 +966,7 @@ req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla materials = list(MAT_METAL=20000,MAT_SILVER=8000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mech_immolator @@ -977,7 +977,7 @@ req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator materials = list(MAT_METAL = 10000, MAT_SILVER = 8000, MAT_PLASMA = 8000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") /datum/design/mecha_thruster @@ -988,7 +988,7 @@ req_tech = list("engineering" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/thrusters materials = list(MAT_METAL = 15000, MAT_PLASMA = 3000) - construction_time = 100 + construction_time = 10 SECONDS category = list("Exosuit Equipment") //Cyborg Upgrade Modules @@ -999,7 +999,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/reset materials = list(MAT_METAL=10000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_rename @@ -1008,7 +1008,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/rename materials = list(MAT_METAL=35000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_restart @@ -1017,7 +1017,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/restart materials = list(MAT_METAL=60000 , MAT_GLASS=5000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_vtec @@ -1027,7 +1027,7 @@ build_path = /obj/item/borg/upgrade/vtec req_tech = list("engineering" = 4, "materials" = 5, "programming" = 4) materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_URANIUM= 5000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_thrusters @@ -1037,7 +1037,7 @@ build_path = /obj/item/borg/upgrade/thrusters req_tech = list("engineering" = 4, "powerstorage" = 4) materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_diamonddrill @@ -1047,7 +1047,7 @@ build_path = /obj/item/borg/upgrade/ddrill req_tech = list("engineering" = 5, "materials" = 6) materials = list(MAT_METAL=10000, MAT_DIAMOND=2000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_holding @@ -1057,7 +1057,7 @@ build_path = /obj/item/borg/upgrade/soh req_tech = list("engineering" = 4, "materials" = 4, "bluespace" = 4) materials = list(MAT_METAL = 10000, MAT_GOLD = 250, MAT_URANIUM = 500) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_abductor_engi @@ -1067,7 +1067,7 @@ build_path = /obj/item/borg/upgrade/abductor_engi req_tech = list("engineering" = 7, "materials" = 7, "abductor" = 4) materials = list(MAT_METAL = 25000, MAT_SILVER = 12500, MAT_PLASMA = 5000, MAT_TITANIUM = 10000, MAT_DIAMOND = 10000) //Base abductor engineering tools * 4 - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_abductor_medi @@ -1077,7 +1077,7 @@ build_path = /obj/item/borg/upgrade/abductor_medi req_tech = list("biotech" = 7, "materials" = 7, "abductor" = 3) materials = list(MAT_METAL = 18000, MAT_GLASS = 1500, MAT_SILVER = 13000, MAT_GOLD = 1000, MAT_PLASMA = 4000, MAT_TITANIUM = 12000, MAT_DIAMOND = 1000) //Base abductor engineering tools *8 + IMS cost - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_lavaproof @@ -1086,7 +1086,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/lavaproof materials = list(MAT_METAL = 10000, MAT_PLASMA = 4000, MAT_TITANIUM = 5000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_syndicate_module @@ -1096,7 +1096,7 @@ req_tech = list("combat" = 7, "programming" = 7, "syndicate" = 4) build_path = /obj/item/borg/upgrade/syndicate materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_selfrepair @@ -1106,7 +1106,7 @@ build_path = /obj/item/borg/upgrade/selfrepair req_tech = list("materials" = 4, "engineering" = 4) materials = list(MAT_METAL=15000, MAT_GLASS=15000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_bluespace_trash_bag @@ -1116,7 +1116,7 @@ build_path = /obj/item/borg/upgrade/bluespace_trash_bag req_tech = list("materials" = 5, "bluespace" = 4, "engineering" = 4, "plasmatech" = 3) materials = list(MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PLASMA = 1500) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_floorbuffer @@ -1126,7 +1126,7 @@ build_path = /obj/item/borg/upgrade/floorbuffer req_tech = list("materials" = 4, "engineering" = 4) materials = list(MAT_METAL=15000, MAT_GLASS=15000) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_syndie_soap @@ -1136,17 +1136,27 @@ build_path = /obj/item/borg/upgrade/syndie_soap req_tech = list("syndicate" = 2) materials = list(MAT_GOLD = 1250, MAT_PLASMA = 2500, MAT_SILVER = 1250) - construction_time = 120 + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") - + /datum/design/borg_upgrade_rcd name = "Cyborg Upgrade (Rapid Construction Device)" id = "borg_upgrade_RCD" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rcd req_tech = list("materials" = 6, "engineering" = 5, "powerstorage" = 5) - materials = list(MAT_METAL=30000, MAT_GLASS=15000,) - construction_time = 120 + materials = list(MAT_METAL = 30000, MAT_GLASS = 15000) + construction_time = 12 SECONDS + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_upgrade_rped + name = "Cyborg Upgrade (Rapid Part Exchange Device)" + id = "borg_upgrade_RPED" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/rped + req_tech = list("materials" = 3, "engineering" = 4) + materials = list(MAT_METAL = 40000, MAT_GLASS = 15000) + construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") //Misc @@ -1156,7 +1166,7 @@ build_type = MECHFAB build_path =/obj/item/mecha_parts/mecha_tracking materials = list(MAT_METAL=500) - construction_time = 50 + construction_time = 5 SECONDS category = list("Misc") /datum/design/mecha_tracking_ai_control @@ -1166,7 +1176,7 @@ build_path = /obj/item/mecha_parts/mecha_tracking/ai_control materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_SILVER = 200) req_tech = list("programming" = 3, "magnets" = 2, "engineering" = 2) - construction_time = 50 + construction_time = 5 SECONDS category = list("Misc") /datum/design/ipc_head @@ -1175,7 +1185,7 @@ build_type = MECHFAB build_path = /obj/item/organ/external/head/ipc materials = list(MAT_METAL=15000, MAT_GLASS=5000) - construction_time = 350 + construction_time = 35 SECONDS category = list("Misc") /datum/design/integrated_robotic_chassis @@ -1184,7 +1194,7 @@ build_type = MECHFAB build_path = /mob/living/carbon/human/machine/created materials = list(MAT_METAL = 40000, MAT_TITANIUM = 7000) //for something made from lego, they sure need a lot of metal - construction_time = 400 + construction_time = 40 SECONDS category = list("Misc") /datum/design/ipc_cell @@ -1193,7 +1203,7 @@ build_type = MECHFAB build_path = /obj/item/organ/internal/cell materials = list(MAT_METAL=2000, MAT_GLASS=750) - construction_time = 200 + construction_time = 20 SECONDS category = list("Misc") /datum/design/ipc_charger @@ -1202,7 +1212,7 @@ build_type = MECHFAB build_path = /obj/item/organ/internal/cyberimp/arm/power_cord materials = list(MAT_METAL=2000, MAT_GLASS=1000) - construction_time = 200 + construction_time = 20 SECONDS category = list("Misc") /datum/design/ipc_optics @@ -1211,7 +1221,7 @@ build_type = MECHFAB build_path = /obj/item/organ/internal/eyes/optical_sensor materials = list(MAT_METAL=1000, MAT_GLASS=2500) - construction_time = 200 + construction_time = 20 SECONDS category = list("Misc") /datum/design/ipc_microphone @@ -1220,7 +1230,7 @@ build_type = MECHFAB build_path = /obj/item/organ/internal/ears/microphone materials = list(MAT_METAL = 1000, MAT_GLASS = 2500) - construction_time = 200 + construction_time = 20 SECONDS category = list("Misc") /datum/design/synthetic_flash @@ -1230,7 +1240,7 @@ req_tech = list("magnets" = 3, "combat" = 2) build_type = MECHFAB materials = list(MAT_METAL = 750, MAT_GLASS = 750) - construction_time = 100 + construction_time = 10 SECONDS build_path = /obj/item/flash/synthetic category = list("Misc") @@ -1240,7 +1250,7 @@ id = "voice_standard" build_type = MECHFAB materials = list(MAT_METAL = 500) - construction_time = 50 + construction_time = 5 SECONDS build_path = /obj/item/mecha_modkit/voice category = list("Misc") @@ -1250,7 +1260,7 @@ id = "voice_nanotrasen" build_type = MECHFAB materials = list(MAT_METAL = 500) - construction_time = 50 + construction_time = 5 SECONDS build_path = /obj/item/mecha_modkit/voice/nanotrasen category = list("Misc") @@ -1260,7 +1270,7 @@ id = "voice_silent" build_type = MECHFAB materials = list(MAT_METAL = 500) - construction_time = 50 + construction_time = 5 SECONDS build_path = /obj/item/mecha_modkit/voice/silent category = list("Misc") @@ -1270,7 +1280,7 @@ id = "voice_honk" build_type = MECHFAB materials = list(MAT_METAL = 400, MAT_BANANIUM = 100) - construction_time = 50 + construction_time = 5 SECONDS build_path = /obj/item/mecha_modkit/voice/honk category = list("Misc") @@ -1281,6 +1291,6 @@ build_type = MECHFAB materials = list(MAT_METAL = 400, MAT_TITANIUM = 100) req_tech = list("syndicate" = 2) - construction_time = 50 + construction_time = 5 SECONDS build_path = /obj/item/mecha_modkit/voice/syndicate category = list("Misc") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 0c5a86e82d61..7e981736a9d7 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -375,6 +375,30 @@ build_path = /obj/item/organ/internal/cyberimp/arm/botanical category = list("Medical") +/datum/design/cyberimp_shell_launcher + name = "Shell Launch System Implant" + desc = "A mounted, single-shot housing for a shell launch cannon; capable of firing twelve-gauge shotgun shells." + id = "ci-shell_launcher" + req_tech = list("materials" = 7, "engineering" = 5, "combat" = 5) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 20 SECONDS + build_path = /obj/item/organ/internal/cyberimp/arm/shell_launcher + category = list("Medical") + +/datum/design/cyberimp_razorwire_spool + name = "Razorwire Spool Arm Implant" + desc = "A long length of monomolecular filament, built into the back of your hand. \ + Impossibly thin and flawlessly sharp, it should slice through organic materials with no trouble; \ + even from a few steps away. However, results against anything more durable will heavily vary." + id = "ci-razorwire-spool" + req_tech = list("combat" = 6, "biotech" = 6, "syndicate" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 5000, MAT_SILVER = 2000, MAT_DIAMOND = 2000, MAT_BLUESPACE = 2000) + construction_time = 10 SECONDS + build_path = /obj/item/organ/internal/cyberimp/arm/razorwire + category = list("Medical") + /datum/design/cyberimp_toolset_abductor name = "Abductor Toolset Implant" desc = "An alien toolset, designed to be installed on subject's arm." diff --git a/code/modules/research/designs/modsuit_designs.dm b/code/modules/research/designs/modsuit_designs.dm index e45d66c6f997..5eb37656612c 100644 --- a/code/modules/research/designs/modsuit_designs.dm +++ b/code/modules/research/designs/modsuit_designs.dm @@ -365,3 +365,31 @@ req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6) materials = list(MAT_METAL = 12000, MAT_GLASS = 2000, MAT_SILVER = 4000, MAT_PLASMA = 4000, MAT_TITANIUM = 4000, MAT_BLUESPACE = 6000) //Requires Gravitational anomaly core to function. build_path = /obj/item/mod/module/anomaly_locked/kinesis + +/datum/design/module/mod_firewall + name = "Firewall Module" + id = "mod_firewall" + req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6) + materials = list(MAT_METAL = 12000, MAT_GLASS = 2000, MAT_SILVER = 4000, MAT_PLASMA = 4000, MAT_TITANIUM = 4000, MAT_BLUESPACE = 6000) //Requires Pyroclastic anomaly core to function. + build_path = /obj/item/mod/module/anomaly_locked/firewall + +/datum/design/module/mod_arcshield + name = "Arc-Shield Module" + id = "mod_arcshield" + req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6) + materials = list(MAT_METAL = 12000, MAT_GLASS = 2000, MAT_SILVER = 4000, MAT_PLASMA = 4000, MAT_TITANIUM = 4000, MAT_BLUESPACE = 6000) //Requires Flux anomaly core to function. + build_path = /obj/item/mod/module/anomaly_locked/teslawall + +/datum/design/module/mod_vortex + name = "Vortex Shotgun Module" + id = "mod_vortex" + req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6) + materials = list(MAT_METAL = 12000, MAT_GLASS = 2000, MAT_SILVER = 4000, MAT_PLASMA = 4000, MAT_TITANIUM = 4000, MAT_BLUESPACE = 6000) //Requires Vortex anomaly core to function. + build_path = /obj/item/mod/module/anomaly_locked/vortex_shotgun + +/datum/design/module/mod_cryogrenade + name = "Cryogrenade Module" + id = "mod_cryo" + req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6) + materials = list(MAT_METAL = 12000, MAT_GLASS = 2000, MAT_SILVER = 4000, MAT_PLASMA = 4000, MAT_TITANIUM = 4000, MAT_BLUESPACE = 6000) //Requires Cryonic anomaly core to function. + build_path = /obj/item/mod/module/anomaly_locked/cryogrenade diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index b2c85390d955..9ff0f991f8f7 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -1,51 +1,49 @@ ///////SMELTABLE ALLOYS/////// -/datum/design/plasteel_alloy +/datum/design/smelter + build_type = SMELTER + +/datum/design/smelter/plasteel_alloy name = "Plasteel" desc = "Plasma + Iron" id = "plasteel" - build_type = SMELTER materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasteel category = list("initial") -/datum/design/plastitanium_alloy +/datum/design/smelter/plastitanium_alloy name = "Plastitanium" desc = "Plasma + Titanium" id = "plastitanium" - build_type = SMELTER materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/mineral/plastitanium category = list("initial") -/datum/design/plaglass_alloy +/datum/design/smelter/plaglass_alloy name = "Plasma Glass" desc = "Plasma + Glass" id = "plasmaglass" - build_type = SMELTER materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasmaglass category = list("initial") -/datum/design/titaniumglass_alloy +/datum/design/smelter/titaniumglass_alloy name = "Titanium Glass" desc = "Titanium + Glass" id = "titaniumglass" - build_type = SMELTER materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/titaniumglass category = list("initial") -/datum/design/plastitaniumglass_alloy +/datum/design/smelter/plastitaniumglass_alloy name = "Plastitanium Glass" desc = "Plasma + Titanium + Glass" id = "plastitaniumglass" - build_type = SMELTER materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plastitaniumglass category = list("initial") -/datum/design/alienalloy +/datum/design/smelter/alienalloy name = "Alien Alloy" desc = "A sheet of reverse-engineered alien alloy." id = "alienalloy" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index de1b4b0880b6..6f039a583dc1 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -30,8 +30,8 @@ var/list/item_reactions = list() var/list/valid_items = list() //valid items for special reactions like transforming var/list/critical_items = list() //items that can cause critical reactions - var/list/blocked_items = list(/obj/item/reagent_containers/food/drinks/bottle/dragonsbreath, - /obj/item/reagent_containers/food/drinks/bottle/immortality) + var/list/blocked_items = list(/obj/item/reagent_containers/drinks/bottle/dragonsbreath, + /obj/item/reagent_containers/drinks/bottle/immortality) /// Used for linking with rnd consoles var/range = 5 @@ -55,7 +55,7 @@ valid_items += I probWeight++ - if(ispath(I,/obj/item/reagent_containers/food)) + if(ispath(I,/obj/item/food)) var/obj/item/tempCheck = I if(I in blocked_items) continue @@ -340,7 +340,7 @@ if(prob(EFFECT_PROB_LOW) && criticalReaction) visible_message("[src]'s emergency coolant system gives off a small ding!") playsound(loc, 'sound/machines/ding.ogg', 50, 1) - var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) + var/obj/item/reagent_containers/drinks/coffee/C = new /obj/item/reagent_containers/drinks/coffee(get_turf(pick(oview(1,src)))) chosenchem = pick("plasma","capsaicin","ethanol") C.reagents.remove_any(25) C.reagents.add_reagent(chosenchem , 50) @@ -391,7 +391,7 @@ visible_message("[src] lowers [exp_on]'s temperature.") if(prob(EFFECT_PROB_LOW) && criticalReaction) visible_message("[src]'s emergency coolant system gives off a small ding!") - var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) + var/obj/item/reagent_containers/drinks/coffee/C = new /obj/item/reagent_containers/drinks/coffee(get_turf(pick(oview(1,src)))) playsound(loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready! chosenchem = pick("uranium","frostoil","ephedrine") C.reagents.remove_any(25) diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index de285e9e76d0..8858b8258c54 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -92,24 +92,13 @@ GLOBAL_LIST_EMPTY(message_servers) for(var/C in GLOB.allRequestConsoles) var/obj/machinery/requests_console/RC = C if(ckey(RC.department) == ckey(recipient)) - if(RC.inoperable()) - RC.message_log.Add(list(list("Message lost due to console failure. Please contact [station_name()]'s system administrator or AI for technical assistance."))) - continue - if(RC.newmessagepriority < priority) - RC.newmessagepriority = priority - RC.update_icon(UPDATE_OVERLAYS) + var/title switch(priority) if(2) - if(!RC.silent) - playsound(RC.loc, 'sound/machines/twobeep.ogg', 50, 1) - RC.atom_say("PRIORITY Alert in [sender]") - RC.message_log.Add(list(list("High Priority message from [sender]:", "[authmsg]"))) + title = "PRIORITY Alert in [sender]" else - if(!RC.silent) - playsound(RC.loc, 'sound/machines/twobeep.ogg', 50, 1) - RC.atom_say("Message from [sender]") - RC.message_log.Add(list(list("Message [sender]:", "[authmsg]"))) - RC.set_light(2) + title = "Message from [sender]" + RC.createMessage(sender, title, authmsg, priority) /obj/machinery/message_server/attack_hand(user as mob) to_chat(user, "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]") diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 90a399617a54..b0d3fd769960 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -95,40 +95,21 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(initial(tt.id) == ID) return initial(tt.name) -/proc/CallMaterialName(ID) - if(copytext(ID, 1, 2) == "$") - var/return_name = copytext(ID, 2) - switch(return_name) - if("metal") - return_name = "Metal" - if("glass") - return_name = "Glass" - if("gold") - return_name = "Gold" - if("silver") - return_name = "Silver" - if("plasma") - return_name = "Solid Plasma" - if("uranium") - return_name = "Uranium" - if("diamond") - return_name = "Diamond" - if("clown") - return_name = "Bananium" - if("mime") - return_name = "Tranquillite" - if("titanium") - return_name = "Titanium" - if("bluespace") - return_name = "Bluespace Mesh" - if("plastic") - return_name = "Plastic" - return return_name - else - for(var/R in subtypesof(/datum/reagent)) - var/datum/reagent/rt = R - if(initial(rt.id) == ID) - return initial(rt.name) +/proc/CallMaterialName(return_name) + switch(return_name) + if("plasma") + return_name = "Solid Plasma" + if("clown") + return_name = "Bananium" + if("mime") + return_name = "Tranquillite" + if("bluespace") + return_name = "Bluespace Mesh" + else + var/datum/reagent/our_reagent = GLOB.chemical_reagents_list[return_name] + if(our_reagent && initial(our_reagent.id) == return_name) + return_name = initial(our_reagent.name) + return capitalize(return_name) /obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). for(var/obj/machinery/r_n_d/D in range(range, src)) @@ -222,6 +203,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, req_access = list() emagged = TRUE to_chat(user, "You disable the security protocols") + return TRUE /obj/machinery/computer/rdconsole/proc/valid_nav(next_menu, next_submenu) switch(next_menu) @@ -319,7 +301,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, break if(!pointless) - var/choice = input("This item does not raise tech levels. Proceed destroying loaded item anyway?") in list("Proceed", "Cancel") + var/choice = alert(user, "This item does not raise tech levels. Proceed destroying loaded item anyway?", "Are you sure you want to destroy this item?", "Proceed", "Cancel") if(choice == "Cancel" || !linked_destroy) return @@ -597,7 +579,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if("maxresearch") if(!check_rights(R_ADMIN)) return - if(alert("Are you sure you want to maximize research levels?","Confirmation","Yes","No")=="No") + if(tgui_alert(usr, "Are you sure you want to maximize research levels?", "Confirmation", list("Yes", "No")) != "Yes") return log_admin("[key_name(usr)] has maximized the research levels.") message_admins("[key_name_admin(usr)] has maximized the research levels.") @@ -666,7 +648,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if("reset") //Reset the R&D console's database. griefProtection() - var/choice = alert("Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "R&D Console Database Reset", "Continue", "Cancel") + var/choice = tgui_alert(usr, "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "R&D Console Database Reset", list("Continue", "Cancel")) if(choice == "Continue") add_wait_message("Resetting Database...", RESET_RESEARCH_DELAY) addtimer(CALLBACK(src, PROC_REF(reset_research)), RESET_RESEARCH_DELAY) @@ -706,10 +688,13 @@ won't update every console in existence) but it's more of a hassle to do. Also, return TRUE ui_interact(user) -/obj/machinery/computer/rdconsole/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/rdconsole/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/rdconsole/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RndConsole", name, 800, 550, master_ui, state) + ui = new(user, src, "RndConsole", name) ui.open() /obj/machinery/computer/rdconsole/proc/ui_machine_data(obj/machinery/r_n_d/machine, list/data) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 0f813c354311..1c37c725c46f 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -249,7 +249,7 @@ temp_server.id_with_download += num else if(href_list["reset_tech"]) - var/choice = alert("Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel") + var/choice = tgui_alert(usr, "Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", list("Continue", "Cancel")) if(choice == "Continue") for(var/I in temp_server.files.known_tech) var/datum/tech/T = temp_server.files.known_tech[I] @@ -259,7 +259,7 @@ temp_server.files.RefreshResearch() else if(href_list["reset_design"]) - var/choice = alert("Design Data Deletion", "Are you sure you want to blacklist this design? Ensure you sync servers after this decision.", "Continue", "Cancel") + var/choice = tgui_alert(usr, "Design Data Deletion", "Are you sure you want to blacklist this design? Ensure you sync servers after this decision.", list("Continue", "Cancel")) if(choice == "Continue") for(var/I in temp_server.files.known_designs) var/datum/design/D = temp_server.files.known_designs[I] @@ -272,7 +272,7 @@ temp_server.files.RefreshResearch() else if(href_list["restore_design"]) - var/choice = alert("Design Data Restoration", "Are you sure you want to restore this design? Ensure you sync servers after this decision.", "Continue", "Cancel") + var/choice = tgui_alert(usr, "Design Data Restoration", "Are you sure you want to restore this design? Ensure you sync servers after this decision.", list("Continue", "Cancel")) if(choice == "Continue") temp_server.files.blacklisted_designs -= href_list["restore_design"] temp_server.files.unblacklisted_designs += href_list["restore_design"] @@ -349,15 +349,16 @@ for(var/obj/machinery/r_n_d/server/S in servers) dat += "[S.name] (Transfer)
        " dat += "
        Main Menu" - user << browse("R&D Server Control
        [dat]", "window=server_control;size=575x400") + user << browse("R&D Server Control
        [dat]", "window=server_control;size=575x400") // SS220 ADDITION - onclose(user, "server_control") return /obj/machinery/computer/rdservercontrol/emag_act(user as mob) if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + playsound(loc, 'sound/effects/sparks4.ogg', 75, TRUE) emagged = TRUE to_chat(user, "You you disable the security protocols") + return TRUE src.updateUsrDialog() /obj/machinery/r_n_d/server/core diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 531dc9237800..4225b79bc0eb 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -177,7 +177,7 @@ return ..() /obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(O, /obj/item/food/snacks/monkeycube)) if(user.drop_item()) monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") @@ -192,7 +192,7 @@ else if(istype(O, /obj/item/storage/bag) || istype(O, /obj/item/storage/box)) var/obj/item/storage/P = O var/loaded = 0 - for(var/obj/item/reagent_containers/food/snacks/monkeycube/MC in P.contents) + for(var/obj/item/food/snacks/monkeycube/MC in P.contents) loaded = 1 monkeys++ P.remove_from_storage(MC) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 2c8123aa4548..e2f0acd79923 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -173,8 +173,7 @@ to_chat(M, "You absorb the potion and feel your intense desire to feed melt away.") to_chat(user, "You feed the slime the potion, removing its hunger and calming it.") being_used = TRUE - var/newname = sanitize(copytext_char(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text,1,MAX_NAME_LEN)) // SS220 EDIT - ORIGINAL: copytext - + var/newname = tgui_input_text(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime", MAX_NAME_LEN, 1) if(!newname) newname = "pet slime" M.name = newname @@ -228,7 +227,9 @@ explosion(T, -1, -1, 2, 3) qdel(src) return - var/reason_text = input(user, "Enter reason for giving sentience", "Reason for sentience potion", "") as null|text + var/reason_text = tgui_input_text(user, "Enter reason for giving sentience", "Reason for sentience potion") + if(!reason_text) + return to_chat(user, "You offer [src] sentience potion to [SM]...") being_used = TRUE @@ -304,7 +305,7 @@ return prompted = TRUE - if(alert("This will permanently transfer your consciousness to [SM]. Are you sure you want to do this?",,"Yes","No")=="No") + if(tgui_alert(user, "This will permanently transfer your consciousness to [SM]. Are you sure you want to do this?", "Consciousness Transfer", list("Yes", "No")) != "Yes") prompted = FALSE return diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index c3e7c3de8c45..6a8479383641 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -234,7 +234,8 @@ /obj/item/stack/sheet/glass/fifty = 1, /obj/item/stack/sheet/metal/fifty = 1, /obj/item/flashlight = 1, - /obj/item/rpd = 1 + /obj/item/rpd = 1, + /obj/item/storage/bag/construction = 1 ) cybernetic_implants = list( @@ -261,7 +262,8 @@ /obj/item/rcd/preloaded = 1, /obj/item/rcd_ammo = 3, /obj/item/gun/energy/gun = 1, - /obj/item/rpd/bluespace = 1 + /obj/item/rpd/bluespace = 1, + /obj/item/storage/bag/construction = 1 ) cybernetic_implants = list( @@ -289,7 +291,8 @@ /obj/item/rcd/combat = 1, /obj/item/rcd_ammo/large = 3, /obj/item/gun/energy/gun/blueshield/pdw9 = 1, - /obj/item/rpd/bluespace = 1 + /obj/item/rpd/bluespace = 1, + /obj/item/storage/bag/construction = 1 ) cybernetic_implants = list( diff --git a/code/modules/ruins/ghost_bar.dm b/code/modules/ruins/ghost_bar.dm index 879580a8a26e..bfe72c4cf3b0 100644 --- a/code/modules/ruins/ghost_bar.dm +++ b/code/modules/ruins/ghost_bar.dm @@ -12,12 +12,14 @@ /obj/effect/mob_spawn/human/alive/ghost_bar/create(ckey, flavour = TRUE, name, mob/user = usr) // So divorced from the normal proc it's just being overriden var/datum/character_save/save_to_load - if(alert(user, "Would you like to use one of your saved characters in your character creator?",, "Yes", "No") == "Yes") + if(tgui_alert(user, "Would you like to use one of your saved characters in your character creator?", "Ghost Bar", list("Yes", "No")) == "Yes") var/list/our_characters_names = list() var/list/our_character_saves = list() - for(var/datum/character_save/saves in user.client.prefs.character_saves) - our_characters_names += saves.real_name - our_character_saves += list(saves.real_name = saves) + for(var/index in 1 to length(user.client.prefs.character_saves)) + var/datum/character_save/saves = user.client.prefs.character_saves[index] + var/slot_name = "[saves.real_name] (Slot #[index])" + our_characters_names += slot_name + our_character_saves += list("[slot_name]" = saves) var/character_name = tgui_input_list(user, "Select a character", "Character selection", our_characters_names) if(!character_name) @@ -97,12 +99,16 @@ if(!istype(mob_to_delete) || !istype(user) || !Adjacent(user)) return if(mob_to_delete.client) - if(alert(mob_to_delete , "Would you like to return to the realm of spirits? (This will delete your current character, but you can rejoin later)",, "Yes", "No") == "No") + if(tgui_alert(mob_to_delete, "Would you like to return to the realm of spirits? (This will delete your current character, but you can rejoin later)", "Ghost Bar", list("Yes", "No")) != "Yes") return mob_to_delete.visible_message("[mob_to_delete.name] climbs into [src]...") playsound(src, 'sound/machines/wooden_closet_close.ogg', 50) qdel(mob_to_delete) /proc/dust_if_respawnable(mob/M) + if(isdrone(M)) + var/mob/living/silicon/robot/drone/drone = M + drone.shut_down(TRUE) + return if(HAS_TRAIT_FROM(M, TRAIT_RESPAWNABLE, GHOST_ROLE)) M.dust() diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index 5320a16f12b2..8a66c4471926 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -7,7 +7,7 @@ var/list/elements var/floor_type = /turf/simulated/floor/vault/lavaland_air var/finished = FALSE - var/reward_type = /obj/item/reagent_containers/food/snacks/cookie + var/reward_type = /obj/item/food/snacks/cookie var/element_type = /obj/structure/puzzle_element var/auto_setup = TRUE var/empty_tile_id diff --git a/code/modules/ruins/lavalandruin_code/seed_vault.dm b/code/modules/ruins/lavalandruin_code/seed_vault.dm index 7c70935c9f3b..54b7f64c2f54 100644 --- a/code/modules/ruins/lavalandruin_code/seed_vault.dm +++ b/code/modules/ruins/lavalandruin_code/seed_vault.dm @@ -2,7 +2,7 @@ name = "seed vault seeds" lootcount = 1 - loot = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap = 10, + loot = list(/obj/item/food/snacks/grown/mushroom/glowshroom/glowcap = 10, /obj/item/seeds/cherry/bomb = 10, /obj/item/seeds/berry/glow = 10, /obj/item/seeds/sunflower/moonflower = 8 diff --git a/code/modules/ruins/lavalandruin_code/sin_ruins.dm b/code/modules/ruins/lavalandruin_code/sin_ruins.dm index 59350857e219..38fc3e466bdb 100644 --- a/code/modules/ruins/lavalandruin_code/sin_ruins.dm +++ b/code/modules/ruins/lavalandruin_code/sin_ruins.dm @@ -203,7 +203,7 @@ user.real_name = H.dna.real_name H.dna.transfer_identity(user) user.visible_message("[user]'s appearance shifts into [H]'s!", \ - "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.") + "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.") // Sloth /obj/item/paper/fluff/stations/lavaland/sloth/note diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 8d816718085b..8f8f483db0c5 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -82,7 +82,7 @@ /obj/structure/necropolis_gate/attack_hand(mob/user) . = ..() if(locked) - to_chat(user, "It's [open ? "stuck open":"locked"].") + to_chat(user, "It's [open ? "stuck open" : "locked"].") return if(GLOB.necropolis_gate == src) //funny override for knock knock gate @@ -154,10 +154,10 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/necropolis_gate/legion_gate/attack_hand(mob/user) if(!open && !changing_openness) - var/safety = alert(user, "You think this might be a bad idea...", "Knock on the door?", "Proceed", "Abort") - if(safety == "Abort" || !in_range(src, user) || !src || open || changing_openness || user.incapacitated()) + var/safety = tgui_alert(user, "You think this might be a bad idea...", "Knock on the door?", list("Proceed", "Abort")) + if(!safety || safety == "Abort" || !in_range(src, user) || !src || open || changing_openness || user.incapacitated()) return - user.visible_message("[user] knocks on [src]...", "You tentatively knock on [src]...") + user.visible_message("[user] knocks on [src]...", "You tentatively knock on [src]...") playsound(user.loc, 'sound/effects/shieldbash.ogg', 100, 1) return ..() diff --git a/code/modules/ruins/syndicate_space_base.dm b/code/modules/ruins/syndicate_space_base.dm index b3e6044c21ea..67d9fcc50dfb 100644 --- a/code/modules/ruins/syndicate_space_base.dm +++ b/code/modules/ruins/syndicate_space_base.dm @@ -16,7 +16,7 @@ /obj/item/grenade/chem_grenade/pyro = 5, /obj/item/grenade/chem_grenade/cryo = 5, /obj/item/grenade/chem_grenade/adv_release = 5, - /obj/item/reagent_containers/food/drinks/bottle/holywater = 1) + /obj/item/reagent_containers/drinks/bottle/holywater = 1) slogan_list = list("It's not pyromania if you're getting paid!","You smell that? Plasma, son. Nothing else in the world smells like that.","I love the smell of Plasma in the morning.") resistance_flags = FIRE_PROOF diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index f29494fdac5d..441b31198b22 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -86,10 +86,13 @@ return TRUE ui_interact(user) -/obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/keycard_auth/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/keycard_auth/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "KeycardAuth", name, 540, 300, master_ui, state) + ui = new(user, src, "KeycardAuth", name) ui.open() @@ -117,7 +120,7 @@ . = TRUE switch(action) if("ert") - ert_reason = input(usr, "Reason for ERT Call:", "", "") // we strip this later in ERT_Announce + ert_reason = tgui_input_text(usr, "Reason for ERT Call:", "Call ERT", encode = FALSE) // we strip this later in ERT_Announce if("reset") reset() if("triggerevent") diff --git a/code/modules/security_levels/security_level_datums.dm b/code/modules/security_levels/security_level_datums.dm index 12273e95f263..9cba1e40f4c1 100644 --- a/code/modules/security_levels/security_level_datums.dm +++ b/code/modules/security_levels/security_level_datums.dm @@ -101,8 +101,8 @@ status_display_mode = STATUS_DISPLAY_ALERT status_display_data = "gammaalert" lowering_to_announcement_title = "Attention! Gamma security level activated!" - lowering_to_announcement_text = "Central Command has ordered the Gamma security level on the station. Security is to have weapons equipped at all times, and all civilians are to immediately seek their nearest head for transportation to a secure location." - elevating_to_announcement_text = "Central Command has ordered the Gamma security level on the station. Security is to have weapons equipped at all times, and all civilians are to immediately seek their nearest head for transportation to a secure location." + lowering_to_announcement_text = "Central Command has ordered the Gamma security level on the station. Security is to have weapons equipped at all times, and all civilians are to immediately seek out command staff for instructions." + elevating_to_announcement_text = "Central Command has ordered the Gamma security level on the station. Security is to have weapons equipped at all times, and all civilians are to immediately seek out command staff for instructions." elevating_to_announcement_title = "Attention! Gamma security level activated!" /** diff --git a/code/modules/server_commands/commands/newroundannounce.dm b/code/modules/server_commands/commands/newroundannounce.dm index 9339a06cef00..b1b645d649a3 100644 --- a/code/modules/server_commands/commands/newroundannounce.dm +++ b/code/modules/server_commands/commands/newroundannounce.dm @@ -8,7 +8,7 @@ var/startup_msg = "The server [server_name] ([source]) is now starting up. The map is [map_fluff] ([map_name]). You can connect with the Switch Server verb." - to_chat(world, "
        Attention

        [startup_msg]
        ") + to_chat(world, "
        Attention

        [startup_msg]
        ") SEND_SOUND(world, sound('sound/misc/notice2.ogg')) // Same as captains priority announce /datum/server_command/new_round_announce/custom_dispatch(sname, mname, mfluff) diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 21251143302e..68336212acd9 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -33,7 +33,9 @@ /obj/item/assault_pod/attack_self(mob/living/user) var/target_area - target_area = input("Area to land", "Select a Landing Zone", target_area) in SSmapping.teleportlocs + target_area = tgui_input_list(user, "Area to land", "Select a Landing Zone", SSmapping.teleportlocs) + if(!target_area) + return var/area/picked_area = SSmapping.teleportlocs[target_area] if(!src || QDELETED(src)) return diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 2522c6b93e61..d6841715bf2a 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -62,7 +62,7 @@ to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") return 0 - var/choice = alert(user, "Would you like to (un)authorize a shortened launch time? [auth_need - length(authorized)] authorization\s are still needed. Use abort to cancel all authorizations.", "Shuttle Launch", "Authorize", "Repeal", "Abort") + var/choice = tgui_alert(user, "Would you like to (un)authorize a shortened launch time? [auth_need - length(authorized)] authorization\s are still needed. Use abort to cancel all authorizations.", "Shuttle Launch", list("Authorize", "Repeal", "Abort")) if(SSshuttle.emergency.mode != SHUTTLE_DOCKED || user.get_active_hand() != W) return 0 @@ -101,6 +101,7 @@ GLOB.minor_announcement.Announce("The emergency shuttle will launch in 10 seconds", "SYSTEM ERROR:") SSshuttle.emergency.setTimer(100) emagged = TRUE + return TRUE /obj/machinery/computer/emergency_shuttle/proc/increase_hijack_stage() diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index c8f55f6647cb..6c87d6ca3f78 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -68,10 +68,3 @@ if(!S1.lock_shuttle_doors && id_tag == "s_docking_airlock") INVOKE_ASYNC(src, PROC_REF(unlock)) -/obj/structure/ladder/onShuttleMove() - if(resistance_flags & INDESTRUCTIBLE) - // simply don't be moved - return FALSE - disconnect() - LateInitialize() // who the fuck did this - return ..() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index dcfd3716229b..89f10db5d23b 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -806,10 +806,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/shuttle/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/shuttle/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ShuttleConsole", name, 350, 150, master_ui, state) + ui = new(user, src, "ShuttleConsole", name) ui.open() /obj/machinery/computer/shuttle/ui_data(mob/user) @@ -843,7 +846,7 @@ if(action == "move") var/destination = params["move"] if(!options.Find(destination))//figure out if this translation works - message_admins("EXPLOIT: [ADMIN_LOOKUPFLW(usr)] attempted to move [src] to an invalid location! [ADMIN_COORDJMP(src)]") + message_admins("EXPLOIT: [ADMIN_LOOKUPFLW(usr)] attempted to move [src] to an invalid location! [ADMIN_COORDJMP(src)]") return switch(SSshuttle.moveShuttle(shuttleId, destination, TRUE, usr)) if(0) @@ -866,6 +869,7 @@ src.req_access = list() emagged = TRUE to_chat(user, "You fried the consoles ID checking system.") + return TRUE //for restricting when the computer can be used, needed for some console subtypes. /obj/machinery/computer/shuttle/proc/can_call_shuttle(mob/user, action) diff --git a/code/modules/shuttle/shuttle_manipulator.dm b/code/modules/shuttle/shuttle_manipulator.dm index 09f2b8f3be69..dc889330287d 100644 --- a/code/modules/shuttle/shuttle_manipulator.dm +++ b/code/modules/shuttle/shuttle_manipulator.dm @@ -68,10 +68,13 @@ return FALSE // Extremely important that this doesn't get varedited by mistake, otherwise horrible, horrible things can happen to the server. return ..() -/obj/machinery/shuttle_manipulator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/shuttle_manipulator/ui_state(mob/user) + return GLOB.admin_state + +/obj/machinery/shuttle_manipulator/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ShuttleManipulator", name, 650, 700, master_ui, state) + ui = new(user, src, "ShuttleManipulator", name) ui.open() /obj/machinery/shuttle_manipulator/ui_data(mob/user) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 6e081554cae5..a211c2e69f0a 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -206,6 +206,10 @@ msg += "[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
        " service_credits += S.rarity / 2 // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later credits_to_deposit += S.rarity / 2 + + if(istype(thing, /obj/item/organ/internal/alien)) + var/obj/item/organ/internal/alien/organ = thing + credits_to_deposit += organ.cargo_profit qdel(MA) SSeconomy.sold_atoms += "." diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index a4887697fca5..a87db6da4c15 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -24,7 +24,7 @@ var/highscore = 0 for(var/obj/machinery/power/bluespace_tap/T in GLOB.machines) highscore = max(highscore, T.total_points) - to_chat(world, "Bluespace Harvester Highscore: [highscore >= goal ? "": ""][highscore]") + to_chat(world, "Bluespace Harvester Highscore: [highscore >= goal ? "": ""][highscore]") if(highscore >= goal) return TRUE return FALSE @@ -149,25 +149,25 @@ name = "fancy food" lootcount = 3 loot = list( - /obj/item/reagent_containers/food/snacks/wingfangchu, - /obj/item/reagent_containers/food/snacks/hotdog, - /obj/item/reagent_containers/food/snacks/sliceable/turkey, - /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit, - /obj/item/reagent_containers/food/snacks/appletart, - /obj/item/reagent_containers/food/snacks/sliceable/cheesecake, - /obj/item/reagent_containers/food/snacks/sliceable/bananacake, - /obj/item/reagent_containers/food/snacks/sliceable/chocolatecake, - /obj/item/reagent_containers/food/snacks/soup/meatballsoup, - /obj/item/reagent_containers/food/snacks/soup/mysterysoup, - /obj/item/reagent_containers/food/snacks/soup/stew, - /obj/item/reagent_containers/food/snacks/soup/hotchili, - /obj/item/reagent_containers/food/snacks/burrito, - /obj/item/reagent_containers/food/snacks/fishburger, - /obj/item/reagent_containers/food/snacks/cubancarp, - /obj/item/reagent_containers/food/snacks/fishandchips, - /obj/item/reagent_containers/food/snacks/meatpie, + /obj/item/food/snacks/wingfangchu, + /obj/item/food/snacks/hotdog, + /obj/item/food/snacks/sliceable/turkey, + /obj/item/food/snacks/plumphelmetbiscuit, + /obj/item/food/snacks/appletart, + /obj/item/food/snacks/sliceable/cheesecake, + /obj/item/food/snacks/sliceable/bananacake, + /obj/item/food/snacks/sliceable/chocolatecake, + /obj/item/food/snacks/soup/meatballsoup, + /obj/item/food/snacks/soup/mysterysoup, + /obj/item/food/snacks/soup/stew, + /obj/item/food/snacks/soup/hotchili, + /obj/item/food/snacks/burrito, + /obj/item/food/snacks/fishburger, + /obj/item/food/snacks/cubancarp, + /obj/item/food/snacks/fishandchips, + /obj/item/food/snacks/meatpie, /obj/item/pizzabox/hawaiian, //it ONLY gives hawaiian. MUHAHAHA - /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? + /obj/item/food/snacks/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? ) #define kW *1000 @@ -316,12 +316,14 @@ /obj/machinery/power/bluespace_tap/connect_to_network() - ..() - update_icon() + . = ..() + if(.) + update_icon() /obj/machinery/power/bluespace_tap/disconnect_from_network() - ..() - update_icon() + . = ..() + if(.) + update_icon() /obj/machinery/power/bluespace_tap/Destroy() QDEL_LIST_CONTENTS(fillers) @@ -492,10 +494,13 @@ var/key = text2num(params["target"]) produce(key) -/obj/machinery/power/bluespace_tap/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/bluespace_tap/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/bluespace_tap/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BluespaceTap", name, 650, 400, master_ui, state) + ui = new(user, src, "BluespaceTap", name) ui.open() //emaging provides slightly more points but at much greater risk @@ -506,6 +511,7 @@ do_sparks(5, FALSE, src) if(user) user.visible_message("[user] overrides the safety protocols of [src].", "You override the safety protocols.") + return TRUE /obj/structure/spawner/nether/bluespace_tap spawn_time = 30 SECONDS diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 0b4bcd811144..d368a88f0ef1 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -327,10 +327,13 @@ return 1 ui_interact(user) -/obj/machinery/computer/bsa_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/bsa_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/bsa_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BlueSpaceArtilleryControl", name, 400, 155, master_ui, state) + ui = new(user, src, "BlueSpaceArtilleryControl", name) ui.open() /obj/machinery/computer/bsa_control/ui_data(mob/user) diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 7c84ecfc22c2..794b0f1fadc0 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -215,11 +215,14 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/m return TRUE ui_interact(user) -/obj/machinery/dna_vault/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/dna_vault/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/dna_vault/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) roll_powers(user) - ui = new(user, src, ui_key, "DnaVault", name, 350, 400, master_ui, state) + ui = new(user, src, "DnaVault", name) ui.open() /obj/machinery/dna_vault/proc/roll_powers(mob/user) @@ -302,7 +305,7 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/m switch(upgrade_type) if(VAULT_TOXIN) to_chat(H, "You feel resistant to airborne toxins.") - var/obj/item/organ/internal/lungs/L = H.get_int_organ(/obj/item/organ/internal/lungs) + var/datum/organ/lungs/L = H.get_int_organ_datum(ORGAN_DATUM_LUNGS) if(L) L.tox_breath_dam_min = 0 L.tox_breath_dam_max = 0 diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 729fef7a1b6c..254ef1d2dfc7 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -52,10 +52,13 @@ return 1 ui_interact(user) -/obj/machinery/computer/sat_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/sat_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/sat_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SatelliteControl", name, 475, 400) + ui = new(user, src, "SatelliteControl", name) ui.open() /obj/machinery/computer/sat_control/ui_data(mob/user) @@ -170,7 +173,7 @@ if(!emagged && space_los(M)) Beam(get_turf(M), icon_state = "sat_beam", time = 5, maxdistance = kill_range) if(istype(M, /obj/effect/space_dust/meaty)) - new /obj/item/reagent_containers/food/snacks/meatsteak(get_turf(M)) + new /obj/item/food/snacks/meatsteak(get_turf(M)) qdel(M) /obj/machinery/satellite/meteor_shield/toggle(user) @@ -199,3 +202,4 @@ emagged = TRUE if(active) change_meteor_chance(2) + return TRUE diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm index 0a9c82227118..683c1bdc35d0 100644 --- a/code/modules/station_goals/station_goal.dm +++ b/code/modules/station_goals/station_goal.dm @@ -30,7 +30,7 @@ if(check_completion()) to_chat(world, "Station Goal: [name]: Completed!") else - to_chat(world, "Station Goal: [name]: Failed!") + to_chat(world, "Station Goal: [name]: Failed!") /datum/station_goal/Destroy() SSticker.mode.station_goals -= src diff --git a/code/modules/supply/supply_console.dm b/code/modules/supply/supply_console.dm index 9912dd4d3e2d..74fbced39ca4 100644 --- a/code/modules/supply/supply_console.dm +++ b/code/modules/supply/supply_console.dm @@ -182,12 +182,15 @@ orders += list(order_data) return orders -/obj/machinery/computer/supplycomp/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) +/obj/machinery/computer/supplycomp/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/supplycomp/ui_interact(mob/user, datum/tgui/ui = null) if(!cargo_account || !account_database) reconnect_database() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CargoConsole", name, 900, 800, master_ui, state) + ui = new(user, src, "CargoConsole", name) ui.open() /obj/machinery/computer/supplycomp/ui_data(mob/user) @@ -252,8 +255,8 @@ visible_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") return var/amount = 1 - if(params["multiple"] == "1") // 1 is a string here. DO NOT MAKE THIS A BOOLEAN YOU DORK - var/num_input = input(user, "Amount", "How many crates? ([MULTIPLE_CRATE_MAX] Max)") as null|num + if(params["multiple"]) + var/num_input = tgui_input_number(user, "Amount", "How many crates?", max_value = MULTIPLE_CRATE_MAX) if(!num_input || (!is_public && !is_authorized(user)) || ..()) // Make sure they dont walk away return amount = clamp(round(num_input), 1, MULTIPLE_CRATE_MAX) @@ -261,7 +264,7 @@ if(!istype(P)) return var/timeout = world.time + (60 SECONDS) // If you dont type the reason within a minute, theres bigger problems here - var/reason = input(user, "Reason", "Why do you require this item?","") as null|text + var/reason = tgui_input_text(user, "Reason", "Why do you require this item?", encode = FALSE) if(world.time > timeout || !reason || (!is_public && !is_authorized(user)) || ..()) // Cancel if they take too long, they dont give a reason, they aint authed, or if they walked away return @@ -428,8 +431,8 @@ var/attempt_pin = pin if(customer_account.security_level != ACCOUNT_SECURITY_ID && !attempt_pin) //if pin is not given, we'll prompt them here - attempt_pin = input("Enter pin code", "Vendor transaction") as num - if(!Adjacent(user)) + attempt_pin = tgui_input_number(user, "Enter pin code", "Vendor transaction") + if(!Adjacent(user) || !attempt_pin) return FALSE var/is_admin = is_admin(user) if(!account_database.try_authenticate_login(customer_account, attempt_pin, TRUE, FALSE, is_admin)) @@ -478,6 +481,7 @@ if(!hacked) to_chat(user, "Special supplies unlocked.") hacked = TRUE + return TRUE /obj/machinery/computer/supplycomp/public name = "Supply Ordering Console" diff --git a/code/modules/supply/supply_packs/pack_miscellaneous.dm b/code/modules/supply/supply_packs/pack_miscellaneous.dm index dd906cfc71c0..113ab3cbfa7c 100644 --- a/code/modules/supply/supply_packs/pack_miscellaneous.dm +++ b/code/modules/supply/supply_packs/pack_miscellaneous.dm @@ -48,8 +48,8 @@ /datum/supply_packs/misc/religious_supplies name = "Religious Supplies Crate" - contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/reagent_containers/food/drinks/bottle/holywater, + contains = list(/obj/item/reagent_containers/drinks/bottle/holywater, + /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/bible/booze, /obj/item/storage/bible/booze, /obj/item/clothing/suit/hooded/chaplain_hoodie, @@ -240,8 +240,8 @@ /obj/item/clothing/mask/gas/mime, /obj/item/clothing/head/beret, /obj/item/clothing/suit/suspenders, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, - /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana + /obj/item/reagent_containers/drinks/bottle/bottleofnothing, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana ) cost = 250 containertype = /obj/structure/closet/crate/secure diff --git a/code/modules/supply/supply_packs/pack_organic.dm b/code/modules/supply/supply_packs/pack_organic.dm index e5812958dee0..2f6158d207bf 100644 --- a/code/modules/supply/supply_packs/pack_organic.dm +++ b/code/modules/supply/supply_packs/pack_organic.dm @@ -7,22 +7,22 @@ /datum/supply_packs/organic/food name = "Food Crate" - contains = list(/obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/rice, - /obj/item/reagent_containers/food/condiment/milk, - /obj/item/reagent_containers/food/condiment/soymilk, - /obj/item/reagent_containers/food/condiment/saltshaker, - /obj/item/reagent_containers/food/condiment/peppermill, + contains = list(/obj/item/reagent_containers/condiment/flour, + /obj/item/reagent_containers/condiment/rice, + /obj/item/reagent_containers/condiment/milk, + /obj/item/reagent_containers/condiment/soymilk, + /obj/item/reagent_containers/condiment/saltshaker, + /obj/item/reagent_containers/condiment/peppermill, /obj/item/kitchen/rollingpin, /obj/item/storage/fancy/egg_box, /obj/item/mixing_bowl, /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/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana) + /obj/item/reagent_containers/condiment/enzyme, + /obj/item/reagent_containers/condiment/sugar, + /obj/item/food/snacks/meat/monkey, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana) cost = 250 containername = "food crate" announce_beacons = list("Kitchen" = list("Kitchen")) @@ -39,18 +39,18 @@ /datum/supply_packs/misc/randomised/ingredients // its a bit hacky... num_contained = 25 - contains = list(/obj/item/reagent_containers/food/snacks/grown/wheat, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/pumpkin, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/cocoapod, - /obj/item/reagent_containers/food/snacks/grown/corn, - /obj/item/reagent_containers/food/snacks/grown/eggplant, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/cherries) + contains = list(/obj/item/food/snacks/grown/wheat, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/pumpkin, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/cocoapod, + /obj/item/food/snacks/grown/corn, + /obj/item/food/snacks/grown/eggplant, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/cherries) name = "Ingredient Crate" cost = 300 containername = "ingredient crate" @@ -60,18 +60,18 @@ /datum/supply_packs/organic/condiments name = "Condiment Crate" - contains = list(/obj/item/reagent_containers/food/condiment/ketchup, - /obj/item/reagent_containers/food/condiment/bbqsauce, - /obj/item/reagent_containers/food/condiment/soysauce, - /obj/item/reagent_containers/food/condiment/mayonnaise, - /obj/item/reagent_containers/food/condiment/cherryjelly, - /obj/item/reagent_containers/food/condiment/peanutbutter, - /obj/item/reagent_containers/food/condiment/honey, - /obj/item/reagent_containers/food/condiment/oliveoil, - /obj/item/reagent_containers/food/condiment/frostoil, - /obj/item/reagent_containers/food/condiment/capsaicin, - /obj/item/reagent_containers/food/condiment/wasabi, - /obj/item/reagent_containers/food/condiment/vinegar) + contains = list(/obj/item/reagent_containers/condiment/ketchup, + /obj/item/reagent_containers/condiment/bbqsauce, + /obj/item/reagent_containers/condiment/soysauce, + /obj/item/reagent_containers/condiment/mayonnaise, + /obj/item/reagent_containers/condiment/cherryjelly, + /obj/item/reagent_containers/condiment/peanutbutter, + /obj/item/reagent_containers/condiment/honey, + /obj/item/reagent_containers/condiment/oliveoil, + /obj/item/reagent_containers/condiment/frostoil, + /obj/item/reagent_containers/condiment/capsaicin, + /obj/item/reagent_containers/condiment/wasabi, + /obj/item/reagent_containers/condiment/vinegar) cost = 300 containername = "condiment crate" @@ -115,15 +115,15 @@ /datum/supply_packs/organic/party name = "Party Equipment Crate" contains = list(/obj/item/storage/box/drinkingglasses, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/bottle/patron, - /obj/item/reagent_containers/food/drinks/bottle/goldschlager, - /obj/item/reagent_containers/food/drinks/cans/ale, - /obj/item/reagent_containers/food/drinks/cans/ale, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/drinks/cans/beer, + /obj/item/reagent_containers/drinks/shaker, + /obj/item/reagent_containers/drinks/bottle/patron, + /obj/item/reagent_containers/drinks/bottle/goldschlager, + /obj/item/reagent_containers/drinks/cans/ale, + /obj/item/reagent_containers/drinks/cans/ale, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/reagent_containers/drinks/cans/beer, /obj/item/grenade/confetti, /obj/item/grenade/confetti) cost = 250 diff --git a/code/modules/supply/supply_packs/pack_science.dm b/code/modules/supply/supply_packs/pack_science.dm index d70a663c7bf0..51bc785d0406 100644 --- a/code/modules/supply/supply_packs/pack_science.dm +++ b/code/modules/supply/supply_packs/pack_science.dm @@ -107,7 +107,7 @@ /datum/supply_packs/science/oil name = "Oil Tank Crate" contains = list(/obj/structure/reagent_dispensers/oil, - /obj/item/reagent_containers/food/drinks/oilcan) + /obj/item/reagent_containers/drinks/oilcan) cost = 150 containertype = /obj/structure/largecrate containername = "oil tank crate" diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index 93eeeed91e9e..8a1bed115b7d 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -36,9 +36,7 @@ user.drop_item() tool.forceMove(target) - var/datum/action/item_action/hands_free/activate_pill/P = new - P.button_icon_state = tool.icon_state - P.target = tool + var/datum/action/item_action/hands_free/activate_pill/P = new(tool, tool.icon, tool.icon_state) P.name = "Activate Pill ([tool.name])" P.Grant(target) @@ -48,8 +46,8 @@ /datum/action/item_action/hands_free/activate_pill name = "Activate Pill" -/datum/action/item_action/hands_free/activate_pill/Trigger(left_click) - if(!..()) +/datum/action/item_action/hands_free/activate_pill/Trigger(left_click = TRUE) + if(!..(left_click, FALSE)) return to_chat(owner, "You grit your teeth and burst the implanted [target]!") add_attack_logs(owner, owner, "Swallowed implanted [target]") @@ -59,3 +57,4 @@ Remove(owner) qdel(target) return TRUE + diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 4231ecd31dbc..215ce2db5e24 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -83,6 +83,8 @@ /obj/item/organ/internal/cyberimp/arm/proc/Retract() if(!holder || (holder in src) || check_cuffs()) return + if(status & ORGAN_DEAD) + return owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [parent_organ == "r_arm" ? "right" : "left"] arm.", "[holder] snaps back into your [parent_organ == "r_arm" ? "right" : "left"] arm.", @@ -100,6 +102,8 @@ /obj/item/organ/internal/cyberimp/arm/proc/Extend(obj/item/item) if(!(item in src) || check_cuffs()) return + if(status & ORGAN_DEAD) + return holder = item @@ -139,6 +143,7 @@ "You extend [holder] from your [parent_organ == "r_arm" ? "right" : "left"] arm.", "You hear a short mechanical noise.") playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + return TRUE /obj/item/organ/internal/cyberimp/arm/ui_action_click() if(crit_fail || (!holder && !contents.len)) @@ -284,6 +289,7 @@ desc = "A powerful cybernetic implant that contains combat modules built into the user's arm" contents = newlist(/obj/item/melee/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/flash/armimplant) origin_tech = "materials=5;combat=7;biotech=5;powerstorage=5;syndicate=6;programming=5" + stealth_level = 4 //Only surgery or a body scanner with the highest tier of stock parts can detect this. /obj/item/organ/internal/cyberimp/arm/combat/New() ..() @@ -449,6 +455,152 @@ action_icon = list(/datum/action/item_action/organ_action/toggle = 'icons/obj/janitor.dmi') action_icon_state = list(/datum/action/item_action/organ_action/toggle = "advmop") +// Razorwire implant, long reach whip made of extremely thin wire, ouch! + +/obj/item/melee/razorwire + name = "implanted razorwire" + desc = "A long length of monomolecular filament, built into the back of your hand. \ + Impossibly thin and flawlessly sharp, it should slice through organic materials with no trouble; \ + even from a few steps away. However, results against anything more durable will heavily vary." + icon = 'icons/obj/energy_melee.dmi' + righthand_file = 'icons/mob/inhands/implants_righthand.dmi' + lefthand_file = 'icons/mob/inhands/implants_lefthand.dmi' + icon_state = "razorwire_weapon" + item_state = "razorwire" + w_class = WEIGHT_CLASS_BULKY + sharp = TRUE + force = 18 + armour_penetration_percentage = -100 //This means that armor twice as effective against it + reach = 2 + hitsound = 'sound/weapons/whip.ogg' + attack_verb = list("slashes", "whips", "lashes", "lacerates") + +/obj/item/melee/razorwire/examine_more(mob/user) + . = ..() + . += "A byproduct of Cybersun Incorporated's mistakes turned concept, the Razorwire Spool is a remarkable accident in itself. \ + It consists of a fine, thread-like laser capable of being manipulated and swung like a whip. Designed for ease of deployment, the wire originates from the wrist, \ + allowing users with the implant to perform wide swings and precise cuts against soft targets. It's the same energy found in other common energy weapons, such as swords and daggers." + . += "Cybersun's investment into energy weapon development inadvertently led to the Razorwire Spool. Initially attempting to create an Energy Sword, \ + they ended up with a material that, while superheated and correctly composed, failed to maintain a solid blade shape. Curious about this error, \ + Cybersun repeated the process, producing an energy as thin as a wire. After several prototypes, they achieved a long, energy-like thread. \ + Further innovation allowed them to conceal this in a forearm-sized container, \ + with a hand and wrist replacement made of the same durable material used to contain energy weapons. They would call it, the Razorwire." + . += "Favored by assassins for their stealth and efficiency, Cybersun exercises discretion in its distribution, favoring clients in their good graces. \ + It falls behind other energy weapons due to its thinner and more loose pressure, however it is praised more as a side-arm for unarmored soft targets." + +/obj/item/organ/internal/cyberimp/arm/razorwire + name = "razorwire spool implant" + desc = "An integrated spool of razorwire, capable of being used as a weapon when whipped at your foes. \ + Built into the back of your hand, try your best to not get it tangled." + contents = newlist(/obj/item/melee/razorwire) + icon_state = "razorwire" + action_icon = list(/datum/action/item_action/organ_action/toggle = 'icons/obj/surgery.dmi') + action_icon_state = list(/datum/action/item_action/organ_action/toggle = "razorwire") + origin_tech = "combat=5;biotech=5;syndicate=2" + stealth_level = 1 // Hidden from health analyzers + +/obj/item/organ/internal/cyberimp/arm/razorwire/examine_more(mob/user) + . = ..() + for(var/obj/I in contents) + return I.examine_more() + +// Shell launch system, an arm mounted single-shot shotgun that comes out of your arm + +/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher + name = "shell launch system" + desc = "A mounted cannon seated comfortably in a forearm compartment. This humanitarian device is capable of firing essentially any shotgun shell." + icon_state = "shell_cannon_weapon" + righthand_file = 'icons/mob/inhands/implants_righthand.dmi' + lefthand_file = 'icons/mob/inhands/implants_lefthand.dmi' + inhand_x_dimension = 32 + inhand_y_dimension = 32 + item_state = "shell_cannon" + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_LIGHT + force = 10 + mag_type = /obj/item/ammo_box/magazine/internal/shot/shell_cannon + unique_reskin = FALSE + can_sawoff = FALSE + +/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher/proc/missfire(mob/living/carbon/human/H, our_organ) + to_chat(H, "Your [name] misfires!") + process_fire(H, H, 1, zone_override = our_organ) + +/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher/examine_more(mob/user) + . = ..() + . += "A Shellguard Munitions classic, the Shellguard Launch System (SLS) was originally a MODsuit heavy weapons accessory, \ + later being developed into a forearm-mounted tactical shotgun implant. Though its compact design precludes the use of large ammunition like rockets or burning plasma, \ + it excels in firing a variety of smaller shells, both energy and kinetic, thanks to its advanced plasma alloy barrel." + . += "Adapting an accessory intended for a mechanical suit's gauntlet posed significant hurdles, \ + primarily in miniaturizing the barrel and components without sacrificing performance. The limitations initially damaged its perception of the market. \ + However, executives would later pivot their niche to concealed carry and versatile shell ammunition, \ + focusing on deployability and concealment through neural activation. \ + The shift in approach would lead to the SLS being advertised as a powerful and compact holdout weapon, easily concealable and reliably lethal." + . += "Despite its initial issues, the SLS today holds a strong following in the implant market, being highly sought after among assassins, \ + mercenaries, and firearm enthusiasts. Its appeal lies not just in its stealth but also in its compatibility with Shellguard's range of modular products, \ + and the potential beyond its advertised capabilities." + +/obj/item/ammo_box/magazine/internal/shot/shell_cannon + name = "shell launch system internal magazine" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + max_ammo = 1 + multiload = FALSE + +/obj/item/organ/internal/cyberimp/arm/shell_launcher + name = "shell launch system implant" + desc = "A mounted, single-shot housing for a shell launch cannon; capable of firing twelve-gauge shotgun shells." + contents = newlist(/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher) + icon_state = "shell_cannon" + action_icon = list(/datum/action/item_action/organ_action/toggle = 'icons/obj/surgery.dmi') + action_icon_state = list(/datum/action/item_action/organ_action/toggle = "shell_cannon") + +/obj/item/organ/internal/cyberimp/arm/shell_launcher/emp_act(severity) + if(!owner) + return + if(emp_proof) + return + Retract() + for(var/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher/SL in contents) + if(SL.chambered) + if(!SL.chambered.BB)//found a spent ammo + return + + if(istype(SL.chambered, /obj/item/ammo_casing/shotgun/ion)) + emp_proof = TRUE //This kills the server without it. Do not remove this. + SL.missfire(owner, parent_organ) + emp_proof = FALSE + to_chat(owner, "The misfired [SL.chambered] causes your [name] to break!") + necrotize() + return + if(istype(SL.chambered, /obj/item/ammo_casing/shotgun/frag12)) + SL.missfire(owner, parent_organ) + var/obj/item/organ/external/probable_organ = owner.get_limb_by_name(parent_organ) + if(probable_organ) //In case it gets popped off by the damage + probable_organ.droplimb(FALSE, DROPLIMB_BLUNT) + return + if(istype(SL.chambered, /obj/item/ammo_casing/shotgun/pulseslug)) + SL.missfire(owner, parent_organ) + var/obj/item/organ/external/probable_organ = owner.get_limb_by_name(parent_organ) + if(probable_organ) //In case it gets popped off by the damage + probable_organ.droplimb(FALSE, DROPLIMB_BURN) + return + SL.chambered.BB.damage *= 2 //Stronger since it is inside you + SL.missfire(owner, parent_organ) + +/obj/item/organ/internal/cyberimp/arm/shell_launcher/examine_more(mob/user) + . = ..() + . += "A Shellguard Munitions classic, the Shellguard Launch System (SLS) was originally a MODsuit heavy weapons accessory, \ + later being developed into a forearm-mounted tactical shotgun implant. Though its compact design precludes the use of large ammunition like rockets or burning plasma, \ + it excels in firing a variety of smaller shells, both energy and kinetic, thanks to its advanced plasma alloy barrel." + . += "Adapting an accessory intended for a mechanical suit's gauntlet posed significant hurdles, \ + primarily in miniaturizing the barrel and components without sacrificing performance. The limitations initially damaged its perception of the market. \ + However, executives would later pivot their niche to concealed carry and versatile shell ammunition, \ + focusing on deployability and concealment through neural activation. \ + The shift in approach would lead to the SLS being advertised as a powerful and compact holdout weapon, easily concealable and reliably lethal." + . += "Despite its initial issues, the SLS today holds a strong following in the implant market, being highly sought after among assassins, \ + mercenaries, and firearm enthusiasts. Its appeal lies not just in its stealth but also in its compatibility with Shellguard's range of modular products, \ + and the potential beyond its advertised capabilities." + /obj/item/organ/internal/cyberimp/arm/v1_arm name = "vortex feedback arm implant" desc = "An implant, that when deployed surrounds the users arm in armor and circuitry, allowing them to redirect nearby projectiles with feedback from the vortex anomaly core." @@ -571,7 +723,7 @@ /obj/item/v1_arm_shell name = "vortex feedback arm implant frame" - desc = "An implant awaiting installation of a vortex anomaly core" + desc = "An implant awaiting installation of a vortex anomaly core." icon_state = "v1_arm" /obj/item/v1_arm_shell/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 5d7fb4d2bb57..d1d53dbb77a7 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -1,6 +1,6 @@ /obj/item/organ/internal/cyberimp/eyes name = "cybernetic eyes" - desc = "artificial photoreceptors with specialized functionality" + desc = "artificial photoreceptors with specialized functionality." icon_state = "eye_implant" implant_overlay = "eye_implant_overlay" slot = "eye_sight" diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index c5fa8032c335..54a1b0203168 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -1,6 +1,6 @@ /obj/item/organ/internal/cyberimp name = "cybernetic implant" - desc = "a state-of-the-art implant that improves a baseline's functionality" + desc = "a state-of-the-art implant that improves a baseline's functionality." status = ORGAN_ROBOT var/implant_color = "#FFFFFF" var/implant_overlay @@ -21,7 +21,7 @@ /obj/item/organ/internal/cyberimp/brain name = "cybernetic brain implant" - desc = "injectors of extra sub-routines for the brain" + desc = "injectors of extra sub-routines for the brain." icon_state = "brain_implant" implant_overlay = "brain_implant_overlay" parent_organ = "head" @@ -132,27 +132,44 @@ implant_color = "#FFFF00" slot = "brain_antistun" origin_tech = "materials=5;programming=4;biotech=5" - var/last_stamina_damage = 0 - var/max_stamina_increment = 40 + /// How much we multiply the owners stamina regen block modifier by. + var/stamina_crit_time_multiplier = 0.4 + /// Are we currently modifying somoeones stamina regen block modifier? If so, we will want to undo it on removal. + var/currently_modifying_stamina = FALSE + COOLDOWN_DECLARE(implant_cooldown) -/obj/item/organ/internal/cyberimp/brain/anti_stam/on_life() +/obj/item/organ/internal/cyberimp/brain/anti_stam/insert(mob/living/carbon/M, special = FALSE) ..() - if(crit_fail) + RegisterSignal(M, COMSIG_CARBON_ENTER_STAMINACRIT, PROC_REF(on_enter)) + RegisterSignal(M, COMSIG_CARBON_EXIT_STAMINACRIT, PROC_REF(on_exit)) + RegisterSignal(M, COMSIG_CARBON_STAMINA_REGENERATED, PROC_REF(on_regen)) + +/obj/item/organ/internal/cyberimp/brain/anti_stam/remove(mob/living/carbon/M, special = FALSE) + UnregisterSignal(M, list(COMSIG_CARBON_ENTER_STAMINACRIT, COMSIG_CARBON_EXIT_STAMINACRIT, COMSIG_CARBON_STAMINA_REGENERATED)) + on_exit() + return ..() + +/obj/item/organ/internal/cyberimp/brain/anti_stam/proc/on_enter() + SIGNAL_HANDLER // COMSIG_CARBON_ENTER_STAMINACRIT + if(currently_modifying_stamina || !COOLDOWN_FINISHED(src, implant_cooldown)) return - if(last_stamina_damage + max_stamina_increment < owner.getStaminaLoss()) - owner.setStaminaLoss(last_stamina_damage + max_stamina_increment) - last_stamina_damage = owner.getStaminaLoss() + owner.stamina_regen_block_modifier *= stamina_crit_time_multiplier + currently_modifying_stamina = TRUE +/obj/item/organ/internal/cyberimp/brain/anti_stam/proc/on_exit() + SIGNAL_HANDLER // COMSIG_CARBON_EXIT_STAMINACRIT + if(!currently_modifying_stamina) + return + owner.stamina_regen_block_modifier /= stamina_crit_time_multiplier + currently_modifying_stamina = FALSE + +/obj/item/organ/internal/cyberimp/brain/anti_stam/proc/on_regen() + SIGNAL_HANDLER // COMSIG_CARBON_STAMINA_REGENERATED + owner.update_stamina() //This is here so they actually get unstaminacrit when it triggers, vs 2-4 seconds later /obj/item/organ/internal/cyberimp/brain/anti_stam/emp_act(severity) ..() - if(crit_fail || emp_proof) - return - crit_fail = TRUE - addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity) - -/obj/item/organ/internal/cyberimp/brain/anti_stam/proc/reboot() - crit_fail = FALSE + COOLDOWN_START(src, implant_cooldown, 1 MINUTES / severity) /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened name = "Hardened CNS Rebooter implant" @@ -172,7 +189,7 @@ ..() if(crit_fail) return - if(owner.stat == UNCONSCIOUS && cooldown == FALSE) + if(owner.stat == UNCONSCIOUS && !cooldown) owner.AdjustSleeping(-200 SECONDS) owner.AdjustParalysis(-200 SECONDS) to_chat(owner, "You feel a rush of energy course through your body!") @@ -204,7 +221,7 @@ /obj/item/organ/internal/cyberimp/brain/anti_sleep/hardened/compatible name = "Hardened Neural Jumpstarter implant" - desc = "A military-grade version of the standard implant, for NT's more elite forces. This one is compatible with the CNS Rebooter implant" + desc = "A military-grade version of the standard implant, for NT's more elite forces. This one is compatible with the CNS Rebooter implant." slot = "brain_antisleep" emp_proof = TRUE @@ -286,6 +303,128 @@ origin_tech = "materials=6;programming=6;biotech=6" emp_proof = TRUE +/obj/item/organ/internal/cyberimp/brain/hackerman_deck + name = "\improper Binyat wireless hacking system" + desc = "A rare-to-find neural chip that allows its user to interface with nearby machinery from a distance \ + and affect it in (usually) beneficial ways. Due to the wireless connection, fine manipulation \ + isn't possible, however the deck will drop a payload into the target's systems that will attempt \ + hacking for you." + icon_state = "hackerman" + implant_overlay = null + implant_color = null + slot = "brain_antistun" + w_class = WEIGHT_CLASS_SMALL + origin_tech = "materials=4;combat=6;biotech=6;powerstorage=2;syndicate=3" + stealth_level = 4 //Only surgery or a body scanner with the highest tier of stock parts can detect this. + +/obj/item/organ/internal/cyberimp/brain/hackerman_deck/examine_more(mob/user) + . = ..() + . += "Considered Cybersun Incorporated's most recent and developed implant system focused on hacking from a range while being undetectable from normal means. \ + The Binyat Wireless Hacking System (BWHS) is a stealth-built implant that gives its user a rudimentary electronic interface on whatever can be perceived. \ + It uses a micro jammer to hide its existence from even the most advanced scanning systems." + . += "Originally designed as a hand-held device for long-range testing of Cybersun's electronic security systems, \ + the easy integration of the components into a neural implant led to a revaluation of the device's potential. \ + Development would commence to create the first sets of prototypes, focusing on tricking scanners with no false positives, \ + and being able to hack from afar. The System does have a major flaw, however, as Cybersun R&D was never able to miniaturize its cooling systems to a practical level. \ + Repeated use will lead to skin irritation, internal burns, and even severe nerve damage in extreme cases." + . += "As of modern times, the BWHS is heavily vetted under Cybersun Inc. due to its dangerous nature and rather difficult detection. \ + However, this hasn't stopped the flow of these implants from reaching the black market, whether by inside or outside influences." + +/obj/item/organ/internal/cyberimp/brain/hackerman_deck/insert(mob/living/carbon/M, special = 0) + . = ..() + add_spell() + RegisterSignal(M, COMSIG_BODY_TRANSFER_TO, PROC_REF(on_body_transfer)) + +/obj/item/organ/internal/cyberimp/brain/hackerman_deck/remove(mob/living/carbon/M, special = 0) + . = ..() + if(M.mind) + M.mind.RemoveSpell(/obj/effect/proc_holder/spell/hackerman_deck) + UnregisterSignal(M, COMSIG_BODY_TRANSFER_TO) + +/obj/item/organ/internal/cyberimp/brain/hackerman_deck/proc/on_body_transfer() + SIGNAL_HANDLER + for(var/datum/action/A in owner.actions) + if(A.name == "Activate Ranged Hacking") //Bit snowflake, but the action doesn't remove right otherwise + A.Remove(owner) + addtimer(CALLBACK(src, PROC_REF(add_spell)), 1 SECONDS) //Give the mind a moment to settle in + add_spell() + +/obj/item/organ/internal/cyberimp/brain/hackerman_deck/proc/add_spell() + if(owner.mind) + owner.mind.RemoveSpell(/obj/effect/proc_holder/spell/hackerman_deck) //Just to be sure. + owner.mind.AddSpell(new /obj/effect/proc_holder/spell/hackerman_deck(null)) + +/obj/item/organ/internal/cyberimp/brain/hackerman_deck/emp_act(severity) + owner.adjustStaminaLoss(40 / severity) + owner.adjust_bodytemperature(400 / severity) + to_chat(owner, "Your [name] heats up drastically!") + return TRUE + +/obj/effect/proc_holder/spell/hackerman_deck + name = "Activate Ranged Hacking" + desc = "Click on any machine to hack them. Has a short range of only three tiles." + base_cooldown = 10 SECONDS + clothes_req = FALSE + invocation = "none" + invocation_type = "none" + selection_activated_message = "You warm up your Binyat deck, there's an idle buzzing at the back of your mind as it awaits a target." + selection_deactivated_message = "Your hacking deck makes an almost disappointed sounding buzz at the back of your mind as it powers down." + action_icon_state = "hackerman" + action_background_icon_state = "bg_pulsedemon" + /// How many times have we successfully hacked in the last minute? Increases burn damage by 3 for each value above 0. + var/recent_hacking = 0 + +/obj/effect/proc_holder/spell/hackerman_deck/create_new_targeting() + var/datum/spell_targeting/clicked_atom/C = new() + C.range = 3 + C.try_auto_target = FALSE + return C + +/obj/effect/proc_holder/spell/hackerman_deck/on_mind_transfer(mob/living/L) + if(!ishuman(L)) + return FALSE + var/mob/living/carbon/human/H = L + var/obj/item/organ/internal/cyberimp/brain/hackerman_deck/our_deck = H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/hackerman_deck) + if(!our_deck) + return FALSE + return TRUE + +/obj/effect/proc_holder/spell/hackerman_deck/cast(list/targets, mob/user) + var/atom/target = targets[1] + if(get_dist(user, target) > 3) //fucking cameras holy shit + to_chat(user, "Your implant is not robust enough to hack at that distance!") + cooldown_handler.start_recharge(cooldown_handler.recharge_duration * 0.3) + return + if(istype(user.loc, /obj/machinery/atmospherics)) //Come now, no emaging all the doors on station from a pipe + to_chat(user, "Your implant is unable to get a lock on anything in the pipes!") + return + + var/beam = user.Beam(target, icon_state = "sm_arc_supercharged", time = 3 SECONDS) + + user.visible_message("[user] makes an unusual buzzing sound as the air between them and [target] crackles.", \ + "The air between you and [target] begins to crackle audibly as the Binyat gets to work and heats up in your head!") + + if(!do_after(user, 3 SECONDS, target)) + qdel(beam) + cooldown_handler.start_recharge(cooldown_handler.recharge_duration * 0.3) + return + + if(!target.emag_act(user)) + to_chat(user, "You are unable to hack this!") + cooldown_handler.start_recharge(cooldown_handler.recharge_duration * 0.3) + return + + target.add_hiddenprint(user) + + playsound(target, 'sound/machines/terminal_processing.ogg', 15, TRUE) + + var/mob/living/carbon/human/human_owner = user + human_owner.adjustFireLoss(5 + (recent_hacking * 3)) + recent_hacking++ + addtimer(CALLBACK(src, PROC_REF(lower_recent_hacking)), 1 MINUTES) + +/obj/effect/proc_holder/spell/hackerman_deck/proc/lower_recent_hacking() + recent_hacking-- //[[[[MOUTH]]]] /obj/item/organ/internal/cyberimp/mouth @@ -309,7 +448,7 @@ //[[[[CHEST]]]] /obj/item/organ/internal/cyberimp/chest name = "cybernetic torso implant" - desc = "implants for the organs in your torso" + desc = "implants for the organs in your torso." icon_state = "chest_implant" implant_overlay = "chest_implant_overlay" parent_organ = "chest" diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index e676ed727f57..f64f973273bd 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -93,6 +93,34 @@ uses = 1 starting_organ = /obj/item/organ/internal/eyes/cybernetic/meson +/obj/item/autosurgeon/organ/syndicate/razorwire + desc = "A single use autosurgeon that contains a Razorwire arm implant. A screwdriver can be used to remove it, but implants can't be placed back in." + uses = 1 + starting_organ = /obj/item/organ/internal/cyberimp/arm/razorwire + +/obj/item/autosurgeon/organ/syndicate/razorwire/examine_more(mob/user) + . = ..() + if(storedorgan) + return storedorgan.examine_more() + +/obj/item/autosurgeon/organ/syndicate/hackerman_deck + desc = "A single use autosurgeon that contains a Binyat wireless hacking system. A screwdriver can be used to remove it, but implants can't be placed back in." + uses = 1 + starting_organ = /obj/item/organ/internal/cyberimp/brain/hackerman_deck + +/obj/item/autosurgeon/organ/syndicate/hackerman_deck/examine_more(mob/user) + . = ..() + . += "Considered Cybersun Incorporated's most recent and developed implant system focused on hacking from a range while being undetectable from normal means. \ + The Binyat Wireless Hacking System (BWHS) is a stealth-built implant that gives its user a rudimentary electronic interface on whatever can be perceived. \ + It uses a micro jammer to hide its existence from even the most advanced scanning systems." + . += "Originally designed as a hand-held device for long-range testing of Cybersun's electronic security systems, \ + the easy integration of the components into a neural implant led to a revaluation of the device's potential. \ + Development would commence to create the first sets of prototypes, focusing on tricking scanners with no false positives, \ + and being able to hack from afar. The System does have a major flaw, however, as Cybersun R&D was never able to miniaturize its cooling systems to a practical level. \ + Repeated use will lead to skin irritation, internal burns, and even severe nerve damage in extreme cases." + . += "As of modern times, the BWHS is heavily vetted under Cybersun Inc. due to its dangerous nature and rather difficult detection. \ + However, this hasn't stopped the flow of these implants from reaching the black market, whether by inside or outside influences." + /obj/item/autosurgeon/organ/syndicate/thermal_eyes starting_organ = /obj/item/organ/internal/eyes/cybernetic/thermals/hardened diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm index 3e55578c4a4c..762fc793df64 100644 --- a/code/modules/surgery/organs/brain.dm +++ b/code/modules/surgery/organs/brain.dm @@ -38,16 +38,20 @@ if(isnull(dna)) // someone didn't set this right... stack_trace("[src] at [loc] did not contain a dna datum at time of removal.") dna = H.dna.Clone() - name = "\the [dna.real_name]'s [initial(src.name)]" + if(dna.real_name) + name = "\the [dna.real_name]'s [initial(name)]" + brainmob.name = dna.real_name + brainmob.real_name = dna.real_name + else + name = "\the [H.real_name]'s [initial(name)]" + brainmob.name = H.real_name + brainmob.real_name = H.real_name brainmob.dna = dna.Clone() // Silly baycode, what you do -// brainmob.dna = H.dna.Clone() Putting in and taking out a brain doesn't make it a carbon copy of the original brain of the body you put it in - brainmob.name = dna.real_name - brainmob.real_name = dna.real_name brainmob.timeofhostdeath = H.timeofdeath if(H.mind) H.mind.transfer_to(brainmob) - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a [initial(src.name)].") + to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a [initial(name)].") /obj/item/organ/internal/brain/examine(mob/user) // -- TLE . = ..() @@ -59,7 +63,7 @@ for(var/mob/dead/observer/G in GLOB.player_list) if(G.mind == brainmob.mind) foundghost = TRUE - if(G.can_reenter_corpse == FALSE) + if(!G.can_reenter_corpse) foundghost = FALSE break if(foundghost) @@ -73,6 +77,9 @@ name = "[dna.real_name]'s [initial(name)]" if(!owner) return ..() // Probably a redundant removal; just bail + + if(is_species(owner, /datum/species/monkey)) + name = "[owner.name]'s [initial(name)]" var/obj/item/organ/internal/brain/B = src if(!special) @@ -126,7 +133,7 @@ owner.setBrainLoss(120) /obj/item/organ/internal/brain/on_life() - if(decoy_brain || damage < 10) + if(decoy_brain || damage < 10) return switch(damage) if(10 to 30) @@ -187,13 +194,14 @@ /obj/item/organ/internal/brain/prepare_eat() return // Too important to eat. +// Hello I am from the ministry of rubber forehead aliens how are you /obj/item/organ/internal/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." icon = 'icons/mob/slimes.dmi' icon_state = "green slime extract" mmi_icon_state = "slime_mmi" -// parent_organ = "chest" Hello I am from the ministry of rubber forehead aliens how are you + organ_datums = list(/datum/organ/heart, /datum/organ/lungs) /obj/item/organ/internal/brain/golem name = "Runic mind" diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index aec0dcb6c1e1..700232bf3fe4 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -213,7 +213,7 @@ /obj/item/organ/internal/eyes/cybernetic/eyesofgod //no occuline allowed name = "\improper Eyes of the Gods" - desc = "Two eyes said to belong to the gods. But such vision comes at a price" + desc = "Two eyes said to belong to the gods. But such vision comes at a price." icon_state = "eyesofgod" eye_color = "#58a5ec" see_in_dark = 8 diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index f20903ee0252..208e0f878124 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -5,74 +5,35 @@ parent_organ = "chest" slot = "heart" origin_tech = "biotech=5" - var/beating = TRUE dead_icon = "heart-off" - var/icon_base = "heart" + base_icon_state = "heart" + organ_datums = list(/datum/organ/heart) /obj/item/organ/internal/heart/update_icon_state() - if(beating) - icon_state = "[icon_base]-on" + var/datum/organ/heart/heart = organ_datums["heart"] + if(heart.beating) + icon_state = "[base_icon_state]-on" else - icon_state = "[icon_base]-off" - -/obj/item/organ/internal/heart/remove(mob/living/carbon/M, special = 0) - . = ..() - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.stat == DEAD) - Stop() - return - - if(!special) - addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 120) - -/obj/item/organ/internal/heart/emp_act(intensity) - if(!is_robotic() || emp_proof) - return - Stop() - -/obj/item/organ/internal/heart/necrotize() - ..() - Stop() + icon_state = "[base_icon_state]-off" /obj/item/organ/internal/heart/attack_self(mob/user) ..() if(status & ORGAN_DEAD) to_chat(user, "You can't restart a dead heart.") return - if(!beating) - Restart() - addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 80) + var/datum/organ/heart/heart = organ_datums["heart"] + heart.try_restart(8 SECONDS) /obj/item/organ/internal/heart/safe_replace(mob/living/carbon/human/target) - Restart() + var/datum/organ/heart/heart = organ_datums["heart"] + heart.change_beating(TRUE) ..() -/obj/item/organ/internal/heart/proc/stop_if_unowned() - if(!owner) - Stop() - -/obj/item/organ/internal/heart/proc/Stop() - beating = FALSE - update_icon(UPDATE_ICON_STATE) - return TRUE - -/obj/item/organ/internal/heart/proc/Restart() - beating = TRUE - update_icon(UPDATE_ICON_STATE) - return TRUE - -/obj/item/organ/internal/heart/prepare_eat() - var/obj/S = ..() - if(S) - S.icon_state = dead_icon - return S - /obj/item/organ/internal/heart/cursed name = "cursed heart" desc = "it needs to be pumped..." icon_state = "cursedheart-off" - icon_base = "cursedheart" + base_icon_state = "cursedheart" origin_tech = "biotech=6" actions_types = list(/datum/action/item_action/organ_action/cursed_heart) var/last_pump = 0 @@ -123,6 +84,8 @@ to_chat(owner, "Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!") RegisterSignal(owner, COMSIG_LIVING_PRE_DEFIB, PROC_REF(just_before_revive)) RegisterSignal(owner, COMSIG_LIVING_DEFIBBED, PROC_REF(on_defib_revive)) + in_grace_period = TRUE + addtimer(VARSET_CALLBACK(src, in_grace_period, FALSE), revival_grace_period) /obj/item/organ/internal/heart/cursed/remove(mob/living/carbon/M, special) if(owner?.client?.prefs.colourblind_mode == COLOURBLIND_MODE_NONE) @@ -211,11 +174,19 @@ H.adjustFireLoss(-cursed_heart.heal_burn) H.adjustOxyLoss(-cursed_heart.heal_oxy) +/datum/action/item_action/organ_action/cursed_heart/Grant(mob/M) + ..() + INVOKE_ASYNC(src, PROC_REF(poll_keybinds)) + +/datum/action/item_action/organ_action/cursed_heart/proc/poll_keybinds() + if(alert(owner, "You've been given a cursed heart! Do you want to bind its action to a keybind?", "Cursed Heart", "Yes", "No") == "Yes") + button.set_to_keybind(owner) + /obj/item/organ/internal/heart/cybernetic name = "cybernetic heart" desc = "An electronic device designed to mimic the functions of an organic human heart. Offers no benefit over an organic heart other than being easy to make." icon_state = "heart-c-on" - icon_base = "heart-c" + base_icon_state = "heart-c" dead_icon = "heart-c-off" status = ORGAN_ROBOT @@ -223,7 +194,7 @@ name = "upgraded cybernetic heart" desc = "A more advanced version of a cybernetic heart. Grants the user additional stamina and heart stability, but the electronics are vulnerable to shock." icon_state = "heart-c-u-on" - icon_base = "heart-c-u" + base_icon_state = "heart-c-u" dead_icon = "heart-c-u-off" var/attempted_restart = FALSE @@ -242,27 +213,42 @@ if(!ishuman(owner)) return - if(!(status & ORGAN_DEAD) && !attempted_restart && !beating) + if(status & ORGAN_DEAD) + return + + var/boost = emagged ? 2 : 1 + owner.AdjustParalysis(-2 SECONDS * boost) + owner.AdjustStunned(-2 SECONDS * boost) + owner.AdjustWeakened(-2 SECONDS * boost) + owner.AdjustKnockDown(-2 SECONDS * boost) + owner.adjustStaminaLoss(-10 * boost) + + if(attempted_restart) + return + + var/datum/organ/heart/heart_datum = organ_datums["heart"] + + if(!heart_datum.beating) to_chat(owner, "Your [name] detects a cardiac event and attempts to return to its normal rhythm!") if(prob(20) && emagged) attempted_restart = TRUE - Restart() - addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] returns to its normal rhythm!"), 30) - addtimer(CALLBACK(src, PROC_REF(recharge)), 200) + heart_datum.change_beating(TRUE) // Mötley Crüe - Kickstart My Heart + addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] returns to its normal rhythm!"), 3 SECONDS) + addtimer(CALLBACK(src, PROC_REF(recharge)), 20 SECONDS) else if(prob(10)) attempted_restart = TRUE - Restart() - addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] returns to its normal rhythm!"), 30) - addtimer(CALLBACK(src, PROC_REF(recharge)), 300) + heart_datum.change_beating(TRUE) + addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] returns to its normal rhythm!"), 3 SECONDS) + addtimer(CALLBACK(src, PROC_REF(recharge)), 30 SECONDS) else attempted_restart = TRUE if(emagged) - addtimer(CALLBACK(src, PROC_REF(recharge)), 200) + addtimer(CALLBACK(src, PROC_REF(recharge)), 20 SECONDS) else - addtimer(CALLBACK(src, PROC_REF(recharge)), 300) - addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] fails to return to its normal rhythm!"), 30) + addtimer(CALLBACK(src, PROC_REF(recharge)), 30 SECONDS) + addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] fails to return to its normal rhythm!"), 3 SECONDS) - if(!(status & ORGAN_DEAD) && !attempted_restart && owner.HasDisease(new /datum/disease/critical/heart_failure(0))) + if(owner.HasDisease(/datum/disease/critical/heart_failure)) to_chat(owner, "Your [name] detects a cardiac event and attempts to return to its normal rhythm!") if(prob(40) && emagged) attempted_restart = TRUE @@ -284,14 +270,6 @@ addtimer(CALLBACK(src, PROC_REF(recharge)), 300) addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] fails to return to its normal rhythm!"), 30) - if(!(status & ORGAN_DEAD)) - var/boost = emagged ? 2 : 1 - owner.AdjustParalysis(-2 SECONDS * boost) - owner.AdjustStunned(-2 SECONDS * boost) - owner.AdjustWeakened(-2 SECONDS * boost) - owner.AdjustKnockDown(-2 SECONDS * boost) - owner.adjustStaminaLoss(-10 * boost) - /obj/item/organ/internal/heart/cybernetic/upgraded/proc/message_to_owner(mob/M, message) to_chat(M, message) @@ -305,6 +283,7 @@ if(!emagged) to_chat(user, "You disable the safeties on [src]") emagged = TRUE + return TRUE else to_chat(user, "You re-enable the safeties on [src]") emagged = FALSE @@ -333,7 +312,8 @@ owner.ForceContractDisease(new /datum/disease/critical/heart_failure(0)) if(prob(numMid)) to_chat(owner, "Your [name] stops beating!") - Stop() + var/datum/organ/heart/heart_datum = organ_datums["heart"] + heart_datum.change_beating(FALSE) // Rambunctious Crew - Stop My Fucking Heart if(prob(numLow)) to_chat(owner, "Your [name] shuts down!") necrotize() diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 858c448ad82b..4aed3d4d5c31 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -7,306 +7,7 @@ gender = PLURAL w_class = WEIGHT_CLASS_NORMAL - //Breath damage - - var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa - var/safe_oxygen_max = 0 - var/safe_nitro_min = 0 - var/safe_nitro_max = 0 - var/safe_co2_min = 0 - var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? - var/safe_toxins_min = 0 - var/safe_toxins_max = 0.05 - var/SA_para_min = 1 //Sleeping agent - var/SA_sleep_min = 5 //Sleeping agent - - - var/oxy_breath_dam_min = MIN_TOXIC_GAS_DAMAGE - var/oxy_breath_dam_max = MAX_TOXIC_GAS_DAMAGE - var/oxy_damage_type = OXY - var/nitro_breath_dam_min = MIN_TOXIC_GAS_DAMAGE - var/nitro_breath_dam_max = MAX_TOXIC_GAS_DAMAGE - var/nitro_damage_type = OXY - var/co2_breath_dam_min = MIN_TOXIC_GAS_DAMAGE - var/co2_breath_dam_max = MAX_TOXIC_GAS_DAMAGE - var/co2_damage_type = OXY - var/tox_breath_dam_min = MIN_TOXIC_GAS_DAMAGE - var/tox_breath_dam_max = MAX_TOXIC_GAS_DAMAGE - var/tox_damage_type = TOX - - var/cold_message = "your face freezing and an icicle forming" - var/cold_level_1_threshold = 260 - var/cold_level_2_threshold = 200 - var/cold_level_3_threshold = 120 - var/cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. - var/cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 - var/cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 - var/cold_damage_types = list(BURN = 1) - - var/hot_message = "your face burning and a searing heat" - var/heat_level_1_threshold = 360 - var/heat_level_2_threshold = 400 - var/heat_level_3_threshold = 1000 - var/heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1 - var/heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 - var/heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 - var/heat_damage_types = list(BURN = 1) - -/obj/item/organ/internal/lungs/emp_act() - if(!is_robotic() || emp_proof) - return - if(owner) - owner.LoseBreath(40 SECONDS) - -/obj/item/organ/internal/lungs/insert(mob/living/carbon/M, special = 0, dont_remove_slot = 0) - ..() - for(var/thing in list("oxy", "tox", "co2", "nitro")) - M.clear_alert("not_enough_[thing]") - M.clear_alert("too_much_[thing]") - -/obj/item/organ/internal/lungs/remove(mob/living/carbon/M, special = 0) - for(var/thing in list("oxy", "tox", "co2", "nitro")) - M.clear_alert("not_enough_[thing]") - M.clear_alert("too_much_[thing]") - return ..() - -/obj/item/organ/internal/lungs/on_life() - if(germ_level > INFECTION_LEVEL_ONE) - if(prob(5)) - owner.emote("cough") //respitory tract infection - - if(is_bruised()) - if(prob(2) && !(NO_BLOOD in owner.dna.species.species_traits)) - owner.custom_emote(EMOTE_VISIBLE, "coughs up blood!") - owner.bleed(1) - if(prob(4)) - owner.custom_emote(EMOTE_VISIBLE, "gasps for air!") - owner.AdjustLoseBreath(10 SECONDS) - -/obj/item/organ/internal/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) - if((H.status_flags & GODMODE)) - return - - if(HAS_TRAIT(H, TRAIT_NOBREATH)) - return - - if(!breath || (breath.total_moles() == 0)) - if(isspaceturf(H.loc)) - H.adjustOxyLoss(10) - else - H.adjustOxyLoss(5) - - if(safe_oxygen_min) - H.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - else if(safe_toxins_min) - H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) - else if(safe_co2_min) - H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) - else if(safe_nitro_min) - H.throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) - return FALSE - - - if(H.health < HEALTH_THRESHOLD_CRIT) - return FALSE - - var/gas_breathed = 0 - - //Partial pressures in our breath - var/O2_pp = breath.get_breath_partial_pressure(breath.oxygen) - var/N2_pp = breath.get_breath_partial_pressure(breath.nitrogen) - var/Toxins_pp = breath.get_breath_partial_pressure(breath.toxins) - var/CO2_pp = breath.get_breath_partial_pressure(breath.carbon_dioxide) - var/SA_pp = breath.get_breath_partial_pressure(breath.sleeping_agent) - - - //-- OXY --// - - //Too much oxygen! //Yes, some species may not like it. - if(safe_oxygen_max) - if(O2_pp > safe_oxygen_max) - var/ratio = (breath.oxygen / safe_oxygen_max / safe_oxygen_max) * 10 - H.apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) - H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) - else - H.clear_alert("too_much_oxy") - - //Too little oxygen! - if(safe_oxygen_min) - if(O2_pp < safe_oxygen_min) - gas_breathed = handle_too_little_breath(H, O2_pp, safe_oxygen_min, breath.oxygen) - H.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - else - H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) - gas_breathed = breath.oxygen - H.clear_alert("not_enough_oxy") - - //Exhale - breath.oxygen -= gas_breathed - breath.carbon_dioxide += gas_breathed - gas_breathed = 0 - - //-- Nitrogen --// - - //Too much nitrogen! - if(safe_nitro_max) - if(N2_pp > safe_nitro_max) - var/ratio = (breath.nitrogen / safe_nitro_max) * 10 - H.apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) - H.throw_alert("too_much_nitro", /obj/screen/alert/too_much_nitro) - else - H.clear_alert("too_much_nitro") - - //Too little nitrogen! - if(safe_nitro_min) - if(N2_pp < safe_nitro_min) - gas_breathed = handle_too_little_breath(H, N2_pp, safe_nitro_min, breath.nitrogen) - H.throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) - else - H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) - gas_breathed = breath.nitrogen - H.clear_alert("not_enough_nitro") - - //Exhale - breath.nitrogen -= gas_breathed - breath.carbon_dioxide += gas_breathed - gas_breathed = 0 - - //-- CO2 --// - - //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. - if(safe_co2_max) - if(CO2_pp > safe_co2_max) - if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. - H.co2overloadtime = world.time - else if(world.time - H.co2overloadtime > 120) - H.Paralyse(6 SECONDS) - H.apply_damage_type(HUMAN_MAX_OXYLOSS, co2_damage_type) // Lets hurt em a little, let them know we mean business - if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! - H.apply_damage_type(15, co2_damage_type) - H.throw_alert("too_much_co2", /obj/screen/alert/too_much_co2) - if(prob(20)) // Lets give them some chance to know somethings not right though I guess. - H.emote("cough") - - else - H.co2overloadtime = 0 - H.clear_alert("too_much_co2") - - //Too little CO2! - if(safe_co2_min) - if(CO2_pp < safe_co2_min) - gas_breathed = handle_too_little_breath(H, CO2_pp, safe_co2_min, breath.carbon_dioxide) - H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) - else - H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) - gas_breathed = breath.carbon_dioxide - H.clear_alert("not_enough_co2") - - //Exhale - breath.carbon_dioxide -= gas_breathed - breath.oxygen += gas_breathed - gas_breathed = 0 - - - //-- TOX --// - - //Too much toxins! - if(safe_toxins_max) - if(Toxins_pp > safe_toxins_max) - var/ratio = (breath.toxins / safe_toxins_max) * 10 - H.apply_damage_type(clamp(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) - H.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) - else - H.clear_alert("too_much_tox") - - - //Too little toxins! - if(safe_toxins_min) - if(Toxins_pp < safe_toxins_min) - gas_breathed = handle_too_little_breath(H, Toxins_pp, safe_toxins_min, breath.toxins) - H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) - else - H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) - gas_breathed = breath.toxins - H.clear_alert("not_enough_tox") - - //Exhale - breath.toxins -= gas_breathed - breath.carbon_dioxide += gas_breathed - gas_breathed = 0 - - - //-- TRACES --// - - if(breath.sleeping_agent) // If there's some other shit in the air lets deal with it here. - if(SA_pp > SA_para_min) - H.Paralyse(6 SECONDS) // 6 seconds gives them one second to wake up and run away a bit! - if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.AdjustSleeping(16 SECONDS, bound_lower = 0, bound_upper = 20 SECONDS) - else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning - if(prob(20)) - H.emote(pick("giggle", "laugh")) - - handle_breath_temperature(breath, H) - - return TRUE - - -/obj/item/organ/internal/lungs/proc/handle_too_little_breath(mob/living/carbon/human/H = null, breath_pp = 0, safe_breath_min = 0, true_pp = 0) - . = 0 - if(!H || !safe_breath_min) //the other args are either: Ok being 0 or Specifically handled. - return FALSE - - if(prob(20)) - H.emote("gasp") - if(breath_pp > 0) - var/ratio = safe_breath_min/breath_pp - H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all! - . = true_pp*ratio/6 - else - H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) - - -/obj/item/organ/internal/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/H) // called by human/life, handles temperatures - var/breath_temperature = breath.temperature - - if(!HAS_TRAIT(H, TRAIT_RESISTCOLD)) // COLD DAMAGE - var/CM = abs(H.dna.species.coldmod) - var/TC = 0 - if(breath_temperature < cold_level_3_threshold) - TC = cold_level_3_damage - if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold) - TC = cold_level_2_damage - if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) - TC = cold_level_1_damage - if(TC) - for(var/D in cold_damage_types) - H.apply_damage_type(TC * CM * cold_damage_types[D], D) - if(breath_temperature < cold_level_1_threshold) - if(prob(20)) - to_chat(H, "You feel [cold_message] in your [name]!") - - if(!HAS_TRAIT(H, TRAIT_RESISTHEAT)) // HEAT DAMAGE - var/HM = abs(H.dna.species.heatmod) - var/TH = 0 - if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) - TH = heat_level_1_damage - if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold) - TH = heat_level_2_damage - if(breath_temperature > heat_level_3_threshold) - TH = heat_level_3_damage - if(TH) - for(var/D in heat_damage_types) - H.apply_damage_type(TH * HM * heat_damage_types[D], D) - if(breath_temperature > heat_level_1_threshold) - if(prob(20)) - to_chat(H, "You feel [hot_message] in your [name]!") - -/obj/item/organ/internal/lungs/prepare_eat() - var/obj/S = ..() - if(S) - S.reagents.add_reagent("salbutamol", 5) - return S + organ_datums = list(/datum/organ/lungs) /obj/item/organ/internal/lungs/plasmaman name = "plasma filter" @@ -314,9 +15,7 @@ icon = 'icons/obj/species_organs/plasmaman.dmi' icon_state = "lungs" - safe_oxygen_min = 0 //We don't breath this - safe_toxins_min = 16 //We breathe THIS! - safe_toxins_max = 0 + organ_datums = list(/datum/organ/lungs/plasmamen) /obj/item/organ/internal/lungs/vox name = "vox lungs" @@ -325,20 +24,12 @@ icon_state = "lungs" sterile = TRUE - safe_oxygen_min = 0 //We don't breathe this - safe_oxygen_max = 0.05 //This is toxic to us - safe_nitro_min = 16 //We breathe THIS! - oxy_damage_type = TOX //And it poisons us + organ_datums = list(/datum/organ/lungs/vox) /obj/item/organ/internal/lungs/drask icon = 'icons/obj/species_organs/drask.dmi' - cold_message = "an invigorating coldness" - cold_level_3_threshold = 60 - cold_level_1_damage = -COLD_GAS_DAMAGE_LEVEL_1 //They heal when the air is cold - cold_level_2_damage = -COLD_GAS_DAMAGE_LEVEL_2 - cold_level_3_damage = -COLD_GAS_DAMAGE_LEVEL_3 - cold_damage_types = list(BRUTE = 0.5, BURN = 0.25) + organ_datums = list(/datum/organ/lungs/drask) /obj/item/organ/internal/lungs/cybernetic name = "cybernetic lungs" @@ -346,7 +37,7 @@ icon_state = "lungs-c" origin_tech = "biotech=4" status = ORGAN_ROBOT - var/species_state = "human" + var/species_state = "default" /obj/item/organ/internal/lungs/cybernetic/examine(mob/user) . = ..() @@ -356,28 +47,20 @@ . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - switch(species_state) - if("human") // from human to vox - safe_oxygen_min = 0 - safe_oxygen_max = safe_toxins_max - safe_nitro_min = 16 - oxy_damage_type = TOX - to_chat(user, "You configure [src] to replace vox lungs.") - species_state = "vox" - if("vox") // from vox to plasmamen - safe_oxygen_max = initial(safe_oxygen_max) - safe_toxins_min = 16 - safe_toxins_max = 0 - safe_nitro_min = initial(safe_nitro_min) - oxy_damage_type = OXY - to_chat(user, "You configure [src] to replace plasmamen lungs.") - species_state = "plasmamen" - if("plasmamen") // from plasmamen to human - safe_oxygen_min = initial(safe_oxygen_min) - safe_toxins_min = initial(safe_toxins_min) - safe_toxins_max = initial(safe_toxins_max) - to_chat(user, "You configure [src] back to default settings.") - species_state = "human" + + var/possible = list("default" = /datum/organ/lungs, "vox" = /datum/organ/lungs/vox, "plasmamen" = /datum/organ/lungs/plasmamen) + var/chosen = input(user, "Select lung type", "What kind of lung settings?") as null|anything in possible + if(isnull(chosen) || chosen == species_state || !Adjacent(user) || !I.use_tool(src, user, 0, volume = I.tool_volume)) + return + species_state = chosen + to_chat(user, "You configure [src] to [chosen] settings.") + + var/typepath = possible[chosen] + var/datum/organ/lungs/lungs = new typepath(src) + qdel(organ_datums[lungs.organ_tag]) + organ_datums[lungs.organ_tag] = lungs + if(owner) // this should never happen, but in case it somehow does... + owner.internal_organ_datums[lungs.organ_tag] = lungs /obj/item/organ/internal/lungs/cybernetic/upgraded name = "upgraded cybernetic lungs" @@ -385,9 +68,9 @@ icon_state = "lungs-c-u" origin_tech = "biotech=5" - safe_toxins_max = 20 - safe_co2_max = 20 + organ_datums = list(/datum/organ/lungs/advanced_cyber) - cold_level_1_threshold = 200 - cold_level_2_threshold = 140 - cold_level_3_threshold = 100 +/obj/item/organ/internal/lungs/cybernetic/upgraded/multitool_act(mob/user, obj/item/I) + . = ..() + var/datum/organ/lungs/lungs = organ_datums["lungs"] + lungs.make_advanced() diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 2b000ee96042..80cc843d18cc 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -40,6 +40,8 @@ var/last_pain_message /// When can we get the next pain message? var/next_pain_time + /// What level of upgrades are needed to detect this. Level 0 is default. 1 is hidden from health analysers. 2 is hidden from cyborg analysers, and the body scanner at level 1. 4 is the highest level the body scanner can reach. + var/stealth_level = 0 /obj/item/organ/Destroy() STOP_PROCESSING(SSobj, src) @@ -217,6 +219,7 @@ if(tough) return damage = clamp(damage + amount, 0, max_damage) + damage = round_health(damage) //only show this if the organ is not robotic if(owner && parent_organ && amount > 0) diff --git a/code/modules/surgery/organs/organ_datums/heart_datum.dm b/code/modules/surgery/organs/organ_datums/heart_datum.dm new file mode 100644 index 000000000000..1c18c21bed53 --- /dev/null +++ b/code/modules/surgery/organs/organ_datums/heart_datum.dm @@ -0,0 +1,47 @@ +/datum/organ/heart + organ_tag = ORGAN_DATUM_HEART + var/beating = TRUE + var/always_beating = FALSE + +/datum/organ/heart/on_remove(mob/living/carbon/removed_from, special = FALSE) + . = ..() + if(ishuman(removed_from)) + var/mob/living/carbon/human/H = removed_from + if(H.stat == DEAD) + change_beating(FALSE) + return + + if(!special) + addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 12 SECONDS) + +/datum/organ/heart/proc/change_beating(change_to = FALSE) + if(always_beating) + beating = TRUE + return + beating = change_to + linked_organ.update_icon() + +/datum/organ/heart/on_successful_emp() + change_beating(FALSE) + return TRUE + +/datum/organ/heart/on_necrotize() + change_beating(FALSE) + return TRUE + +/datum/organ/heart/proc/try_restart(duration = 8 SECONDS) + if(beating) + return + change_beating(TRUE) + addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), duration) + +/datum/organ/heart/proc/stop_if_unowned() + if(!linked_organ.owner) + change_beating(FALSE) + +/datum/organ/heart/on_prepare_eat(obj/item/food/snacks/organ/snorgan) + snorgan.icon_state = linked_organ.dead_icon + +/// A subtype that is always beating. Abductor glands and demon hearts use this. +/datum/organ/heart/always_beating + always_beating = TRUE diff --git a/code/modules/surgery/organs/organ_datums/lung_datum.dm b/code/modules/surgery/organs/organ_datums/lung_datum.dm new file mode 100644 index 000000000000..c939bbab6511 --- /dev/null +++ b/code/modules/surgery/organs/organ_datums/lung_datum.dm @@ -0,0 +1,345 @@ +/datum/organ/lungs + organ_tag = ORGAN_DATUM_LUNGS + + //Breath damage + + var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa + var/safe_oxygen_max = 0 + var/safe_nitro_min = 0 + var/safe_nitro_max = 0 + var/safe_co2_min = 0 + var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? + var/safe_toxins_min = 0 + var/safe_toxins_max = 0.05 + var/SA_para_min = 1 //Sleeping agent + var/SA_sleep_min = 5 //Sleeping agent + + + var/oxy_breath_dam_min = MIN_TOXIC_GAS_DAMAGE + var/oxy_breath_dam_max = MAX_TOXIC_GAS_DAMAGE + var/oxy_damage_type = OXY + var/nitro_breath_dam_min = MIN_TOXIC_GAS_DAMAGE + var/nitro_breath_dam_max = MAX_TOXIC_GAS_DAMAGE + var/nitro_damage_type = OXY + var/co2_breath_dam_min = MIN_TOXIC_GAS_DAMAGE + var/co2_breath_dam_max = MAX_TOXIC_GAS_DAMAGE + var/co2_damage_type = OXY + var/tox_breath_dam_min = MIN_TOXIC_GAS_DAMAGE + var/tox_breath_dam_max = MAX_TOXIC_GAS_DAMAGE + var/tox_damage_type = TOX + + var/cold_message = "your face freezing and an icicle forming" + var/cold_level_1_threshold = 260 + var/cold_level_2_threshold = 200 + var/cold_level_3_threshold = 120 + var/cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. + var/cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 + var/cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 + var/cold_damage_types = list(BURN = 1) + + var/hot_message = "your face burning and a searing heat" + var/heat_level_1_threshold = 360 + var/heat_level_2_threshold = 400 + var/heat_level_3_threshold = 1000 + var/heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1 + var/heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 + var/heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 + var/heat_damage_types = list(BURN = 1) + + +/** + * LUNG ATMOS CODE, VENTURE FURTHER IF YOU DARE!!! + */ + +/datum/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) + if(H.status_flags & GODMODE) + return + + if(HAS_TRAIT(H, TRAIT_NOBREATH)) + return + + if(!breath || (breath.total_moles() == 0)) + if(isspaceturf(H.loc)) + H.adjustOxyLoss(10) + else + H.adjustOxyLoss(5) + + if(safe_oxygen_min) + H.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) + else if(safe_toxins_min) + H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) + else if(safe_co2_min) + H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) + else if(safe_nitro_min) + H.throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) + return FALSE + + + if(H.health < HEALTH_THRESHOLD_CRIT) + return FALSE + + var/gas_breathed = 0 + + //Partial pressures in our breath + var/O2_pp = breath.get_breath_partial_pressure(breath.oxygen) + var/N2_pp = breath.get_breath_partial_pressure(breath.nitrogen) + var/Toxins_pp = breath.get_breath_partial_pressure(breath.toxins) + var/CO2_pp = breath.get_breath_partial_pressure(breath.carbon_dioxide) + var/SA_pp = breath.get_breath_partial_pressure(breath.sleeping_agent) + + + //-- OXY --// + + //Too much oxygen! //Yes, some species may not like it. + if(safe_oxygen_max) + if(O2_pp > safe_oxygen_max) + var/ratio = (breath.oxygen / safe_oxygen_max / safe_oxygen_max) * 10 + H.apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) + H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) + else + H.clear_alert("too_much_oxy") + + //Too little oxygen! + if(safe_oxygen_min) + if(O2_pp < safe_oxygen_min) + gas_breathed = handle_too_little_breath(H, O2_pp, safe_oxygen_min, breath.oxygen) + H.throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) + else + H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) + gas_breathed = breath.oxygen + H.clear_alert("not_enough_oxy") + + //Exhale + breath.oxygen -= gas_breathed + breath.carbon_dioxide += gas_breathed + gas_breathed = 0 + + //-- Nitrogen --// + + //Too much nitrogen! + if(safe_nitro_max) + if(N2_pp > safe_nitro_max) + var/ratio = (breath.nitrogen / safe_nitro_max) * 10 + H.apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) + H.throw_alert("too_much_nitro", /obj/screen/alert/too_much_nitro) + else + H.clear_alert("too_much_nitro") + + //Too little nitrogen! + if(safe_nitro_min) + if(N2_pp < safe_nitro_min) + gas_breathed = handle_too_little_breath(H, N2_pp, safe_nitro_min, breath.nitrogen) + H.throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) + else + H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) + gas_breathed = breath.nitrogen + H.clear_alert("not_enough_nitro") + + //Exhale + breath.nitrogen -= gas_breathed + breath.carbon_dioxide += gas_breathed + gas_breathed = 0 + + //-- CO2 --// + + //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. + if(safe_co2_max) + if(CO2_pp > safe_co2_max) + if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. + H.co2overloadtime = world.time + else if(world.time - H.co2overloadtime > 120) + H.Paralyse(6 SECONDS) + H.apply_damage_type(HUMAN_MAX_OXYLOSS, co2_damage_type) // Lets hurt em a little, let them know we mean business + if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! + H.apply_damage_type(15, co2_damage_type) + H.throw_alert("too_much_co2", /obj/screen/alert/too_much_co2) + if(prob(20)) // Lets give them some chance to know somethings not right though I guess. + H.emote("cough") + + else + H.co2overloadtime = 0 + H.clear_alert("too_much_co2") + + //Too little CO2! + if(safe_co2_min) + if(CO2_pp < safe_co2_min) + gas_breathed = handle_too_little_breath(H, CO2_pp, safe_co2_min, breath.carbon_dioxide) + H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) + else + H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) + gas_breathed = breath.carbon_dioxide + H.clear_alert("not_enough_co2") + + //Exhale + breath.carbon_dioxide -= gas_breathed + breath.oxygen += gas_breathed + gas_breathed = 0 + + + //-- TOX --// + + //Too much toxins! + if(safe_toxins_max) + if(Toxins_pp > safe_toxins_max) + var/ratio = (breath.toxins / safe_toxins_max) * 10 + H.apply_damage_type(clamp(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) + H.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) + else + H.clear_alert("too_much_tox") + + + //Too little toxins! + if(safe_toxins_min) + if(Toxins_pp < safe_toxins_min) + gas_breathed = handle_too_little_breath(H, Toxins_pp, safe_toxins_min, breath.toxins) + H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) + else + H.adjustOxyLoss(-HUMAN_MAX_OXYLOSS) + gas_breathed = breath.toxins + H.clear_alert("not_enough_tox") + + //Exhale + breath.toxins -= gas_breathed + breath.carbon_dioxide += gas_breathed + gas_breathed = 0 + + + //-- TRACES --// + + if(breath.sleeping_agent) // If there's some other shit in the air lets deal with it here. + if(SA_pp > SA_para_min) + H.Paralyse(6 SECONDS) // 6 seconds gives them one second to wake up and run away a bit! + if(SA_pp > SA_sleep_min) // Enough to make us sleep as well + H.AdjustSleeping(16 SECONDS, bound_lower = 0, bound_upper = 20 SECONDS) + else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning + if(prob(20)) + H.emote(pick("giggle", "laugh")) + + handle_breath_temperature(breath, H) + + return TRUE + + +/datum/organ/lungs/proc/handle_too_little_breath(mob/living/carbon/human/H = null, breath_pp = 0, safe_breath_min = 0, true_pp = 0) + . = 0 + if(!H || !safe_breath_min) //the other args are either: Ok being 0 or Specifically handled. + return FALSE + + if(prob(20)) + H.emote("gasp") + if(breath_pp > 0) + var/ratio = safe_breath_min/breath_pp + H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all! + . = true_pp*ratio/6 + else + H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) + + +/datum/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/H) // called by human/life, handles temperatures + var/breath_temperature = breath.temperature + + if(!HAS_TRAIT(H, TRAIT_RESISTCOLD)) // COLD DAMAGE + var/CM = abs(H.dna.species.coldmod) + var/TC = 0 + if(breath_temperature < cold_level_3_threshold) + TC = cold_level_3_damage + if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold) + TC = cold_level_2_damage + if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) + TC = cold_level_1_damage + if(TC) + for(var/D in cold_damage_types) + H.apply_damage_type(TC * CM * cold_damage_types[D], D) + if(breath_temperature < cold_level_1_threshold) + if(prob(20)) + to_chat(H, "You feel [cold_message] in your [linked_organ.name]!") + + if(!HAS_TRAIT(H, TRAIT_RESISTHEAT)) // HEAT DAMAGE + var/HM = abs(H.dna.species.heatmod) + var/TH = 0 + if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) + TH = heat_level_1_damage + if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold) + TH = heat_level_2_damage + if(breath_temperature > heat_level_3_threshold) + TH = heat_level_3_damage + if(TH) + for(var/D in heat_damage_types) + H.apply_damage_type(TH * HM * heat_damage_types[D], D) + if(breath_temperature > heat_level_1_threshold) + if(prob(20)) + to_chat(H, "You feel [hot_message] in your [linked_organ.name]!") + + +/** + * Lung atmos code ends here. Thank god... + */ + +/datum/organ/lungs/on_successful_emp() + linked_organ.owner?.LoseBreath(40 SECONDS) + +/datum/organ/lungs/on_insert(mob/living/carbon/given_to) + clear_alerts(given_to) + +/datum/organ/lungs/on_replace(mob/living/carbon/human/organ_owner) + clear_alerts(organ_owner) + +/datum/organ/lungs/on_remove(mob/living/carbon/removed_from, special = FALSE) + clear_alerts(removed_from) + +/datum/organ/lungs/proc/clear_alerts(mob/living/carbon/alert_owner) + for(var/thing in list("oxy", "tox", "co2", "nitro")) + alert_owner.clear_alert("not_enough_[thing]") + alert_owner.clear_alert("too_much_[thing]") + +/datum/organ/lungs/on_life() + if(linked_organ.germ_level > INFECTION_LEVEL_ONE) + if(prob(5)) + linked_organ.owner.emote("cough") //respitory tract infection + + if(linked_organ.is_bruised()) + if(prob(2) && !(NO_BLOOD in linked_organ.owner.dna.species.species_traits)) + linked_organ.owner.custom_emote(EMOTE_VISIBLE, "coughs up blood!") + linked_organ.owner.bleed(1) + if(prob(4)) + linked_organ.owner.custom_emote(EMOTE_VISIBLE, "gasps for air!") + linked_organ.owner.AdjustLoseBreath(10 SECONDS) + + +/datum/organ/lungs/on_prepare_eat(obj/item/food/snacks/organ/snorgan) + snorgan.reagents.add_reagent("salbutamol", 5) + + +/datum/organ/lungs/vox + safe_oxygen_min = 0 //We don't breathe this + safe_oxygen_max = 0.05 //This is toxic to us + safe_nitro_min = 16 //We breathe THIS! + oxy_damage_type = TOX //And it poisons us + +/datum/organ/lungs/plasmamen + safe_oxygen_min = 0 //We don't breath this + safe_toxins_min = 16 //We breathe THIS! + safe_toxins_max = 0 + +/datum/organ/lungs/drask + cold_message = "an invigorating coldness" + cold_level_3_threshold = 60 + cold_level_1_damage = -COLD_GAS_DAMAGE_LEVEL_1 //They heal when the air is cold + cold_level_2_damage = -COLD_GAS_DAMAGE_LEVEL_2 + cold_level_3_damage = -COLD_GAS_DAMAGE_LEVEL_3 + cold_damage_types = list(BRUTE = 0.5, BURN = 0.25) + +/datum/organ/lungs/ashwalker + safe_oxygen_min = 4 // 4x as efficient as regular Unathi, can comfortably breathe on lavaland + +/datum/organ/lungs/advanced_cyber/New(obj/item/organ/internal/link_em) + . = ..() + make_advanced() + +/datum/organ/lungs/proc/make_advanced() + safe_toxins_max = 20 + safe_co2_max = 20 + + cold_level_1_threshold = 200 + cold_level_2_threshold = 140 + cold_level_3_threshold = 100 diff --git a/code/modules/surgery/organs/organ_datums/organ_datum.dm b/code/modules/surgery/organs/organ_datums/organ_datum.dm new file mode 100644 index 000000000000..7872b984af11 --- /dev/null +++ b/code/modules/surgery/organs/organ_datums/organ_datum.dm @@ -0,0 +1,36 @@ +/datum/organ + var/organ_tag // heart, brain, lungs, etc + var/obj/item/organ/internal/linked_organ + +/datum/organ/New(obj/item/organ/internal/link_em) + ..() + linked_organ = link_em + +/datum/organ/Destroy(force, ...) + linked_organ = null + return ..() + +/// Called when the linked organ is inserted. +/datum/organ/proc/on_insert(mob/living/carbon/human/given_to) + return + +/// Called when another organ is removed, and this organ datum takes its place in the organ_owner. +/datum/organ/proc/on_replace(mob/living/carbon/human/organ_owner) + return + +/// Called when the linked organ is removed. +/datum/organ/proc/on_remove(mob/living/carbon/removed_from, special = FALSE) + return + +/datum/organ/proc/on_life() + return + +/// Only called when the organ is robotic AND is not emp proof. Return true to override default functions +/datum/organ/proc/on_successful_emp() + return FALSE + +/datum/organ/proc/on_necrotize() + return FALSE + +/datum/organ/proc/on_prepare_eat(obj/item/food/snacks/organ/snorgan) + return FALSE diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 682dd5469202..4468194ed880 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -220,7 +220,9 @@ ****************************************************/ /obj/item/organ/external/receive_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list(), ignore_resists = FALSE, updating_health = TRUE) - var/max_limb_damage = max_damage - (HAS_TRAIT(owner, TRAIT_IPC_JOINTS_MAG) ? max_damage * 0.25 : 0) + var/max_limb_damage = max_damage + if(owner) + max_limb_damage -= (HAS_TRAIT(owner, TRAIT_IPC_JOINTS_MAG) ? max_damage * 0.25 : 0) if(tough && !ignore_resists) brute = max(0, brute - 5) burn = max(0, burn - 4) @@ -321,6 +323,8 @@ if(owner_old) owner_old.updatehealth("limb receive damage") + brute_dam = round_health(brute_dam) + burn_dam = round_health(burn_dam) return update_state() #undef LIMB_SHARP_THRESH_INT_DMG @@ -341,6 +345,8 @@ if(updating_health) owner.updatehealth("limb heal damage") + brute_dam = round_health(brute_dam) + burn_dam = round_health(burn_dam) return update_state() /obj/item/organ/external/emp_act(severity) @@ -357,11 +363,11 @@ else if(emp_resistant) // IPC limbs switch(severity) if(1) - // 5.28 (9 * 0.66 burn_mod) burn damage, 65.34 damage with 11 limbs. - receive_damage(0, 9) + // 5.9 burn damage, 64.9 damage with 11 limbs. + receive_damage(0, 5.9) if(2) - // 3.63 (5 * 0.66 burn_mod) burn damage, 39.93 damage with 11 limbs. - receive_damage(0, 5.5) + // 3.63 burn damage, 39.93 damage with 11 limbs. + receive_damage(0, 3.63) else // Basic prosthetic limbs switch(severity) if(1) @@ -650,8 +656,6 @@ Note that amputating the affected organ does in fact remove the infection from t if(disembowel("groin")) return TRUE - - /obj/item/organ/external/attackby(obj/item/I, mob/user, params) if(I.sharp) add_fingerprint(user) diff --git a/code/modules/surgery/organs/organ_helpers.dm b/code/modules/surgery/organs/organ_helpers.dm index a7fec193dcdc..13c68ed9c4e7 100644 --- a/code/modules/surgery/organs/organ_helpers.dm +++ b/code/modules/surgery/organs/organ_helpers.dm @@ -16,6 +16,10 @@ /mob/living/carbon/get_int_organ(typepath) return (locate(typepath) in internal_organs) +/mob/living/carbon/proc/get_int_organ_datum(tag_to_check) + RETURN_TYPE(/datum/organ) + return internal_organ_datums[tag_to_check] + /mob/living/carbon/get_organs_zone(zone, subzones = 0) var/list/returnorg = list() @@ -103,4 +107,9 @@ .++ if(affecting.body_part == LEG_LEFT) .++ - +///Returns true if all the mob's vital organs are functional, otherwise returns false +/mob/living/carbon/human/proc/check_vital_organs() + for(var/obj/item/organ/internal/organ in internal_organs) + if(organ.vital && (organ.damage >= organ.max_damage)) + return FALSE + return TRUE diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 3cb1233bfeae..2087f6208e45 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -7,12 +7,33 @@ // DO NOT add slots with matching names to different zones - it will break internal_organs_slot list! var/non_primary = 0 var/unremovable = FALSE //Whether it shows up as an option to remove during surgery. + /// An associated list of organ datums that this organ has. + var/list/datum/organ/organ_datums /obj/item/organ/internal/New(mob/living/carbon/holder) ..() if(istype(holder)) insert(holder) +/obj/item/organ/internal/Initialize(mapload) + . = ..() + if(!organ_datums) + return + var/list/temp_list = organ_datums.Copy() + organ_datums = list() + for(var/path in temp_list) + var/datum/organ/organ_datum = new path(src) + if(!organ_datum.organ_tag) + stack_trace("There was an organ datum [organ_datum] ([organ_datum.type]), that had no organ tag.") + continue + organ_datums[organ_datum.organ_tag] = organ_datum + +/obj/item/organ/internal/Destroy() + if(owner) // we have to remove BEFORE organ_datums are qdel'd, or we can just live even if our heart organ got deleted + remove(owner, TRUE) + QDEL_LIST_ASSOC_VAL(organ_datums) // The removal from internal_organ_datums should be handled when the organ is removed + . = ..() + /obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0, dont_remove_slot = 0) if(!iscarbon(M) || owner == M) return @@ -28,6 +49,12 @@ M.internal_organs |= src M.internal_organs_slot[slot] = src + + for(var/organ_tag in organ_datums) + var/datum/organ/new_organ = organ_datums[organ_tag] + M.internal_organ_datums[new_organ.organ_tag] = new_organ + new_organ.on_insert(M) + var/obj/item/organ/external/parent if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -56,6 +83,23 @@ M.internal_organs -= src if(M.internal_organs_slot[slot] == src) M.internal_organs_slot.Remove(slot) + + + for(var/removal_tag in organ_datums) + if(M.internal_organ_datums[removal_tag] == organ_datums[removal_tag]) + M.internal_organ_datums -= removal_tag + var/datum/organ/removed = organ_datums[removal_tag] + removed.on_remove(M) + + // Lets see if we have any backup organ datums from other internal organs. + for(var/obj/item/organ/internal/backup_organ in M.internal_organs) + for(var/replacement_tag in backup_organ.organ_datums) + if(M.internal_organ_datums[replacement_tag]) // some other organ is already covering it + continue + var/datum/organ/replacement_organ = backup_organ.organ_datums[replacement_tag] + M.internal_organ_datums[replacement_organ.organ_tag] = replacement_organ + replacement_organ.on_replace(M) + if(vital && !special) if(M.stat != DEAD)//safety check! M.death() @@ -90,6 +134,12 @@ /obj/item/organ/internal/replaced(mob/living/carbon/human/target) insert(target) +/obj/item/organ/internal/necrotize(update_sprite) + for(var/organ_tag in organ_datums) // let the organ datums handle first + var/datum/organ/dead_organ = organ_datums[organ_tag] + dead_organ.on_necrotize() + return ..() + /obj/item/organ/internal/item_action_slot_check(slot, mob/user) return @@ -106,7 +156,7 @@ /obj/item/organ/internal/proc/prepare_eat() if(is_robotic()) return //no eating cybernetic implants! - var/obj/item/reagent_containers/food/snacks/organ/S = new + var/obj/item/food/snacks/organ/S = new S.name = name S.desc = desc S.icon = icon @@ -114,6 +164,10 @@ S.origin_tech = origin_tech S.w_class = w_class + for(var/organ_tag in organ_datums) + var/datum/organ/delicious = organ_datums[organ_tag] + delicious.on_prepare_eat(S) + return S /obj/item/organ/internal/attempt_become_organ(obj/item/organ/external/parent,mob/living/carbon/human/H) @@ -126,19 +180,19 @@ /obj/item/organ/internal/proc/render() return -/obj/item/reagent_containers/food/snacks/organ +/obj/item/food/snacks/organ name = "appendix" icon_state = "appendix" icon = 'icons/obj/surgery.dmi' -/obj/item/reagent_containers/food/snacks/organ/Initialize(mapload) +/obj/item/food/snacks/organ/Initialize(mapload) . = ..() reagents.add_reagent("nutriment", 5) /obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) if(M == user && ishuman(user)) var/mob/living/carbon/human/H = user - var/obj/item/reagent_containers/food/snacks/S = prepare_eat() + var/obj/item/food/snacks/S = prepare_eat() if(S) H.drop_item() H.put_in_active_hand(S) @@ -160,7 +214,7 @@ if(slot == "heart" && ("[slot]-c-on" in states) && ("[slot]-c-off" in states)) //Give the robotic heart its robotic heart icons if they exist. var/obj/item/organ/internal/heart/H = src H.icon = icon('icons/obj/surgery.dmi') - H.icon_base = "[slot]-c" + H.base_icon_state = "[slot]-c" H.dead_icon = "[slot]-c-off" H.update_icon() else if("[slot]-c" in states) //Give the robotic organ its robotic organ icons if they exist. @@ -318,6 +372,17 @@ /obj/item/organ/internal/emp_act(severity) if(!is_robotic() || emp_proof) return + + var/we_done = FALSE + for(var/organ_tag in organ_datums) + var/datum/organ/borgan = organ_datums[organ_tag] + if(borgan.on_successful_emp()) + we_done = TRUE + + if(we_done) + return + + // No EMP handling was done, lets just give em damage switch(severity) if(1) receive_damage(20, 1) diff --git a/code/modules/surgery/organs/robolimbs.dm b/code/modules/surgery/organs/robolimbs.dm index 8f53727e6971..d8037ad8066d 100644 --- a/code/modules/surgery/organs/robolimbs.dm +++ b/code/modules/surgery/organs/robolimbs.dm @@ -123,7 +123,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) /datum/robolimb/shellguard company = "Shellguard Munitions Standard Series" - desc = "This limb features exposed robust steel and paint to match Shellguards motifs" + desc = "This limb features exposed robust steel and paint to match Shellguards motifs." icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi' has_subtypes = 1 diff --git a/code/modules/surgery/organs/skeleton_organs.dm b/code/modules/surgery/organs/skeleton_organs.dm index 7ccbb2c69f26..b1a6329b013f 100644 --- a/code/modules/surgery/organs/skeleton_organs.dm +++ b/code/modules/surgery/organs/skeleton_organs.dm @@ -36,15 +36,15 @@ /obj/item/skeleton/r_leg name = "skeleton right leg" - desc = "a skeleton right leg" + desc = "a skeleton right leg." icon_state = "r_leg" /obj/item/skeleton/l_foot name = "skeleton left foot" - desc = "a skeleton left foot" + desc = "a skeleton left foot." icon_state = "l_foot" /obj/item/skeleton/l_leg name = "skeleton left leg" - desc = "a skeleton left leg" + desc = "a skeleton left leg." icon_state = "l_leg" diff --git a/code/modules/surgery/organs/subtypes/drask_organs.dm b/code/modules/surgery/organs/subtypes/drask_organs.dm index 201c05b83e30..4d94b9e84d83 100644 --- a/code/modules/surgery/organs/subtypes/drask_organs.dm +++ b/code/modules/surgery/organs/subtypes/drask_organs.dm @@ -25,5 +25,5 @@ /obj/item/organ/internal/eyes/drask name = "drask eyeballs" icon = 'icons/obj/species_organs/drask.dmi' - desc = "Drask eyes. They look even stranger disembodied" + desc = "Drask eyes. They look even stranger disembodied." see_in_dark = 5 diff --git a/code/modules/surgery/organs/subtypes/grey_organs.dm b/code/modules/surgery/organs/subtypes/grey_organs.dm index 3dfe9f77c688..132a79faae0c 100644 --- a/code/modules/surgery/organs/subtypes/grey_organs.dm +++ b/code/modules/surgery/organs/subtypes/grey_organs.dm @@ -1,11 +1,11 @@ /obj/item/organ/internal/liver/grey name = "grey liver" - desc = "A small, odd looking liver" + desc = "A small, odd looking liver." icon = 'icons/obj/species_organs/grey.dmi' alcohol_intensity = 1.6 /obj/item/organ/internal/brain/grey - desc = "A large brain" + desc = "A large brain." icon = 'icons/obj/species_organs/grey.dmi' icon_state = "brain2" mmi_icon = 'icons/obj/species_organs/grey.dmi' @@ -21,7 +21,7 @@ /obj/item/organ/internal/eyes/grey name = "grey eyeballs" - desc = "They still look creepy and emotionless" + desc = "They still look creepy and emotionless." icon = 'icons/obj/species_organs/grey.dmi' see_in_dark = 5 diff --git a/code/modules/surgery/organs/subtypes/skrell_organs.dm b/code/modules/surgery/organs/subtypes/skrell_organs.dm index 09dd526c9b56..de58d05a866f 100644 --- a/code/modules/surgery/organs/subtypes/skrell_organs.dm +++ b/code/modules/surgery/organs/subtypes/skrell_organs.dm @@ -87,7 +87,7 @@ /obj/item/organ/internal/heart/skrell name = "skrell heart" - desc = "A stream lined heart" + desc = "A stream lined heart." icon = 'icons/obj/species_organs/skrell.dmi' /obj/item/organ/internal/brain/skrell diff --git a/code/modules/surgery/organs/subtypes/slime_organs.dm b/code/modules/surgery/organs/subtypes/slime_organs.dm deleted file mode 100644 index d5f1cb8aef50..000000000000 --- a/code/modules/surgery/organs/subtypes/slime_organs.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/organ/internal/heart/slime - icon = 'icons/obj/species_organs/slime.dmi' - name = "slime heart" - icon_state = "heart" - 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_state() - return - -/obj/item/organ/internal/lungs/slime - icon = 'icons/obj/species_organs/slime.dmi' - name = "slime lungs" - icon_state = "lungs" - desc = "This is a slime's gas exchange membrane, this membrane used for oxygen intake and gas exchange. These seem to work similar to lungs." diff --git a/code/modules/surgery/organs/subtypes/standard_organs.dm b/code/modules/surgery/organs/subtypes/standard_organs.dm index 15cf687de62d..7e7d8d2bfe98 100644 --- a/code/modules/surgery/organs/subtypes/standard_organs.dm +++ b/code/modules/surgery/organs/subtypes/standard_organs.dm @@ -23,9 +23,9 @@ return switch(severity) if(1) - owner?.adjustStaminaLoss(20) + owner?.apply_damage(20, STAMINA) if(2) - owner?.adjustStaminaLoss(10) + owner?.apply_damage(10, STAMINA) to_chat(owner, "Your [name] malfunctions, causing fatigue!") /obj/item/organ/external/groin @@ -264,6 +264,8 @@ if(!istype(dna)) dna = owner.dna.Clone() name = "[dna.real_name]'s head" + if(is_species(owner, /datum/species/monkey)) + name = "[owner.name]'s head" if(owner.glasses) owner.unEquip(owner.glasses, force = TRUE) if(owner.head) diff --git a/code/modules/surgery/organs/subtypes/unathi_organs.dm b/code/modules/surgery/organs/subtypes/unathi_organs.dm index f31935f49946..c0887844d784 100644 --- a/code/modules/surgery/organs/subtypes/unathi_organs.dm +++ b/code/modules/surgery/organs/subtypes/unathi_organs.dm @@ -1,7 +1,7 @@ /obj/item/organ/internal/liver/unathi name = "unathi liver" icon = 'icons/obj/species_organs/unathi.dmi' - desc = "A large looking liver" + desc = "A large looking liver." alcohol_intensity = 0.8 /obj/item/organ/internal/eyes/unathi @@ -11,7 +11,7 @@ /obj/item/organ/internal/heart/unathi name = "unathi heart" - desc = "A large looking heart" + desc = "A large looking heart." icon = 'icons/obj/species_organs/unathi.dmi' /obj/item/organ/internal/brain/unathi @@ -30,4 +30,4 @@ icon = 'icons/obj/species_organs/unathi.dmi' /obj/item/organ/internal/lungs/unathi/ash_walker - safe_oxygen_min = 4 // 4x as efficient as regular Unathi, can comfortably breathe on lavaland + organ_datums = list(/datum/organ/lungs/ashwalker) diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index d69ef938b7eb..98960fdd4b55 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -2,20 +2,51 @@ origin_tech = "biotech=5" icon_state = "xgibmid2" var/list/alien_powers = list() + var/list/human_powers = list() tough = TRUE sterile = TRUE + /// Amount of credits that will be received by selling this in the cargo shuttle + var/cargo_profit = 250 + /// Has this organ been hijacked? Can hijack via a hemostat + var/hijacked = FALSE /// This adds and removes alien spells upon addition, if a noncarbon tries to do this well... I blame adminbus /obj/item/organ/internal/alien/insert(mob/living/carbon/M, special = 0) ..() - for(var/powers_to_add in alien_powers) - M.AddSpell(new powers_to_add) + if(!hijacked) + for(var/powers_to_add in alien_powers) + M.AddSpell(new powers_to_add) + else + for(var/powers_to_add in human_powers) + M.AddSpell(new powers_to_add) /obj/item/organ/internal/alien/remove(mob/living/carbon/M, special = 0) - for(var/powers_to_remove in alien_powers) - M.RemoveSpell(new powers_to_remove) + if(!hijacked) + for(var/powers_to_remove in alien_powers) + M.RemoveSpell(new powers_to_remove) + else + for(var/powers_to_add in human_powers) + M.AddSpell(new powers_to_add) . = ..() +/obj/item/organ/internal/alien/examine(mob/user) + . = ..() + . += "Can be sold on the cargo shuttle for [cargo_profit] credits." + if(hijacked) + . += "This organ is hijacked, use a Hemostat on it to revert it to it's original function." + else + . += "You can hijack the latent functions of this organ by using a Hemostat on it." + +/obj/item/organ/internal/alien/attackby(obj/item/hemostat/item, mob/user, params) + if(istype(item)) + if(!hijacked) + to_chat(user, "You slice off the control node of this organ. This organ will now be effective against aliens.") + else + to_chat(user, "You reattach the control node of this organ. This organ will now be effective against those who attack the hive.") + hijacked = !hijacked + return + return ..() + /obj/item/organ/internal/alien/prepare_eat() var/obj/S = ..() S.reagents.add_reagent("sacid", 10) @@ -28,18 +59,18 @@ icon_state = "plasma" w_class = WEIGHT_CLASS_NORMAL origin_tech = "biotech=5;plasmatech=4" - parent_organ = "chest" slot = "plasmavessel" - alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/plant_weeds, /obj/effect/proc_holder/spell/touch/alien_spell/transfer_plasma) + alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/plant_weeds, /obj/effect/proc_holder/spell/alien_spell/transfer_plasma) + human_powers = list(/obj/effect/proc_holder/spell/alien_spell/syphon_plasma) - var/stored_plasma = 0 - var/max_plasma = 500 + var/stored_plasma = 100 + var/max_plasma = 300 var/heal_rate = 5 var/plasma_rate = 10 /obj/item/organ/internal/alien/plasmavessel/prepare_eat() var/obj/S = ..() - S.reagents.add_reagent("plasma", stored_plasma/10) + S.reagents.add_reagent("plasma", stored_plasma / 10) return S /obj/item/organ/internal/alien/plasmavessel/queen @@ -47,14 +78,12 @@ icon_state = "plasma_large" origin_tech = "biotech=6;plasmatech=4" stored_plasma = 200 - max_plasma = 500 plasma_rate = 25 /obj/item/organ/internal/alien/plasmavessel/drone name = "large xeno plasma vessel" icon_state = "plasma_large" stored_plasma = 200 - max_plasma = 500 /obj/item/organ/internal/alien/plasmavessel/sentinel stored_plasma = 100 @@ -63,16 +92,15 @@ /obj/item/organ/internal/alien/plasmavessel/hunter name = "small xeno plasma vessel" icon_state = "plasma_tiny" - stored_plasma = 100 - max_plasma = 150 - alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/plant_weeds) + stored_plasma = 50 + max_plasma = 100 /obj/item/organ/internal/alien/plasmavessel/larva name = "tiny xeno plasma vessel" icon_state = "plasma_tiny" - max_plasma = 100 - alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/plant_weeds) - + stored_plasma = 25 + max_plasma = 50 + cargo_profit = 150 /obj/item/organ/internal/alien/plasmavessel/on_life() //If there are alien weeds on the ground then heal if needed or give some plasma @@ -83,7 +111,7 @@ var/heal_amt = heal_rate if(!isalien(owner)) heal_amt *= 0.2 - owner.add_plasma((plasma_rate*0.5)) + owner.add_plasma((plasma_rate / 2)) owner.adjustBruteLoss(-heal_amt) owner.adjustFireLoss(-heal_amt) owner.adjustOxyLoss(-heal_amt) @@ -97,20 +125,17 @@ . =..() M.update_plasma_display(M) - /obj/item/organ/internal/alien/acidgland name = "xeno acid gland" icon_state = "acid" - parent_organ = "head" slot = "acid" origin_tech = "biotech=5;materials=2;combat=2" alien_powers = list(/obj/effect/proc_holder/spell/touch/alien_spell/corrosive_acid) - + human_powers = list(/obj/effect/proc_holder/spell/touch/alien_spell/burning_touch) /obj/item/organ/internal/alien/hivenode name = "xeno hive node" icon_state = "hivenode" - parent_organ = "head" slot = "hivenode" origin_tech = "biotech=5;magnets=4;bluespace=3" w_class = WEIGHT_CLASS_TINY @@ -133,24 +158,25 @@ /obj/item/organ/internal/alien/neurotoxin name = "xeno neurotoxin gland" icon_state = "neurotox" - parent_organ = "head" slot = "neurotox" origin_tech = "biotech=5;combat=5" alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/neurotoxin) + human_powers = list(/obj/effect/proc_holder/spell/alien_spell/neurotoxin/death_to_xenos) /obj/item/organ/internal/alien/resinspinner - name = "xeno resin organ"//...there tiger.... - parent_organ = "mouth" + name = "xeno resin organ" icon_state = "liver-x" slot = "spinner" origin_tech = "biotech=5;materials=4" alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/build_resin) + human_powers = list(/obj/effect/proc_holder/spell/touch/alien_spell/consume_resin) /obj/item/organ/internal/alien/eggsac name = "xeno egg sac" icon_state = "eggsac" - parent_organ = "groin" slot = "eggsac" w_class = WEIGHT_CLASS_BULKY origin_tech = "biotech=6" alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/plant_weeds/eggs) + human_powers = list(/obj/effect/proc_holder/spell/alien_spell/combust_facehuggers) + cargo_profit = 1000 diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index a809ec7ed82b..f07d89797b99 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -67,7 +67,7 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby")) /datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger(left_click) if(!IsAvailable()) return - var/message = input(owner, "Resonate a message to all nearby golems.", "Resonate") + var/message = tgui_input_text(owner, "Resonate a message to all nearby golems.", "Resonate") if(QDELETED(src) || QDELETED(owner) || !message) return owner.say(".~[message]") @@ -123,7 +123,7 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby")) if(world.time < cords.next_command) to_chat(owner, "You must wait [(cords.next_command - world.time)/10] seconds before Speaking again.") return - var/command = input(owner, "Speak with the Voice of God", "Command") + var/command = tgui_input_text(owner, "Speak with the Voice of God", "Command") if(!command) return owner.say(".~[command]") @@ -491,7 +491,7 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby")) log_game("[key_name(owner)] has said '[log_message]' with a Voice of God, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") /obj/item/organ/internal/vocal_cords/colossus/wizard - desc = "They carry the voice of an ancient god. This one is enchanted to implant it into yourself when used in hand" + desc = "They carry the voice of an ancient god. This one is enchanted to implant it into yourself when used in hand." /obj/item/organ/internal/vocal_cords/colossus/wizard/attack_self(mob/living/user) user.drop_item() diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index a0e8fc686dc8..f2055557441d 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -377,11 +377,11 @@ name = "implant an organ" allowed_tools = list( /obj/item/organ/internal = 100, - /obj/item/reagent_containers/food/snacks/organ = 0 // there for the flavor text + /obj/item/food/snacks/organ = 0 // there for the flavor text ) /datum/surgery_step/internal/manipulate_organs/implant/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(istype(tool, /obj/item/reagent_containers/food/snacks/organ)) + if(istype(tool, /obj/item/food/snacks/organ)) to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") return SURGERY_BEGINSTEP_SKIP @@ -469,8 +469,8 @@ /obj/item/reagent_containers/dropper = 100, /obj/item/reagent_containers/syringe = 100, /obj/item/reagent_containers/glass/bottle = 90, - /obj/item/reagent_containers/food/drinks/drinkingglass = 85, - /obj/item/reagent_containers/food/drinks/bottle = 80, + /obj/item/reagent_containers/drinks/drinkingglass = 85, + /obj/item/reagent_containers/drinks/bottle = 80, /obj/item/reagent_containers/glass/beaker = 75, /obj/item/reagent_containers/spray = 60, /obj/item/reagent_containers/glass/bucket = 50 diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index e3fdcf4667e3..ecf8f7d3424c 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -220,8 +220,8 @@ allowed_tools = list( /obj/item/reagent_containers/dropper = 100, /obj/item/reagent_containers/glass/bottle = 90, - /obj/item/reagent_containers/food/drinks/drinkingglass = 85, - /obj/item/reagent_containers/food/drinks/bottle = 80, + /obj/item/reagent_containers/drinks/drinkingglass = 85, + /obj/item/reagent_containers/drinks/bottle = 80, /obj/item/reagent_containers/glass/beaker = 75, /obj/item/reagent_containers/spray = 60, /obj/item/reagent_containers/glass/bucket = 50 diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index f1eb83d8f2ac..17971bb633e3 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -693,7 +693,7 @@ /datum/surgery_step/robotics/edit_serial/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - var/new_name = copytext(reject_bad_text(input(user, "Choose a name for this machine.", "Set Name", "[target.real_name]") as null|text), 1, MAX_NAME_LEN) + var/new_name = reject_bad_text(tgui_input_text(user, "Choose a name for this machine.", "Set Name", "[target.real_name]", MAX_NAME_LEN, 1)) if(!new_name) to_chat(user, "Invalid name! Please try again.") return SURGERY_STEP_INCOMPLETE diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index b17b20d3e215..ccdebf321031 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_EMPTY(GPS_list) addtimer(CALLBACK(src, PROC_REF(reboot)), EMP_DISABLE_TIME) /obj/item/gps/AltClick(mob/user) - if(ui_status(user, GLOB.inventory_state) != STATUS_INTERACTIVE) + if(ui_status(user, GLOB.inventory_state) != UI_INTERACTIVE) return //user not valid to use gps if(emped) to_chat(user, "It's busted!") @@ -120,10 +120,13 @@ GLOBAL_LIST_EMPTY(GPS_list) /obj/item/gps/attack_self(mob/user) ui_interact(user) -/obj/item/gps/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/gps/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/gps/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GPS", "GPS", 450, 700) + ui = new(user, src, "GPS", "GPS") ui.open() /obj/item/gps/ui_act(action, list/params) diff --git a/code/modules/telesci/rcs.dm b/code/modules/telesci/rcs.dm index 25825bb8d013..bf2b0c9e7bd7 100644 --- a/code/modules/telesci/rcs.dm +++ b/code/modules/telesci/rcs.dm @@ -102,7 +102,7 @@ emagged = TRUE do_sparks(3, TRUE, src) to_chat(user, "Warning: Safeties disabled.") - return + return TRUE /obj/item/rcs/proc/try_send_container(mob/user, obj/structure/closet/C) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index a312399914ae..bf70e0ee7635 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -76,6 +76,7 @@ if(!emagged) to_chat(user, "You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!") emagged = TRUE + return TRUE else to_chat(user, "The machine seems unaffected by the card swipe...") diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 94fec60a4eb5..a1c03c154a43 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -1,7 +1,8 @@ /** - * tgui external + * External tgui definitions, such as src_object APIs. * - * Contains all external tgui declarations. + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ /** @@ -10,14 +11,10 @@ * Used to open and update UIs. * If this proc is not implemented properly, the UI will not update correctly. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * ui_key - The ui_key of the UI. (OPTIONAL) - * * datum/tgui/ui - The UI to be updated, if it exists. (OPTIONAL) - * * force_open - If the UI should be re-opened instead of updated. (OPTIONAL) - * * datum/tgui/master_ui - The parent UI. (OPTIONAL) - * * datum/ui_state/state - The state used to determine status. (OPTIONAL) + * required user mob The mob who opened/is using the UI. + * optional ui datum/tgui The UI to be updated, if it exists. */ -/datum/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/datum/proc/ui_interact(mob/user, datum/tgui/ui) return FALSE // Not implemented. /** @@ -26,10 +23,11 @@ * Data to be sent to the UI. * This must be implemented for a UI to work. * - * * mob/user - The mob interacting with the UI. + * required user mob The mob interacting with the UI. + * + * return list Data to be sent to the UI. */ /datum/proc/ui_data(mob/user) - // Two good reasons why it shouldn't: // 1) this is polled several times a second, so sleeping means more running threads, needlessly tanking performance // 2) if you try to sleep, you get fun bugs ranging from BSOD to uninteractable white windows, to windows straight up vanishing. // Just don't. @@ -40,12 +38,15 @@ * public * * Static Data to be sent to the UI. - * Static data differs from normal data in that it's large data that should be sent infrequently - * This is implemented optionally for heavy uis that would be sending a lot of redundant data - * frequently. - * Gets squished into one object on the frontend side, but the static part is cached. * - * * mob/user - The mob interacting with the UI. + * Static data differs from normal data in that it's large data that should be + * sent infrequently. This is implemented optionally for heavy uis that would + * be sending a lot of redundant data frequently. Gets squished into one + * object on the frontend side, but the static part is cached. + * + * required user mob The mob interacting with the UI. + * + * return list Statuic Data to be sent to the UI. */ /datum/proc/ui_static_data(mob/user) SHOULD_NOT_SLEEP(TRUE) @@ -54,49 +55,44 @@ /** * public * - * Forces an update on static data. Should be done manually whenever something happens to change static data. + * Forces an update on static data. Should be done manually whenever something + * happens to change static data. * - * * mob/user - The mob currently interacting with the UI. (REQUIRED) - * * datum/tgui/ui - UI to be updated (OPTIONAL) - * * ui_key - Key of the UI to be updated. (OPTIONAL) + * required user the mob currently interacting with the ui + * optional ui ui to be updated */ -/datum/proc/update_static_data(mob/user, datum/tgui/ui, ui_key = "main") - ui = SStgui.try_update_ui(user, src, ui_key, ui) - // If there was no ui to update, there's no static data to update either. +/datum/proc/update_static_data(mob/user, datum/tgui/ui) if(!ui) - return - ui.push_data(null, ui_static_data(user), TRUE) + ui = SStgui.get_open_ui(user, src) + if(ui) + ui.send_full_update() /** * public * * Called on a UI when the UI receieves a href. * Think of this as Topic(). - * Returns TRUE if the UI should be updated, and FALSE if not. * - * * action - The action/button that has been invoked by the user. - * * list/params - A list of parameters attached to the button. + * required action string The action/button that has been invoked by the user. + * required params list A list of parameters attached to the button. + * + * return bool If the UI should be updated or not. */ /datum/proc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) // If UI is not interactive or usr calling Topic is not the UI user, bail. - if(!ui || ui.status != STATUS_INTERACTIVE) + if(!ui || ui.status != UI_INTERACTIVE) return TRUE /** * public * * Called on an object when a tgui object is being created, allowing you to - * customise the html - * For example: inserting a custom stylesheet that you need in the head - * - * For this purpose, some tags are available in the html, to be parsed out - ^ with replacetext - * (customheadhtml) - Additions to the head tag + * push various assets to tgui, for examples spritesheets. * - * * html - The html base text. + * return list List of asset datums or file paths. */ -/datum/proc/ui_base_html(html) - return html +/datum/proc/ui_assets(mob/user) + return list() /** * private @@ -108,13 +104,43 @@ /datum/proc/ui_host(mob/user) return src // Default src. +/** + * private + * + * The UI's state controller to be used for created uis + * This is a proc over a var for memory reasons + */ +/datum/proc/ui_state(mob/user) + return GLOB.default_state + /** * global * * Associative list of JSON-encoded shared states that were set by * tgui clients. */ -/datum/var/list/tgui_shared_states +/* check_grep:ignore */ /datum/var/list/tgui_shared_states + +/** + * global + * + * Tracks open UIs for a user. + */ +/* check_grep:ignore */ /mob/var/list/tgui_open_uis = list() + +/** + * global + * + * Tracks open windows for a user. + */ +/* check_grep:ignore */ /client/var/list/tgui_windows = list() + +/** + * global + * + * TRUE if cache was reloaded by tgui dev server at least once. + */ +/* check_grep:ignore */ /client/var/tgui_cache_reloaded = FALSE /** * public @@ -130,19 +156,63 @@ * Called by UIs when they are closed. * Must be a verb so winset() can call it. * - * * uid - The UI that was closed. + * required uiref ref The UI that was closed. */ -/client/verb/uiclose(uid as text) +/client/verb/uiclose(window_id as text) // Name the verb, and hide it from the user panel. set name = "uiclose" set hidden = TRUE + var/mob/user = src && src.mob + if(!user) + return + // Close all tgui datums based on window_id. + SStgui.force_close_window(user, window_id) - // Get the UI based on the UID. - var/datum/tgui/ui = locateUID(uid) +/** + * Middleware for /client/Topic. + * + * return bool If TRUE, prevents propagation of the topic call. + */ +/proc/tgui_Topic(href_list) + // Skip non-tgui topics + if(!href_list["tgui"]) + return FALSE + var/type = href_list["type"] + // Unconditionally collect tgui logs + if(type == "log") + log_tgui(usr, href_list["message"]) + // Reload all tgui windows + if(type == "cacheReloaded") + if(!check_rights(R_ADMIN) || usr.client.tgui_cache_reloaded) + return TRUE + // Mark as reloaded + usr.client.tgui_cache_reloaded = TRUE + // Notify windows + var/list/windows = usr.client.tgui_windows + for(var/window_id in windows) + var/datum/tgui_window/window = windows[window_id] + if(window.status == TGUI_WINDOW_READY) + window.on_message(type, null, href_list) + return TRUE + // Locate window + var/window_id = href_list["window_id"] + var/datum/tgui_window/window + if(window_id) + window = usr.client.tgui_windows[window_id] + if(!window) + log_tgui(usr, "Error: Couldn't find the window datum, force closing.") + SStgui.force_close_window(usr, window_id) + return TRUE + // Decode payload + var/payload + if(href_list["payload"]) + var/payload_text = href_list["payload"] + if(!rustg_json_is_valid(payload_text)) + log_tgui(usr, "Error: Invalid JSON") + return TRUE - // If we found the UI, close it. - if(istype(ui)) - ui.close() - // Unset machine just to be sure. - if(src && src.mob) - src.mob.unset_machine() + payload = json_decode(payload_text) + // Pass message to window + if(window) + window.on_message(type, payload, href_list) + return TRUE diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 91d34bc8df56..49791db04e82 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -199,10 +199,13 @@ cut_and_generate_data() -/datum/ui_module/appearance_changer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/appearance_changer/ui_state(mob/user) + return GLOB.default_state + +/datum/ui_module/appearance_changer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AppearanceChanger", name, 800, 450, master_ui, state) + ui = new(user, src, "AppearanceChanger", name) ui.open() /datum/ui_module/appearance_changer/ui_data(mob/user) diff --git a/code/modules/tgui/modules/atmos_control.dm b/code/modules/tgui/modules/atmos_control.dm index 21ee30238636..623390e27d58 100644 --- a/code/modules/tgui/modules/atmos_control.dm +++ b/code/modules/tgui/modules/atmos_control.dm @@ -9,19 +9,24 @@ if("open_alarm") var/obj/machinery/alarm/alarm = locate(params["aref"]) in GLOB.air_alarms if(alarm) - alarm.ui_interact(usr, master_ui = ui, state = GLOB.always_state) // ALWAYS is intentional here, as the master_ui pass will prevent fuckery + alarm.ui_interact(usr) -/datum/ui_module/atmos_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "AtmosControl", name, 800, 600, master_ui, state) - - // Send nanomaps - var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps) - nanomaps.send(user) +/datum/ui_module/atmos_control/ui_state(mob/user) + if(isliving(usr)) + return GLOB.human_adjacent_state + return GLOB.default_state +/datum/ui_module/atmos_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AtmosControl", name) ui.open() +/datum/ui_module/atmos_control/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/nanomaps) + ) + /datum/ui_module/atmos_control/ui_data(mob/user) var/list/data = list() data["alarms"] = GLOB.air_alarm_repository.air_alarm_data(GLOB.air_alarms, target_z=level_name_to_num(MAIN_STATION)) diff --git a/code/modules/tgui/modules/colour_matrix_tester.dm b/code/modules/tgui/modules/colour_matrix_tester.dm index bfa7b243781b..d195c3a61831 100644 --- a/code/modules/tgui/modules/colour_matrix_tester.dm +++ b/code/modules/tgui/modules/colour_matrix_tester.dm @@ -19,10 +19,13 @@ target_datum = target -/datum/ui_module/colour_matrix_tester/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/colour_matrix_tester/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/colour_matrix_tester/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ColourMatrixTester", name, 350, 170, master_ui, state) + ui = new(user, src, "ColourMatrixTester", name) ui.autoupdate = TRUE ui.open() diff --git a/code/modules/tgui/modules/crew_monitor.dm b/code/modules/tgui/modules/crew_monitor.dm index 9574f789e5da..e0552ebd2f04 100644 --- a/code/modules/tgui/modules/crew_monitor.dm +++ b/code/modules/tgui/modules/crew_monitor.dm @@ -27,19 +27,19 @@ return viewing_current_z_level = text2num(params["new_level"]) +/datum/ui_module/crew_monitor/ui_state(mob/user) + return GLOB.default_state - -/datum/ui_module/crew_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/crew_monitor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CrewMonitor", name, 800, 600, master_ui, state) - - // Send nanomaps - var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps) - nanomaps.send(user) - + ui = new(user, src, "CrewMonitor", name) ui.open() +/datum/ui_module/crew_monitor/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/nanomaps) + ) /datum/ui_module/crew_monitor/ui_data(mob/user) var/list/data = list() diff --git a/code/modules/tgui/modules/destination_tagger.dm b/code/modules/tgui/modules/destination_tagger.dm index cdd2487681c6..78cf1d1c7701 100644 --- a/code/modules/tgui/modules/destination_tagger.dm +++ b/code/modules/tgui/modules/destination_tagger.dm @@ -2,10 +2,13 @@ name = "Destination Tagger" var/my_tag = 1 -/datum/ui_module/destination_tagger/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/destination_tagger/ui_state(mob/user) + return GLOB.default_state + +/datum/ui_module/destination_tagger/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DestinationTagger", name, 400, 350, master_ui, state) + ui = new(user, src, "DestinationTagger", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/code/modules/tgui/modules/ert_manager.dm b/code/modules/tgui/modules/ert_manager.dm index 2bee0c86eb8c..d68f42cd5202 100644 --- a/code/modules/tgui/modules/ert_manager.dm +++ b/code/modules/tgui/modules/ert_manager.dm @@ -11,10 +11,13 @@ /// The below is a toggle for if sec cyborgs are enabled or not var/cyborg_security = FALSE -/datum/ui_module/ert_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/ert_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/ert_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ERTManager", name, 350, 540, master_ui, state) + ui = new(user, src, "ERTManager", name) ui.autoupdate = TRUE ui.open() @@ -96,7 +99,7 @@ if(cyborg_slots > 0) slots_list += "cyborg: [cyborg_slots]" - var/silenced = text2bool(params["silent"]) + var/silenced = (params["silent"]) D.silent = silenced var/slot_text = english_list(slots_list) diff --git a/code/modules/tgui/modules/generic_crew_manifest.dm b/code/modules/tgui/modules/generic_crew_manifest.dm index 47826d883216..5c3200449b36 100644 --- a/code/modules/tgui/modules/generic_crew_manifest.dm +++ b/code/modules/tgui/modules/generic_crew_manifest.dm @@ -3,10 +3,18 @@ GLOBAL_DATUM_INIT(generic_crew_manifest, /datum/ui_module/generic_crew_manifest, /datum/ui_module/generic_crew_manifest name = "Crew Manifest" -/datum/ui_module/generic_crew_manifest/ui_interact(user, ui_key = "GenericCrewManifest", datum/tgui/ui = null, datum/tgui/master_ui = null, state) - ui = SStgui.try_update_ui(user, src, ui_key, ui) +/datum/ui_module/generic_crew_manifest/ui_state(mob/user) + if(isnewplayer(user)) + return GLOB.always_state + if(isobserver(user)) + return GLOB.observer_state + if(issilicon(user)) + return GLOB.not_incapacitated_state + +/datum/ui_module/generic_crew_manifest/ui_interact(user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GenericCrewManifest", name, 588, 510, master_ui, state) + ui = new(user, src, "GenericCrewManifest", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/modules/ghost_hud_panel.dm b/code/modules/tgui/modules/ghost_hud_panel.dm index 344948764459..cff690613947 100644 --- a/code/modules/tgui/modules/ghost_hud_panel.dm +++ b/code/modules/tgui/modules/ghost_hud_panel.dm @@ -16,10 +16,13 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new) "diagnostic" = DATA_HUD_DIAGNOSTIC_ADVANCED ) -/datum/ui_module/ghost_hud_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui) +/datum/ui_module/ghost_hud_panel/ui_state(mob/user) + return GLOB.observer_state + +/datum/ui_module/ghost_hud_panel/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GhostHudPanel", name, 250, 207, master_ui, state) + ui = new(user, src, "GhostHudPanel", name) ui.set_autoupdate(FALSE) ui.open() @@ -63,8 +66,8 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new) return FALSE // Check if this is the first time they're turning on Antag HUD. if(!check_rights(R_ADMIN | R_MOD, FALSE) && !ghost.is_roundstart_observer() && GLOB.configuration.general.restrict_antag_hud_rejoin && !ghost.has_ahudded()) - var/response = alert(ghost, "If you turn this on, you will not be able to take any part in the round.", "Are you sure you want to enable antag HUD?", "Yes", "No") - if(response == "No") + var/response = tgui_alert(ghost, "If you turn this on, you will not be able to take any part in the round.", "Are you sure you want to enable antag HUD?", list("Yes", "No")) + if(response != "Yes") return FALSE ghost.can_reenter_corpse = FALSE diff --git a/code/modules/tgui/modules/law_manager.dm b/code/modules/tgui/modules/law_manager.dm index 667c0a57b109..4ede83d4aef2 100644 --- a/code/modules/tgui/modules/law_manager.dm +++ b/code/modules/tgui/modules/law_manager.dm @@ -69,29 +69,29 @@ owner.add_supplied_law(supplied_law_position, supplied_law) if("change_zeroth_law") - var/new_law = sanitize(input("Enter new law Zero. Leaving the field blank will cancel the edit.", "Edit Law", zeroth_law)) + var/new_law = tgui_input_text(src, "Enter new law Zero. Leaving the field blank will cancel the edit.", "Edit Law", zeroth_law) if(new_law && new_law != zeroth_law && (!..())) zeroth_law = new_law if("change_ion_law") - var/new_law = sanitize(input("Enter new ion law. Leaving the field blank will cancel the edit.", "Edit Law", ion_law)) + var/new_law = tgui_input_text(src, "Enter new ion law. Leaving the field blank will cancel the edit.", "Edit Law", ion_law) if(new_law && new_law != ion_law && (!..())) ion_law = new_law if("change_inherent_law") - var/new_law = sanitize(input("Enter new inherent law. Leaving the field blank will cancel the edit.", "Edit Law", inherent_law)) + var/new_law = tgui_input_text(src, "Enter new inherent law. Leaving the field blank will cancel the edit.", "Edit Law", inherent_law) if(new_law && new_law != inherent_law && (!..())) inherent_law = new_law if("change_supplied_law") - var/new_law = sanitize(input("Enter new supplied law. Leaving the field blank will cancel the edit.", "Edit Law", supplied_law)) + var/new_law = tgui_input_text(src, "Enter new supplied law. Leaving the field blank will cancel the edit.", "Edit Law", supplied_law) if(new_law && new_law != supplied_law && (!..())) supplied_law = new_law if("change_supplied_law_position") - var/new_position = input(usr, "Enter new supplied law position between 1 and [MAX_SUPPLIED_LAW_NUMBER], inclusive. Inherent laws at the same index as a supplied law will not be stated.", "Law Position", supplied_law_position) as num|null + var/new_position = tgui_input_number(usr, "Enter new supplied law position between 1 and [MAX_SUPPLIED_LAW_NUMBER], inclusive. Inherent laws at the same index as a supplied law will not be stated.", "Law Position", supplied_law_position, MAX_SUPPLIED_LAW_NUMBER, 1) if(isnum(new_position) && (!..())) - supplied_law_position = clamp(new_position, 1, MAX_SUPPLIED_LAW_NUMBER) + supplied_law_position = new_position if("edit_law") if(is_malf(usr)) @@ -101,7 +101,7 @@ to_chat(usr, "You can't edit that law.") return if(AL) - var/new_law = sanitize(input(usr, "Enter new law. Leaving the field blank will cancel the edit.", "Edit Law", AL.law)) + var/new_law = tgui_input_text(usr, "Enter new law. Leaving the field blank will cancel the edit.", "Edit Law", AL.law) if(new_law && new_law != AL.law && is_malf(usr) && (!..())) log_and_message_admins("has changed a law of [owner] from '[AL.law]' to '[new_law]'") AL.law = new_law @@ -149,10 +149,17 @@ to_chat(usr, "Laws displayed.") -/datum/ui_module/law_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/law_manager/ui_state(mob/user) + if(check_rights(R_ADMIN, FALSE)) + return GLOB.admin_state + if(issilicon(user)) + return GLOB.conscious_state + return GLOB.default_state + +/datum/ui_module/law_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "LawManager", sanitize("[src] - [owner.name]"), 800, is_malf(user) ? 600 : 400, master_ui, state) + ui = new(user, src, "LawManager", sanitize("[src] - [owner.name]")) ui.open() /datum/ui_module/law_manager/ui_data(mob/user) diff --git a/code/modules/tgui/modules/power_monitor.dm b/code/modules/tgui/modules/power_monitor.dm index 5453cdee4803..b7f39a54d741 100644 --- a/code/modules/tgui/modules/power_monitor.dm +++ b/code/modules/tgui/modules/power_monitor.dm @@ -11,10 +11,13 @@ if(!select_monitor) powermonitor = ui_host() -/datum/ui_module/power_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/power_monitor/ui_state(mob/user) + return GLOB.default_state + +/datum/ui_module/power_monitor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PowerMonitor", name, 600, 650, master_ui, state) + ui = new(user, src, "PowerMonitor", name) ui.open() /datum/ui_module/power_monitor/ui_data(mob/user) diff --git a/code/modules/tgui/modules/robot_self_diagnosis.dm b/code/modules/tgui/modules/robot_self_diagnosis.dm index 3d06eaf067fc..a98f0dcb86a1 100644 --- a/code/modules/tgui/modules/robot_self_diagnosis.dm +++ b/code/modules/tgui/modules/robot_self_diagnosis.dm @@ -7,10 +7,13 @@ CRASH("A [S.type] was passed to /datum/ui_module/robot_self_diagnosis/New().") owner = S -/datum/ui_module/robot_self_diagnosis/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/robot_self_diagnosis/ui_state(mob/user) + return GLOB.always_state + +/datum/ui_module/robot_self_diagnosis/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RobotSelfDiagnosis", "Component Self Diagnosis", 280, 480, master_ui, state) + ui = new(user, src, "RobotSelfDiagnosis", "Component Self Diagnosis") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/modules/tgui_input_list.dm b/code/modules/tgui/modules/tgui_input_list.dm deleted file mode 100644 index b9b34fffc9b4..000000000000 --- a/code/modules/tgui/modules/tgui_input_list.dm +++ /dev/null @@ -1,185 +0,0 @@ -/** - * Creates a TGUI input list window and returns the user's response. - * - * This proc should be used to create alerts that the caller will wait for a response from. - * Arguments: - * * user - The user to show the input box to. - * * message - The content of the input box, shown in the body of the TGUI window. - * * title - The title of the input box, shown on the top of the TGUI window. - * * buttons - The options that can be chosen by the user, each string is assigned a button on the UI. - * * timeout - The timeout of the input box, after which the input box will close and qdel itself. Set to zero for no timeout. - */ -/proc/tgui_input_list(mob/user, message, title, list/buttons, timeout = 0) - if(!user) - user = usr - if(!length(buttons)) - return - if(!istype(user)) - if(!isclient(user)) - return - var/client/client = user - user = client.mob - - /// Client does NOT have tgui_input on: Returns regular input - if(user.client?.prefs?.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_LISTS) - return input(user, message, title) as null|anything in buttons - - var/datum/tgui_list_input/input = new(user, message, title, buttons, timeout) - input.ui_interact(user) - input.wait() - if(input) - . = input.choice - qdel(input) - -/** - * Creates an asynchronous TGUI input list window with an associated callback. - * - * This proc should be used to create inputs that invoke a callback with the user's chosen option. - * Arguments: - * * user - The user to show the input box to. - * * message - The content of the input box, shown in the body of the TGUI window. - * * title - The title of the input box, shown on the top of the TGUI window. - * * buttons - The options that can be chosen by the user, each string is assigned a button on the UI. - * * callback - The callback to be invoked when a choice is made. - * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. - */ -/proc/tgui_input_list_async(mob/user, message, title, list/buttons, datum/callback/callback, timeout = 60 SECONDS) - if(!user) - user = usr - if(!length(buttons)) - return - if(!istype(user)) - if(!isclient(user)) - return - var/client/client = user - user = client.mob - var/datum/tgui_list_input/async/input = new(user, message, title, buttons, timeout, callback) - input.ui_interact(user) - -/** - * # tgui_list_input - * - * Datum used for instantiating and using a TGUI-controlled list input that prompts the user with - * a message and shows a list of selectable options - */ -/datum/tgui_list_input - /// The title of the TGUI window - var/title - /// The textual body of the TGUI window - var/message - /// The list of buttons (responses) provided on the TGUI window - var/list/buttons - /// Buttons (strings specifically) mapped to the actual value (e.g. a mob or a verb) - var/list/buttons_map - /// The button that the user has pressed, null if no selection has been made - var/choice - /// The time at which the tgui_list_input was created, for displaying timeout progress. - var/start_time - /// The lifespan of the tgui_list_input, after which the window will close and delete itself. - var/timeout - /// Boolean field describing if the tgui_list_input was closed by the user. - var/closed - -/datum/tgui_list_input/New(mob/user, message, title, list/buttons, timeout) - src.title = title - src.message = message - src.buttons = list() - src.buttons_map = list() - - // Gets rid of illegal characters - var/static/regex/whitelistedWords = regex(@{"([^\u0020-\u8000]+)"}) - - for(var/i in buttons) - var/string_key = whitelistedWords.Replace("[i]", "") - - src.buttons += string_key - src.buttons_map[string_key] = i - - - if(timeout) - src.timeout = timeout - start_time = world.time - QDEL_IN(src, timeout) - -/datum/tgui_list_input/Destroy(force, ...) - SStgui.close_uis(src) - QDEL_NULL(buttons) - . = ..() - -/** - * Waits for a user's response to the tgui_list_input's prompt before returning. Returns early if - * the window was closed by the user. - */ -/datum/tgui_list_input/proc/wait() - while(!choice && !closed) - stoplag(1) - -/datum/tgui_list_input/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "ListInput", title, 325, 355, master_ui, state) - ui.set_autoupdate(FALSE) - ui.open() - -/datum/tgui_list_input/ui_close(mob/user) - . = ..() - closed = TRUE - -/datum/tgui_list_input/ui_static_data(mob/user) - var/list/data = list() - data["title"] = title - data["message"] = message - data["buttons"] = buttons - return data - -/datum/tgui_list_input/ui_data(mob/user) - var/list/data = list() - if(timeout) - data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) - -/datum/tgui_list_input/ui_act(action, list/params) - if(..()) - return - - . = TRUE - - switch(action) - if("choose") - if(!(params["choice"] in buttons)) - return - choice = buttons_map[params["choice"]] - SStgui.close_uis(src) - if("cancel") - SStgui.close_uis(src) - closed = TRUE - -/** - * # async tgui_list_input - * - * An asynchronous version of tgui_list_input to be used with callbacks instead of waiting on user responses. - */ -/datum/tgui_list_input/async - /// The callback to be invoked by the tgui_list_input upon having a choice made. - var/datum/callback/callback - -/datum/tgui_list_input/async/New(mob/user, message, title, list/buttons, timeout, callback) - ..() - src.callback = callback - -/datum/tgui_list_input/async/Destroy(force, ...) - QDEL_NULL(callback) - . = ..() - -/datum/tgui_list_input/async/ui_close(mob/user) - . = ..() - qdel(src) - -/datum/tgui_list_input/async/ui_act(action, list/params) - . = ..() - if(!. || choice == null) - return - callback.InvokeAsync(choice) - qdel(src) - -/datum/tgui_list_input/async/wait() - return diff --git a/code/modules/tgui/modules/volume_mixer.dm b/code/modules/tgui/modules/volume_mixer.dm index 2b458652bc3a..5bba2507e99a 100644 --- a/code/modules/tgui/modules/volume_mixer.dm +++ b/code/modules/tgui/modules/volume_mixer.dm @@ -1,10 +1,13 @@ /datum/ui_module/volume_mixer name = "Volume Mixer" -/datum/ui_module/volume_mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/volume_mixer/ui_state(mob/user) + return GLOB.always_state + +/datum/ui_module/volume_mixer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "VolumeMixer", name, 400, clamp(80 + 50 * length(user.client.prefs.volume_mixer), 300, 600), master_ui, state) + ui = new(user, src, "VolumeMixer", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index da756d58dfbe..8b801d5e2a24 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -1,10 +1,11 @@ /** - * tgui states + * Base state and helpers for states. Just does some sanity checks, + * implement a proper state for in-depth checks. * - * Base state and helpers for states. Just does some sanity checks, implement a state for in-depth checks. + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ - /** * public * @@ -17,19 +18,20 @@ */ /datum/proc/ui_status(mob/user, datum/ui_state/state) var/src_object = ui_host(user) - . = STATUS_CLOSE + . = UI_CLOSE if(!state) return if(isobserver(user)) // If they turn on ghost AI control, admins can always interact. - if(user.client.advanced_admin_interaction) - . = max(., STATUS_INTERACTIVE) + if(user.can_admin_interact()) + . = max(., UI_INTERACTIVE) // Regular ghosts can always at least view if in range. - var/clientviewlist = getviewsize(user.client.view) - if(get_dist(src_object, user) < max(clientviewlist[1],clientviewlist[2])) - . = max(., STATUS_UPDATE) + if(user.client) + var/clientviewlist = getviewsize(user.client.view) + if(get_dist(src_object, user) < max(clientviewlist[1], clientviewlist[2])) + . = max(., UI_UPDATE) // Check if the state allows interaction var/result = state.can_use_topic(src_object, user) @@ -47,7 +49,8 @@ * return UI_state The state of the UI. */ /datum/ui_state/proc/can_use_topic(src_object, mob/user) - return STATUS_CLOSE // Don't allow interaction by default. + // Don't allow interaction by default. + return UI_CLOSE /** * public @@ -57,22 +60,27 @@ * return UI_state The state of the UI. */ /mob/proc/shared_ui_interaction(src_object) - if(!client) // Close UIs if mindless. - return STATUS_CLOSE - else if(stat) // Disable UIs if unconcious. - return STATUS_DISABLED - else if(incapacitated()) // Update UIs if incapicitated but concious. - return STATUS_UPDATE - return STATUS_INTERACTIVE + // Close UIs if mindless. + if(!client) + return UI_CLOSE + // Disable UIs if unconcious. + else if(stat) + return UI_DISABLED + // Update UIs if incapicitated but concious. + else if(incapacitated()) + return UI_UPDATE + return UI_INTERACTIVE /mob/living/silicon/ai/shared_ui_interaction(src_object) - if(lacks_power() && !apc_override) // Disable UIs if the AI is unpowered. - return STATUS_DISABLED + // Disable UIs if the AI is unpowered. + if(lacks_power() && !apc_override) + return UI_DISABLED return ..() /mob/living/silicon/robot/shared_ui_interaction(src_object) - if(!cell || cell.charge <= 0 || lockcharge) // Disable UIs if the Borg is unpowered or locked. - return STATUS_DISABLED + // Disable UIs if the Borg is unpowered or locked. + if(!cell || cell.charge <= 0 || lockcharge) + return UI_DISABLED return ..() /** @@ -88,7 +96,8 @@ * return UI_state The state of the UI. */ /atom/proc/contents_ui_distance(src_object, mob/living/user) - return user.shared_living_ui_distance(src_object) // Just call this mob's check. + // Just call this mob's check. + return user.shared_living_ui_distance(src_object) /** * public @@ -100,19 +109,23 @@ * return UI_state The state of the UI. */ /mob/living/proc/shared_living_ui_distance(atom/movable/src_object, viewcheck = TRUE) - if(viewcheck && !(src_object in view(src))) // If the object is obscured, close it. - return STATUS_CLOSE - + // If the object is obscured, close it. + if(viewcheck && !(src_object in view(src))) + return UI_CLOSE var/dist = get_dist(src_object, src) - if(dist <= 1) // Open and interact if 1-0 tiles away. - return STATUS_INTERACTIVE - else if(dist <= 2) // View only if 2-3 tiles away. - return STATUS_UPDATE - else if(dist <= 5) // Disable if 5 tiles away. - return STATUS_DISABLED - return STATUS_CLOSE // Otherwise, we got nothing. + // Open and interact if 1-0 tiles away. + if(dist <= 1) + return UI_INTERACTIVE + // View only if 2-3 tiles away. + else if(dist <= 2) + return UI_UPDATE + // Disable if 5 tiles away. + else if(dist <= 5) + return UI_DISABLED + // Otherwise, we got nothing. + return UI_CLOSE -/mob/living/carbon/human/shared_living_ui_distance(atom/movable/src_object) +/mob/living/carbon/human/shared_living_ui_distance(atom/movable/src_object, viewcheck) if(HAS_TRAIT(src, TRAIT_TELEKINESIS) && (get_dist(src, src_object) <= 2)) - return STATUS_INTERACTIVE + return UI_INTERACTIVE return ..() diff --git a/code/modules/tgui/states/admin_state.dm b/code/modules/tgui/states/admin_state.dm index 3f32f47adde4..61fc37311884 100644 --- a/code/modules/tgui/states/admin_state.dm +++ b/code/modules/tgui/states/admin_state.dm @@ -8,5 +8,5 @@ GLOBAL_DATUM_INIT(admin_state, /datum/ui_state/admin_state, new) /datum/ui_state/admin_state/can_use_topic(src_object, mob/user) if(check_rights_for(user.client, R_ADMIN)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/always.dm b/code/modules/tgui/states/always.dm index 56b887a16996..2406dbb2b9b9 100644 --- a/code/modules/tgui/states/always.dm +++ b/code/modules/tgui/states/always.dm @@ -1,10 +1,15 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: always_state * - * Always grants the user STATUS_INTERACTIVE. Period. + * Always grants the user UI_INTERACTIVE. Period. */ GLOBAL_DATUM_INIT(always_state, /datum/ui_state/always_state, new) /datum/ui_state/always_state/can_use_topic(src_object, mob/user) - return STATUS_INTERACTIVE + return UI_INTERACTIVE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm index 272ae9de68e1..8e35a97da320 100644 --- a/code/modules/tgui/states/conscious.dm +++ b/code/modules/tgui/states/conscious.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: conscious_state * @@ -8,5 +13,5 @@ GLOBAL_DATUM_INIT(conscious_state, /datum/ui_state/conscious_state, new) /datum/ui_state/conscious_state/can_use_topic(src_object, mob/user) if(user.stat == CONSCIOUS) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm index bee64b759e2d..0805ca0114ab 100644 --- a/code/modules/tgui/states/contained.dm +++ b/code/modules/tgui/states/contained.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: contained_state * @@ -9,6 +14,6 @@ GLOBAL_DATUM_INIT(contained_state, /datum/ui_state/contained_state, new) /datum/ui_state/contained_state/can_use_topic(atom/src_object, mob/user) if(!src_object.contains(user)) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) */ diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm index be2ea4c1bfdc..a7351a0d2d90 100644 --- a/code/modules/tgui/states/deep_inventory.dm +++ b/code/modules/tgui/states/deep_inventory.dm @@ -1,12 +1,18 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: deep_inventory_state * - * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory. + * Checks that the src_object is in the user's deep + * (backpack, box, toolbox, etc) inventory. */ GLOBAL_DATUM_INIT(deep_inventory_state, /datum/ui_state/deep_inventory_state, new) /datum/ui_state/deep_inventory_state/can_use_topic(src_object, mob/user) if(!user.contains(src_object)) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 63ea0d96740d..9a3f1457e8fc 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -1,7 +1,11 @@ /** * tgui state: default_state * - * Checks a number of things -- mostly physical distance for humans and view for robots. + * Checks a number of things -- mostly physical distance for humans + * and view for robots. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) @@ -10,67 +14,67 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. /mob/proc/default_can_use_topic(src_object) - return STATUS_CLOSE // Don't allow interaction by default. + return UI_CLOSE // Don't allow interaction by default. /mob/living/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > STATUS_CLOSE && loc) + if(. > UI_CLOSE && loc) //must not be in nullspace. . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance... - if(. == STATUS_INTERACTIVE) // Non-human living mobs can only look, not touch. - return STATUS_UPDATE + if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED) && . == UI_INTERACTIVE) // Non-human living mobs and mobs with blocked hands can only look, not touch. + return UI_UPDATE /mob/living/carbon/human/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Check the distance... /mob/living/silicon/robot/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. <= STATUS_DISABLED) + if(. <= UI_DISABLED) return // Robots can interact with anything they can see. var/list/clientviewlist = getviewsize(client.view) - if((src_object in view(src)) && (get_dist(src, src_object) <= max(clientviewlist[1], clientviewlist[2]))) - return STATUS_INTERACTIVE - return STATUS_DISABLED // Otherwise they can keep the UI open. + if((src_object in view(src)) && get_dist(src, src_object) <= max(clientviewlist[1], clientviewlist[2])) + return UI_INTERACTIVE + return UI_DISABLED // Otherwise they can keep the UI open. /mob/living/silicon/ai/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. < STATUS_INTERACTIVE) + if(. < UI_INTERACTIVE) return // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. if(!control_disabled && can_see(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE /mob/living/simple_animal/revenant/default_can_use_topic(src_object) - return STATUS_UPDATE + return UI_UPDATE /mob/living/simple_animal/demon/pulse_demon/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. < STATUS_INTERACTIVE) + if(. < UI_INTERACTIVE) return // anything in its APC's area if(get_area(src_object) == controlling_area) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE /mob/living/simple_animal/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) //simple animals can only use things they're near. /mob/living/silicon/pai/default_can_use_topic(src_object) // pAIs can only use themselves and the owner's radio. if((src_object == src || src_object == radio) && !stat) - return STATUS_INTERACTIVE + return UI_INTERACTIVE else return ..() -/mob/dead/observer/default_can_use_topic() +/mob/dead/observer/default_can_use_topic(src_object) if(can_admin_interact()) - return STATUS_INTERACTIVE // Admins are more equal - return STATUS_UPDATE // Ghosts can view updates + return UI_INTERACTIVE // Admins are more equal + return UI_UPDATE // Ghosts can view updates diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index fa3692a2ff76..209cb5288c56 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: hands_state * @@ -8,21 +13,21 @@ GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) /datum/ui_state/hands_state/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) return min(., user.hands_can_use_topic(src_object)) /mob/proc/hands_can_use_topic(src_object) - return STATUS_CLOSE + return UI_CLOSE /mob/living/hands_can_use_topic(src_object) - if(is_in_active_hand(src_object) || is_in_inactive_hand(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE - -/mob/living/simple_animal/revenant/hands_can_use_topic(src_object) - return STATUS_UPDATE + if(is_holding(src_object)) + return UI_INTERACTIVE + return UI_CLOSE /mob/living/silicon/robot/hands_can_use_topic(src_object) if(activated(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE + +/mob/living/simple_animal/revenant/hands_can_use_topic(src_object) + return UI_UPDATE diff --git a/code/modules/tgui/states/human_adjacent.dm b/code/modules/tgui/states/human_adjacent.dm index 8b489ab13090..b9208f96cd63 100644 --- a/code/modules/tgui/states/human_adjacent.dm +++ b/code/modules/tgui/states/human_adjacent.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: human_adjacent_state * @@ -13,4 +18,4 @@ GLOBAL_DATUM_INIT(human_adjacent_state, /datum/ui_state/human_adjacent_state, ne var/dist = get_dist(src_object, user) if((dist > 1) || (!ishuman(user))) // Can't be used unless adjacent and human, even with TK - . = min(., STATUS_UPDATE) + . = min(., UI_UPDATE) diff --git a/code/modules/tgui/states/inventory_state.dm b/code/modules/tgui/states/inventory_state.dm index 4f516e58462a..7c4002b6c7d8 100644 --- a/code/modules/tgui/states/inventory_state.dm +++ b/code/modules/tgui/states/inventory_state.dm @@ -12,5 +12,5 @@ GLOBAL_DATUM_INIT(inventory_state, /datum/ui_state/inventory_state, new) var/mob/living/silicon/robot/R = user if(src_object in R.module_active) // Magnetic grippers return user.shared_ui_interaction(src_object) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm index d6bdc4bac93b..f7278c86de47 100644 --- a/code/modules/tgui/states/not_incapacitated.dm +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: not_incapacitated_state * @@ -22,8 +27,8 @@ GLOBAL_DATUM_INIT(not_incapacitated_turf_state, /datum/ui_state/not_incapacitate turf_check = no_turfs /datum/ui_state/not_incapacitated_state/can_use_topic(src_object, mob/user) - if(user.stat) - return STATUS_CLOSE - if(user.incapacitated() || (turf_check && !isturf(user.loc))) - return STATUS_DISABLED - return STATUS_INTERACTIVE + if(user.stat != CONSCIOUS) + return UI_CLOSE + if(HAS_TRAIT(src, TRAIT_UI_BLOCKED) || user.incapacitated() || (turf_check && !isturf(user.loc))) + return UI_DISABLED + return UI_INTERACTIVE diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm index fd604cc78716..5fd79a68848d 100644 --- a/code/modules/tgui/states/notcontained.dm +++ b/code/modules/tgui/states/notcontained.dm @@ -1,25 +1,33 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: notcontained_state * - * Checks that the user is not inside src_object, and then makes the default checks. + * Checks that the user is not inside src_object, and then makes the + * default checks. */ -/* + GLOBAL_DATUM_INIT(notcontained_state, /datum/ui_state/notcontained_state, new) /datum/ui_state/notcontained_state/can_use_topic(atom/src_object, mob/user) . = user.shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) return min(., user.notcontained_can_use_topic(src_object)) /mob/proc/notcontained_can_use_topic(src_object) - return STATUS_CLOSE + return UI_CLOSE /mob/living/notcontained_can_use_topic(atom/src_object) if(src_object.contains(src)) - return STATUS_CLOSE // Close if we're inside it. + return UI_CLOSE // Close if we're inside it. return default_can_use_topic(src_object) /mob/living/silicon/notcontained_can_use_topic(src_object) - return default_can_use_topic(src_object) // Silicons use default bevhavior. -*/ + return default_can_use_topic(src_object) // Silicons use default behavior. + +/mob/living/simple_animal/drone/notcontained_can_use_topic(src_object) + return default_can_use_topic(src_object) // Drones use default behavior. diff --git a/code/modules/tgui/states/observer_state.dm b/code/modules/tgui/states/observer_state.dm index af772ab7d617..5028834c9e13 100644 --- a/code/modules/tgui/states/observer_state.dm +++ b/code/modules/tgui/states/observer_state.dm @@ -8,8 +8,8 @@ GLOBAL_DATUM_INIT(observer_state, /datum/ui_state/observer_state, new) /datum/ui_state/observer_state/can_use_topic(src_object, mob/user) if(isobserver(user)) - return STATUS_INTERACTIVE + return UI_INTERACTIVE if(check_rights(R_ADMIN, 0, src)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm index 71ea1a418aca..362e4ecd0008 100644 --- a/code/modules/tgui/states/physical.dm +++ b/code/modules/tgui/states/physical.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: physical_state * @@ -8,23 +13,49 @@ GLOBAL_DATUM_INIT(physical_state, /datum/ui_state/physical, new) /datum/ui_state/physical/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) return min(., user.physical_can_use_topic(src_object)) /mob/proc/physical_can_use_topic(src_object) - return STATUS_CLOSE - -/mob/living/simple_animal/revenant/physical_can_use_topic(src_object) - return STATUS_UPDATE + return UI_CLOSE /mob/living/simple_animal/demon/pulse_demon/physical_can_use_topic(src_object) - return STATUS_UPDATE + return UI_UPDATE /mob/living/physical_can_use_topic(src_object) return shared_living_ui_distance(src_object) /mob/living/silicon/physical_can_use_topic(src_object) - return max(STATUS_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. + return max(UI_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. /mob/living/silicon/ai/physical_can_use_topic(src_object) - return STATUS_UPDATE // AIs are not physical. + return UI_UPDATE // AIs are not physical. + +/mob/living/simple_animal/revenant/physical_can_use_topic(src_object) + return UI_UPDATE + +/** + * tgui state: physical_obscured_state + * + * Short-circuits the default state to only check physical distance, being in view doesn't matter + */ + +GLOBAL_DATUM_INIT(physical_obscured_state, /datum/ui_state/physical_obscured_state, new) + +/datum/ui_state/physical_obscured_state/can_use_topic(src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.physical_obscured_can_use_topic(src_object)) + +/mob/proc/physical_obscured_can_use_topic(src_object) + return UI_CLOSE + +/mob/living/physical_obscured_can_use_topic(src_object) + return shared_living_ui_distance(src_object, viewcheck = FALSE) + +/mob/living/silicon/physical_obscured_can_use_topic(src_object) + return max(UI_UPDATE, shared_living_ui_distance(src_object, viewcheck = FALSE)) // Silicons can always see. + +/mob/living/silicon/ai/physical_obscured_can_use_topic(src_object) + return UI_UPDATE // AIs are not physical. + diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm index d8b119f31ffd..f7cef3f6005b 100644 --- a/code/modules/tgui/states/self.dm +++ b/code/modules/tgui/states/self.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: self_state * @@ -8,5 +13,5 @@ GLOBAL_DATUM_INIT(self_state, /datum/ui_state/self_state, new) /datum/ui_state/self_state/can_use_topic(src_object, mob/user) if(src_object != user) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/viewer_state.dm b/code/modules/tgui/states/viewer_state.dm index 1bc577517014..154f8a2e356c 100644 --- a/code/modules/tgui/states/viewer_state.dm +++ b/code/modules/tgui/states/viewer_state.dm @@ -7,4 +7,4 @@ GLOBAL_DATUM_INIT(viewer_state, /datum/ui_state/viewer_state, new) /datum/ui_state/viewer_state/can_use_topic(src_object, mob/user) - return STATUS_UPDATE + return UI_UPDATE diff --git a/code/modules/tgui/states/zlevel_state.dm b/code/modules/tgui/states/zlevel_state.dm deleted file mode 100644 index 1f4ca3b37cf4..000000000000 --- a/code/modules/tgui/states/zlevel_state.dm +++ /dev/null @@ -1,16 +0,0 @@ -/** - * tgui state: z_state - * - * Only checks that the Z-level of the user and src_object are the same. - */ - -/* -GLOBAL_DATUM_INIT(z_state, /datum/ui_state/z_state, new) - -/datum/ui_state/z_state/can_use_topic(src_object, mob/user) - var/turf/turf_obj = get_turf(src_object) - var/turf/turf_usr = get_turf(user) - if(turf_obj && turf_usr && turf_obj.z == turf_usr.z) - return STATUS_INTERACTIVE - return STATUS_CLOSE -*/ diff --git a/code/modules/tgui/tgui_datum.dm b/code/modules/tgui/tgui_datum.dm index 3d5ba33166e8..1efece27cad9 100644 --- a/code/modules/tgui/tgui_datum.dm +++ b/code/modules/tgui/tgui_datum.dm @@ -1,7 +1,6 @@ /** - * tgui - * - * /tg/station user interface library + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ /** @@ -14,34 +13,32 @@ var/datum/src_object /// The title of te UI. var/title - /// The ui_key of the UI. This allows multiple UIs for one src_object. - var/ui_key /// The window_id for browse() and onclose(). - var/window_id - /// The window width. - var/width = 0 - /// The window height - var/height = 0 + var/datum/tgui_window/window + /// Key that is used for remembering the window geometry. + var/window_key + /// Deprecated: Window size. + var/window_size /// The interface (template) to be used for this UI. var/interface /// Update the UI every MC tick. var/autoupdate = TRUE /// If the UI has been initialized yet. var/initialized = FALSE - /// The data (and datastructure) used to initialize the UI. - var/list/initial_data - /// The static data used to initialize the UI. - var/list/initial_static_data - /// Holder for the json string, that is sent during the initial update - var/_initial_update + /// Time of opening the window. + var/opened_at + /// Stops further updates when close() was called. + var/closing = FALSE /// The status/visibility of the UI. - var/status = STATUS_INTERACTIVE + var/status = UI_INTERACTIVE + /// Timed refreshing state + var/refreshing = FALSE /// Topic state used to determine status/interactability. var/datum/ui_state/state = null - /// The parent UI. - var/datum/tgui/master_ui - /// Children of this UI. - var/list/datum/tgui/children = list() + /// Asset data to be sent with every update + var/list/asset_data + /// Rate limit client refreshes to prevent DoS. + COOLDOWN_DECLARE(refresh_cooldown) /** * public @@ -50,46 +47,25 @@ * * required user mob The mob who opened/is using the UI. * required src_object datum The object or datum which owns the UI. - * required ui_key string The ui_key of the UI. * required interface string The interface used to render the UI. * optional title string The title of the UI. - * optional width int The window width. - * optional height int The window height. - * optional master_ui datum/tgui The parent UI. - * optional state datum/ui_state The state used to determine status. + * optional ui_x int Deprecated: Window width. + * optional ui_y int Deprecated: Window height. * * return datum/tgui The requested UI. */ -/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y) + log_tgui(user, "new [interface]") src.user = user src.src_object = src_object - src.ui_key = ui_key - src.window_id = "[src_object.UID()]-[ui_key]" + src.window_key = "[src_object.UID()]-main" src.interface = interface - if(title) - - // SS220 EDIT - START - if(findtext_char(title, regex(@"[А-Яа-я]"))) - src.title = capitalize(sanitize(title, list("\proper"="", "\improper"=""))) - else - src.title = sanitize(title) - // SS220 EDIT -END - - if(width) - src.width = width - if(height) - src.height = height - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - var/datum/asset/tgui_assets = get_asset_datum(/datum/asset/simple/tgui) - var/datum/asset/fa = get_asset_datum(/datum/asset/simple/fontawesome) - tgui_assets.send(user) - fa.send(user) + src.title = title + src.state = src_object.ui_state(user) + // Deprecated + if(ui_x && ui_y) + src.window_size = list(ui_x, ui_y) /** * public @@ -98,267 +74,252 @@ */ /datum/tgui/proc/open() if(!user.client) - return // Bail if there is no client. - - update_status(push = FALSE) // Update the window status. - if(status < STATUS_UPDATE) - return // Bail if we're not supposed to open. - - - - // Build window options - var/window_options = "can_minimize=0;auto_format=0;" - // If we have a width and height, use them. - if(width && height) - window_options += "size=[width]x[height];" - - // Remove titlebar and resize handles for a fancy window - if(user.client.prefs.toggles2 & PREFTOGGLE_2_FANCYUI) - window_options += "titlebar=0;can_resize=0;" + return null + if(window) + return null + process_status() + if(status < UI_UPDATE) + return null + window = SStgui.request_pooled_window(user) + if(!window) + return null + opened_at = world.time + window.acquire_lock(src) + if(!window.is_ready()) + window.initialize( + strict_mode = TRUE, + fancy = (user.client.prefs.toggles2 & PREFTOGGLE_2_FANCYUI), + assets = list( + get_asset_datum(/datum/asset/simple/tgui), + )) else - window_options += "titlebar=1;can_resize=1;" - - // Generate page html - var/html - html = SStgui.basehtml - // Allow the src object to override the html if needed - html = src_object.ui_base_html(html) - // Replace template tokens with important UI data - html = replacetextEx(html, "\[tgui:ref]", "[src.UID()]") + window.send_message("ping") + send_assets() + window.send_message("update", get_payload( + with_data = TRUE, + with_static_data = TRUE)) + SStgui.on_open(src) - // Open the window. - user << browse(html, "window=[window_id];[window_options]") +/datum/tgui/proc/send_assets() + var/flushqueue = window.send_asset(get_asset_datum( + /datum/asset/simple/namespaced/fontawesome)) + for(var/datum/asset/asset in src_object.ui_assets(user)) + flushqueue |= window.send_asset(asset) + if(flushqueue) + user.client.browse_queue_flush() - // Instruct the client to signal UI when the window is closed. - winset(user, window_id, "on-close=\"uiclose [src.UID()]\"") +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui/proc/close(can_be_suspended = TRUE) + if(closing) + return + closing = TRUE + // If we don't have window_id, open proc did not have the opportunity + // to finish, therefore it's safe to skip this whole block. + if(window) + // Windows you want to keep are usually blue screens of death + // and we want to keep them around, to allow user to read + // the error message properly. + window.release_lock() + window.close(can_be_suspended) + src_object.ui_close(user) + SStgui.on_close(src) + state = null + qdel(src) - // Pre-fetch initial state while browser is still loading in - // another thread - if(!initial_data) - initial_data = src_object.ui_data(user) - if(!initial_static_data) - initial_static_data = src_object.ui_static_data(user) - _initial_update = url_encode(get_json(initial_data, initial_static_data)) +/** + * public + * + * Enable/disable auto-updating of the UI. + * + * required value bool Enable/disable auto-updating. + */ +/datum/tgui/proc/set_autoupdate(autoupdate) + src.autoupdate = autoupdate - SStgui.on_open(src) +/** + * public + * + * Replace current ui.state with a new one. + * + * required state datum/ui_state/state Next state + */ +/datum/tgui/proc/set_state(datum/ui_state/state) + src.state = state /** * public * - * Reinitialize the UI. - * (Possibly with a new interface and/or data). + * Makes an asset available to use in tgui. * - * optional template string The name of the new interface. - * optional data list The new initial data. + * required asset datum/asset */ -/datum/tgui/proc/reinitialize(interface, list/data, list/static_data) - if(interface) - src.interface = interface - if(data) - initial_data = data - if(static_data) - initial_static_data = static_data - open() +/datum/tgui/proc/send_asset(datum/asset/asset) + if(!window) + CRASH("send_asset() can only be called after open().") + return window.send_asset(asset) /** * public * - * Close the UI, and all its children. + * Send a full update to the client (includes static data). + * + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. */ -/datum/tgui/proc/close() - user << browse(null, "window=[window_id]") // Close the window. - src_object.ui_close(user) - SStgui.on_close(src) - for(var/datum/tgui/child in children) // Loop through and close all children. - child.close() - children.Cut() - state = null - master_ui = null - qdel(src) +/datum/tgui/proc/send_full_update(custom_data, force) + if(!user.client || !initialized || closing) + return + if(!COOLDOWN_FINISHED(src, refresh_cooldown)) + refreshing = TRUE + addtimer(CALLBACK(src, PROC_REF(send_full_update)), TGUI_REFRESH_FULL_UPDATE_COOLDOWN, TIMER_UNIQUE) + return + refreshing = FALSE + var/should_update_data = force || status >= UI_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data, + with_static_data = TRUE)) + COOLDOWN_START(src, refresh_cooldown, TGUI_REFRESH_FULL_UPDATE_COOLDOWN) /** * public * - * Enable/disable auto-updating of the UI. + * Send a partial update to the client (excludes static data). * - * required state bool Enable/disable auto-updating. + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. */ -/datum/tgui/proc/set_autoupdate(state = TRUE) - autoupdate = state +/datum/tgui/proc/send_update(custom_data, force) + if(!user.client || !initialized || closing) + return + var/should_update_data = force || status >= UI_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data)) /** * private * * Package the data to send to the UI, as JSON. - * This includes the UI data and config_data. * - * return string The packaged JSON. + * return list */ -/datum/tgui/proc/get_json(list/data, list/static_data) +/datum/tgui/proc/get_payload(custom_data, with_data, with_static_data) var/list/json_data = list() - json_data["config"] = list( "title" = title, "status" = status, "interface" = interface, - "fancy" = user.client.prefs.toggles2 & PREFTOGGLE_2_FANCYUI, - "observer" = isobserver(user), - "window" = window_id, + "refreshing" = refreshing, + "window" = list( + "key" = window_key, + "size" = window_size, + "fancy" = (user.client?.prefs?.toggles2 & PREFTOGGLE_2_FANCYUI), + "locked" = FALSE, + ), + "client" = list( + "ckey" = user.client.ckey, + "address" = user.client.address, + "computer_id" = user.client.computer_id, + ), + "user" = list( + "name" = "[user]", + "observer" = isobserver(user), + ), "map" = SSmapping.map_datum.technical_name, "ref" = "[src.UID()]" ) - - if(!isnull(data)) + var/data = custom_data || with_data && src_object.ui_data(user) + if(data) json_data["data"] = data - if(!isnull(static_data)) + var/static_data = with_static_data && src_object.ui_static_data(user) + if(static_data) json_data["static_data"] = static_data - - // Send shared states if(src_object.tgui_shared_states) json_data["shared"] = src_object.tgui_shared_states - - // Generate the JSON. - var/json = json_encode(json_data) - // Strip #255/improper. - json = replacetext(json, "\proper", "") - json = replacetext(json, "\improper", "") - return json - -/** - * private - * - * Handle clicks from the UI. - * Call the src_object's ui_act() if status is UI_INTERACTIVE. - * If the src_object's ui_act() returns 1, update all UIs attacked to it. - */ -/datum/tgui/Topic(href, href_list) - if(user != usr) - return // Something is not right here. - - var/action = href_list["action"] - var/params = href_list; params -= "action" - - switch(action) - if("tgui:initialize") - user << output(_initial_update, "[window_id].browser:update") - initialized = TRUE - if("tgui:setSharedState") - // Update the window state. - update_status(push = FALSE) - // Bail if UI is not interactive or usr calling Topic - // is not the UI user. - if(status != STATUS_INTERACTIVE) - return - var/key = params["key"] - var/value = params["value"] - if(!src_object.tgui_shared_states) - src_object.tgui_shared_states = list() - src_object.tgui_shared_states[key] = value - SStgui.update_uis(src_object) - if("tgui:setFancy") - user.client.prefs.toggles2 ^= PREFTOGGLE_2_FANCYUI - if("tgui:log") - // Force window to show frills on fatal errors - if(params["fatal"]) - winset(user, window_id, "titlebar=1;can-resize=1;size=600x600") - log_message(params["log"]) - if("tgui:link") - user << link(params["url"]) - else - // Update the window state. - update_status(push = FALSE) - // Call ui_act() on the src_object. - if(src_object.ui_act(action, params, src, state)) - // Update if the object requested it. - SStgui.update_uis(src_object) + return json_data /** * private * - * Update the UI. - * Only updates the data if update is true, otherwise only updates the status. - * - * optional force bool If the UI should be forced to update. + * Run an update cycle for this UI. Called internally by SStgui + * every second or so. */ /datum/tgui/process(force = FALSE) + if(closing) + return var/datum/host = src_object.ui_host(user) - if(!src_object || !host || !user) // If the object or user died (or something else), abort. - close() + // If the object or user died (or something else), abort. + if(!src_object || !host || !user || !window) + close(can_be_suspended = FALSE) return - - if(status && (force || autoupdate)) - update() // Update the UI if the status and update settings allow it. - else - update_status(push = TRUE) // Otherwise only update status. - -/** - * private - * - * Push data to an already open UI. - * - * required data list The data to send. - * optional force bool If the update should be sent regardless of state. - */ -/datum/tgui/proc/push_data(data, static_data, force = FALSE) - // Update the window state. - update_status(push = FALSE) - // Cannot update UI if it is not set up yet. - if(!initialized) + // Validate ping + if(!initialized && world.time - opened_at > TGUI_PING_TIMEOUT) + log_tgui(user, \ + "Error: Zombie window detected, killing it with fire.\n" \ + + "window_id: [window.id]\n" \ + + "opened_at: [opened_at]\n" \ + + "world.time: [world.time]") + close(can_be_suspended = FALSE) return - // Cannot update UI, we have no visibility. - if(status <= STATUS_DISABLED && !force) + // Update through a normal call to ui_interact + if(status != UI_DISABLED && (autoupdate || force)) + src_object.ui_interact(user, src) return - // Send the new JSON to the update() Javascript function. - user << output( - url_encode(get_json(data, static_data)), - "[window_id].browser:update") - -/** - * private - * - * Updates the UI by interacting with the src_object again, which will hopefully - * call try_ui_update on it. - * - * optional force_open bool If force_open should be passed to ui_interact. - */ -/datum/tgui/proc/update(force_open = FALSE) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) + // Update status only + var/needs_update = process_status() + if(status <= UI_CLOSE) + close() + return + if(needs_update) + window.send_message("update", get_payload()) /** * private * - * Update the status/visibility of the UI for its user. - * - * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + * Updates the status, and returns TRUE if status has changed. */ -/datum/tgui/proc/update_status(push = FALSE) - var/status = src_object.ui_status(user, state) - if(master_ui) - status = min(status, master_ui.status) - set_status(status, push) - if(status == STATUS_CLOSE) - close() +/datum/tgui/proc/process_status() + var/prev_status = status + status = src_object.ui_status(user, state) + return prev_status != status /** * private * - * Set the status/visibility of the UI. - * - * required status int The status to set (UI_CLOSE/UI_DISABLED/UI_UPDATE/UI_INTERACTIVE). - * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + * Callback for handling incoming tgui messages. */ -/datum/tgui/proc/set_status(status, push = FALSE) - // Only update if status has changed. - if(src.status != status) - if(src.status == STATUS_DISABLED) - src.status = status - if(push) - update() - else - src.status = status - // Update if the UI just because disabled, or a push is requested. - if(status == STATUS_DISABLED || push) - push_data(null, force = TRUE) - -/datum/tgui/proc/log_message(message) - log_tgui("[user] ([user.ckey]) using \"[title]\":\n[message]") +/datum/tgui/proc/on_message(type, list/payload, list/href_list) + // Pass act type messages to ui_act + if(type && copytext(type, 1, 5) == "act/") + process_status() + if(src_object.ui_act(copytext(type, 5), payload, src, state)) + SStgui.update_uis(src_object) + return FALSE + switch(type) + if("ready") + // Send a full update when the user manually refreshes the UI + if(initialized) + send_full_update() + initialized = TRUE + if("ping/reply") + initialized = TRUE + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("log") + if(href_list["fatal"]) + close(can_be_suspended = FALSE) + if("setSharedState") + if(status != UI_INTERACTIVE) + return + LAZYINITLIST(src_object.tgui_shared_states) + src_object.tgui_shared_states[href_list["key"]] = href_list["value"] + SStgui.update_uis(src_object) diff --git a/code/modules/tgui/tgui_input/alert_input.dm b/code/modules/tgui/tgui_input/alert_input.dm new file mode 100644 index 000000000000..5f9abd1de10f --- /dev/null +++ b/code/modules/tgui/tgui_input/alert_input.dm @@ -0,0 +1,145 @@ +/** + * Creates a TGUI alert window and returns the user's response. + * + * This proc should be used to create alerts that the caller will wait for a response from. + * Arguments: + * * user - The user to show the alert to. + * * message - The content of the alert, shown in the body of the TGUI window. + * * title - The of the alert modal, shown on the top of the TGUI window. + * * buttons - The options that can be chosen by the user, each string is assigned a button on the UI. + * * timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout. + * * autofocus - The bool that controls if this alert should grab window focus. + */ +/proc/tgui_alert(mob/user, message = "", title = "Alert", list/buttons = list("Ok"), timeout = 0, autofocus = TRUE, ui_state = GLOB.always_state) + if(!user) + user = usr + + if(!istype(user)) + if(!isclient(user)) + CRASH("We passed something that wasn't a user/client in a TGUI Alert! The passed user was [user]!") + var/client/client = user + user = client.mob + + if(isnull(user.client)) + return + + // A gentle nudge - you should not be using TGUI alert for anything other than a simple message. + if(length(buttons) > 3) + log_tgui(user, "Error: TGUI Alert initiated with too many buttons. Use a list.", "TguiAlert") + return tgui_input_list(user, message, title, buttons, timeout) + + // Client does NOT have tgui_input on: Returns regular input + if(user.client?.prefs?.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_INPUT) + if(length(buttons) == 2) + return alert(user, message, title, buttons[1], buttons[2]) + if(length(buttons) == 3) + return alert(user, message, title, buttons[1], buttons[2], buttons[3]) + + var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus, ui_state) + + alert.ui_interact(user) + alert.wait() + if(alert) + . = alert.choice + qdel(alert) + +/** + * # tgui_alert + * + * Datum used for instantiating and using a TGUI-controlled modal that prompts the user with + * a message and has buttons for responses. + */ +/datum/tgui_alert + /// The title of the TGUI window + var/title + /// The textual body of the TGUI window + var/message + /// The list of buttons (responses) provided on the TGUI window + var/list/buttons + /// The button that the user has pressed, null if no selection has been made + var/choice + /// The time at which the tgui_alert was created, for displaying timeout progress. + var/start_time + /// The lifespan of the tgui_alert, after which the window will close and delete itself. + var/timeout + /// The bool that controls if this modal should grab window focus + var/autofocus + /// Boolean field describing if the tgui_alert was closed by the user. + var/closed + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus, ui_state) + src.autofocus = autofocus + src.buttons = buttons.Copy() + src.message = message + src.title = title + src.state = ui_state + + if(timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_alert/Destroy(force) + SStgui.close_uis(src) + state = null + QDEL_NULL(buttons) + return ..() + +/** + * Waits for a user's response to the tgui_alert's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_alert/proc/wait() + while(!choice && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_alert/ui_state(mob/user) + return state + +/datum/tgui_alert/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AlertModal") + ui.open() + +/datum/tgui_alert/ui_close(mob/user) + closed = TRUE + +/datum/tgui_alert/ui_static_data(mob/user) + var/list/data = list() + data["autofocus"] = autofocus + data["buttons"] = buttons + data["message"] = message + data["large_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_LARGE_INPUT_BUTTONS + data["swapped_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_SWAP_INPUT_BUTTONS + data["title"] = title + return data + +/datum/tgui_alert/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + return data + +/datum/tgui_alert/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("choose") + if(!(params["choice"] in buttons)) + CRASH("[usr] entered a non-existent button choice: [params["choice"]]") + set_choice(params["choice"]) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_alert/proc/set_choice(choice) + src.choice = choice diff --git a/code/modules/tgui/tgui_input/list_input.dm b/code/modules/tgui/tgui_input/list_input.dm new file mode 100644 index 000000000000..f5bee6cb551f --- /dev/null +++ b/code/modules/tgui/tgui_input/list_input.dm @@ -0,0 +1,165 @@ +/** + * Creates a TGUI input list window and returns the user's response. + * + * This proc should be used to create alerts that the caller will wait for a response from. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * items - The options that can be chosen by the user, each string is assigned a button on the UI. + * * default - If an option is already preselected on the UI. Current values, etc. + * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0, ui_state = GLOB.always_state) + if(!user) + user = usr + + if(!length(items)) + CRASH("[user] tried to open an empty TGUI Input List. Contents are: [items]") + + if(!istype(user)) + if(!isclient(user)) + CRASH("We passed something that wasn't a user/client in a TGUI Input List! The passed user was [user]!") + var/client/client = user + user = client.mob + + if(isnull(user.client)) + return + + /// Client does NOT have tgui_input on: Returns regular input + if(user.client?.prefs?.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_INPUT) + return input(user, message, title, default) as null|anything in items + + var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state) + + if(input.invalid) + qdel(input) + return + + input.ui_interact(user) + input.wait() + if(input) + . = input.choice + qdel(input) + +/** + * # tgui_list_input + * + * Datum used for instantiating and using a TGUI-controlled list input that prompts the user with + * a message and shows a list of selectable options + */ +/datum/tgui_list_input + /// The title of the TGUI window + var/title + /// The textual body of the TGUI window + var/message + /// The list of items (responses) provided on the TGUI window + var/list/items + /// Buttons (strings specifically) mapped to the actual value (e.g. a mob or a verb) + var/list/items_map + /// The button that the user has pressed, null if no selection has been made + var/choice + /// The default button to be selected + var/default + /// The time at which the tgui_list_input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the tgui_list_input, after which the window will close and delete itself. + var/timeout + /// Boolean field describing if the tgui_list_input was closed by the user. + var/closed + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + /// Whether the tgui list input is invalid or not (i.e. due to all list entries being null) + var/invalid = FALSE + +/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout, ui_state) + src.title = title + src.message = message + src.items = list() + src.items_map = list() + src.default = default + src.state = ui_state + var/list/repeat_items = list() + + // Gets rid of illegal characters + var/static/regex/whitelistedWords = regex(@{"([^\u0020-\u8000]+)"}) + + for(var/i in items) + var/string_key = whitelistedWords.Replace("[i]", "") + + // Avoids duplicated keys E.g: when areas have the same name + string_key = avoid_assoc_duplicate_keys(string_key, repeat_items) + src.items += string_key + src.items_map[string_key] = i + + if(length(src.items) == 0) + invalid = TRUE + + if(timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_list_input/Destroy(force) + SStgui.close_uis(src) + state = null + QDEL_NULL(items) + return ..() + +/** + * Waits for a user's response to the tgui_list_input's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_list_input/proc/wait() + while(!choice && !closed) + stoplag(1) + +/datum/tgui_list_input/ui_state(mob/user) + return state + +/datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ListInputModal") + ui.set_autoupdate(FALSE) + ui.open() + +/datum/tgui_list_input/ui_close(mob/user) + closed = TRUE + +/datum/tgui_list_input/ui_static_data(mob/user) + var/list/data = list() + data["init_value"] = default || items[1] + data["items"] = items + data["message"] = message + data["large_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_LARGE_INPUT_BUTTONS + data["swapped_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_SWAP_INPUT_BUTTONS + data["title"] = title + return data + +/datum/tgui_list_input/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) + return data + +/datum/tgui_list_input/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("submit") + if(!(params["entry"] in items)) + return + set_choice(items_map[params["entry"]]) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_list_input/proc/set_choice(choice) + src.choice = choice diff --git a/code/modules/tgui/tgui_input/number_input.dm b/code/modules/tgui/tgui_input/number_input.dm new file mode 100644 index 000000000000..7e4a49832a38 --- /dev/null +++ b/code/modules/tgui/tgui_input/number_input.dm @@ -0,0 +1,168 @@ +/** + * Creates a TGUI window with a number input. Returns the user's response as num | null. + * + * This proc should be used to create windows for number entry that the caller will wait for a response from. + * If tgui fancy chat is turned off: Will return a normal input. If a max or min value is specified, will + * validate the input inside the UI and ui_act. + * + * Arguments: + * * user - The user to show the number input to. + * * message - The content of the number input, shown in the body of the TGUI window. + * * title - The title of the number input modal, shown on the top of the TGUI window. + * * default - The default (or current) value, shown as a placeholder. Users can press refresh with this. + * * max_value - Specifies a maximum value. If none is set, any number can be entered. Pressing "max" defaults to 1000. + * * min_value - Specifies a minimum value. Often 0. + * * timeout - The timeout of the number input, after which the modal will close and qdel itself. Set to zero for no timeout. + * * round_value - whether the inputted number is rounded down into an integer. + */ +/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE, ui_state = GLOB.always_state) + if(!user) + user = usr + + if(!istype(user)) + if(!isclient(user)) + CRASH("We passed something that wasn't a user/client in a TGUI Input Number! The passed user was [user]!") + var/client/client = user + user = client.mob + + if(isnull(user.client)) + return + + // Client does NOT have tgui_input on: Returns regular input + if(user.client?.prefs?.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_INPUT) + var/input_number = input(user, message, title, default) as null|num + return clamp(round_value ? round(input_number) : input_number, min_value, max_value) + + var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value, ui_state) + + number_input.ui_interact(user) + number_input.wait() + if(number_input) + . = number_input.entry + qdel(number_input) + +/** + * # tgui_input_number + * + * Datum used for instantiating and using a TGUI-controlled number input that prompts the user with + * a message and has an input for number entry. + */ +/datum/tgui_input_number + /// Boolean field describing if the tgui_input_number was closed by the user. + var/closed + /// The default (or current) value, shown as a default. Users can press reset with this. + var/default + /// The entry that the user has return_typed in. + var/entry + /// The maximum value that can be entered. + var/max_value + /// The prompt's body, if any, of the TGUI window. + var/message + /// The minimum value that can be entered. + var/min_value + /// Whether the submitted number is rounded down into an integer. + var/round_value + /// The time at which the number input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the number input, after which the window will close and delete itself. + var/timeout + /// The title of the TGUI window + var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value, ui_state) + src.default = default + src.max_value = max_value + src.message = message + src.min_value = min_value + src.title = title + src.round_value = round_value + src.state = ui_state + + if(timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + + /// Checks for empty numbers - bank accounts, etc. + if(max_value == 0) + src.min_value = 0 + if(default) + src.default = 0 + + /// Sanity check + if(default < min_value) + src.default = min_value + + if(default > max_value) + CRASH("Default value is greater than max value.") + +/datum/tgui_input_number/Destroy(force) + SStgui.close_uis(src) + state = null + return ..() + +/** + * Waits for a user's response to the tgui_input_number's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_input_number/proc/wait() + while(!entry && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_input_number/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "NumberInputModal") + ui.open() + +/datum/tgui_input_number/ui_close(mob/user) + closed = TRUE + +/datum/tgui_input_number/ui_state(mob/user) + return state + +/datum/tgui_input_number/ui_static_data(mob/user) + var/list/data = list() + data["init_value"] = default // Default is a reserved keyword + data["min_value"] = min_value + data["max_value"] = max_value + data["round_value"] = round_value + data["message"] = message + data["large_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_LARGE_INPUT_BUTTONS + data["swapped_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_SWAP_INPUT_BUTTONS + data["title"] = title + return data + +/datum/tgui_input_number/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + return data + +/datum/tgui_input_number/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("submit") + if(!isnum(params["entry"])) + CRASH("A non number was input into TGUI Input Number by [usr]") + var/choice = round_value ? round(params["entry"]) : params["entry"] + if(choice > max_value) + CRASH("A number greater than the max value was input into TGUI Input Number by [usr]") + if(choice < min_value) + CRASH("A number less than the min value was input into TGUI Input Number by [usr]") + set_entry(choice) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_input_number/proc/set_entry(entry) + src.entry = entry diff --git a/code/modules/tgui/tgui_input/text_input.dm b/code/modules/tgui/tgui_input/text_input.dm new file mode 100644 index 000000000000..9e00d25414a9 --- /dev/null +++ b/code/modules/tgui/tgui_input/text_input.dm @@ -0,0 +1,171 @@ +/** + * Creates a TGUI window with a text input. Returns the user's response. + * + * This proc should be used to create windows for text entry that the caller will wait for a response from. + * If tgui fancy chat is turned off: Will return a normal input. If max_length is specified, will return + * stripped_multiline_input. + * + * Arguments: + * * user - The user to show the text input to. + * * message - The content of the text input, shown in the body of the TGUI window. + * * title - The title of the text input modal, shown on the top of the TGUI window. + * * default - The default (or current) value, shown as a placeholder. + * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (1024) + * * multiline - Bool that determines if the input box is much larger. Good for large messages, laws, etc. + * * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input. + * * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) + if(!user) + user = usr + + if(!istype(user)) + if(!isclient(user)) + CRASH("We passed something that wasn't a user/client in a TGUI Input Text! The passed user was [user]!") + var/client/client = user + user = client.mob + + if(isnull(user.client)) + return + + // Client does NOT have tgui_input on: Returns regular input + if(user.client?.prefs?.toggles2 & PREFTOGGLE_2_DISABLE_TGUI_INPUT) + if(encode) + if(multiline) + return stripped_multiline_input(user, message, title, default, max_length) + else + return stripped_input(user, message, title, default, max_length) + else + if(multiline) + return input(user, message, title, default) as message|null + else + return input(user, message, title, default) as text|null + + var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout, ui_state) + + text_input.ui_interact(user) + text_input.wait() + if(text_input) + . = text_input.entry + qdel(text_input) + +/** + * tgui_input_text + * + * Datum used for instantiating and using a TGUI-controlled text input that prompts the user with + * a message and has an input for text entry. + */ +/datum/tgui_input_text + /// Boolean field describing if the tgui_input_text was closed by the user. + var/closed + /// The default (or current) value, shown as a default. + var/default + /// Whether the input should be stripped using html_encode + var/encode + /// The entry that the user has return_typed in. + var/entry + /// The maximum length for text entry + var/max_length + /// The prompt's body, if any, of the TGUI window. + var/message + /// Multiline input for larger input boxes. + var/multiline + /// The time at which the text input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the text input, after which the window will close and delete itself. + var/timeout + /// The title of the TGUI window + var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout, ui_state) + src.default = default + src.encode = encode + src.max_length = max_length + src.message = message + src.multiline = multiline + src.title = title + src.state = ui_state + + if(timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_input_text/Destroy(force) + SStgui.close_uis(src) + state = null + return ..() + +/** + * Waits for a user's response to the tgui_input_text's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_input_text/proc/wait() + while(!entry && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_input_text/ui_state(mob/user) + return state + +/datum/tgui_input_text/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TextInputModal") + ui.open() + +/datum/tgui_input_text/ui_close(mob/user) + closed = TRUE + +/datum/tgui_input_text/ui_static_data(mob/user) + var/list/data = list() + data["max_length"] = max_length + data["message"] = message + data["multiline"] = multiline + data["placeholder"] = html_decode(default) // Default is a reserved keyword + data["large_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_LARGE_INPUT_BUTTONS + data["swapped_buttons"] = user.client?.prefs?.toggles2 & PREFTOGGLE_2_SWAP_INPUT_BUTTONS + data["title"] = title + return data + +/datum/tgui_input_text/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + return data + +/datum/tgui_input_text/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("submit") + if(!max_length) + return + if(length_char(params["entry"]) > max_length) + CRASH("[usr] typed a text string longer than the max length") + if(encode && (length_char(html_encode(params["entry"])) > max_length)) + to_chat(usr, "Your message was clipped due to special character usage.") + set_entry(params["entry"]) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/** + * Sets the return value for the tgui text proc. + * If html encoding is enabled, the text will be encoded. + * This can sometimes result in a string that is longer than the max length. + * If the string is longer than the max length, it will be clipped. + */ +/datum/tgui_input_text/proc/set_entry(entry) + if(isnull(entry)) + return + + var/converted_entry = encode ? html_encode(entry) : entry + src.entry = trim(converted_entry, max_length) diff --git a/code/modules/tgui/tgui_panel/README.md b/code/modules/tgui/tgui_panel/README.md new file mode 100644 index 000000000000..95f28ae0e8cf --- /dev/null +++ b/code/modules/tgui/tgui_panel/README.md @@ -0,0 +1,30 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + }, +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of recieved sequence numbers. Should the client recieve an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server recieves said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgui/tgui_panel/audio.dm b/code/modules/tgui/tgui_panel/audio.dm new file mode 100644 index 000000000000..1659f336683b --- /dev/null +++ b/code/modules/tgui/tgui_panel/audio.dm @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// Admin music volume, from 0 to 1. +/* check_grep:ignore */ /client/var/admin_music_volume = 1 + +/** + * public + * + * Sends music data to the browser. + * + * Optional settings: + * - pitch: the playback rate + * - start: the start time of the sound + * - end: when the musics stops playing + * + * required url string Must be an https URL. + * optional extra_data list Optional settings. + */ +/datum/tgui_panel/proc/play_music(url, extra_data) + if(!is_ready()) + return + var/list/payload = list() + if(length(extra_data) > 0) + for(var/key in extra_data) + payload[key] = extra_data[key] + payload["url"] = url + window.send_message("audio/playMusic", payload) + +/** + * public + * + * Stops playing music through the browser. + */ +/datum/tgui_panel/proc/stop_music() + if(!is_ready()) + return + window.send_message("audio/stopMusic") diff --git a/code/modules/tgui/tgui_panel/telemetry.dm b/code/modules/tgui/tgui_panel/telemetry.dm new file mode 100644 index 000000000000..e6b13091fe53 --- /dev/null +++ b/code/modules/tgui/tgui_panel/telemetry.dm @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Maximum number of connection records allowed to analyze. + * Should match the value set in the browser. + */ +#define TGUI_TELEMETRY_MAX_CONNECTIONS 5 + +/** + * Maximum time allocated for sending a telemetry packet. + */ +#define TGUI_TELEMETRY_RESPONSE_WINDOW 30 SECONDS + +/// Time of telemetry request +/* check_grep:ignore */ /datum/tgui_panel/var/telemetry_requested_at +/// Time of telemetry analysis completion +/* check_grep:ignore */ /datum/tgui_panel/var/telemetry_analyzed_at +/// List of previous client connections +/* check_grep:ignore */ /datum/tgui_panel/var/list/telemetry_connections + +/** + * private + * + * Requests some telemetry from the client. + */ +/datum/tgui_panel/proc/request_telemetry() + telemetry_requested_at = world.time + telemetry_analyzed_at = null + window.send_message("telemetry/request", list( + "limits" = list( + "connections" = TGUI_TELEMETRY_MAX_CONNECTIONS, + ), + )) + +/** + * private + * + * Analyzes a telemetry packet. + * + * Is currently only useful for detecting ban evasion attempts. + */ +/datum/tgui_panel/proc/analyze_telemetry(payload) + if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW) + message_admins("[key_name(client)] sent telemetry outside of the allocated time window.") + return + if(telemetry_analyzed_at) + message_admins("[key_name(client)] sent telemetry more than once.") + return + telemetry_analyzed_at = world.time + if(!payload) + return + telemetry_connections = payload["connections"] + var/len = length(telemetry_connections) + if(len == 0) + return + if(len > TGUI_TELEMETRY_MAX_CONNECTIONS) + message_admins("[key_name(client)] was kicked for sending a huge telemetry payload") + qdel(client) + return + var/list/found + for(var/i in 1 to len) + if(QDELETED(client)) + // He got cleaned up before we were done + return + var/list/row = telemetry_connections[i] + // Check for a malformed history object + if(!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) + return + if(world.IsBanned(row["ckey"], row["address"], row["computer_id"])) + found = row + break + CHECK_TICK + // This fucker has a history of playing on a banned account. + if(found) + var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])" + message_admins(msg) + log_admin(msg) diff --git a/code/modules/tgui/tgui_panel/tgui_panel.dm b/code/modules/tgui/tgui_panel/tgui_panel.dm new file mode 100644 index 000000000000..893d42b96612 --- /dev/null +++ b/code/modules/tgui/tgui_panel/tgui_panel.dm @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * tgui_panel datum + * Hosts tgchat and other nice features. + */ +/datum/tgui_panel + var/client/client + var/datum/tgui_window/window + var/broken = FALSE + var/initialized_at + +/datum/tgui_panel/New(client/client, id) + if(!id) + qdel(src) + CRASH("New TGUI panel created for [client] but no id supplied, deleting.") + src.client = client + window = new(client, id) + window.subscribe(src, PROC_REF(on_message)) + +/datum/tgui_panel/Del() + window.unsubscribe(src) + window.close() + return ..() + +/datum/tgui_panel/can_vv_get(var_name) + var/static/list/protected_vars = list("telemetry_connections") + if(!check_rights(R_ADMIN, FALSE, src) && (var_name in protected_vars)) + return FALSE + return TRUE + +/** + * public + * + * TRUE if panel is initialized and ready to receive messages. + */ +/datum/tgui_panel/proc/is_ready() + return !broken && window.is_ready() + +/** + * public + * + * Initializes tgui panel. + */ +/datum/tgui_panel/proc/initialize(force = FALSE) + set waitfor = FALSE + // Minimal sleep to defer initialization to after client constructor + sleep(1) + initialized_at = world.time + // Perform a clean initialization + window.initialize( + strict_mode = TRUE, + assets = list( + get_asset_datum(/datum/asset/simple/tgui_panel), + )) + window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome)) + request_telemetry() + addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS) + +/** + * private + * + * Called when initialization has timed out. + */ +/datum/tgui_panel/proc/on_initialize_timed_out() + // Currently does nothing but sending a message to old chat. + SEND_TEXT(client, "Failed to load fancy chat, click HERE to attempt to reload it.") + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_panel/proc/on_message(type, payload) + if(type == "ready") + broken = FALSE + window.send_message("update", list( + "config" = list( + "client" = list( + "ckey" = client.ckey, + "address" = client.address, + "computer_id" = client.computer_id, + ), + "window" = list( + "fancy" = FALSE, + "locked" = FALSE, + ), + ), + )) + return TRUE + if(type == "audio/setAdminMusicVolume") + client.admin_music_volume = payload["volume"] + return TRUE + if(type == "telemetry") + analyze_telemetry(payload) + return TRUE + +/** + * public + * + * Sends a round restart notification. + */ +/datum/tgui_panel/proc/send_roundrestart() + window.send_message("roundrestart") diff --git a/code/modules/tgui/tgui_panel/tgui_panel_external.dm b/code/modules/tgui/tgui_panel/tgui_panel_external.dm new file mode 100644 index 000000000000..67cd6d612e23 --- /dev/null +++ b/code/modules/tgui/tgui_panel/tgui_panel_external.dm @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/* check_grep:ignore */ /client/var/datum/tgui_panel/tgui_panel + +/** + * tgui panel / chat troubleshooting verb + */ +/client/verb/fix_tgui_panel() + set name = "Fix chat" + set category = "Special Verbs" + var/action + log_tgui(src, "Started fixing.") + + nuke_chat() + + // Failed to fix + action = alert(src, "Did that work?", "", "Yes", "No, switch to old ui") + if(action == "No, switch to old ui") + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + log_tgui(src, "Failed to fix.") + +/client/proc/nuke_chat() + // Catch all solution (kick the whole thing in the pants) + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + if(!tgui_panel || !istype(tgui_panel)) + log_tgui(src, "tgui_panel datum is missing") + tgui_panel = new(src) + tgui_panel.initialize(force = TRUE) + // Force show the panel to see if there are any errors + winset(src, "output", "is-disabled=1&is-visible=0") + winset(src, "browseroutput", "is-disabled=0;is-visible=1") + +/client/verb/refresh_tgui() + set name = "Refresh TGUI" + set category = "Special Verbs" + + for(var/window_id in tgui_windows) + var/datum/tgui_window/window = tgui_windows[window_id] + window.reinitialize() diff --git a/code/modules/tgui/tgui_panel/tgui_panel_message.dm b/code/modules/tgui/tgui_panel/tgui_panel_message.dm new file mode 100644 index 000000000000..2e9bfe784ec4 --- /dev/null +++ b/code/modules/tgui/tgui_panel/tgui_panel_message.dm @@ -0,0 +1,17 @@ +/** + * Message-related procs + * + * Message format (/list): + * - type - Message type, must be one of defines in `code/__DEFINES/chat.dm` + * - text - Plain message text + * - html - HTML message text + * - Optional metadata, can be any key/value pair. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/proc/message_to_html(message) + // Here it is possible to add a switch statement + // to custom-handle various message types. + return message["html"] || message["text"] diff --git a/code/modules/tgui/tgui_panel/to_chat.dm b/code/modules/tgui/tgui_panel/to_chat.dm new file mode 100644 index 000000000000..beb0f70be6d0 --- /dev/null +++ b/code/modules/tgui/tgui_panel/to_chat.dm @@ -0,0 +1,77 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Circumvents the message queue and sends the message to the recipient (target) as soon as possible. + * trailing_newline, confidential, and handle_whitespace currently have no effect, please fix this in the future or remove the arguments to lower cache! + */ +/proc/to_chat_immediate(target, html, type, text, avoid_highlighting = FALSE, handle_whitespace = TRUE, trailing_newline = TRUE, confidential = FALSE) + // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") + html = "[html]" + text = "[text]" + + if(!target) + return + if(!html && !text) + CRASH("Empty or null string in to_chat proc call.") + if(target == world) + target = GLOB.clients + + // Build a message + var/message = list() + if(type) + message["type"] = type + if(text) + message["text"] = text + if(html) + message["html"] = html + if(avoid_highlighting) + message["avoidHighlighting"] = avoid_highlighting + + // send it immediately + SSchat.send_immediate(target, message) + +/** + * Sends the message to the recipient (target). + * + * Recommended way to write to_chat calls: + * ``` + * to_chat(client, "You have found [object]", MESSAGE_TYPE_INFO, + * ``` + * Always remember to close spans! + * TARGET: Refers to the target of the to_chat message. Valid targets include clients, mobs, and the static world controller + * HTML: The Message to be sent to the TARGET. Converted to a string if not already one in this function + * TYPE: The chat tab that this message will be sent to, a list of all valid types can be found in chat.dm + * TEXT: Unused + * AVOID_HIGHLIGHTING: Unused + * trailing_newline, confidential, and handle_whitespace currently have no effect, please fix this in the future or remove the arguments to lower cache! + */ +/proc/to_chat(target, html, type, text, avoid_highlighting, handle_whitespace = TRUE, trailing_newline = TRUE, confidential = FALSE) + if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.initialized) + to_chat_immediate(target, html, type, text) + return + + // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") + html = "[html]" + text = "[text]" + + if(!target) + return + if(!html && !text) + CRASH("Empty or null string in to_chat proc call.") + if(target == world) + target = GLOB.clients + + // Build a message + var/message = list() + if(type) + message["type"] = type + if(text) + message["text"] = text + if(html) + message["html"] = html + if(avoid_highlighting) + message["avoidHighlighting"] = avoid_highlighting + SSchat.queue(target, message) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm new file mode 100644 index 000000000000..0bdbc3778d66 --- /dev/null +++ b/code/modules/tgui/tgui_window.dm @@ -0,0 +1,369 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/datum/tgui_window + var/id + var/client/client + var/pooled + var/pool_index + var/is_browser = FALSE + var/status = TGUI_WINDOW_CLOSED + var/locked = FALSE + var/datum/tgui/locked_by + var/datum/subscriber_object + var/subscriber_delegate + var/fatally_errored = FALSE + var/message_queue + var/sent_assets = list() + // Vars passed to initialize proc (and saved for later) + var/initial_strict_mode + var/initial_fancy + var/initial_assets + var/initial_inline_html + var/initial_inline_js + var/initial_inline_css + +/** + * public + * + * Create a new tgui window. + * + * required client /client + * required id string A unique window identifier. + */ +/datum/tgui_window/New(client/client, id, pooled = FALSE) + src.id = id + src.client = client + src.client.tgui_windows[id] = src + src.pooled = pooled + if(pooled) + src.pool_index = TGUI_WINDOW_INDEX(id) + +/** + * public + * + * Initializes the window with a fresh page. Puts window into the "loading" + * state. You can begin sending messages right after initializing. Messages + * will be put into the queue until the window finishes loading. + * + * optional strict_mode bool - Enables strict error handling and BSOD. + * optional fancy bool - If TRUE and if this is NOT a panel, will hide the window titlebar. + * optional assets list - List of assets to load during initialization. + * optional inline_html string - Custom HTML to inject. + * optional inline_js string - Custom JS to inject. + * optional inline_css string - Custom CSS to inject. + */ +/datum/tgui_window/proc/initialize( + strict_mode = FALSE, + fancy = FALSE, + assets = list(), + inline_html = "", + inline_js = "", + inline_css = "") + log_tgui(client, "[id]/initialize") + if(!client) + return + src.initial_fancy = fancy + src.initial_assets = assets + src.initial_inline_html = inline_html + src.initial_inline_js = inline_js + src.initial_inline_css = inline_css + status = TGUI_WINDOW_LOADING + fatally_errored = FALSE + // Build window options + var/options = "file=[id].html;can_minimize=0;auto_format=0;" + // Remove titlebar and resize handles for a fancy window + if(fancy) + options += "titlebar=0;can_resize=0;" + else + options += "titlebar=1;can_resize=1;" + // Generate page html + var/html = SStgui.basehtml + html = replacetextEx(html, "\[tgui:windowId]", id) + html = replacetextEx(html, "\[tgui:strictMode]", strict_mode) + // Inject assets + var/inline_assets_str = "" + for(var/datum/asset/asset in assets) + var/mappings = asset.get_url_mappings() + for(var/name in mappings) + var/url = mappings[name] + // Not encoding since asset strings are considered safe + if(copytext(name, -4) == ".css") + inline_assets_str += "Byond.loadCss('[url]', true);\n" + else if(copytext(name, -3) == ".js") + inline_assets_str += "Byond.loadJs('[url]', true);\n" + asset.send(client) + if(length(inline_assets_str)) + inline_assets_str = "\n" + html = replacetextEx(html, "\n", inline_assets_str) + // Inject inline HTML + if(inline_html) + html = replacetextEx(html, "", isfile(inline_html) ? file2text(inline_html) : inline_html) + // Inject inline JS + if(inline_js) + inline_js = "" + html = replacetextEx(html, "", inline_js) + // Inject inline CSS + if(inline_css) + inline_css = "" + html = replacetextEx(html, "", inline_css) + // Open the window + client << browse(html, "window=[id];[options]") + // Detect whether the control is a browser + is_browser = winexists(client, id) == "BROWSER" + // Instruct the client to signal UI when the window is closed. + if(!is_browser) + winset(client, id, "on-close=\"uiclose [id]\"") + +/** + * public + * + * Reinitializes the panel with previous data used for initialization. + */ +/datum/tgui_window/proc/reinitialize() + initialize( + strict_mode = initial_strict_mode, + fancy = initial_fancy, + assets = initial_assets, + inline_html = initial_inline_html, + inline_js = initial_inline_js, + inline_css = initial_inline_css) + // Resend assets + for(var/datum/asset/asset in sent_assets) + send_asset(asset) + +/** + * public + * + * Checks if the window is ready to receive data. + * + * return bool + */ +/datum/tgui_window/proc/is_ready() + return status == TGUI_WINDOW_READY + +/** + * public + * + * Checks if the window can be sanely suspended. + * + * return bool + */ +/datum/tgui_window/proc/can_be_suspended() + return !fatally_errored \ + && pooled \ + && pool_index > 0 \ + && pool_index <= TGUI_WINDOW_SOFT_LIMIT \ + && status == TGUI_WINDOW_READY + +/** + * public + * + * Acquire the window lock. Pool will not be able to provide this window + * to other UIs for the duration of the lock. + * + * Can be given an optional tgui datum, which will be automatically + * subscribed to incoming messages via the on_message proc. + * + * optional ui /datum/tgui + */ +/datum/tgui_window/proc/acquire_lock(datum/tgui/ui) + locked = TRUE + locked_by = ui + +/** + * public + * + * Release the window lock. + */ +/datum/tgui_window/proc/release_lock() + // Clean up assets sent by tgui datum which requested the lock + if(locked) + sent_assets = list() + locked = FALSE + locked_by = null + +/** + * public + * + * Subscribes the datum to consume window messages on a specified proc. + * + * Note, that this supports only one subscriber, because code for that + * is simpler and therefore faster. If necessary, this can be rewritten + * to support multiple subscribers. + */ +/datum/tgui_window/proc/subscribe(datum/object, delegate) + subscriber_object = object + subscriber_delegate = delegate + +/** + * public + * + * Unsubscribes the datum. Do not forget to call this when cleaning up. + */ +/datum/tgui_window/proc/unsubscribe(datum/object) + subscriber_object = null + subscriber_delegate = null + +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui_window/proc/close(can_be_suspended = TRUE) + if(!client) + return + if(can_be_suspended && can_be_suspended()) + log_tgui(client, "[id]/close: suspending") + status = TGUI_WINDOW_READY + send_message("suspend") + return + log_tgui(client, "[id]/close") + release_lock() + status = TGUI_WINDOW_CLOSED + message_queue = null + // Do not close the window to give user some time + // to read the error message. + if(!fatally_errored) + client << browse(null, "window=[id]") + +/** + * public + * + * Sends a message to tgui window. + * + * required type string Message type + * required payload list Message payload + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_message(type, payload, force) + if(!client) + return + var/message = TGUI_CREATE_MESSAGE(type, payload) + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + +/** + * public + * + * Sends a raw payload to tgui window. + * + * required message string JSON+urlencoded blob to send. + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_raw_message(message, force) + if(!client) + return + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + +/** + * public + * + * Makes an asset available to use in tgui. + * + * required asset datum/asset + * + * return bool - TRUE if any assets had to be sent to the client + */ +/datum/tgui_window/proc/send_asset(datum/asset/asset) + if(!client || !asset) + return + + sent_assets |= list(asset) + . = asset.send(client) + if(istype(asset, /datum/asset/spritesheet)) + var/datum/asset/spritesheet/spritesheet = asset + send_message("asset/stylesheet", spritesheet.css_filename()) + send_raw_message(asset.get_serialized_url_mappings()) + +/** + * private + * + * Sends queued messages if the queue wasn't empty. + */ +/datum/tgui_window/proc/flush_message_queue() + if(!client || !message_queue) + return + for(var/message in message_queue) + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + message_queue = null + +/** + * public + * + * Replaces the inline HTML content. + * + * required inline_html string HTML to inject + */ +/datum/tgui_window/proc/replace_html(inline_html = "") + client << output(url_encode(inline_html), is_browser \ + ? "[id]:replaceHtml" \ + : "[id].browser:replaceHtml") + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_window/proc/on_message(type, payload, href_list) + // Status can be READY if user has refreshed the window. + if(type == "ready" && status == TGUI_WINDOW_READY) + // Resend the assets + for(var/asset in sent_assets) + send_asset(asset) + // Mark this window as fatally errored which prevents it from + // being suspended. + if(type == "log" && href_list["fatal"]) + fatally_errored = TRUE + // Mark window as ready since we received this message from somewhere + if(status != TGUI_WINDOW_READY) + status = TGUI_WINDOW_READY + flush_message_queue() + // Pass message to UI that requested the lock + if(locked && locked_by) + var/prevent_default = locked_by.on_message(type, payload, href_list) + if(prevent_default) + return + // Pass message to the subscriber + else if(subscriber_object) + var/prevent_default = call( + subscriber_object, + subscriber_delegate)(type, payload, href_list) + if(prevent_default) + return + // If not locked, handle these message types + switch(type) + if("ping") + send_message("ping/reply", payload) + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("openLink") + client << link(href_list["url"]) + if("cacheReloaded") + reinitialize() + if("chat/resend") + SSchat.handle_resend(client, payload) diff --git a/code/modules/tgui_input/say_modal/tgui_say_modal.dm b/code/modules/tgui_input/say_modal/tgui_say_modal.dm new file mode 100644 index 000000000000..bf5c9621fbc1 --- /dev/null +++ b/code/modules/tgui_input/say_modal/tgui_say_modal.dm @@ -0,0 +1,123 @@ +/** + * Creates a JSON encoded message to open TGUI say modals properly. + * + * Arguments: + * channel - The channel to open the modal in. + * Returns: + * string - A JSON encoded message to open the modal. + */ +/client/proc/tgui_say_create_open_command(channel) + var/message = TGUI_CREATE_MESSAGE("open", list( + channel = channel, + )) + return "\".output tgui_say.browser:update [message]\"" + +/** + * The tgui say modal. This initializes an input window which hides until + * the user presses one of the speech hotkeys. Once something is entered, it will + * delegate the speech to the proper channel. + */ +/datum/tgui_say + /// The user who opened the window + var/client/client + /// The modal window + var/datum/tgui_window/window + /// Boolean for whether the tgui_say was opened by the user. + var/window_open + +/** Creates the new input window to exist in the background. */ +/datum/tgui_say/New(client/client, id) + src.client = client + window = new(client, id) + winset(client, "tgui_say", "size=1,1;is-visible=0;") + window.subscribe(src, PROC_REF(on_message)) + window.is_browser = TRUE + +/** + * After a brief period, injects the scripts into + * the window to listen for open commands. + */ +/datum/tgui_say/proc/initialize() + set waitfor = FALSE + // Sleep to defer initialization to after client constructor + sleep(3) + window.initialize( + strict_mode = TRUE, + fancy = TRUE, + inline_css = file("tgui/public/tgui-say.bundle.css"), + inline_js = file("tgui/public/tgui-say.bundle.js"), + ); + +/** + * Ensures nothing funny is going on window load. + * Minimizes the window, sets max length, closes all + * typing and thinking indicators. This is triggered + * as soon as the window sends the "ready" message. + */ +/datum/tgui_say/proc/load() + window_open = FALSE + winset(client, "tgui_say", "pos=848,500;size=275,30;is-visible=0;") + window.send_message("props", list( + "lightMode" = (client.prefs.toggles2 & PREFTOGGLE_2_ENABLE_TGUI_SAY_LIGHT_MODE), + "maxLength" = MAX_MESSAGE_LEN, + )) + stop_thinking() + return TRUE + +/** + * Sets the window as "opened" server side, though it is already + * visible to the user. We do this to set local vars & + * start typing (if enabled and in an IC channel). + * + * Arguments: + * payload - A list containing the channel the window was opened in. + */ +/datum/tgui_say/proc/open(payload) + if(!payload?["channel"]) + CRASH("No channel provided to an open TGUI-Say") + window_open = TRUE + switch(payload["channel"]) + if(ME_CHANNEL, RADIO_CHANNEL, SAY_CHANNEL, WHISPER_CHANNEL) + start_thinking() + return TRUE + +/** + * Closes the window serverside. Closes any open chat bubbles + * regardless of preference. + */ +/datum/tgui_say/proc/close() + window_open = FALSE + stop_thinking() + stop_typing() + +/** + * The equivalent of ui_act, this waits on messages from the window + * and delegates actions. + */ +/datum/tgui_say/proc/on_message(type, payload) + switch(type) + if("ready") + load() + return TRUE + if("open") + open(payload) + return TRUE + if("close") + close() + return TRUE + if("thinking") + if(payload["visible"] == TRUE) + start_thinking() + return TRUE + if(payload["visible"] == FALSE) + stop_thinking() + return TRUE + return FALSE + if("typing") + start_typing(payload["isMeChannel"]) + return TRUE + if("entry") + handle_entry(payload) + return TRUE + + return FALSE diff --git a/code/modules/tgui_input/say_modal/tgui_say_speech.dm b/code/modules/tgui_input/say_modal/tgui_say_speech.dm new file mode 100644 index 000000000000..b7c9a48a065c --- /dev/null +++ b/code/modules/tgui_input/say_modal/tgui_say_speech.dm @@ -0,0 +1,61 @@ +/** + * Delegates the speech to the proper channel. + * + * Arguments: + * entry - the text to broadcast + * channel - the channel to broadcast in + * Returns: + * boolean - on success or failure + */ +/datum/tgui_say/proc/delegate_speech(entry, channel) + switch(channel) + if(SAY_CHANNEL) + client.mob.say_verb(entry) + return TRUE + if(RADIO_CHANNEL) + client.mob.say_verb((isliving(client.mob) ? ";" : "") + entry) + return TRUE + if(WHISPER_CHANNEL) + client.mob.whisper(entry) + return TRUE + if(ME_CHANNEL) + client.mob.me_verb(entry) + return TRUE + if(OOC_CHANNEL) + client.ooc(entry) + return TRUE + if(LOOC_CHANNEL) + client.looc(entry) + return TRUE + if(ADMIN_CHANNEL) + client.cmd_admin_say(entry) + return TRUE + if(MENTOR_CHANNEL) + client.cmd_mentor_say(entry) + return TRUE + if(DSAY_CHANNEL) + client.dsay(entry) + return TRUE + return FALSE + +/** + * Handles text entry and forced speech. + * + * Arguments: + * payload - a string list containing entry & channel + * Returns: + * boolean - success or failure + */ +/datum/tgui_say/proc/handle_entry(payload) + if(!payload?["channel"] || !payload["entry"]) + var/hacker_man_ckey = usr.client.ckey + qdel(usr.client) + message_admins("[hacker_man_ckey] was kicked for attemping to send a null message to TGUI-say.") + CRASH("[hacker_man_ckey] entered in a null payload to the chat window.") + if(length(payload["entry"]) > MAX_MESSAGE_LEN) + var/hacker_man_ckey = usr.client.ckey + qdel(usr.client) + message_admins("[hacker_man_ckey] was kicked for attemping to bypass TGUI-say character limits.") + CRASH("[hacker_man_ckey] has entered more characters than allowed into a TGUI-Say.") + delegate_speech(payload["entry"], payload["channel"]) + return TRUE diff --git a/code/modules/tgui_input/say_modal/tgui_say_typing.dm b/code/modules/tgui_input/say_modal/tgui_say_typing.dm new file mode 100644 index 000000000000..9c137ec5ad9c --- /dev/null +++ b/code/modules/tgui_input/say_modal/tgui_say_typing.dm @@ -0,0 +1,41 @@ +/** Sets the mob as "thinking" - with indicator */ +/datum/tgui_say/proc/start_thinking() + if(!client?.mob || !window_open) + return FALSE + /// Special exemptions + if(isabductor(client.mob)) + return FALSE + client.mob.set_thinking_indicator(TRUE) + addtimer(CALLBACK(src, PROC_REF(stop_thinking)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) + +/** Removes typing/thinking indicators and flags the mob as not thinking */ +/datum/tgui_say/proc/stop_thinking() + if(!client?.mob) + return FALSE + client.mob.set_thinking_indicator(FALSE) + +/** + * Handles the user typing. After a brief period of inactivity, + * signals the client mob to revert to the "thinking" icon. + */ +/datum/tgui_say/proc/start_typing(me = FALSE) + if(!client?.mob) + return FALSE + client.mob.set_typing_indicator(FALSE) + client.mob.set_thinking_indicator(FALSE) + if(!window_open) + return FALSE + client.mob.set_typing_indicator(TRUE, me) + addtimer(CALLBACK(src, PROC_REF(stop_typing)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) + +/** + * Callback to remove the typing indicator after a brief period of inactivity. + * If the user was typing IC, the thinking indicator is shown. + */ +/datum/tgui_say/proc/stop_typing() + if(!client?.mob) + return FALSE + client.mob.set_typing_indicator(FALSE) + if(!window_open) + return FALSE + client.mob.set_thinking_indicator(TRUE) diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html index d2c6016b1a94..31c1350ab65f 100644 --- a/code/modules/tooltip/tooltip.html +++ b/code/modules/tooltip/tooltip.html @@ -77,6 +77,19 @@ .operative .wrap {border-color: #1E0101;} .operative .content {color: #FFFFFF; border-color: #750000; background-color: #350000;} + /* SS220 ADDITION - START */ + .clockwork .wrap {border-color: #170800;} + .clockwork .content {color: #B18B25; border-color: #000000; background-color: #5F380E;} + + .vaporwave .wrap {border-color: #0c122c;} + .vaporwave .content {color: #bc3ce3; border-color: #170c2c; background-color: #1d1a22;} + + .detective .wrap {border-color: #2c0F0c;} + .detective .content {color: #c7b08b; border-color: #2c0F0c; background-color: #221c1a;} + + .trasenknox .wrap {border-color: #998e81;} + .trasenknox .content {color: #3ce375; border-color: #998e81; background-color: #1e1d21;} + /* SS220 ADDITION - END */ diff --git a/code/modules/vote/vote_datum.dm b/code/modules/vote/vote_datum.dm index 903e961f5d84..1a9fb643aba6 100644 --- a/code/modules/vote/vote_datum.dm +++ b/code/modules/vote/vote_datum.dm @@ -117,9 +117,10 @@ /datum/vote/proc/announce(start_text) - to_chat(world, {"[start_text] - Click here or type Vote to place your vote. - You have [GLOB.configuration.vote.vote_time / 10] seconds to vote."}) + to_chat(world, chat_box_purple( + "[start_text]

        \ + Click here or type Vote to place your vote.
        \ + You have [GLOB.configuration.vote.vote_time / 10] seconds to vote.
        ")) SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) @@ -149,10 +150,13 @@ /* UI STUFFS */ -/datum/vote/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/vote/ui_state(mob/user) + return GLOB.always_state + +/datum/vote/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "VotePanel", "VotePanel", 400, 500, master_ui, state) + ui = new(user, src, "VotePanel", "Vote Panel") ui.open() /datum/vote/ui_data(mob/user) @@ -195,5 +199,5 @@ if(params["target"] in choices) voted[usr.ckey] = params["target"] else - message_admins("\[EXPLOIT] User [key_name_admin(usr)] spoofed a vote in the vote panel!") + message_admins("\[EXPLOIT] User [key_name_admin(usr)] spoofed a vote in the vote panel!") diff --git a/code/modules/vote/vote_verb.dm b/code/modules/vote/vote_verb.dm index 3f5b142e5b14..1e44179142d4 100644 --- a/code/modules/vote/vote_verb.dm +++ b/code/modules/vote/vote_verb.dm @@ -28,7 +28,7 @@ for(var/vtype in vote_types) votemap["[vtype]"] = vtype - var/choice = input(usr, "Select a vote type", "Vote") as null|anything in vote_types + var/choice = tgui_input_list(usr, "Select a vote type", "Vote", vote_types) if(choice == null) return @@ -40,18 +40,18 @@ return // Its custom, lets ask - var/question = html_encode(input(usr, "What is the vote for?") as text|null) + var/question = tgui_input_text(usr, "What is the vote for?", "Create Vote", encode = FALSE) if(!question) return var/list/choices = list() for(var/i in 1 to 10) - var/option = capitalize(html_encode(input(usr, "Please enter an option or hit cancel to finish") as text|null)) + var/option = tgui_input_text(usr, "Please enter an option or hit cancel to finish", "Create Vote", encode = FALSE) if(!option || !usr.client) break choices |= option - var/c2 = alert(usr, "Show counts while vote is happening?", "Counts", "Yes", "No") + var/c2 = tgui_alert(usr, "Show counts while vote is happening?", "Counts", list("Yes", "No")) var/c3 = input(usr, "Select a result calculation type", "Vote", VOTE_RESULT_TYPE_MAJORITY) as anything in list(VOTE_RESULT_TYPE_MAJORITY) var/datum/vote/V = new /datum/vote(usr.ckey, question, choices, TRUE) diff --git a/config/example/config.toml b/config/example/config.toml index 6837fe3801ec..846855eb666f 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -31,6 +31,7 @@ # - system_configuration # - url_configuration # - voting_configuration +# - # SS220 CONFIGS # - gateway_configuration @@ -385,8 +386,6 @@ details_url = "https://iphub.info/?ip=" [job_configuration] # This section contains information on job configuartion, as well as the jon amounts -# Disable this if you are in a lowpop environment -jobs_have_minimal_access = true # Require account agre restrictions for job? Requires the database restrict_jobs_on_account_age = false # Allow admins to bypass all job age restrictions @@ -715,6 +714,9 @@ active_lava_ruins = [ "_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm", "_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm", "_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm", + "_maps/map_files220/RandomRuins/LavaRuins/cheesus_temple.dmm", + "_maps/map_files220/RandomRuins/LavaRuins/ash_old.dmm", + "_maps/map_files220/RandomRuins/LavaRuins/old_outpost.dmm", ] # Budget for lavaland ruins. A higher number means more will spawn lavaland_ruin_budget = 100 @@ -849,6 +851,26 @@ map_vote_day_types = [ ################################################################ + +[asset_cache_configuration] +# Browser assets are any file included in interfaces. css, images, javascript, etc. +# This handles configuring how we get these to the player so interfaces can access them. + +# The normal way of getting assets to clients is to use the internal byond system. This can be slow and delay the opening of interface windows. It also doesn't allow the internal IE windows byond uses to cache anything. +# You can instead have the server save them to a website via a folder within the game server that the web server can read. This could be a simple webserver or something backed by a CDN. +# Valid values: simple, webroot. Simple is the default. +asset_transport = "simple" +# Uncomment this to have the server passively send all browser assets to each client in the background. (instead of waiting for them to be needed) +# This should be uncommented in production and commented in development +asset_simple_preload = true +# Local folder to save assets to. +# Assets will be saved in the format of asset.MD5HASH.EXT or in namespaces/hash/ as ASSET_FILE_NAME or asset.MD5HASH.EXT +# asset_cdn_webroot = "data/asset-store/" +# for best results the webserver powering this should return a long cache validity time, as all assets sent via this transport use hash based urls +# if you want to test this locally, you simpily run the `localhost-asset-webroot-server.py` python3 script to host assets stored in `data/asset-store/` via http://localhost:58715/ +# asset_cdn_url = "http://localhost:58715/" + + # Congratulations. You reached the end. heres a cookie. # And some SS220 configs ratge. @@ -898,6 +920,8 @@ ffmpeg_cpuaffinity = "" # Force discord verification force_discord_verification = false +# Respawn delay in minutes before one may respawn as a crew member +respawn_delay = 20 ################################################################ diff --git a/fonts/REBUFFED.TTF b/fonts/REBUFFED.TTF deleted file mode 100644 index 2fe5468ee0d2..000000000000 Binary files a/fonts/REBUFFED.TTF and /dev/null differ diff --git a/fonts/binary.ttf b/fonts/binary.ttf deleted file mode 100644 index 16c1059dd474..000000000000 Binary files a/fonts/binary.ttf and /dev/null differ diff --git a/fonts/skrell.ttf b/fonts/skrell.ttf deleted file mode 100644 index 7df455719e3f..000000000000 Binary files a/fonts/skrell.ttf and /dev/null differ diff --git a/fonts/slime.ttf b/fonts/slime.ttf deleted file mode 100644 index 2f8b9da9bbcf..000000000000 Binary files a/fonts/slime.ttf and /dev/null differ diff --git a/goon/browserassets/html/browserOutput.html b/goon/browserassets/html/browserOutput.html deleted file mode 100644 index 2d4deb2fb15c..000000000000 --- a/goon/browserassets/html/browserOutput.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Chat - - - - - - - - - - - - - - - - - - - - -
        - -
        - Loading...

        - If this takes longer than 10 seconds, it will automatically reload, multiple times if necessary.
        - If it still does not reload, do not open an adminhelp, you will be unable to see our responses.
        - Please instead click the wiki button in the top right of your screen and type "Goonchat Troubleshooting"
        - This will provide possible solutions, furthermore please seek help on our discord #helpchat if this
        - issue cannot be resolved on your own. -
        -
        -
        - -
        - - - - - - diff --git a/goon/browserassets/js/browserOutput.js b/goon/browserassets/js/browserOutput.js deleted file mode 100644 index 7f58d9340265..000000000000 --- a/goon/browserassets/js/browserOutput.js +++ /dev/null @@ -1,1235 +0,0 @@ -/***************************************** -* -* FUNCTION AND VAR DECLARATIONS -* -******************************************/ - -//DEBUG STUFF -var escaper = encodeURIComponent || escape; -var decoder = decodeURIComponent || unescape; -window.onerror = function(msg, url, line, col, error) { - if (document.location.href.indexOf("proc=debug") <= 0) { - var extra = !col ? '' : ' | column: ' + col; - extra += !error ? '' : ' | error: ' + error; - extra += !navigator.userAgent ? '' : ' | user agent: ' + navigator.userAgent; - var debugLine = 'Error: ' + msg + ' | url: ' + url + ' | line: ' + line + extra; - window.location = '?_src_=chat&proc=debug¶m[error]='+escaper(debugLine); - } - return true; -}; - -//Globals -window.status = 'Output'; -var $messages, $subOptions, $contextMenu, $filterMessages; -var opts = { - //General - 'messageCount': 0, //A count...of messages... - 'messageLimit': 2053, //A limit...for the messages... - 'scrollSnapTolerance': 5, //If within x pixels of bottom - 'clickTolerance': 10, //Keep focus if outside x pixels of mousedown position on mouseup - 'popups': 0, //Amount of popups opened ever - 'wasd': false, //Is the user in wasd mode? - 'chatMode': 'default', //The mode the chat is in - 'priorChatHeight': 0, //Thing for height-resizing detection - 'restarting': false, //Is the round restarting? - 'previousMessage': '', - 'previousMessageCount': 1, - 'hideSpam': true, - - //Options menu - 'subOptionsLoop': null, //Contains the interval loop for closing the options menu - 'suppressOptionsClose': false, //Whether or not we should be hiding the suboptions menu - 'highlightTerms': [], - 'highlightLimit': 5, - 'highlightRegexEnable':false, - 'highlightColor': '#FFFF00', //The color of the highlighted message - 'pingDisabled': false, //Has the user disabled the ping counter - - //Ping display - 'lastPang': 0, //Timestamp of the last response from the server. - 'pangLimit': 35000, - 'pingTime': 0, //Timestamp of when ping sent - 'pongTime': 0, //Timestamp of when ping received - 'noResponse': false, //Tracks the state of the previous ping request - 'noResponseCount': 0, //How many failed pings? - - //Clicks - 'mouseDownX': null, - 'mouseDownY': null, - 'preventFocus': false, //Prevents switching focus to the game window - - //Admin stuff - 'adminLoaded': false, //Has the admin loaded his shit? - - //Client Connection Data - 'clientDataLimit': 5, - 'clientData': [], - - // List of macros in the 'hotkeymode' macro set. - 'macros': {}, - - // Emoji toggle - 'enableEmoji': true, - - // Reboot message stuff - 'rebootIntervalHandler': null, - - // Syndicate codewords - 'codePhrases': [], - 'codeResponses': [] -}; - -var regexHasError = false; //variable to check if regex has excepted - -function outerHTML(el) { - var wrap = document.createElement('div'); - wrap.appendChild(el.cloneNode(true)); - return wrap.innerHTML; -} - -//Polyfill for fucking date now because of course IE8 and below don't support it -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} -//Polyfill for trim() (IE8 and below) -if (typeof String.prototype.trim !== 'function') { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -//Polyfill for string.prototype.includes. Why the fuck. Just why the fuck. -if (!String.prototype.includes) { - String.prototype.includes = function(search, start) { - 'use strict'; - - if (search instanceof RegExp) { - throw TypeError('first argument must not be a RegExp'); - } - if (start === undefined) { start = 0; } - return this.indexOf(search, start) !== -1; - }; -} - -//Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify(text) { - var rex = /((?:'+$0+''; - } - else { - return $1 ? $0: ''+$0+''; - } - }); -} - -function byondDecode(message) { - // Basically we url_encode twice server side so we can manually read the encoded version and actually do UTF-8. - // The replace for + is because FOR SOME REASON, BYOND replaces spaces with a + instead of %20, and a plus with %2b. - // Marvelous. - message = message.replace(/\+/g, "%20"); - try { - // This is a workaround for the above not always working when BYOND's shitty url encoding breaks. - // Basically, sometimes BYOND's double encoding trick just arbitrarily produces something that makes decodeURIComponent - // throw an "Invalid Encoding URI" URIError... the simplest way to work around this is to just ignore it and use unescape instead - // which just fails to decode shit instead of throwing errors - if (decodeURIComponent) { - message = decodeURIComponent(message); - } else { - throw new Error("Easiest way to trigger the fallback") - } - } catch (err) { - message = unescape(message); - } - return message; -} - -function emojiparse(el) { - - if ((typeof UNICODE_9_EMOJI === 'undefined') || (typeof twemoji === 'undefined')) { - return; //something didn't load right, probably IE8 - } - - var $el = $(el); - - var $emojiZone = $el.find(".emoji_enabled"); - - if ($emojiZone.length) { - $emojiZone.each(function () { - var html = $(this).html(); - html = html.replace(/\:(.*?)\:/g, function (match, p1, offset, s) { - var unicode_entity = UNICODE_9_EMOJI[p1]; - if (unicode_entity) { - return unicode_entity; - } - return match; - }); - html = $.parseHTML(twemoji.parse(html, {size: "svg", ext: ".svg"})); - $(this).html(html); - }); - } -} - -// Recolorizes the highlight spans -function setHighlightColor() { - var highlightspans = document.getElementsByClassName("highlight") - for(var i in highlightspans){ - highlightspans[i].setAttribute("style","background-color:"+opts.highlightColor) - } -} - -function escapeRegexCharacters(input){ //escapes any characters that could be interpreted as regex patterns, potentially causing patterns to break if not escaped - return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); -} - -//Highlights words based on user settings -function highlightTerms(el) { - - if (regexHasError) return; //just stop right there ig the regex is gonna except - - function highlightRecursor(element, term, className){ //recursor function to do the highlighting proper - var regex = new RegExp(term, "gi"); - - var replace; - if (className) { - replace = function(str) { - return str.replace(regex, '$&'); - }; - } else { - replace = function(str) { - return str.replace(regex, '$&'); - }; - } - - var s = ''; - var work = element.innerHTML; - var ind = 0; - - while(ind < work.length) { - - var next_term = work.substring(ind).search(regex); - if(next_term != -1) next_term += ind; - var next_tag = work.indexOf('<', ind); - if(next_tag == -1) { - s+=replace(work.substring(ind)); - break; - } - else if(next_term==-1) { - s += work.substring(ind); - break; - } - else if(next_tag < next_term) { - var temp = work.indexOf('>', next_tag); - s += work.substring(ind,temp+1); - ind = temp+1; - } - else { - s += replace(work.substring(ind, next_tag)); - ind = next_tag; - } - } - - element.innerHTML = s; - } - - for (var i = 0; i < opts.highlightTerms.length; i++) { //Each highlight term - if(opts.highlightTerms[i]) { - if(!opts.highlightRegexEnable){ - var innerTerms = opts.highlightTerms[i].split(" ") - for(var a in innerTerms){ - highlightRecursor(el, escapeRegexCharacters(innerTerms[a])) - } - } - else { - try{ - new RegExp(opts.highlightTerms[i], "gmi"); // check to make sure the pattern wont cause issues - } catch(e){ - el.innerHTML += '
        Your highlight regex pattern -- ' + opts.highlightTerms[i] + ' -- is malformed.
        Your highlights have been disabled until they are next edited
        Thrown exception: '+e+'
        '; - regexHasError = true; - return; - } - highlightRecursor(el, opts.highlightTerms[i]); - } - } - } - - // Code phrases - for (var i = 0; i < opts.codePhrases.length; i++) { - highlightRecursor(el, escapeRegexCharacters(opts.codePhrases[i]), "codephrases"); - } - for (var i = 0; i < opts.codeResponses.length; i++) { - highlightRecursor(el, escapeRegexCharacters(opts.codeResponses[i]), "coderesponses"); - } -} - -//Send a message to the client -function output(message, flag) { - if (typeof message === 'undefined') { - return; - } - if (typeof flag === 'undefined') { - flag = ''; - } - - if (flag !== 'internal') - opts.lastPang = Date.now(); - - message = byondDecode(message).trim(); - - var messageHtml = $.parseHTML(message); - //The behemoth of filter-code (for Admin message filters) - //Note: This is proooobably hella inefficient - var filteredOut = false; - if (opts.hasOwnProperty('showMessagesFilters') && !opts.showMessagesFilters['All'].show) { - //Get this filter type (defined by class on message) - var messageClasses; - if (opts.hasOwnProperty('filterHideAll') && opts.filterHideAll) { - var internal = false; - messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false); - if (messageClasses) { - for (var i = 0; i < messageClasses.length; i++) { //Every class - if (messageClasses[i] == 'internal') { - internal = true; - break; - } - } - } - if (!internal) { - filteredOut = 'All'; - } - } else { - //If the element or it's child have any classes - if (!!$(messageHtml).attr('class') || !!$(messageHtml).children().attr('class')) { - messageClasses = $(messageHtml).attr('class').split(/\s+/); - if (!!$(messageHtml).children().attr('class')) { - messageClasses = messageClasses.concat($(messageHtml).children().attr('class').split(/\s+/)); - } - - for (var i = 0; i < messageClasses.length; i++) { //Every class - var thisClass = messageClasses[i]; - $.each(opts.showMessagesFilters, function(key, val) { //Every filter - if (key !== 'All' && val.show === false && typeof val.match != 'undefined') { - for (var i = 0; i < val.match.length; i++) { - var matchClass = val.match[i]; - if (matchClass == thisClass) { - filteredOut = key; - break; - } - } - } - if (filteredOut) return false; - }); - if (filteredOut) break; - } - } else { - if (!opts.showMessagesFilters['Misc'].show) { - filteredOut = 'Misc'; - } - } - } - } - - //Stuff we do along with appending a message - var atBottom = false; - if (!filteredOut) { - var bodyHeight = $('body').height(); - var messagesHeight = $messages.outerHeight(); - var scrollPos = $('body,html').scrollTop(); - - //Should we snap the output to the bottom? - if (bodyHeight + scrollPos >= messagesHeight - opts.scrollSnapTolerance) { - atBottom = true; - if ($('#newMessages').length) { - $('#newMessages').remove(); - } - //If not, put the new messages box in - } else { - if ($('#newMessages').length) { - var messages = $('#newMessages .number').text(); - messages = parseInt(messages); - messages++; - $('#newMessages .number').text(messages); - if (messages == 2) { - $('#newMessages .messageWord').append('s'); - } - } else { - $messages.after('1 new message '); - } - } - } - - //Url stuff - if (message.length && flag != 'preventLink') { - message = linkify(message); - } - - opts.messageCount++; - - //Actually append the message - var entry = document.createElement('div'); - entry.className = 'entry'; - - if (filteredOut) { - entry.className += ' hidden'; - entry.setAttribute('data-filter', filteredOut); - } - - entry.innerHTML = message; - - // emoji! - if (opts.enableEmoji) { - emojiparse(entry); - } - - if (opts.hideSpam && entry.innerHTML === opts.previousMessage) { - opts.previousMessageCount++; - var lastIndex = $messages[0].children.length - 1; - var message_is_in_box; - var messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false); - if (messageClasses) { - for (var i = 0; i < messageClasses.length; i++) { //Every class - if (messageClasses[i] == 'boxed_message') { - message_is_in_box = true; - break; - } - } - } - - var countBadgeClass = message_is_in_box ? "repeatBadge boxed_repeat" : "repeatBadge" - var countBadge = 'x' + opts.previousMessageCount + ''; - var lastEntry = $messages[0].children[lastIndex]; - lastEntry.innerHTML = opts.previousMessage + countBadge; - var insertedBadge = $(lastEntry).find('.repeatBadge'); - insertedBadge.animate({ - "font-size": "0.9em" - }, 100, function() { - insertedBadge.animate({ - "font-size": "0.7em" - }, 100); - }); - entry = lastEntry; - } - else { - opts.previousMessage = entry.innerHTML; - opts.previousMessageCount = 1; - $messages[0].appendChild(entry); - } - - //Actually do the snap - if (!filteredOut && atBottom) { - $('body,html').scrollTop($messages.outerHeight()); - } - - //Stuff we can do after the message shows can go here, in the interests of responsiveness - if ((opts.highlightTerms && opts.highlightTerms.length > 0) || (opts.codePhrases.length > 0 && opts.codeResponses.length > 0)) { - highlightTerms(entry); - } -} - -function internalOutput(message, flag) -{ - output(escaper(message), flag); -} - -//Runs a route within byond, client or server side. Consider this "ehjax" for byond. -function runByond(uri) { - window.location = uri; -} - -function setCookie(cname, cvalue, exdays) { - cvalue = escaper(cvalue); - var d = new Date(); - d.setTime(d.getTime() + (exdays*24*60*60*1000)); - var expires = 'expires='+d.toUTCString(); - document.cookie = "paradise-" + cname + '=' + cvalue + '; ' + expires + '; path=/'; -} - -function getCookie(cname) { - var name = "paradise-" + cname + '='; - var ca = document.cookie.split(';'); - for(var i=0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0)==' ') c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length,c.length)); - } - } - return ''; -} - -function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B);} -function toHex(n) { - n = parseInt(n,10); - if (isNaN(n)) return "00"; - n = Math.max(0,Math.min(n,255)); - return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16); -} - -function changeMode(mode) { - switch (mode) { - case 'geocities': - //switch in stylesheet - opts.chatMode = mode; - break; - case 'console': - - opts.chatMode = mode; - break; - case 'default': - default: - //remove loaded stylesheet/s - opts.chatMode = 'default'; - } -} - -function handleClientData(ckey, ip, compid) { - //byond sends player info to here - var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid}; - if (opts.clientData && !$.isEmptyObject(opts.clientData)) { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]='+JSON.stringify({'connData': opts.clientData})); - - for (var i = 0; i < opts.clientData.length; i++) { - var saved = opts.clientData[i]; - if (currentData.ckey == saved.ckey && currentData.ip == saved.ip && currentData.compid == saved.compid) { - return; //Record already exists - } - } - - //Lets make sure we obey our limit (can connect from server with higher limit) - while (opts.clientData.length >= opts.clientDataLimit) { - opts.clientData.shift(); - } - } else { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]=none'); - } - - //Update the cookie with current details - opts.clientData.push(currentData); - setCookie('connData', JSON.stringify(opts.clientData), 365); -} - -//Server calls this on ehjax response -//Or, y'know, whenever really -function ehjaxCallback(data) { - opts.lastPang = Date.now(); - if (data == 'softPang') { - return; - } else if (data == "pang") { - opts.pingCounter = 0; - opts.pingTime = Date.now(); - runByond('?_src_=chat&proc=ping'); - } else if (data == 'pong') { - if (opts.pingDisabled) {return;} - opts.pongTime = Date.now(); - var pingDuration = Math.ceil((opts.pongTime - opts.pingTime) / 2); - $('#pingMs').text(pingDuration+'ms'); - pingDuration = Math.min(pingDuration, 255); - var red = pingDuration; - var green = 255 - pingDuration; - var blue = 0; - var hex = rgbToHex(red, green, blue); - $('#pingDot').css('color', '#'+hex); - } else if (data == 'roundrestart') { - opts.restarting = true; - internalOutput('
        The connection has been closed because the server is restarting. Please wait while you automatically reconnect.
        ', 'internal'); - } else if (data == 'stopaudio') { - $('.dectalk').remove(); - } else { - //Oh we're actually being sent data instead of an instruction - var dataJ; - try { - dataJ = $.parseJSON(data); - } catch (e) { - //But...incorrect :sadtrombone: - window.onerror('JSON: '+e+'. '+data+'; data.length = '+data.length, 'browserOutput.html', 327); - return; - } - data = dataJ; - - if (data.clientData) { - if (opts.restarting) { - opts.restarting = false; - $('.connectionClosed.restarting:not(.restored)').addClass('restored').text('The round restarted and you successfully reconnected!'); - } - if (!data.clientData.ckey && !data.clientData.ip && !data.clientData.compid) { - //TODO: Call shutdown perhaps - return; - } else { - handleClientData(data.clientData.ckey, data.clientData.ip, data.clientData.compid); - } - } else if (data.loadAdminCode) { - if (opts.adminLoaded) {return;} - var adminCode = data.loadAdminCode; - $('body').append(adminCode); - opts.adminLoaded = true; - } else if (data.modeChange) { - changeMode(data.modeChange); - } else if (data.firebug) { - if (data.trigger) { - internalOutput('Loading firebug console, triggered by '+data.trigger+'...', 'internal'); - } else { - internalOutput('Loading firebug console...', 'internal'); - } - var firebugEl = document.createElement('script'); - firebugEl.src = 'https://getfirebug.com/firebug-lite-debug.js'; - document.body.appendChild(firebugEl); - } else if (data.dectalk) { - var message = ''; - if (data.decTalkTrigger) { - message = ' '+ - 'You hear a strange robotic voice...' + message; - } - internalOutput(message, 'preventLink'); - } - } -} - -function createPopup(contents, width) { - opts.popups++; - $('body').append(''); - - //Attach close popup event - var $popup = $('#popup'+opts.popups); - var height = $popup.outerHeight(); - $popup.css({'height': height+'px', 'margin': '-'+(height/2)+'px 0 0 -'+(width/2)+'px'}); - - $popup.on('click', '.close', function(e) { - e.preventDefault(); - $popup.remove(); - }); -} - -function toggleWasd(state) { - opts.wasd = (state == 'on' ? true : false); -} - -function reboot(timeRaw) { - var timeLeftSecs = parseInt(timeRaw); - const intervalSecs = 1; // tick every 1 second - - rebootFinished(); - internalOutput('
        The server is restarting. Reconnect (' + timeLeftSecs + ')
        ', 'internal'); - - opts.rebootIntervalHandler = setInterval(function() { - timeLeftSecs -= intervalSecs; - if (timeLeftSecs <= 0) { - $("#reconnectTimer").text('Reconnecting...'); - window.location.href = 'byond://winset?command=.reconnect'; - clearInterval(opts.rebootIntervalHandler) - opts.rebootIntervalHandler = null; - } else { - $("#reconnectTimer").text('Reconnect (' + timeLeftSecs + ')'); - } - }, intervalSecs * 1000); -} - -function rebootFinished() { - if (opts.rebootIntervalHandler != null) { - clearInterval(opts.rebootIntervalHandler) - } - $(" Reconnected automatically!").insertBefore("#reconnectTimer"); - $("#reconnectTimer").remove(); -} - -function codewords(phrases, responses) { - function cleanCodewords(words) { - var arr = []; - for (var i in words) { - var trimmed = words[i].trim(); - if (trimmed.length > 0) { - arr.push(trimmed); - } - } - return arr; - } - - opts.codePhrases = cleanCodewords(phrases.split(",")); - opts.codeResponses = cleanCodewords(responses.split(",")); -} - -function codewordsClear() { - opts.codePhrases = []; - opts.codeResponses = []; -} - -/***************************************** -* -* MAKE MACRO DICTIONARY -* -******************************************/ - -// Callback for winget. -function wingetMacros(macros) { - var idRegex = /.*?\.(?!(?:CRTL|ALT|SHIFT)\+)(.*?)(?:\+REP)?\.command/; // Do NOT match macros which need crtl, alt or shift to be held down (saves a ton of headache because I don't give enough of a fuck). - for (key in macros) { - match = idRegex.exec(key) - if (match === null) - continue - macroID = match[1].toUpperCase(); - - opts.macros[macroID] = macros[key]; - } -} - -/***************************************** -* -* DOM READY -* -******************************************/ - -if (typeof $ === 'undefined') { - var div = document.getElementById('loading').childNodes[1]; - div += '

        ERROR: Jquery did not load.'; -} - -$(function() { - $messages = $('#messages'); - $subOptions = $('#subOptions'); - - //Hey look it's a controller loop! - setInterval(function() { - if (opts.lastPang + opts.pangLimit < Date.now() && !opts.restarting) { //Every pingLimit - if (!opts.noResponse) { //Only actually append a message if the previous ping didn't also fail (to prevent spam) - opts.noResponse = true; - opts.noResponseCount++; - internalOutput('
        You are either AFK, experiencing lag or the connection has closed.
        ', 'internal'); - } - } else if (opts.noResponse) { //Previous ping attempt failed ohno - $('.connectionClosed[data-count="'+opts.noResponseCount+'"]:not(.restored)').addClass('restored').text('Your connection has been restored (probably)!'); - opts.noResponse = false; - } - if (opts.messageCount > opts.messageLimit) { // Prune old messages beyond the message limit - var bodyHeight = $('body').height(); - var messagesHeight = $messages.outerHeight(); - var scrollPos = $(window).scrollTop(); - var atBottom = (bodyHeight + scrollPos >= messagesHeight - opts.scrollSnapTolerance) - - $messages.children().slice(0, opts.messageCount - opts.messageLimit).remove(); - opts.messageCount = opts.messageLimit; - if (!atBottom) { - // If we weren't at the bottom, adjust scroll position to compensate for removed elements - var newPos = scrollPos - (messagesHeight - $messages.outerHeight()) - $('body,html').scrollTop(newPos); - } - } - }, 2000); //2 seconds - - - - /***************************************** - * - * LOAD SAVED CONFIG - * - ******************************************/ - var savedConfig = { - 'sfontSize': getCookie('fontsize'), - 'sfontType': getCookie('fonttype'), - 'spingDisabled': getCookie('pingdisabled'), - 'shighlightTerms': getCookie('highlightterms'), - 'shighlightColor': getCookie('highlightcolor'), - 'shighlightRegexEnable': getCookie('highlightregexenable') == "true", - 'shideSpam': getCookie('hidespam'), - 'darkChat': getCookie('darkChat'), - }; - - if (savedConfig.sfontSize) { - $messages.css('font-size', savedConfig.sfontSize); - internalOutput('Loaded font size setting of: '+savedConfig.sfontSize+'', 'internal'); - } - if (savedConfig.sfontType) { - $messages.css('font-family', savedConfig.sfontType); - internalOutput('Loaded font type setting of: '+savedConfig.sfontType+'', 'internal'); - } - if (savedConfig.spingDisabled) { - if (savedConfig.spingDisabled == 'true') { - opts.pingDisabled = true; - $('#ping').hide(); - } - internalOutput('Loaded ping display of: '+(opts.pingDisabled ? 'hidden' : 'visible')+'', 'internal'); - } - if (savedConfig.shighlightTerms) { - var savedTerms = $.parseJSON(savedConfig.shighlightTerms); - var actualTerms = ''; - for (var i = 0; i < savedTerms.length; i++) { - if (savedTerms[i]) { - actualTerms += savedTerms[i] + ', '; - } - } - if (actualTerms) { - actualTerms = actualTerms.substring(0, actualTerms.length - 2); - internalOutput('Loaded highlight strings of: ' + actualTerms+'', 'internal'); - opts.highlightTerms = savedTerms; - } - } - if (savedConfig.shighlightColor) { - opts.highlightColor = savedConfig.shighlightColor; - internalOutput('Loaded highlight color of: '+savedConfig.shighlightColor+'', 'internal'); - } - if (savedConfig.shighlightRegexEnable) { - opts.highlightRegexEnable = savedConfig.shighlightRegexEnable; - internalOutput('Loaded highlight regex enable of: '+savedConfig.shighlightRegexEnable+'', 'internal'); - } - if (savedConfig.shideSpam) { - opts.hideSpam = $.parseJSON(savedConfig.shideSpam); - internalOutput('Loaded hide spam preference of: ' + savedConfig.shideSpam + '', 'internal'); - } - if (savedConfig.darkChat == "on") { - $("head").append(""); - var css = $("head").children(":last"); - css.attr({ - rel: "stylesheet", - type: "text/css", - href: "./browserOutput-dark.css" - }); - } else { - $("head").append(""); - var css = $("head").children(":last"); - css.attr({ - rel: "stylesheet", - type: "text/css", - href: "./browserOutput.css" - }); - } - if(localStorage){ - var backlog = localStorage.getItem('backlog') - $messages.html(backlog) - localStorage.setItem('backlog', '') - } - (function() { - var dataCookie = getCookie('connData'); - if (dataCookie) { - var dataJ; - try { - dataJ = $.parseJSON(dataCookie); - } catch (e) { - window.onerror('JSON '+e+'. '+dataCookie, 'browserOutput.html', 434); - return; - } - opts.clientData = dataJ; - } - })(); - - - /***************************************** - * - * BASE CHAT OUTPUT EVENTS - * - ******************************************/ - - $('body').on('click', 'a', function(e) { - e.preventDefault(); - }); - - $('body').on('mousedown', function(e) { - var $target = $(e.target); - - if ($contextMenu && opts.hasOwnProperty('contextMenuTarget') && opts.contextMenuTarget) { - hideContextMenu(); - return false; - } - - if ($target.is('a') || $target.parent('a').length || $target.is('input') || $target.is('textarea')) { - opts.preventFocus = true; - } else { - opts.preventFocus = false; - opts.mouseDownX = e.pageX; - opts.mouseDownY = e.pageY; - } - }); - - $messages.on('mousedown', function(e) { - if ($subOptions && $subOptions.is(':visible')) { - $subOptions.slideUp('fast', function() { - $(this).removeClass('scroll'); - $(this).css('height', ''); - }); - clearInterval(opts.subOptionsLoop); - } - }); - - $('body').on('mouseup', function(e) { - if (!opts.preventFocus && - (e.pageX >= opts.mouseDownX - opts.clickTolerance && e.pageX <= opts.mouseDownX + opts.clickTolerance) && - (e.pageY >= opts.mouseDownY - opts.clickTolerance && e.pageY <= opts.mouseDownY + opts.clickTolerance) - ) { - opts.mouseDownX = null; - opts.mouseDownY = null; - runByond('byond://winset?paramapwindow.map.focus=true'); - } - }); - - $messages.on('click', 'a', function(e) { - var href = $(this).attr('href'); - if (href[0] == '?' || (href.length >= 8 && href.substring(0,8) == 'byond://')) { - runByond(href); - } else { - href = escaper(href); - runByond('?action=openLink&link='+href); - } - }); - - //Fuck everything about this event. Will look into alternatives. - $('body').on('keydown', function(e) { - if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA') { - return; - } - - if (e.ctrlKey || e.altKey || e.shiftKey) { //Band-aid "fix" for allowing ctrl+c copy paste etc. Needs a proper fix. - return; - } - - e.preventDefault() - - var k = e.which; - var command; // Command to execute through winset. - - // Hardcoded because else there would be no feedback message. - if (k == 113) { // F2 - runByond('byond://winset?screenshot=auto'); - internalOutput('Screenshot taken', 'internal'); - } - - var c = ""; - switch (k) { - case 8: - c = 'BACK'; - case 9: - c = 'TAB'; - case 13: - c = 'ENTER'; - case 19: - c = 'PAUSE'; - case 27: - c = 'ESCAPE'; - case 33: // Page up - c = 'NORTHEAST'; - case 34: // Page down - c = 'SOUTHEAST'; - case 35: // End - c = 'SOUTHWEST'; - case 36: // Home - c = 'NORTHWEST'; - case 37: - c = 'WEST'; - case 38: - c = 'NORTH'; - case 39: - c = 'EAST'; - case 40: - c = 'SOUTH'; - case 45: - c = 'INSERT'; - case 46: - c = 'DELETE'; - case 93: // That weird thing to the right of alt gr. - c = 'APPS'; - - default: - c = String.fromCharCode(k); - } - - if(opts.macros.hasOwnProperty(c.toUpperCase())) - command = opts.macros[c]; - - if (command) { - runByond('byond://winset?paramapwindow.map.focus=true;command='+command); - return false; - } - else if (c.length == 0) { - if (!e.shiftKey) { - c = c.toLowerCase(); - } - runByond('byond://winset?paramapwindow.map.focus=true;mainwindow.input.text='+c); - return false; - } else { - runByond('byond://winset?paramapwindow.map.focus=true'); - return false; - } - }); - - //Mildly hacky fix for scroll issues on mob change (interface gets resized sometimes, messing up snap-scroll) - $(window).on('resize', function(e) { - if ($(this).height() !== opts.priorChatHeight) { - $('body,html').scrollTop($messages.outerHeight()); - opts.priorChatHeight = $(this).height(); - } - }); - - //Audio sound prevention - $messages.on('click', '.stopAudio', function() { - var $audio = $(this).parent().children('audio'); - if ($audio) { - $audio.remove(); - } - }); - - - /***************************************** - * - * OPTIONS INTERFACE EVENTS - * - ******************************************/ - - $('body').on('click', '#newMessages', function(e) { - var messagesHeight = $messages.outerHeight(); - $('body,html').scrollTop(messagesHeight); - $('#newMessages').remove(); - runByond("byond://winset?paramapwindow.map.focus=true"); - }); - - $('#toggleOptions').click(function(e) { - if ($subOptions.is(':visible')) { - $subOptions.slideUp('fast', function() { - $(this).removeClass('scroll'); - $(this).css('height', ''); - }); - clearInterval(opts.subOptionsLoop); - } else { - $subOptions.slideDown('fast', function() { - var windowHeight = $(window).height(); - var toggleHeight = $('#toggleOptions').outerHeight(); - var priorSubHeight = $subOptions.outerHeight(); - var newSubHeight = windowHeight - toggleHeight; - $(this).height(newSubHeight); - if (priorSubHeight > (windowHeight - toggleHeight)) { - $(this).addClass('scroll'); - } - }); - opts.subOptionsLoop = setInterval(function() { - if (!opts.suppressOptionsClose && $('#subOptions').is(':visible')) { - $subOptions.slideUp('fast', function() { - $(this).removeClass('scroll'); - $(this).css('height', ''); - }); - clearInterval(opts.subOptionsLoop); - } - }, 5000); //Every 5 seconds - } - }); - - $('#subOptions, #toggleOptions').mouseenter(function() { - opts.suppressOptionsClose = true; - }); - - $('#subOptions, #toggleOptions').mouseleave(function() { - opts.suppressOptionsClose = false; - }); - - $('#decreaseFont').click(function(e) { - var fontSize = parseInt($messages.css('font-size')); - fontSize = fontSize - 1 + 'px'; - $messages.css({'font-size': fontSize}); - setCookie('fontsize', fontSize, 365); - internalOutput('Font size set to '+fontSize+'', 'internal'); - }); - - $('#increaseFont').click(function(e) { - var fontSize = parseInt($messages.css('font-size')); - fontSize = fontSize + 1 + 'px'; - $messages.css({'font-size': fontSize}); - setCookie('fontsize', fontSize, 365); - internalOutput('Font size set to '+fontSize+'', 'internal'); - }); - - $('#chooseFont').click(function(e) { - if ($('.popup .changeFont').is(':visible')) {return;} - var popupContent = '
        Change Font
        ' + - ''; - createPopup(popupContent, 200); - }); - - $('body').on('click', '#changeFont a', function(e) { - var font = $(this).attr('data-font'); - $messages.css('font-family', font); - setCookie('fonttype', font, 365); - }); - - $('#toggleHideSpam').click(function(e) { - opts.hideSpam = !opts.hideSpam; - setCookie('hidespam', opts.hideSpam, 365); - internalOutput('Duplicate chat line condensing set to ' + opts.hideSpam + '', 'internal'); - }); - - $('#togglePing').click(function(e) { - if (opts.pingDisabled) { - $('#ping').slideDown('fast'); - opts.pingDisabled = false; - } else { - $('#ping').slideUp('fast'); - opts.pingDisabled = true; - } - setCookie('pingdisabled', (opts.pingDisabled ? 'true' : 'false'), 365); - }); - - $('#saveLog').click(function(e) { - var openWindow = function (content) { //opens a window - var win; - try { - win = window.open('', 'RAW Chat Log', 'toolbar=no, location=no, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=yes, width=1200, height=800, top='+(screen.height-400)+', left='+(screen.width-840)); - } catch (e) { - return; - } - if (win && win.document && window.document.body) { - win.document.body.innerHTML = content; - return win; - } - }; - - if (window.XMLHttpRequest) { - xmlHttp = new XMLHttpRequest(); - } else { - xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); - } - - // synchronous requests are depricated in modern browsers - xmlHttp.open('GET', 'browserOutput.css', true); - xmlHttp.onload = function (e) { - if (xmlHttp.status === 200) { // request successful - - // Generate Log - var saved = ''; - saved += $messages.html(); - saved = saved.replace(/&/g, '&'); - saved = saved.replace(/'; - } - var popupContent = '
        String Highlighting
        ' + - '
        ' + - '
        Choose up to '+opts.highlightLimit+' strings that will highlight the line when they appear in chat.
        '+ - 'Enable Regex'+ - '
        See here for details
        ' + - '
        ' + - termInputs + - '
        ' + - '
        ' + - '
        ' + - '
        '; - createPopup(popupContent, 250); - for(var i = 0; i < opts.highlightLimit; i++){ - document.querySelector(".highlightTermInput"+i).setAttribute("value",(opts.highlightTerms[i] ? opts.highlightTerms[i] : '')); - } - document.querySelector(".popup #highlightRegexEnable").checked = opts.highlightRegexEnable; - }); - $('body').on('keyup', '#highlightColor', function() { - var color = $('#highlightColor').val(); - color = color.trim(); - if (!color || color.charAt(0) != '#') return; - $('#highlightColor').css('background-color', color); - }); - - $('body').on('submit', '#highlightTermForm', function(e) { - e.preventDefault(); - - var count = 0; - while (count < opts.highlightLimit) { - var term = $('#highlightTermInput'+count).val(); - if (term) { - term = term.trim(); - if (term === '') { - opts.highlightTerms[count] = null; - } else { - opts.highlightTerms[count] = term.toLowerCase(); - } - } else { - opts.highlightTerms[count] = null; - } - count++; - } - - opts.highlightRegexEnable = document.querySelector("#highlightRegexEnable").checked - - var color = $('#highlightColor').val(); - if(color != opts.highlightColor) { // did the color even change? - color = color.trim(); - if (color == '' || color.charAt(0) != '#') { - opts.highlightColor = '#FFFF00'; - } else { - opts.highlightColor = color; - } - setHighlightColor(); - } - - regexHasError = false; //they changed the regex so it might be valid now - internalOutput('Highlights have been updated.',"internal") // simplest way to test if pattern works, why reinvent the wheel? - - var $popup = $('#highlightPopup').closest('.popup'); - $popup.remove(); - - setCookie('highlightregexenable', opts.highlightRegexEnable,365) - setCookie('highlightterms', JSON.stringify(opts.highlightTerms), 365); - setCookie('highlightcolor', opts.highlightColor, 365); - }); - - $('#clearMessages').click(function() { - $messages.empty(); - opts.messageCount = 0; - opts.previousMessage = ''; - opts.previousMessageCount = 1; - }); - - $('#toggleDarkChat').click(function(e) { - internalOutput('Dark Chat toggled. Reconnecting to chat.', 'internal'); - var backlog = $messages.html() - if(getCookie('darkChat') == "on"){ - setCookie('darkChat', "off", 365) - } else { - setCookie('darkChat', "on", 365) - } - localStorage.setItem('backlog', backlog) - location.reload(); - }); - - /***************************************** - * - * KICK EVERYTHING OFF - * - ******************************************/ - - runByond('?_src_=chat&proc=doneLoading'); - if ($('#loading').is(':visible')) { - $('#loading').remove(); - } - $('#userBar').show(); - opts.priorChatHeight = $(window).height(); -}); diff --git a/goon/browserassets/js/json2.min.js b/goon/browserassets/js/json2.min.js deleted file mode 100644 index d867407f265e..000000000000 --- a/goon/browserassets/js/json2.min.js +++ /dev/null @@ -1 +0,0 @@ -"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(t){return 10>t?"0"+t:t}function this_value(){return this.valueOf()}function quote(t){return rx_escapable.lastIndex=0,rx_escapable.test(t)?'"'+t.replace(rx_escapable,function(t){var e=meta[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var r,n,o,u,f,a=gap,i=e[t];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(t)),"function"==typeof rep&&(i=rep.call(e,t,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,f=[],"[object Array]"===Object.prototype.toString.apply(i)){for(u=i.length,r=0;u>r;r+=1)f[r]=str(r,i)||"null";return o=0===f.length?"[]":gap?"[\n"+gap+f.join(",\n"+gap)+"\n"+a+"]":"["+f.join(",")+"]",gap=a,o}if(rep&&"object"==typeof rep)for(u=rep.length,r=0;u>r;r+=1)"string"==typeof rep[r]&&(n=rep[r],o=str(n,i),o&&f.push(quote(n)+(gap?": ":":")+o));else for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(o=str(n,i),o&&f.push(quote(n)+(gap?": ":":")+o));return o=0===f.length?"{}":gap?"{\n"+gap+f.join(",\n"+gap)+"\n"+a+"}":"{"+f.join(",")+"}",gap=a,o}}var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;"function"!=typeof JSON.stringify&&(meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(t,e,r){var n;if(gap="",indent="","number"==typeof r)for(n=0;r>n;n+=1)indent+=" ";else"string"==typeof r&&(indent=r);if(rep=e,e&&"function"!=typeof e&&("object"!=typeof e||"number"!=typeof e.length))throw new Error("JSON.stringify");return str("",{"":t})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(t,e){var r,n,o=t[e];if(o&&"object"==typeof o)for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(n=walk(o,r),void 0!==n?o[r]=n:delete o[r]);return reviver.call(t,e,o)}var j;if(text=String(text),rx_dangerous.lastIndex=0,rx_dangerous.test(text)&&(text=text.replace(rx_dangerous,function(t){return"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})),rx_one.test(text.replace(rx_two,"@").replace(rx_three,"]").replace(rx_four,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(); \ No newline at end of file diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm deleted file mode 100644 index 9db8ede7fbcd..000000000000 --- a/goon/code/datums/browserOutput.dm +++ /dev/null @@ -1,337 +0,0 @@ -//Should match the value set in the browser js -#define MAX_COOKIE_LENGTH 5 - -GLOBAL_LIST_INIT(chatResources, list( - "goon/browserassets/js/jquery.min.js", - "goon/browserassets/js/json2.min.js", - "goon/browserassets/js/twemoji.min.js", - "goon/browserassets/js/browserOutput.js", - "goon/browserassets/js/unicode_9_annotations.js", - "goon/browserassets/css/fonts/fontawesome-webfont.eot", - "goon/browserassets/css/fonts/fontawesome-webfont.svg", - "goon/browserassets/css/fonts/fontawesome-webfont.ttf", - "goon/browserassets/css/fonts/fontawesome-webfont.woff", - "goon/browserassets/css/fonts/PxPlus_IBM_MDA.ttf", - "goon/browserassets/css/font-awesome.css", - "goon/browserassets/css/browserOutput.css", - "goon/browserassets/css/browserOutput-dark.css", - "goon/browserassets/html/saveInstructions.html" -)) - -GLOBAL_DATUM_INIT(iconCache, /savefile, new /savefile("data/iconCache.sav")) - -GLOBAL_LIST_EMPTY(bicon_cache) - -/datum/chatOutput - var/client/owner = null - // How many times client data has been checked - var/total_checks = 0 - // When to next clear the client data checks counter - var/next_time_to_clear = 0 - var/loaded = 0 - var/list/messageQueue = list() - var/cookieSent = 0 - var/list/connectionHistory = list() - var/broken = FALSE - -/datum/chatOutput/New(client/C) - . = ..() - - owner = C - SSchat_pings.chat_datums += src - -/datum/chatOutput/proc/start() - if(!owner) - return 0 - - if(!winexists(owner, "browseroutput")) - spawn() - winset(usr, null, "command=.options") // Open their options and messages window - alert(owner.mob, "Updated chat window does not exist. Please post the contents of your 'Options and Messages' window that just opened to the #coding_chat channel on the Paradise Station discord. Please also upload skin.dmf to the same channel from the following folder in your Documents: BYOND/Skins/exadv1/spacestation13, then reconnect.") - stack_trace("[owner] had no browseroutput window! [owner]'s byond version is [owner.byond_version].[owner.byond_build]") - broken = TRUE - return 0 - - if(!owner) // In case the client vanishes before winexists returns - return 0 - - if(winget(owner, "browseroutput", "is-disabled") == "false") - doneLoading() - - else - load() - - return 1 - -/datum/chatOutput/proc/load() - set waitfor = FALSE - if(!owner) - return - - for(var/attempts in 1 to 5) - for(var/asset in GLOB.chatResources) - owner << browse_rsc(wrap_file(asset)) - - for(var/subattempts in 1 to 3) // GDN note- Remove this later it DOES NOT WORK - owner << browse(file2text("goon/browserassets/html/browserOutput.html"), "window=browseroutput") - sleep(10 SECONDS) - if(!owner || loaded) - return - -/datum/chatOutput/Topic(href, list/href_list) - if(usr.client != owner) - return 1 - - var/list/params = list() - for(var/key in href_list) - if(length(key) > 7 && findtext(key, "param")) - var/param_name = copytext(key, 7, -1) - var/item = href_list[key] - params[param_name] = item - - var/data - switch(href_list["proc"]) - if("doneLoading") - data = doneLoading(arglist(params)) - - if("debug") - if(!length(params)) - return - var/error = params[1] - log_chat_debug("Client: [owner.key || owner] triggered JS error: [error][GLOB.log_end]") - - if("ping") - data = ping(arglist(params)) - - if("analyzeClientData") - data = analyzeClientData(arglist(params)) - - if(data) - ehjax_send(data = data) - -/datum/chatOutput/proc/doneLoading() - if(loaded || !owner) // Chatloading is so fucking slow that we actually need to check if there's an owner between these calls, they mighta ollied outta there by closing their client right after a restart - return - - loaded = TRUE - winset(owner, "browseroutput", "is-disabled=false") - owner << output(null, "browseroutput:rebootFinished") - if(owner.holder) - loadAdmin() - if(owner.mob?.mind?.has_antag_datum(/datum/antagonist/traitor)) - notify_syndicate_codes() // Send them the current round's codewords - else - clear_syndicate_codes() // Flush any codewords they may have in chat - for(var/message in messageQueue) - to_chat(owner, message) - - messageQueue = null - // We can only store a cookie on the client if they actually accept TOS because GDPR is GDPR - if(owner.tos_consent) - sendClientData() - - updatePing() - -// PARADISE EDIT: This just updates the ping and is called from SSchat_pings -/datum/chatOutput/proc/updatePing() - if(!owner) - qdel(src) - return - ehjax_send(data = owner.is_afk(29 SECONDS) ? "softPang" : "pang") // SoftPang isn't handled anywhere but it'll always reset the opts.lastPang. - -/datum/chatOutput/proc/ehjax_send(client/C = owner, window = "browseroutput", data) - if(islist(data)) - data = json_encode(data) - C << output("[data]", "[window]:ehjaxCallback") - -/datum/chatOutput/proc/loadAdmin() - var/data = json_encode(list("loadAdminCode" = replacetext(replacetext(file2text("goon/browserassets/html/adminOutput.html"), "\n", ""), "\t", ""))) - ehjax_send(data = url_encode(data)) - -/datum/chatOutput/proc/sendClientData() - var/list/deets = list("clientData" = list()) - deets["clientData"]["ckey"] = owner.ckey - deets["clientData"]["ip"] = owner.address - deets["clientData"]["compid"] = owner.computer_id - var/data = json_encode(deets) - ehjax_send(data = data) - -/datum/chatOutput/proc/analyzeClientData(cookie = "") - //Spam check - if(world.time > next_time_to_clear) - next_time_to_clear = world.time + (3 SECONDS) - total_checks = 0 - total_checks += 1 - if(total_checks > SPAM_TRIGGER_AUTOMUTE) - message_admins("[key_name(owner)] kicked for goonchat topic spam") - qdel(owner) - return - - if(!cookie) - return - - if(cookie != "none") - var/regex/crashy_thingy = new /regex("(\\\[ *){5}") - if(crashy_thingy.Find(cookie)) - message_admins("[key_name(src.owner)] tried to crash the server using malformed JSON") - log_admin("[key_name(owner)] tried to crash the server using malformed JSON") - return - var/list/connData = json_decode(cookie) - if(connData && islist(connData) && connData.len > 0 && connData["connData"]) - connectionHistory = connData["connData"] - var/list/found = new() - if(connectionHistory.len > MAX_COOKIE_LENGTH) - message_admins("[key_name(src.owner)] was kicked for an invalid ban cookie)") - qdel(owner) - return - for(var/i = connectionHistory.len; i >= 1; i--) - if(QDELETED(owner)) - //he got cleaned up before we were done - return - var/list/row = connectionHistory[i] - if(!row || row.len < 3 || !(row["ckey"] && row["compid"] && row["ip"])) - return - if(world.IsBanned(key=row["ckey"], address=row["ip"], computer_id=row["compid"], type=null, check_ipintel=FALSE, check_2fa=FALSE, check_guest=FALSE, log_info=FALSE, check_tos=FALSE)) - found = row - break - CHECK_TICK - //Add autoban using the DB_ban_record function - //Uh oh this fucker has a history of playing on a banned account!! - if(found.len > 0) - message_admins("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") - log_admin("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") - new /datum/cookie_record(owner.ckey, found["ckey"], found["ip"], found["compid"]) - - cookieSent = 1 - -/datum/chatOutput/proc/ping() - return "pong" - -/** - * Sends the lists of code phrases and responses to Goonchat for clientside highlighting - * - * Arguments: - * * phrases - List of code phrases - * * responses - List of code responses - */ -/datum/chatOutput/proc/notify_syndicate_codes(phrases = GLOB.syndicate_code_phrase, responses = GLOB.syndicate_code_response) - var/urlphrases = url_encode(copytext(phrases, 1, length(phrases))) - var/urlresponses = url_encode(copytext(responses, 1, length(responses))) - owner << output("[urlphrases]&[urlresponses]", "browseroutput:codewords") - -/** - * Clears any locally stored code phrases to highlight - */ -/datum/chatOutput/proc/clear_syndicate_codes() - owner << output(null, "browseroutput:codewordsClear") - -/datum/chatOutput/Destroy(force) - SSchat_pings.chat_datums -= src - return ..() - - -/client/verb/debug_chat() - set hidden = 1 - chatOutput.ehjax_send(data = list("firebug" = 1)) - - -//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, -// exporting it as text, and then parsing the base64 from that. -// (This relies on byond automatically storing icons in savefiles as base64) -/proc/icon2base64(icon/icon, iconKey = "misc") - if(!isicon(icon)) return 0 - - GLOB.iconCache[iconKey] << icon - var/iconData = GLOB.iconCache.ExportText(iconKey) - var/list/partial = splittext(iconData, "{") - return replacetext(copytext(partial[2], 3, -5), "\n", "") - -/proc/bicon(obj, use_class = 1) - var/class = use_class ? "class='icon misc'" : null - if(!obj) - return - - if(isicon(obj)) - if(!GLOB.bicon_cache["\ref[obj]"]) // Doesn't exist yet, make it. - GLOB.bicon_cache["\ref[obj]"] = icon2base64(obj) - - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = obj - var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - if(!GLOB.bicon_cache[key]) // Doesn't exist, make it. - var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - if(ishuman(obj)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - GLOB.bicon_cache[key] = icon2base64(I, key) - if(use_class) - class = "class='icon [A.icon_state]'" - - return "" - -/proc/is_valid_tochat_message(message) - return istext(message) - -/proc/is_valid_tochat_target(target) - return !istype(target, /savefile) && (ismob(target) || islist(target) || isclient(target) || target == world) - -/proc/to_chat(target, message, flag) - if(!is_valid_tochat_message(message) || !is_valid_tochat_target(target)) - target << message - - // Info about the "message" - if(isnull(message)) - message = "(null)" - else if(istype(message, /datum)) - var/datum/D = message - message = "([D.type]): '[D]'" - else if(!is_valid_tochat_message(message)) - message = "(bad message) : '[message]'" - - // Info about the target - var/targetstring = "'[target]'" - if(istype(target, /datum)) - var/datum/D = target - targetstring += ", [D.type]" - - // The final output - CRASH("DEBUG: to_chat called with invalid message/target. Message: '[message]'. Target: [targetstring].") - - else if(is_valid_tochat_message(message)) - if(istext(target)) - CRASH("Somehow, to_chat got a text as a target, message: '[message]', target: '[target]'") - - message = replacetext(message, "\n", "
        ") - - message = macro2html(message) - if(findtext(message, "\improper")) - message = replacetext(message, "\improper", "") - if(findtext(message, "\proper")) - message = replacetext(message, "\proper", "") - - var/client/C - if(isclient(target)) - C = target - if(ismob(target)) - C = target:client - - if(C && C.chatOutput) - if(C.chatOutput.broken) - C << message - return - - if(!C.chatOutput.loaded && C.chatOutput.messageQueue && islist(C.chatOutput.messageQueue)) - C.chatOutput.messageQueue.Add(message) - return - - // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the javascript. - var/output_message = "[url_encode(url_encode(message))]" - if(flag) - output_message += "&[url_encode(flag)]" - - target << output(output_message, "browseroutput:output") - -#undef MAX_COOKIE_LENGTH diff --git a/html/browser/common.css b/html/browser/common.css index 3480183d1293..3332473586a5 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -1,5 +1,5 @@ -body -{ +body +{ padding: 0; margin: 0; background-color: #272727; @@ -15,8 +15,8 @@ hr } a, a:link, a:visited, a:active, .linkOn, .linkOff -{ - color: #ffffff; +{ + color: #ffffff; text-decoration: none; background: #40628a; border: 1px solid #161616; @@ -26,8 +26,8 @@ a, a:link, a:visited, a:active, .linkOn, .linkOff } a.nobg, a.nobg:link, a.nobg:visited, a.nobg:active -{ - color: #ffffff; +{ + color: #ffffff; text-decoration: none; background: transparent; border: none; @@ -36,20 +36,43 @@ a.nobg, a.nobg:link, a.nobg:visited, a.nobg:active cursor:default; font-weight:bold; } -a.nobg:hover -{ +a.nobg:hover +{ color:#40628a; } -a:hover -{ +a:hover +{ color: #40628a; background: #ffffff; } + +a.red +{ + background: #b30000; +} + +a.red:hover +{ + color: #ffffff; + background: #ff0000; +} + +a.green +{ + background: #408000; +} + +a.green:hover +{ + color: #ffffff; + background: #59b300; +} + a.white, a.white:link, a.white:visited, a.white:active -{ - color: #40628a; +{ + color: #40628a; text-decoration: none; background: #ffffff; border: 1px solid #161616; @@ -58,22 +81,22 @@ a.white, a.white:link, a.white:visited, a.white:active cursor:default; } -a.white:hover -{ +a.white:hover +{ color: #ffffff; background: #40628a; } .linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover -{ - color: #ffffff; +{ + color: #ffffff; background: #2f943c; border-color: #24722e; } .linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover -{ - color: #ffffff; +{ + color: #ffffff; background: #999999; border-color: #666666; } @@ -105,15 +128,15 @@ li padding: 0 0 2px 0; } -img, a img -{ - border-style:none; +img, a img +{ + border-style:none; } h1, h2, h3, h4, h5, h6 { margin: 0; - padding: 16px 0 8px 0; + padding: 16px 0 8px 0; color: #517087; } @@ -163,7 +186,7 @@ h4 right:0px; z-index: 10 } - + .uiTitleButtons { position:fixed; @@ -182,7 +205,7 @@ h4 } .uiContent -{ +{ clear: both; padding: 8px; font-family: Verdana, Geneva, sans-serif; @@ -225,7 +248,7 @@ h4 } .notice.icon -{ +{ padding: 2px 4px 0 20px; } diff --git a/html/chess.html b/html/chess.html index d135be94ac74..0ac2959d92f5 100644 --- a/html/chess.html +++ b/html/chess.html @@ -1,11 +1,10 @@ - +
        New game @@ -17,8 +16,8 @@ Undo
        -
        -
        +
        +

        Analysis: Off @@ -28,4 +27,4 @@ -
        \ No newline at end of file +
        diff --git a/html/create_object.html b/html/create_object.html index 49af318f6f0e..bcc0f71a270b 100644 --- a/html/create_object.html +++ b/html/create_object.html @@ -65,4 +65,10 @@ populateList(filtered); } + + function quickSpawn() { + document.spawner.submit(); + } + + document.getElementById('object_list').ondblclick = quickSpawn; diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css index e7cdfffe751e..12b385404d79 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 5f3fdc598c82..21a0708aafae 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 d62be2fad885..a4e598936b3e 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 43b1a9ae49db..ad077c6bec78 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 c77baa8d46ab..e99417197e4b 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 77c1786227f5..23ee663443a7 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/CereStation_nanomap_z1.png b/icons/_nanomaps/CereStation_nanomap_z1.png index c7ea1cc10a09..d645c0f93689 100644 Binary files a/icons/_nanomaps/CereStation_nanomap_z1.png and b/icons/_nanomaps/CereStation_nanomap_z1.png differ diff --git a/icons/_nanomaps/Cyberiad220_nanomap_z1.png b/icons/_nanomaps/Cyberiad220_nanomap_z1.png index e23e1774d487..666a3f1b05a6 100644 Binary files a/icons/_nanomaps/Cyberiad220_nanomap_z1.png and b/icons/_nanomaps/Cyberiad220_nanomap_z1.png differ diff --git a/icons/_nanomaps/Delta220_nanomap_z1.png b/icons/_nanomaps/Delta220_nanomap_z1.png index d67c1ef2c307..61879c90963f 100644 Binary files a/icons/_nanomaps/Delta220_nanomap_z1.png and b/icons/_nanomaps/Delta220_nanomap_z1.png differ diff --git a/icons/_nanomaps/Delta_nanomap_z1.png b/icons/_nanomaps/Delta_nanomap_z1.png index 7f49a54c201a..20beac49d011 100644 Binary files a/icons/_nanomaps/Delta_nanomap_z1.png and b/icons/_nanomaps/Delta_nanomap_z1.png differ diff --git a/icons/_nanomaps/MetaStation_nanomap_z1.png b/icons/_nanomaps/MetaStation_nanomap_z1.png index 87cff412b31b..a32ec30d6ea3 100644 Binary files a/icons/_nanomaps/MetaStation_nanomap_z1.png and b/icons/_nanomaps/MetaStation_nanomap_z1.png differ diff --git a/icons/atmos/heat.dmi b/icons/atmos/heat.dmi index 6a5a2f9677fa..681a9458b6ad 100644 Binary files a/icons/atmos/heat.dmi and b/icons/atmos/heat.dmi differ diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi index d5d0b8df0e65..132b2d0d2221 100644 Binary files a/icons/effects/64x64.dmi and b/icons/effects/64x64.dmi differ diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 812bda5b5ce5..7746a3d06d03 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index a361ed51d90a..5eb15d4328be 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/effects/parallax.dmi b/icons/effects/parallax.dmi index 6f333416a23b..e484c3395479 100644 Binary files a/icons/effects/parallax.dmi and b/icons/effects/parallax.dmi differ diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi index b3a2753e6b98..94287eab8dc6 100644 Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index 939b1a868a1f..b6c7b3258d33 100644 Binary files a/icons/mecha/mecha_equipment.dmi and b/icons/mecha/mecha_equipment.dmi differ diff --git a/icons/member_content.dmi b/icons/member_content.dmi index bb5976462762..77443711198c 100644 Binary files a/icons/member_content.dmi and b/icons/member_content.dmi differ diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index 07e98e9ebc97..b94b9ef574e2 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 15631f719dbc..aa921ea13437 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 78de6fd28b2a..72569afd028c 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index ddc2be552320..0a3c3cba2987 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 eb96e1da7703..83bd4efe7885 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/modsuit/species/vox_modsuits.dmi b/icons/mob/clothing/modsuit/species/vox_modsuits.dmi index 026b15502577..1a164b1a1935 100644 Binary files a/icons/mob/clothing/modsuit/species/vox_modsuits.dmi and b/icons/mob/clothing/modsuit/species/vox_modsuits.dmi differ diff --git a/icons/mob/clothing/species/drask/gloves.dmi b/icons/mob/clothing/species/drask/gloves.dmi index 2b97e9bf3c24..688157e1e73d 100644 Binary files a/icons/mob/clothing/species/drask/gloves.dmi and b/icons/mob/clothing/species/drask/gloves.dmi differ diff --git a/icons/mob/clothing/species/drask/head.dmi b/icons/mob/clothing/species/drask/head.dmi index baef8c01ccb1..c344b3195a88 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/suit.dmi b/icons/mob/clothing/species/drask/suit.dmi index 4f4792871054..2d60544fe02f 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/under/centcom.dmi b/icons/mob/clothing/species/drask/under/centcom.dmi index b72065bc560c..af49649b5356 100644 Binary files a/icons/mob/clothing/species/drask/under/centcom.dmi and b/icons/mob/clothing/species/drask/under/centcom.dmi differ diff --git a/icons/mob/clothing/species/drask/under/civilian.dmi b/icons/mob/clothing/species/drask/under/civilian.dmi index 34f04fdf40de..b7224cf02404 100644 Binary files a/icons/mob/clothing/species/drask/under/civilian.dmi and b/icons/mob/clothing/species/drask/under/civilian.dmi differ diff --git a/icons/mob/clothing/species/drask/under/procedure.dmi b/icons/mob/clothing/species/drask/under/procedure.dmi index 7bfe17ce39b2..d589df04cd46 100644 Binary files a/icons/mob/clothing/species/drask/under/procedure.dmi and b/icons/mob/clothing/species/drask/under/procedure.dmi differ diff --git a/icons/mob/clothing/species/drask/under/security.dmi b/icons/mob/clothing/species/drask/under/security.dmi index 53f8b8ff46ea..fd8479cd1492 100644 Binary files a/icons/mob/clothing/species/drask/under/security.dmi and b/icons/mob/clothing/species/drask/under/security.dmi differ diff --git a/icons/mob/clothing/species/grey/eyes.dmi b/icons/mob/clothing/species/grey/eyes.dmi index 7760cca8f608..21dbcff1b8f8 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/head.dmi b/icons/mob/clothing/species/grey/head.dmi index 155189889405..83416f9d242d 100644 Binary files a/icons/mob/clothing/species/grey/head.dmi and b/icons/mob/clothing/species/grey/head.dmi differ diff --git a/icons/mob/clothing/species/grey/mask.dmi b/icons/mob/clothing/species/grey/mask.dmi index 97ab44555d3e..85e16b4fa355 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/unathi/mask.dmi b/icons/mob/clothing/species/unathi/mask.dmi index e84f2d5c116d..d5f8f45e949d 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/vox/back.dmi b/icons/mob/clothing/species/vox/back.dmi index 95800a6c6f8f..1b1045f0ea3b 100644 Binary files a/icons/mob/clothing/species/vox/back.dmi and b/icons/mob/clothing/species/vox/back.dmi differ diff --git a/icons/mob/clothing/species/vox/eyes.dmi b/icons/mob/clothing/species/vox/eyes.dmi index ac19c03b436e..0d100e84bc44 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/gloves.dmi b/icons/mob/clothing/species/vox/gloves.dmi index 71d8a5ab9297..cc2c8d1b306c 100644 Binary files a/icons/mob/clothing/species/vox/gloves.dmi and b/icons/mob/clothing/species/vox/gloves.dmi differ diff --git a/icons/mob/clothing/species/vox/head.dmi b/icons/mob/clothing/species/vox/head.dmi index 846a0da40412..d9bb7cad94be 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/shoes.dmi b/icons/mob/clothing/species/vox/shoes.dmi index 8b02def9d18b..e362943b6db5 100644 Binary files a/icons/mob/clothing/species/vox/shoes.dmi and b/icons/mob/clothing/species/vox/shoes.dmi differ diff --git a/icons/mob/clothing/species/vox/under/pants.dmi b/icons/mob/clothing/species/vox/under/pants.dmi index 5f486334d3c6..45e976955f6f 100644 Binary files a/icons/mob/clothing/species/vox/under/pants.dmi and b/icons/mob/clothing/species/vox/under/pants.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/mask.dmi b/icons/mob/clothing/species/vulpkanin/mask.dmi index fb1556aa5a13..660da961616c 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/human_races/r_slime.dmi b/icons/mob/human_races/r_slime.dmi index a34890299d1d..942df5c8c47a 100644 Binary files a/icons/mob/human_races/r_slime.dmi and b/icons/mob/human_races/r_slime.dmi differ diff --git a/icons/mob/human_races/vox/r_vox.dmi b/icons/mob/human_races/vox/r_vox.dmi deleted file mode 100644 index 2286e060a9af..000000000000 Binary files a/icons/mob/human_races/vox/r_vox.dmi and /dev/null differ diff --git a/icons/mob/human_races/vox/r_voxazu.dmi b/icons/mob/human_races/vox/r_voxazu.dmi index 593b6b9b6d2e..dbaa8742e329 100644 Binary files a/icons/mob/human_races/vox/r_voxazu.dmi and b/icons/mob/human_races/vox/r_voxazu.dmi differ diff --git a/icons/mob/human_races/vox/r_voxbrn.dmi b/icons/mob/human_races/vox/r_voxbrn.dmi index 8a0e391a7499..6aab80130a24 100644 Binary files a/icons/mob/human_races/vox/r_voxbrn.dmi and b/icons/mob/human_races/vox/r_voxbrn.dmi differ diff --git a/icons/mob/human_races/vox/r_voxcrim.dmi b/icons/mob/human_races/vox/r_voxcrim.dmi index 56e99a28fb41..fb9eda98063d 100644 Binary files a/icons/mob/human_races/vox/r_voxcrim.dmi and b/icons/mob/human_races/vox/r_voxcrim.dmi differ diff --git a/icons/mob/human_races/vox/r_voxdgrn.dmi b/icons/mob/human_races/vox/r_voxdgrn.dmi deleted file mode 100644 index 6c3239a100da..000000000000 Binary files a/icons/mob/human_races/vox/r_voxdgrn.dmi and /dev/null differ diff --git a/icons/mob/human_races/vox/r_voxemrl.dmi b/icons/mob/human_races/vox/r_voxemrl.dmi index 0a5515192931..dd3b8b69bbe1 100644 Binary files a/icons/mob/human_races/vox/r_voxemrl.dmi and b/icons/mob/human_races/vox/r_voxemrl.dmi differ diff --git a/icons/mob/human_races/vox/r_voxgry.dmi b/icons/mob/human_races/vox/r_voxgry.dmi index df825cc399d6..d5ebde68237b 100644 Binary files a/icons/mob/human_races/vox/r_voxgry.dmi and b/icons/mob/human_races/vox/r_voxgry.dmi differ diff --git a/icons/mob/human_races/vox/r_voxlime.dmi b/icons/mob/human_races/vox/r_voxlime.dmi new file mode 100644 index 000000000000..2811fc27c6f0 Binary files /dev/null and b/icons/mob/human_races/vox/r_voxlime.dmi differ diff --git a/icons/mob/human_races/vox/r_voxplum.dmi b/icons/mob/human_races/vox/r_voxplum.dmi new file mode 100644 index 000000000000..a6d5ed943ecc Binary files /dev/null and b/icons/mob/human_races/vox/r_voxplum.dmi differ diff --git a/icons/mob/human_races/vox/r_voxpurp.dmi b/icons/mob/human_races/vox/r_voxpurp.dmi index d6c18c755174..9ace8f9d48b2 100644 Binary files a/icons/mob/human_races/vox/r_voxpurp.dmi and b/icons/mob/human_races/vox/r_voxpurp.dmi differ diff --git a/icons/mob/inhands/implants_lefthand.dmi b/icons/mob/inhands/implants_lefthand.dmi new file mode 100644 index 000000000000..ceb1066064b8 Binary files /dev/null and b/icons/mob/inhands/implants_lefthand.dmi differ diff --git a/icons/mob/inhands/implants_righthand.dmi b/icons/mob/inhands/implants_righthand.dmi new file mode 100644 index 000000000000..1d546792b8cc Binary files /dev/null and b/icons/mob/inhands/implants_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 144293a31c0c..33942e4a03c8 100644 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 2d5bf273be55..01cee2e989d6 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index d4afcd099bc7..f890b05a742e 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 272e47b89b4c..e7f44d0f575c 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi index cfcf182c840f..2c58e9ef09a4 100644 Binary files a/icons/mob/screen_full.dmi and b/icons/mob/screen_full.dmi differ diff --git a/icons/mob/screen_kinesis.dmi b/icons/mob/screen_kinesis.dmi new file mode 100644 index 000000000000..616ca31f1add Binary files /dev/null and b/icons/mob/screen_kinesis.dmi differ diff --git a/icons/mob/screen_ninja.dmi b/icons/mob/screen_ninja.dmi index df30d63fe769..cc89ea18ed0f 100644 Binary files a/icons/mob/screen_ninja.dmi and b/icons/mob/screen_ninja.dmi differ diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi index e2bb19cff36e..8671c70bf659 100644 Binary files a/icons/mob/simple_human.dmi and b/icons/mob/simple_human.dmi differ diff --git a/icons/mob/sprite_accessories/human/human_hair.dmi b/icons/mob/sprite_accessories/human/human_hair.dmi index 7085dd1ff4e6..6dd0dcf77ca1 100644 Binary files a/icons/mob/sprite_accessories/human/human_hair.dmi and b/icons/mob/sprite_accessories/human/human_hair.dmi differ diff --git a/icons/mob/sprite_accessories/ipc/ipc_face.dmi b/icons/mob/sprite_accessories/ipc/ipc_face.dmi index 1c685abeb9f4..4d795c7ba6eb 100644 Binary files a/icons/mob/sprite_accessories/ipc/ipc_face.dmi and b/icons/mob/sprite_accessories/ipc/ipc_face.dmi differ diff --git a/icons/mob/sprite_accessories/vox/vox_tail_markings.dmi b/icons/mob/sprite_accessories/vox/vox_tail_markings.dmi index ca435a12ee97..ef38c22fd344 100644 Binary files a/icons/mob/sprite_accessories/vox/vox_tail_markings.dmi and b/icons/mob/sprite_accessories/vox/vox_tail_markings.dmi differ diff --git a/icons/mob/sprite_accessories/vox/vox_tail_markings2.dmi b/icons/mob/sprite_accessories/vox/vox_tail_markings2.dmi deleted file mode 100644 index 70ef0d08f7ed..000000000000 Binary files a/icons/mob/sprite_accessories/vox/vox_tail_markings2.dmi and /dev/null differ diff --git a/icons/mob/talk.dmi b/icons/mob/talk.dmi index 961cffec7f61..08c2c06f7c50 100644 Binary files a/icons/mob/talk.dmi and b/icons/mob/talk.dmi differ diff --git a/icons/obj/atmospherics/red_pipe.dmi b/icons/obj/atmospherics/red_pipe.dmi deleted file mode 100644 index 83803dfb1c99..000000000000 Binary files a/icons/obj/atmospherics/red_pipe.dmi and /dev/null differ diff --git a/icons/obj/boxes.dmi b/icons/obj/boxes.dmi index 03d0a7413b57..cd55ba5067c3 100644 Binary files a/icons/obj/boxes.dmi and b/icons/obj/boxes.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 9030742c394f..dc35acf4a2da 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index c5c655fb781a..a50bfbca3f17 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index 382401bffcba..598c2b1bf269 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 5bc42bd4471e..419d2260290f 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index f2030353f36d..4e500d259d2e 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 5ff5e5a5ebdf..882d60d35a1a 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/doors/airlocks/cult/unruned/reaper-overlays.dmi b/icons/obj/doors/airlocks/cult/unruned/reaper-overlays.dmi index 7d2f84117448..8e57c8690e29 100644 Binary files a/icons/obj/doors/airlocks/cult/unruned/reaper-overlays.dmi and b/icons/obj/doors/airlocks/cult/unruned/reaper-overlays.dmi differ diff --git a/icons/obj/energy_melee.dmi b/icons/obj/energy_melee.dmi index 07f3290f21a2..03a18059b6ff 100644 Binary files a/icons/obj/energy_melee.dmi and b/icons/obj/energy_melee.dmi differ diff --git a/icons/obj/fish_items.dmi b/icons/obj/fish_items.dmi index 302e144ba24d..6d0a977ff636 100644 Binary files a/icons/obj/fish_items.dmi and b/icons/obj/fish_items.dmi differ diff --git a/icons/obj/flora/plants.dmi b/icons/obj/flora/plants.dmi index 45686d168bc4..cce96cbe040a 100644 Binary files a/icons/obj/flora/plants.dmi and b/icons/obj/flora/plants.dmi differ diff --git a/icons/obj/flora/rocks.dmi b/icons/obj/flora/rocks.dmi index eb777b6cbc21..7d7fb64dce73 100644 Binary files a/icons/obj/flora/rocks.dmi and b/icons/obj/flora/rocks.dmi differ diff --git a/icons/obj/guns/magic.dmi b/icons/obj/guns/magic.dmi index 88c124d82578..6f30d97098aa 100644 Binary files a/icons/obj/guns/magic.dmi and b/icons/obj/guns/magic.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 69de707c5f35..1564d17b53bc 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 13c552d4790b..97d59c05af7b 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/knuckleduster.dmi b/icons/obj/knuckleduster.dmi new file mode 100644 index 000000000000..c84b99554225 Binary files /dev/null and b/icons/obj/knuckleduster.dmi differ diff --git a/icons/obj/machines/drone_fab.dmi b/icons/obj/machines/drone_fab.dmi index 9fe05f45f7ab..f77c9bbab4ee 100644 Binary files a/icons/obj/machines/drone_fab.dmi and b/icons/obj/machines/drone_fab.dmi differ diff --git a/icons/obj/machines/heavy_lathe.dmi b/icons/obj/machines/heavy_lathe.dmi index 68557159eb42..5ea437d48f60 100644 Binary files a/icons/obj/machines/heavy_lathe.dmi and b/icons/obj/machines/heavy_lathe.dmi differ diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi index e414d80b0f3b..0623aa5f6ace 100644 Binary files a/icons/obj/pipe-item.dmi and b/icons/obj/pipe-item.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index 48f68f517e79..1e6ef49191c5 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/power_cond/power_cond_cyan.dmi b/icons/obj/power_cond/power_cond_cyan.dmi index 52c8727ccd82..ba3bbcff33af 100644 Binary files a/icons/obj/power_cond/power_cond_cyan.dmi and b/icons/obj/power_cond/power_cond_cyan.dmi differ diff --git a/icons/obj/roulette.dmi b/icons/obj/roulette.dmi new file mode 100644 index 000000000000..32fa465af6c6 Binary files /dev/null and b/icons/obj/roulette.dmi differ diff --git a/icons/obj/species_organs/skrell.dmi b/icons/obj/species_organs/skrell.dmi index 998370f73444..62ff768e0d53 100644 Binary files a/icons/obj/species_organs/skrell.dmi and b/icons/obj/species_organs/skrell.dmi differ diff --git a/icons/obj/species_organs/slime.dmi b/icons/obj/species_organs/slime.dmi index 58ec636ca7ec..dab38fcd51f3 100644 Binary files a/icons/obj/species_organs/slime.dmi and b/icons/obj/species_organs/slime.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 8758283d1532..3307ee287bfd 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index ee470a2a0dca..d378ffdded9f 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/supermatter.dmi b/icons/obj/supermatter.dmi index 4cc94097dcba..a8f87bbcd2d2 100644 Binary files a/icons/obj/supermatter.dmi and b/icons/obj/supermatter.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 72f65a6b0f5a..7153ac1b94c0 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/terminals.dmi b/icons/obj/terminals.dmi index 5e1f745da28b..07f61e68ea86 100644 Binary files a/icons/obj/terminals.dmi and b/icons/obj/terminals.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index ed5a31bc613f..8184c25f6f1a 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/icons/ooc_tag_16x.png b/icons/ooc_tag_16x.png index 2165a593220b..443873c97e30 100644 Binary files a/icons/ooc_tag_16x.png and b/icons/ooc_tag_16x.png differ diff --git a/icons/paradise.png b/icons/paradise.png index 888fcea62cc4..c3254623909a 100644 Binary files a/icons/paradise.png and b/icons/paradise.png differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index c411ddab8ad5..afddb44f48ad 100755 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index d798b5a39c4a..ef8890688b29 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/space.dmi b/icons/turf/space.dmi index 60fdfce38619..a4c2409667fd 100644 Binary files a/icons/turf/space.dmi and b/icons/turf/space.dmi differ diff --git a/icons/vehicles/CargoTrain.dmi b/icons/vehicles/CargoTrain.dmi index 887bd7567b2e..ddc071bbc4ee 100644 Binary files a/icons/vehicles/CargoTrain.dmi and b/icons/vehicles/CargoTrain.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index 63c4bbe3c82f..bf489ae9734f 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -4,7 +4,7 @@ set desc = "Type what you want to know about. This will open the wiki in your web browser." set hidden = 1 if(GLOB.configuration.url.wiki_url) - var/query = stripped_input(src, "Enter Search:", "Wiki Search", "Homepage") + var/query = tgui_input_text(src, "Enter Search:", "Wiki Search", "Homepage") if(query == "Homepage") src << link(GLOB.configuration.url.wiki_url) else if(query) @@ -19,10 +19,11 @@ set desc = "Visit the forum." set hidden = 1 if(GLOB.configuration.url.forum_url) - if(alert("Open the forum in your browser?", null, "Yes", "No") == "Yes") - if(GLOB.configuration.url.forum_link_url && prefs && !prefs.fuid) - link_forum_account() - src << link(GLOB.configuration.url.forum_url) + if(tgui_alert(src, "Open the forum in your browser?", "Forum", list("Yes", "No")) != "Yes") + return + if(GLOB.configuration.url.forum_link_url && prefs && !prefs.fuid) + link_forum_account() + src << link(GLOB.configuration.url.forum_url) else to_chat(src, "The forum URL is not set in the server configuration.") @@ -31,7 +32,7 @@ set desc = "View the server rules." set hidden = 1 if(GLOB.configuration.url.rules_url) - if(alert("This will open the rules in your browser. Are you sure?", null, "Yes", "No") == "No") + if(tgui_alert(src, "This will open the rules in your browser. Are you sure?", "Rules", list("Yes", "No")) != "Yes") return src << link(GLOB.configuration.url.rules_url) else @@ -42,7 +43,7 @@ set desc = "Visit the GitHub page." set hidden = 1 if(GLOB.configuration.url.github_url) - if(alert("This will open our GitHub repository in your browser. Are you sure?", null, "Yes", "No") == "No") + if(tgui_alert(src, "This will open our GitHub repository in your browser. Are you sure?", "GitHub", list("Yes", "No")) != "Yes") return src << link(GLOB.configuration.url.github_url) else @@ -65,7 +66,7 @@ if(!durl) to_chat(src, "The Discord URL is not set in the server configuration.") return - if(alert("This will invite you to our Discord server. Are you sure?", null, "Yes", "No") == "No") + if(tgui_alert(src, "This will invite you to our Discord server. Are you sure?", "Discord", list("Yes", "No")) != "Yes") return src << link(durl) @@ -74,7 +75,7 @@ set desc = "Donate to help with hosting costs." set hidden = 1 if(GLOB.configuration.url.donations_url) - if(alert("This will open the donation page in your browser. Are you sure?", null, "Yes", "No") == "No") + if(tgui_alert(src, "This will open the donation page in your browser. Are you sure?", "Donate", list("Yes", "No")) != "Yes") return src << link(GLOB.configuration.url.donations_url) else diff --git a/interface/skin.dmf b/interface/skin.dmf index a448deb6966d..fbfdb3fc9eab 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -121,7 +121,6 @@ menu "menu" command = "adminhelp" category = "&Помощь" - window "mainwindow" elem "mainwindow" type = MAIN @@ -134,10 +133,6 @@ window "mainwindow" icon = 'icons\\ss220.png' macro = "default" menu = "menu" - elem "asset_cache_browser" - type = BROWSER - size = 200x200 - is-visible = false elem "mainvsplit" type = CHILD size = 0x0 @@ -147,29 +142,40 @@ window "mainwindow" left = "paramapwindow" right = "rpane" is-vert = true + elem "asset_cache_browser" + type = BROWSER + size = 200x200 + is-visible = false elem "tooltip" type = BROWSER + pos = 0,0 size = 999x999 + anchor1 = -1,-1 + anchor2 = -1,-1 is-visible = false window "paramapwindow" elem "paramapwindow" type = MAIN + pos = 281,0 size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" is-pane = true on-status = ".winset \"status_bar.text=[[*]]\" " elem "map" type = MAP + pos = 0,0 size = 640x480 anchor1 = 0,0 anchor2 = 100,100 font-family = "Arial" font-size = 7 - text-color = none is-default = true saved-params = "icon-size;zoom-mode" zoom-mode = "distort" - style = ".center { text-align: center; } .maptext { font-family: 'MS Serif'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-family: 'Small Fonts'; font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie\t{color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080; font-style: italic;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }" .italics { font-family: 'Small Fonts'; }" + style = ".center { text-align: center; } .maptext { font-family: 'MS Serif'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-family: 'Small Fonts'; font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie\t{color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }" .italics { font-family: 'Small Fonts'; }" on-show = ".winset \"menu.statusbar.is-checked=true?paramapwindow.status_bar.is-visible=true:paramapwindow.status_bar.is-visible=false\"" elem "title_browser" type = BROWSER @@ -177,7 +183,6 @@ window "paramapwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - background-color = none is-visible = false is-disabled = true saved-params = "" @@ -188,69 +193,25 @@ window "paramapwindow" pos = 0,464 size = 280x16 anchor1 = 0,100 - anchor2 = -1,-1 text-color = #ffffff background-color = #222222 border = line text = "" align = left -window "outputwindow" - elem "outputwindow" - type = MAIN - pos = 0,0 - size = 637x480 - anchor1 = 0,0 - anchor2 = 100,100 - is-pane = true - elem "input" - type = INPUT - pos = 3,456 - size = 467x20 - anchor1 = 0,100 - anchor2 = 100,100 - background-color = #d3b5b5 - is-default = true - border = line - saved-params = "command" - elem "saybutton" - type = BUTTON - pos = 474,456 - size = 80x20 - anchor1 = 100,100 - anchor2 = -1,-1 - text = "Чат" - 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 = 553,456 - size = 80x20 - anchor1 = 100,100 - anchor2 = -1,-1 - text = "Действие" - 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 = 633x452 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #ffffff - is-disabled = true - window "rpane" elem "rpane" type = MAIN - pos = 0,0 - size = 0x0 + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "rpanewindow" type = CHILD - pos = 0,27 - size = 0x0 + pos = 0,30 + size = 640x445 anchor1 = 0,0 anchor2 = 100,100 saved-params = "splitter" @@ -307,27 +268,108 @@ window "rpane" font-style = "bold" text-color = #ffffff background-color = #ef642b - text = "Бусти" + text = "Boosty" command = "Donate" elem "changelog" type = BUTTON - pos = 393,7 + pos = 392,7 size = 70x16 - text = "Чейнджлог" + font-style = "bold" + text-color = #ffffff + text = "Changelog" command = "Changelog" elem "fullscreenb" type = BUTTON - pos = 469,7 + pos = 467,7 size = 70x16 + font-style = "bold" + text-color = #ffffff + background-color = #40628A saved-params = "is-checked" text = "Fullscreen" command = "fullscreen" +window "outputwindow" + elem "outputwindow" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "pos;size;is-minimized;is-maximized" + is-pane = true + elem "input" + type = INPUT + pos = 2,460 + size = 517x20 + anchor1 = 0,100 + anchor2 = 100,100 + is-default = true + border = line + saved-params = "command" + elem "oocbutton" + type = BUTTON + pos = 599,460 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + border = line + saved-params = "is-checked" + text = "OOC" + command = ".winset \"oocbutton.is-checked=true ? input.command=\"!ooc \\\"\" : input.command=\"\"oocbutton.is-checked=true ? mebutton.is-checked=false\"\"oocbutton.is-checked=true ? saybutton.is-checked=false\"" + is-flat = true + button-type = pushbox + elem "saybutton" + type = BUTTON + pos = 519,460 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + border = line + saved-params = "is-checked" + text = "Say" + command = ".winset \"saybutton.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"\"saybutton.is-checked=true ? mebutton.is-checked=false\"\"saybutton.is-checked=true ? oocbutton.is-checked=false\"" + is-flat = true + button-type = pushbox + elem "mebutton" + type = BUTTON + pos = 559,460 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + border = line + saved-params = "is-checked" + 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\"" + is-flat = true + button-type = pushbox + elem "browseroutput" + type = BROWSER + pos = 0,0 + size = 640x456 + anchor1 = 0,0 + anchor2 = 100,100 + is-visible = false + is-disabled = true + saved-params = "" + elem "output" + type = OUTPUT + pos = 0,0 + size = 640x456 + anchor1 = 0,0 + anchor2 = 100,100 + is-default = true + saved-params = "" + window "infowindow" elem "infowindow" type = MAIN - pos = 0,0 - size = 0x0 + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "info" type = INFO @@ -338,3 +380,22 @@ window "infowindow" is-default = true highlight-color = #00aa00 on-show = ".winset \"rpane.infob.is-checked=true?rpane.rpanewindow.top=infowindow:rpane.rpanewindow.top=\"" + +window "tgui_say" + elem "tgui_say" + type = MAIN + pos = 848,500 + size = 275x30 + anchor1 = 50,50 + anchor2 = 50,50 + is-visible = false + saved-params = "" + statusbar = false + can-minimize = false + elem "browser" + type = BROWSER + pos = 0,0 + size = 275x30 + anchor1 = 0,0 + anchor2 = 0,0 + saved-params = "" diff --git a/modular_ss220/_components/_components.dm b/modular_ss220/_components/_components.dm new file mode 100644 index 000000000000..7de630500b91 --- /dev/null +++ b/modular_ss220/_components/_components.dm @@ -0,0 +1,4 @@ +/datum/modpack/comps + name = "Компоненты" + desc = "Различные полезные компоненты, которые обязательно(нет) кому то понадобятся" + author = "aylong" diff --git a/modular_ss220/_components/_components.dme b/modular_ss220/_components/_components.dme new file mode 100644 index 000000000000..1b701de2654f --- /dev/null +++ b/modular_ss220/_components/_components.dme @@ -0,0 +1,3 @@ +#include "_components.dm" + +#include "code/connect_range.dm" diff --git a/modular_ss220/_components/code/connect_range.dm b/modular_ss220/_components/code/connect_range.dm new file mode 100644 index 000000000000..c87d203a2d66 --- /dev/null +++ b/modular_ss220/_components/code/connect_range.dm @@ -0,0 +1,107 @@ +/** + * This component behaves similar to connect_loc_behalf but for all turfs in range, hooking into a signal on each of them. + * Just like connect_loc_behalf, It can react to that signal on behalf of a seperate listener. + * Good for components, though it carries some overhead. Can't be an element as that may lead to bugs. + */ +/datum/component/connect_range + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + + /// An assoc list of signal -> procpath to register to the loc this object is on. + var/list/connections + /** + * The atom the component is tracking. The component will delete itself if the tracked is deleted. + * Signals will also be updated whenever it moves (if it's a movable). + */ + var/atom/tracked + + /// The component will hook into signals only on turfs not farther from tracked than this. + var/range + /// Whether the component works when the movable isn't directly located on a turf. + var/works_in_containers + +/datum/component/connect_range/Initialize(atom/tracked, list/connections, range, works_in_containers = TRUE) + if(!isatom(tracked) || isarea(tracked) || range < 0) + return COMPONENT_INCOMPATIBLE + src.connections = connections + src.range = range + set_tracked(tracked) + src.works_in_containers = works_in_containers + +/datum/component/connect_range/Destroy() + set_tracked(null) + return ..() + +/datum/component/connect_range/InheritComponent(datum/component/component, original, atom/tracked, list/connections, range, works_in_containers) + // Not equivalent. Checks if they are not the same list via shallow comparison. + if(!compare_list(src.connections, connections)) + stack_trace("connect_range component attached to [parent] tried to inherit another connect_range component with different connections") + return + if(src.tracked != tracked) + set_tracked(tracked) + if(src.range == range && src.works_in_containers == works_in_containers) + return + //Unregister the signals with the old settings. + unregister_signals(isturf(tracked) ? tracked : tracked.loc) + src.range = range + src.works_in_containers = works_in_containers + //Re-register the signals with the new settings. + update_signals(src.tracked) + +/datum/component/connect_range/proc/set_tracked(atom/new_tracked) + if(tracked) //Unregister the signals from the old tracked and its surroundings + unregister_signals(isturf(tracked) ? tracked : tracked.loc) + UnregisterSignal(tracked, list( + COMSIG_MOVABLE_MOVED, + COMSIG_PARENT_QDELETING, + )) + tracked = new_tracked + if(!tracked) + return + //Register signals on the new tracked atom and its surroundings. + RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel)) + update_signals(tracked) + +/datum/component/connect_range/proc/handle_tracked_qdel() + SIGNAL_HANDLER + qdel(src) + +/datum/component/connect_range/proc/update_signals(atom/target, atom/old_loc, forced = FALSE) + var/turf/current_turf = get_turf(target) + var/on_same_turf = current_turf == get_turf(old_loc) //Only register/unregister turf signals if it's moved to a new turf. + unregister_signals(old_loc, on_same_turf) + + if(isnull(current_turf)) + return + + if(ismovable(target.loc)) + if(!works_in_containers) + return + //Keep track of possible movement of all movables the target is in. + for(var/atom/movable/container as anything in get_nested_locs(target)) + RegisterSignal(container, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + + if(on_same_turf && !forced) + return + for(var/turf/target_turf in RANGE_TURFS(range, current_turf)) + for(var/signal in connections) + parent.RegisterSignal(target_turf, signal, connections[signal]) + +/datum/component/connect_range/proc/unregister_signals(atom/location, on_same_turf = FALSE) + //The location is null or is a container and the component shouldn't have register signals on it + if(isnull(location) || (!works_in_containers && !isturf(location))) + return + + if(ismovable(location)) + for(var/atom/movable/target as anything in (get_nested_locs(location) + location)) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + + if(on_same_turf) + return + var/turf/previous_turf = get_turf(location) + for(var/turf/target_turf in RANGE_TURFS(range, previous_turf)) + parent.UnregisterSignal(target_turf, connections) + +/datum/component/connect_range/proc/on_moved(atom/movable/movable, atom/old_loc) + SIGNAL_HANDLER + update_signals(movable, old_loc) diff --git a/modular_ss220/_defines220/_defines220.dme b/modular_ss220/_defines220/_defines220.dme index a393d8dc67f5..16ffa8fffe03 100644 --- a/modular_ss220/_defines220/_defines220.dme +++ b/modular_ss220/_defines220/_defines220.dme @@ -14,5 +14,7 @@ #include "code/hud_ss220.dm" #include "code/layers_ss220.dm" #include "code/signals_atom.dm" -#include "code/jobs_defines.dm" +#include "code/job_defines.dm" #include "code/donor.dm" +#include "code/emote.dm" +#include "code/lists_TG.dm" diff --git a/modular_ss220/_defines220/code/donor.dm b/modular_ss220/_defines220/code/donor.dm index 053c420212cf..2367a83e97b1 100644 --- a/modular_ss220/_defines220/code/donor.dm +++ b/modular_ss220/_defines220/code/donor.dm @@ -5,3 +5,7 @@ // What TTS level does it give access to? #define BIG_WORKER_TTS_LEVEL 3 #define LITTLE_WORKER_TTS_LEVEL 1 + +// General limitation +#define BIG_WORKER_LEVEL 3 +#define LITTLE_WORKER_LEVEL 1 diff --git a/modular_ss220/_defines220/code/emote.dm b/modular_ss220/_defines220/code/emote.dm new file mode 100644 index 000000000000..57a98f59285a --- /dev/null +++ b/modular_ss220/_defines220/code/emote.dm @@ -0,0 +1,175 @@ +/// General Emotes +#define EMOTE_FLIP "Сделать кувырок" +#define EMOTE_SPIN "Покрутиться" +#define EMOTE_BLUSH "Краснеть" +#define EMOTE_BOW "Поклониться" +#define EMOTE_BURP "Рыгнуть" +#define EMOTE_CHOKE "Подавиться" +#define EMOTE_COLLAPSE "Рухнуть" +#define EMOTE_DANCE "Танцевать" +#define EMOTE_JUMP "Прыгнуть" +#define EMOTE_DEATHGASP "Предсмертный вздох" +#define EMOTE_DROOL "Пускать слюни" +#define EMOTE_QUIVER "Трепетать" +#define EMOTE_FROWN "Смотреть в недоумении" +#define EMOTE_GAG "Вырвать" +#define EMOTE_GLARE "Смотреть с ненавистью" +#define EMOTE_GRIN "Оскалиться в улыбке" +#define EMOTE_GRIMACE "Скорчить рожицу" +#define EMOTE_GROAN "Болезненный вздох" +#define EMOTE_LOOK "Посмотреть" +#define EMOTE_BSHAKE "Трястись" +#define EMOTE_SHUDDER "Содрогаться" +#define EMOTE_POINT "Показать пальцем" +#define EMOTE_POUT "Надуть губы" +#define EMOTE_SCREAM "Кричать" +#define EMOTE_SHAKE "Мотать головой" +#define EMOTE_SHIVER "Дрожать" +#define EMOTE_SIGH "Вздыхать" +#define EMOTE_SIGH_HAPPY "Удовлетворённо вздыхать" +#define EMOTE_SIT "Сесть" +#define EMOTE_SMILE "Улыбнуться" +#define EMOTE_SMUG "Ухмыляться" +#define EMOTE_SNIFF "Шмыгать носом" +#define EMOTE_SNORE "Храпеть" +#define EMOTE_NIGHTMARE "Ворочаться во сне" +#define EMOTE_STARE "Пялиться" +#define EMOTE_STRECH "Разминать руки" +#define EMOTE_SULK "Обидеться" +#define EMOTE_SWAY "Качаться на месте" +#define EMOTE_SWEAR "Ругнуться" +#define EMOTE_TILT "Наклонить голову" +#define EMOTE_TREMBLE "Дрожать в ужасе" +#define EMOTE_TWITCH "Сильно дёргаться" +#define EMOTE_TWITCHS "Дёргаться" +#define EMOTE_WHIMPER "Хныкать" +#define EMOTE_WSMILE "Сдержанно улыбнуться" + +/// Human Emotes +#define EMOTE_HUMAN_AIRGUITAR "Воображаемая гитара" +#define EMOTE_HUMAN_CLAP "Хлопать" +#define EMOTE_HUMAN_CRY "Плакать" +#define EMOTE_HUMAN_DAP "Особое рукопожатие" +#define EMOTE_HUMAN_EYEBROW "Приподнять бровь" +#define EMOTE_HUMAN_FACEPALM "Хлопнуть по лбу" +#define EMOTE_HUMAN_GRUMBLE "Ворчать" +#define EMOTE_HUMAN_HUG "Обнимать" +#define EMOTE_HUMAN_MUMBLE "Бормотать" +#define EMOTE_HUMAN_NOD "Кивнуть" +#define EMOTE_HUMAN_PALM "Протянуть руку" +#define EMOTE_HUMAN_SCREAM "Кричать" +#define EMOTE_HUMAN_GASP "Задыхаться" +#define EMOTE_HUMAN_SHAKE "Мотать головой" +#define EMOTE_HUMAN_PALE "Бледнеть" +#define EMOTE_HUMAN_RAISE "Поднять руку" +#define EMOTE_HUMAN_SALUTE "Салютовать" +#define EMOTE_HUMAN_SIGNAL "Показать пальцы" +#define EMOTE_HUMAN_SHRUG "Пожать плечами" +#define EMOTE_HUMAN_SNIFF "Шмыгать носом" +#define EMOTE_HUMAN_JOHNNY "Курить стильно" +#define EMOTE_HUMAN_SNEEZE "Чихнуть" +#define EMOTE_HUMAN_SLAP "Дать пощёчину" +#define EMOTE_HUMAN_WINCE "Морщиться" +#define EMOTE_HUMAN_SQUINT "Прищуриться" +#define EMOTE_HUMAN_WINK "Подмигнуть" +#define EMOTE_HUMAN_HIGHFIVE "Дать пять" +#define EMOTE_HUMAN_HANDSHAKE "Пожать руку" +#define EMOTE_HUMAN_SNAP "Щёлкнуть пальцами" +#define EMOTE_HUMAN_CRACK "Хрустеть пальцами" +#define EMOTE_HUMAN_FART "Пёрнуть" +#define EMOTE_HUMAN_WAG "Махать хвостом" +#define EMOTE_HUMAN_WAG_STOP "Перестать махать хвостом" +#define EMOTE_HUMAN_FLAP "Махать крыльями" +#define EMOTE_HUMAN_AFLAP "Махать крыльями агрессивно" +#define EMOTE_HUMAN_FLUTTER "Трепетать крыльями" +#define EMOTE_HUMAN_QUILL "Шуршать перьями" +#define EMOTE_HUMAN_WARBLE "Трель" +#define EMOTE_HUMAN_CLACK "Трещать" +#define EMOTE_HUMAN_CLICK "Щёлкать" +#define EMOTE_HUMAN_DRONE "Гудеть" +#define EMOTE_HUMAN_HUM "Жужжать" +#define EMOTE_HUMAN_HISS "Шипеть" +#define EMOTE_HUMAN_CREAK "Скрипеть" +#define EMOTE_HUMAN_SQUISH "Хлюпать" +#define EMOTE_HUMAN_HOWL "Выть" +#define EMOTE_HUMAN_GROWL "Рычать" +#define EMOTE_HUMAN_RATTLE "Греметь" +#define EMOTE_HUMAN_BUBBLE "Булькать" +#define EMOTE_HUMAN_POP "Хлопать ртом" +#define EMOTE_HUMAN_GNARL "Оскалиться" +#define EMOTE_HUMAN_ROLL "Катиться" +#define EMOTE_HUMAN_TAIL "Помахать хвостом" +#define EMOTE_HUMAN_SCREECH "Визжать" +#define EMOTE_HUMAN_HEM "Хмыкнуть" +#define EMOTE_HUMAN_SCRATCH "Почесаться" +#define EMOTE_HUMAN_WHISTLE "Свистеть" +#define EMOTE_HUMAN_SNUFFLE "Нюхать" +#define EMOTE_HUMAN_ROAR "Рычать" +#define EMOTE_HUMAN_RUMBLE "Урчать" +#define EMOTE_HUMAN_THREAT "Угрожать" +#define EMOTE_HUMAN_PURR "Мурчать" +#define EMOTE_HUMAN_PURRL "Мурчать дольше" +#define EMOTE_HUMAN_WAVES_K "Взмахнуть усиками" +#define EMOTE_HUMAN_WIGGLES "Шевелить усиками" +#define EMOTE_HUMAN_WHIPS "Хлестать хвостом" +#define EMOTE_HUMAN_WHIP "Ударить хвостом" + +/// Carbon Emotes +#define EMOTE_CARBON_BLINK "Моргать" +#define EMOTE_CARBON_BLINKR "Моргать быстро" +#define EMOTE_CARBON_CROSS "Скрестить руки" +#define EMOTE_CARBON_CHUCKLE "Усмехнуться" +#define EMOTE_CARBON_COUGH "Кашлять" +#define EMOTE_CARBON_MOAN "Стонать" +#define EMOTE_CARBON_GIGGLE "Хихикать" +#define EMOTE_CARBON_GURGLE "Побулькать" +#define EMOTE_CARBON_INHALE "Вдохнуть" +#define EMOTE_CARBON_INHALE_SHARP "Глубоко вдохнуть" +#define EMOTE_CARBON_KISS "Поцеловать" +#define EMOTE_CARBON_WAVE "Махать" +#define EMOTE_CARBON_YAWN "Зевать" +#define EMOTE_CARBON_EXHALE "Выдохнуть" +#define EMOTE_CARBON_LAUGH "Смеяться" +#define EMOTE_CARBON_SCOWL "Хмуриться" +#define EMOTE_CARBON_TWIRL "Вертеть" +#define EMOTE_CARBON_FAINT "Потерять сознание" +#define EMOTE_CARBON_SIGN "Показать число" +#define EMOTE_CARBON_CLAP "Хлопать" + +/// Silicon/IPC Emotes +#define EMOTE_SILICON_SCREAM "Кричать" +#define EMOTE_SILICON_PING "Звенеть" +#define EMOTE_SILICON_BUZZ "Жужжать" +#define EMOTE_SILICON_BUZZ2 "Жужжать раздражённо" +#define EMOTE_SILICON_BEEP "Бипнуть" +#define EMOTE_SILICON_BOOP "Бупнуть" +#define EMOTE_SILICON_YES "Положительно" +#define EMOTE_SILICON_NO "Отрицательно" +#define EMOTE_SILICON_LAW "Удостоверяющий штрихкод" +#define EMOTE_SILICON_HALT "Ни с места" + +/// Animal Emotes +#define EMOTE_ANIMAL_CHIRP "Стрекотать" +#define EMOTE_ANIMAL_OOGA "Уга буга" +#define EMOTE_ANIMAL_BARK "Лаять" +#define EMOTE_ANIMAL_YELP "Визжать" +#define EMOTE_ANIMAL_GROWL "Рычать" +#define EMOTE_ANIMAL_MEOW "Мяукать" +#define EMOTE_ANIMAL_HISS "Шипеть" +#define EMOTE_ANIMAL_PURR "Мурчать" +#define EMOTE_ANIMAL_SIT "Сесть" +#define EMOTE_ANIMAL_SQUEAK "Пищать" + +/// Emote Brain +#define EMOTE_BRAIN_ALARM "Сигнал тревоги" +#define EMOTE_BRAIN_ALERT "Страдальческий звук" +#define EMOTE_BRAIN_NOTICE "Громкий звук" +#define EMOTE_BRAIN_FLASH "Мигать лампочками" +#define EMOTE_BRAIN_WHISTLE "Свистеть" +#define EMOTE_BRAIN_BEEP "Бипнуть" +#define EMOTE_BRAIN_BOOP "Бупнуть" + +/// Alien Emotes +#define EMOTE_ALIEN_HISS "Шипеть" +#define EMOTE_ALIEN_ROAR "Рычать" +#define EMOTE_ALIEN_GNARL "Скалиться" diff --git a/modular_ss220/_defines220/code/job_defines.dm b/modular_ss220/_defines220/code/job_defines.dm new file mode 100644 index 000000000000..e93e785a5198 --- /dev/null +++ b/modular_ss220/_defines220/code/job_defines.dm @@ -0,0 +1,141 @@ +#define NOVICE_JOB_MINUTES 120 +#define NOVICE_CADET_JOB_MINUTES 300 + +// Если ОФФы добавят новую должность в отдел, то потребуется смещение (╯°□°)╯︵ ┻━┻ +// Но так как они больше не планируют и выступают против добавления новых профессий, скорее всего ничего и не изменится. + +// JOBCAT_"отдел"_LAST - нужен для корректного вывода из БД, иначе чуда не будет. +// Максимальный сдвиг (1<<22), Последний сдвиг (1<<23) +// Он должен быть всегда как минимум на 1 больше последнего, по дефолту у ОФФов (1<<16) + + +// ==================================== +// JOBCAT_ENGSEC +// Начинаются с JOB_NANO (1<<14) +#define JOB_TRAINEE (1<<15) +#define JOB_CADET (1<<16) +//#define JOB_PILOT (1<<17) + +#define JOB_REPRESENTATIVE_TSF (1<<17) +#define JOB_REPRESENTATIVE_USSP (1<<18) +#define JOB_DEALER (1<<19) +#define JOB_VIP_GUEST (1<<20) +#define JOB_BANKER (1<<21) +#define JOB_SECURITY_CLOWN (1<<22) + +#define JOBCAT_LAST_ENGSEC (1<<23) + + +// ==================================== +// JOBCAT_MEDSCI +// Начинаются с JOB_CORONER (1<<10) +#define JOB_INTERN (1<<11) +#define JOB_STUDENT (1<<12) +#define JOB_MECHANIC (1<<13) + +#define JOB_ADMINISTRATOR (1<<14) +#define JOB_TOURIST_TSF (1<<15) +#define JOB_TOURIST_USSP (1<<16) +#define JOB_MANAGER_JANITOR (1<<17) +#define JOB_ACTOR (1<<18) +//#define JOB_APPRENTICE (1<<18) +#define JOB_GUARD (1<<19) +#define JOB_MIGRANT (1<<20) +#define JOB_UNCERTAIN (1<<21) +#define JOB_ADJUTANT (1<<22) +//#define JOB_MAID (1<<23) +//#define JOB_BUTLER (1<<24) + +#define JOBCAT_LAST_MEDSCI (1<<23) + + +// ==================================== +// JOBCAT_SUPPORT +// Начинаются с JOB_EXPLORER (1<<14) +#define JOB_PRISON (1<<15) +#define JOB_BARBER (1<<16) +#define JOB_BATH (1<<17) +#define JOB_CASINO (1<<18) +#define JOB_WAITER (1<<19) +#define JOB_ACOLYTE (1<<20) +//#define JOB_DELIVERER (1<<21) +#define JOB_BOXER (1<<21) +#define JOB_MUSICIAN (1<<22) +//#define JOB_PAINTER (1<<24) + +#define JOBCAT_LAST_SUPPORT (1<<23) + + + + + + + +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// В ЭТОМ ФАЙЛЕ МЫ [B]ВРЕМЕННО[/B] ЗАСОВЫВАЕМ +// НАШИ ДЕФАЙНЫ ПОД КАТЕГОРИИ РАЗНЫХ ОТДЕЛОВ! +// ПРАВИЛЬНАЯ РАСФАСОВКА НИЖЕ +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +/* +// ==================================== +// JOBCAT_ENGSEC +// Начинаются с JOB_NANO (1<<14) +#define JOB_TRAINEE (1<<15) +#define JOB_CADET (1<<16) +#define JOBCAT_LAST_ENGSEC (1<<17) + + +// ==================================== +// JOBCAT_MEDSCI +// Начинаются с JOB_CORONER (1<<10) +#define JOB_INTERN (1<<11) +#define JOB_STUDENT (1<<12) +#define JOBCAT_LAST_MEDSCI (1<<16) + + +// ==================================== +// JOBCAT_SUPPORT +// Начинаются с JOB_EXPLORER (1<<14) +// TIER 1 +#define JOB_PRISON (1<<15) + +// TIER 2 +#define JOB_BARBER (1<<16) +#define JOB_BATH (1<<17) +#define JOB_CASINO (1<<18) +#define JOB_WAITER (1<<19) +#define JOB_ACOLYTE (1<<20) +#define JOB_DELIVERER (1<<21) +#define JOB_BOXER (1<<22) +#define JOB_PAINTER (1<<23) +#define JOB_MUSICIAN (1<<24) +#define JOB_DONOR (1<<24) // Свободная роль, можно переименовать +#define JOB_ACTOR (1<<26) + +// TIER 3 +#define JOB_ADMINISTRATOR (1<<27) +#define JOB_TOURIST_TSF (1<<28) +#define JOB_TOURIST_USSP (1<<29) +#define JOB_MANAGER_JANITOR (1<<30) +#define JOB_APPRENTICE (1<<31) +#define JOB_GUARD (1<<32) +#define JOB_MIGRANT (1<<33) +#define JOB_UNCERTAIN (1<<34) + +// TIER 4 +#define JOB_ADJUTANT (1<<35) +#define JOB_BUTLER (1<<36) +#define JOB_MAID (1<<37) +#define JOB_REPRESENTATIVE_TSF (1<<38) +#define JOB_REPRESENTATIVE_USSP (1<<39) +#define JOB_DEALER (1<<40) + +// TIER 5 +#define JOB_VIP_GUEST (1<<41) +#define JOB_BANKER (1<<42) +#define JOB_SECURITY_CLOWN (1<<43) + +#define JOBCAT_LAST_SUPPORT (1<<44) + +*/ diff --git a/modular_ss220/_defines220/code/jobs_defines.dm b/modular_ss220/_defines220/code/jobs_defines.dm deleted file mode 100644 index fed4ba8651fa..000000000000 --- a/modular_ss220/_defines220/code/jobs_defines.dm +++ /dev/null @@ -1,11 +0,0 @@ -#define NOVICE_JOB_MINUTES 120 -#define NOVICE_CADET_JOB_MINUTES 300 - -// JOBCAT_ENGSEC -#define JOB_TRAINEE (1<<15) -#define JOB_CADET (1<<16) - -// JOBCAT_MEDSCI -#define JOB_INTERN (1<<11) -#define JOB_STUDENT (1<<12) -// Если ОФФы добавят новую должность в отдел, то потребуется смещение diff --git a/modular_ss220/_defines220/code/lists_TG.dm b/modular_ss220/_defines220/code/lists_TG.dm new file mode 100644 index 000000000000..7e5d6e16df7f --- /dev/null +++ b/modular_ss220/_defines220/code/lists_TG.dm @@ -0,0 +1,7 @@ +// Generic listoflist safe add and removal macros: +///If value is a list, wrap it in a list so it can be used with list add/remove operations +#define LIST_VALUE_WRAP_LISTS(value) (islist(value) ? list(value) : value) +///Add an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_ADD(list, item) (list += LIST_VALUE_WRAP_LISTS(item)) +///Remove an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_REMOVE(list, item) (list -= LIST_VALUE_WRAP_LISTS(item)) diff --git a/modular_ss220/_misc/code/global_procs.dm b/modular_ss220/_misc/code/global_procs.dm index e7163cc06d44..d6c790f5c99b 100644 --- a/modular_ss220/_misc/code/global_procs.dm +++ b/modular_ss220/_misc/code/global_procs.dm @@ -1,2 +1,13 @@ /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") + +///Returns a list of all locations (except the area) the movable is within. +/proc/get_nested_locs(atom/movable/atom_on_location, include_turf = FALSE) + . = list() + var/atom/location = atom_on_location.loc + var/turf/our_turf = get_turf(atom_on_location) + while(location && location != our_turf) + . += location + location = location.loc + if(our_turf && include_turf) //At this point, only the turf is left, provided it exists. + . += our_turf diff --git a/modular_ss220/_modpacks.dm b/modular_ss220/_modpacks.dm index f7865a0ae2a6..a8a136849101 100644 --- a/modular_ss220/_modpacks.dm +++ b/modular_ss220/_modpacks.dm @@ -69,9 +69,12 @@ SUBSYSTEM_DEF(modpacks) )) return modpacks -/datum/controller/subsystem/modpacks/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state = GLOB.always_state) +/datum/controller/subsystem/modpacks/ui_state(mob/user) + return GLOB.always_state + +/datum/controller/subsystem/modpacks/ui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ModpacksList", "Modpacks List", 500, 550, master_ui, state) + ui = new(user, src, "ModpacksList", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/modular_ss220/aesthetics/_aesthetics.dme b/modular_ss220/aesthetics/_aesthetics.dme index 6ffb0d8abb86..16eec0a94895 100644 --- a/modular_ss220/aesthetics/_aesthetics.dme +++ b/modular_ss220/aesthetics/_aesthetics.dme @@ -27,6 +27,7 @@ #include "hydroponics\code\hydroponics.dm" #include "intercom\code\intercom.dm" #include "keycard\code\keycard.dm" +#include "kitchen\code\kitchen.dm" #include "labeler\code\labeler.dm" #include "library\code\library.dm" #include "light_switch\code\light_switch.dm" @@ -42,7 +43,6 @@ #include "satellite\code\satellite.dm" #include "sheets\code\sheets.dm" #include "shutters\code\shutters.dm" -#include "skin\code\darkmode.dm" #include "soap\code\soap.dm" #include "stamps\code\stamps.dm" #include "surgery_table\code\surgery_table.dm" diff --git a/modular_ss220/aesthetics/airlocks/icons/station/overlays.dmi b/modular_ss220/aesthetics/airlocks/icons/station/overlays.dmi index 8f8801051180..6c3a6fca97f6 100644 Binary files a/modular_ss220/aesthetics/airlocks/icons/station/overlays.dmi and b/modular_ss220/aesthetics/airlocks/icons/station/overlays.dmi differ diff --git a/modular_ss220/aesthetics/better_ids/icons/better_ids.dmi b/modular_ss220/aesthetics/better_ids/icons/better_ids.dmi index 521ffa0df7b9..dd44a7926635 100644 Binary files a/modular_ss220/aesthetics/better_ids/icons/better_ids.dmi and b/modular_ss220/aesthetics/better_ids/icons/better_ids.dmi differ diff --git a/modular_ss220/aesthetics/firealarm/icons/firealarm.dmi b/modular_ss220/aesthetics/firealarm/icons/firealarm.dmi index 17f9897e3fbe..ae288310c251 100644 Binary files a/modular_ss220/aesthetics/firealarm/icons/firealarm.dmi and b/modular_ss220/aesthetics/firealarm/icons/firealarm.dmi differ diff --git a/modular_ss220/aesthetics/floors/code/floors.dm b/modular_ss220/aesthetics/floors/code/floors.dm index f6519bd50caa..875dd6cc1744 100644 --- a/modular_ss220/aesthetics/floors/code/floors.dm +++ b/modular_ss220/aesthetics/floors/code/floors.dm @@ -1,3 +1,12 @@ +/// Floor icon_states for floor painter +/datum/painter/floor/New() + allowed_states |= list("darkneutralcorner", "darkneutral", "darkneutralfull", "navybluecorners", "navyblue", "navybluefull", + "navybluealt", "navybluealtstrip", "navybluecornersalt", "darkbluealt", "darkbluealtstrip", "darkbluecornersalt", + "darkredalt", "darkredaltstrip", "darkredcornersalt", "darkyellowalt", "darkyellowaltstrip", "darkyellowcornersalt", + "whitebrowncorner", "whitebrown" + ) + . = ..() + /turf/simulated/floor icon = 'modular_ss220/aesthetics/floors/icons/floors.dmi' diff --git a/modular_ss220/aesthetics/kitchen/code/kitchen.dm b/modular_ss220/aesthetics/kitchen/code/kitchen.dm new file mode 100644 index 000000000000..0c1bed7b07f7 --- /dev/null +++ b/modular_ss220/aesthetics/kitchen/code/kitchen.dm @@ -0,0 +1,14 @@ +/obj/machinery/kitchen_machine/grill + icon = 'modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi' + +/obj/machinery/kitchen_machine/oven + icon = 'modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi' + +/obj/machinery/kitchen_machine/candy_maker + icon = 'modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi' + +/obj/machinery/cooker/deepfryer + icon = 'modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi' + +/obj/machinery/kitchen_machine/microwave + icon = 'modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi' diff --git a/modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi b/modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi new file mode 100644 index 000000000000..2d68d9a965d3 Binary files /dev/null and b/modular_ss220/aesthetics/kitchen/icons/cooking_machines.dmi differ diff --git a/modular_ss220/aesthetics/skin/code/darkmode.dm b/modular_ss220/aesthetics/skin/code/darkmode.dm deleted file mode 100644 index 48e5f4c2ea9f..000000000000 --- a/modular_ss220/aesthetics/skin/code/darkmode.dm +++ /dev/null @@ -1,11 +0,0 @@ -/client/activate_darkmode() - . = ..() - winset(src, "rpane.fullscreenb", "background-color=#40628a;text-color=#ffffff") - -/client/deactivate_darkmode() - . = ..() - winset(src, "rpane.fullscreenb", "background-color=none;text-color=#000000") - -/datum/preferences/New(client/C, datum/db_query/Q) - toggles |= PREFTOGGLE_UI_DARKMODE - . = ..() diff --git a/modular_ss220/aesthetics/skin/icons/screen_clockwork.dmi b/modular_ss220/aesthetics/skin/icons/screen_clockwork.dmi index 33a1d999ec4a..6d788556420e 100644 Binary files a/modular_ss220/aesthetics/skin/icons/screen_clockwork.dmi and b/modular_ss220/aesthetics/skin/icons/screen_clockwork.dmi differ diff --git a/modular_ss220/aesthetics/skin/icons/screen_detective.dmi b/modular_ss220/aesthetics/skin/icons/screen_detective.dmi index 304b91e93363..eda7ad91bd9a 100644 Binary files a/modular_ss220/aesthetics/skin/icons/screen_detective.dmi and b/modular_ss220/aesthetics/skin/icons/screen_detective.dmi differ diff --git a/modular_ss220/aesthetics/skin/icons/screen_trasenknox.dmi b/modular_ss220/aesthetics/skin/icons/screen_trasenknox.dmi index 9f8c6c60be46..b58fb49e4522 100644 Binary files a/modular_ss220/aesthetics/skin/icons/screen_trasenknox.dmi and b/modular_ss220/aesthetics/skin/icons/screen_trasenknox.dmi differ diff --git a/modular_ss220/aesthetics/stamps/code/stamps.dm b/modular_ss220/aesthetics/stamps/code/stamps.dm index 8b45a0705154..ccc668b75f67 100644 --- a/modular_ss220/aesthetics/stamps/code/stamps.dm +++ b/modular_ss220/aesthetics/stamps/code/stamps.dm @@ -69,14 +69,3 @@ icon_state = "stamp-ussp" item_color = "redcoat" stampoverlay_custom_icon = 'modular_ss220/aesthetics/stamps/icons/stamps.dmi' - -// Adding new stamps to the list -/datum/asset/simple/paper/New() - assets += list( - "large_stamp-ward.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ward.png', - "large_stamp-ploho.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ploho.png', - "large_stamp-BIGdeny.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-BIGdeny.png', - "large_stamp-navcom.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-navcom.png', - "large_stamp-mime.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-mime.png', - "large_stamp-ussp.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ussp.png' - ) diff --git a/modular_ss220/aesthetics/windowtint/code/windowtint.dm b/modular_ss220/aesthetics/windowtint/code/windowtint.dm index bf1a409571ab..0d919352a13e 100644 --- a/modular_ss220/aesthetics/windowtint/code/windowtint.dm +++ b/modular_ss220/aesthetics/windowtint/code/windowtint.dm @@ -3,20 +3,29 @@ icon_state = "polarizer-0" layer = ABOVE_WINDOW_LAYER -/obj/machinery/button/windowtint/attack_hand(mob/user) +/obj/machinery/button/windowtint/try_attack_hand(mob/user) + if(..()) + return TRUE if(!allowed(user) && !user.can_advanced_admin_interact()) to_chat(user, span_warning("Access Denied.")) flick("polarizer-denied",src) playsound(src, pick('modular_ss220/aesthetics/windowtint/sound/button.ogg', 'modular_ss220/aesthetics/windowtint/sound/button_alternate.ogg', 'modular_ss220/aesthetics/windowtint/sound/button_meloboom.ogg'), 20) - return 1 + return TRUE + return FALSE - toggle_tint() - icon_state= "polarizer-turning_on" - addtimer(CALLBACK(src, PROC_REF(update_windowtint_icon)), 0.5 SECONDS) +/obj/machinery/button/windowtint/toggle_tint() + ..() + if(range != TINT_CONTROL_RANGE_AREA) + animate_windowtint() + return + for(var/obj/machinery/button/windowtint/button in button_area) + if(button.range != TINT_CONTROL_RANGE_AREA || (button.id != id && button.id != TINT_CONTROL_GROUP_NONE)) + continue + button.animate_windowtint() - if(!active) - icon_state= "polarizer-turning_off" - addtimer(CALLBACK(src, PROC_REF(update_windowtint_icon)), 0.5 SECONDS) +/obj/machinery/button/windowtint/proc/animate_windowtint() + icon_state = active ? "polarizer-turning_on" : "polarizer-turning_off" + addtimer(CALLBACK(src, PROC_REF(update_windowtint_icon)), 0.5 SECONDS) /obj/machinery/button/windowtint/proc/update_windowtint_icon() icon_state = "polarizer-[active]" diff --git a/modular_ss220/aesthetics_sounds/sound/coin_accept.ogg b/modular_ss220/aesthetics_sounds/sound/coin_accept.ogg new file mode 100644 index 000000000000..34b79ad1240a Binary files /dev/null and b/modular_ss220/aesthetics_sounds/sound/coin_accept.ogg differ diff --git a/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm b/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm index 5931bcea6215..6f9a00563cc0 100644 --- a/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm +++ b/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm @@ -116,10 +116,13 @@ data["appearances"] = card_images return data -/obj/item/card/id/syndicate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/card/id/syndicate/ui_state(mob/user) + return GLOB.default_state + +/obj/item/card/id/syndicate/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AgentCard", name, 425, 500, master_ui, state) + ui = new(user, src, "AgentCard", name) ui.open() /obj/item/card/id/syndicate/attack_self(mob/user) diff --git a/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm b/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm index a5fffbd4e512..8064fab91231 100644 --- a/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm +++ b/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm @@ -71,7 +71,7 @@ vars[param] = params[param] if(GLOB.configuration.gamemode.prevent_mindshield_antags) - restricted_roles |= protected_roles + restricted_roles |= protected_roles + GLOB.restricted_jobs_ss220 /** diff --git a/modular_ss220/balance/_balance.dme b/modular_ss220/balance/_balance.dme index 2d9559a712cb..f6734c169e84 100644 --- a/modular_ss220/balance/_balance.dme +++ b/modular_ss220/balance/_balance.dme @@ -1,7 +1,9 @@ #include "_balance.dm" +#include "code/access/access.dm" #include "code/items/projectiles.dm" #include "code/items/weapons.dm" +#include "code/items/storage/surgical_tray.dm" #include "code/jobs/warden.dm" #include "code/mobs/aliens/larva.dm" #include "code/species/machine.dm" diff --git a/modular_ss220/balance/code/access/access.dm b/modular_ss220/balance/code/access/access.dm new file mode 100644 index 000000000000..bdf575cc8398 --- /dev/null +++ b/modular_ss220/balance/code/access/access.dm @@ -0,0 +1,19 @@ +/datum/job/cargo_tech/New() + . = ..() + access += list(ACCESS_MINING) + +/datum/job/mining/New() + . = ..() + access += list(ACCESS_CARGO, ACCESS_CARGO_BAY, ACCESS_MAILSORTING) + +/datum/job/bartender/New() + . = ..() + access += list(ACCESS_KITCHEN, ACCESS_HYDROPONICS) + +/datum/job/chef/New() + . = ..() + access += list(ACCESS_BAR, ACCESS_HYDROPONICS) + +/datum/job/hydro/New() + . = ..() + access += list(ACCESS_KITCHEN, ACCESS_BAR) diff --git a/modular_ss220/balance/code/items/storage/surgical_tray.dm b/modular_ss220/balance/code/items/storage/surgical_tray.dm new file mode 100644 index 000000000000..c3c65d4b0692 --- /dev/null +++ b/modular_ss220/balance/code/items/storage/surgical_tray.dm @@ -0,0 +1,14 @@ +/obj/item/storage/surgical_tray/Initialize(mapload) + . = ..() + + QDEL_LIST_CONTENTS(contents) + + new /obj/item/scalpel(src) + new /obj/item/cautery(src) + new /obj/item/hemostat(src) + new /obj/item/retractor(src) + new /obj/item/FixOVein(src) + new /obj/item/surgicaldrill(src) + new /obj/item/circular_saw(src) + new /obj/item/bonegel(src) + new /obj/item/bonesetter(src) diff --git a/modular_ss220/balance/code/species/machine.dm b/modular_ss220/balance/code/species/machine.dm index a33fb1f80e26..e2460ebe1d65 100644 --- a/modular_ss220/balance/code/species/machine.dm +++ b/modular_ss220/balance/code/species/machine.dm @@ -10,3 +10,9 @@ new /obj/item/weldingtool(src) new /obj/item/stack/cable_coil/five(src) new /obj/item/flashlight/flare/glowstick/emergency(src) + +/obj/machinery/recharger/attackby(obj/item/G, mob/user, params) + if(istype(G, /obj/item/melee/baton/electrostaff)) + to_chat(user, "[G] не имеет внешних разъемов для подзарядки.") + return + . = ..() diff --git a/modular_ss220/bureaucracy/code/forms.dm b/modular_ss220/bureaucracy/code/forms.dm index 794fc068ea10..3f6d629231d9 100644 --- a/modular_ss220/bureaucracy/code/forms.dm +++ b/modular_ss220/bureaucracy/code/forms.dm @@ -1,6 +1,10 @@ GLOBAL_LIST_INIT(bureaucratic_forms, list()) /datum/bureaucratic_form + var/const/footer_signstampfax = "

        Подписи глав являются доказательством их согласия.
        Данный документ является недействительным при отсутствии релевантной печати.
        Пожалуйста, отправьте обратно подписанную/проштампованную копию факсом.
        " + var/const/footer_signstamp = "

        Подписи глав являются доказательством их согласия.
        Данный документ является недействительным при отсутствии релевантной печати.
        " + var/const/footer_confidential = "

        Данный документ является недействительным при отсутствии печати.
        Отказ от ответственности: Данный факс является конфиденциальным и не может быть прочтен сотрудниками не имеющего доступа. Если вы получили данный факс по ошибке, просим вас сообщить отправителю и удалить его из вашего почтового ящика или любого другого носителя. И Nanotrasen, и любой её агент не несёт ответственность за любые сделанные заявления, они являются исключительно заявлениями отправителя, за исключением если отправителем является Nanotrasen или один из её агентов. Отмечаем, что ни Nanotrasen, ни один из агентов корпорации не несёт ответственности за наличие вирусов, который могут содержаться в данном факсе или его приложения, и это только ваша прерогатива просканировать факс и приложения на них. Никакие контракты не могут быть заключены посредством факсимильной связи.
        " + /// Form name. Will be applied to a paper var/name /// Form id @@ -26,9 +30,6 @@ GLOBAL_LIST_INIT(bureaucratic_forms, list()) var/notice = "Перед заполнением прочтите от начала до конца | Во всех PDA имеется ручка" /// Is generated based on station name. Used in some forms var/from - var/const/footer_signstampfax = "

        Подписи глав являются доказательством их согласия.
        Данный документ является недействительным при отсутствии релевантной печати.
        Пожалуйста, отправьте обратно подписанную/проштампованную копию факсом.
        " - var/const/footer_signstamp = "

        Подписи глав являются доказательством их согласия.
        Данный документ является недействительным при отсутствии релевантной печати.
        " - var/const/footer_confidential = "

        Данный документ является недействительным при отсутствии печати.
        Отказ от ответственности: Данный факс является конфиденциальным и не может быть прочтен сотрудниками не имеющего доступа. Если вы получили данный факс по ошибке, просим вас сообщить отправителю и удалить его из вашего почтового ящика или любого другого носителя. И Nanotrasen, и любой её агент не несёт ответственность за любые сделанные заявления, они являются исключительно заявлениями отправителя, за исключением если отправителем является Nanotrasen или один из её агентов. Отмечаем, что ни Nanotrasen, ни один из агентов корпорации не несёт ответственности за наличие вирусов, который могут содержаться в данном факсе или его приложения, и это только ваша прерогатива просканировать факс и приложения на них. Никакие контракты не могут быть заключены посредством факсимильной связи.
        " /datum/bureaucratic_form/New() . = ..() @@ -378,6 +379,14 @@ GLOBAL_LIST_INIT(bureaucratic_forms, list()) text = "
        Лицензия


        Имя обладателя лицензии:
        Должность обладателя лицензии:
        Перечень зарегистрированного вооружения:
        Перечень зарегистрированной экипировки:



        Подписи и штампы


        Время:
        Подпись обладателя лицензии:
        Подпись главы службы безопасности:


        *Данная форма документа, обязательно должна подтверждаться печатью ответственного лица. В случае наличия опечаток и отсутствия подписей или печатей, лицензия будет является недействительной. Обязательно провести копирование документа для службы безопасности, оригинал документа должен быть выдан обладателю лицензии. В случае несоответствия должности обладателя лицензии, можно приступить к процедуре аннулирования лицензии и изъятию вооружения, экипировки.
        " footer = footer_confidential +/datum/bureaucratic_form/NT_SEC_09 + name = "Форма NT-SEC-09" + id = "NT-SEC-09" + altername = "Запрет на реанимацию" + category = "Служба безопасности" + text = "Я, \[field\], в должности \[field\], сообщаю о запрете реанимации в отношении: \[b\]\[field\]\[br\]\[/b\]\[br\]Исходя из того, что вышеупомянутый член экипажа нарушил одну или несколько статей Космического Закона, а именно: \[field\]. \[br\]\[i\]Дополнительные сведения\[/i\]: \[field\]\[br\]\[i\]\[br\]\[br\]\[br\]Подпись уполномоченного: \[field\]\[br\]\[br\]Время вступления запрета в силу: \[field\]\[br\]\[/i\]\[hr\]\[small\]Тело будет помещено на хранение, утилизировано или космировано.\[br\]Данный документ должен иметь подпись и печать магистрата, или капитана. \[br\]При отсутствии данных членов командования, необходимо сообщить ЦК, и получить официальный ответ. \[br\]Без подписи и печати, или ответа со стороны ЦК данный документ не является официальным, инициатора запрета реанимации, а так же его подчиненных необходимо объявить в розыск, за нарушение статьи 205.\[/small\]" + footer = footer_confidential + // Юридический отдел /datum/bureaucratic_form/NT_LD_00 name = "Форма NT-LD-00" diff --git a/modular_ss220/bureaucracy/code/photocopier.dm b/modular_ss220/bureaucracy/code/photocopier.dm index 21e1c12a9244..d031d9efaadf 100644 --- a/modular_ss220/bureaucracy/code/photocopier.dm +++ b/modular_ss220/bureaucracy/code/photocopier.dm @@ -51,10 +51,13 @@ if("copies") copies = clamp(text2num(params["new"]), 0, maxcopies) -/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/photocopier/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/photocopier/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Photocopier220", "Ксерокс", 550, 635, master_ui, state) + ui = new(user, src, "Photocopier220", "Ксерокс") ui.open() /obj/machinery/photocopier/ui_data(mob/user) diff --git a/modular_ss220/camera_nanomap/code/camera.dm b/modular_ss220/camera_nanomap/code/camera.dm index ef291d602cd9..c5bcfba5892a 100644 --- a/modular_ss220/camera_nanomap/code/camera.dm +++ b/modular_ss220/camera_nanomap/code/camera.dm @@ -1,6 +1,6 @@ -/obj/machinery/computer/security/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) +/obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui = null) // Update UI - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) // Show static if can't use the camera if(!active_camera?.can_use()) show_camera_static() @@ -22,9 +22,14 @@ user.client.register_map_obj(plane) user.client.register_map_obj(cam_background) // Open UI - ui = new(user, src, ui_key, "CameraConsole220", name, 1170, 755, master_ui, state) + ui = new(user, src, "CameraConsole220", name) ui.open() +/obj/machinery/computer/security/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/nanomaps) + ) + /obj/machinery/computer/security/ui_data() var/list/data = list() data["network"] = network diff --git a/modular_ss220/chat_badges/code/badges.dm b/modular_ss220/chat_badges/code/badges.dm index 10e3f4fe721a..203c3f2bcaf3 100644 --- a/modular_ss220/chat_badges/code/badges.dm +++ b/modular_ss220/chat_badges/code/badges.dm @@ -17,26 +17,47 @@ // Config disallows using Russian so this is the way var/rank switch(holder.rank) + if("Максон") + rank = "Wycc" + + if("Банда", "Братюня", "Сестрюня") + rank = "Streamer" + if("Хост") rank = "Host" + if("Ведущий Разработчик") rank = "HeadDeveloper" + + if("Старший Разработчик", "Разработчик") + rank = "Developer" + + if("Начальный Разработчик") + rank = "MiniDeveloper" + + if("Бригадир Мапперов") + rank = "HeadMapper" + + if("Маппер") + rank = "Mapper" + + if("Спрайтер") + rank = "Spriceter" + + if("Маленький Работяга") + rank = "WikiLore" + if("Старший Администратор") rank = "HeadAdmin" - if("Банда") - rank = "Streamer" - if("Админ") + + if("Администратор") rank = "GameAdmin" - if("Триал Админ") + + if("Триал Администратор") rank = "TrialAdmin" + if("Ментор") rank = "Mentor" - if("Разработчик") - rank = "Developer" - if("Маппер") - rank = "Mapper" - if("Спрайтер") - rank = "Spriceter" var/icon/rank_badge = icon(CHAT_BADGES_DMI, rank) . = "[bicon(rank_badge)][.]" diff --git a/modular_ss220/chat_badges/icons/chatbadges.dmi b/modular_ss220/chat_badges/icons/chatbadges.dmi index b4ae6ba65827..a49ca59811f5 100644 Binary files a/modular_ss220/chat_badges/icons/chatbadges.dmi and b/modular_ss220/chat_badges/icons/chatbadges.dmi differ diff --git a/modular_ss220/clothing/_clothing.dme b/modular_ss220/clothing/_clothing.dme index 59210474bced..f6e5e9312efe 100644 --- a/modular_ss220/clothing/_clothing.dme +++ b/modular_ss220/clothing/_clothing.dme @@ -1,5 +1,6 @@ #include "_clothing.dm" +#include "code/accessories.dm" #include "code/suits.dm" #include "code/shoes.dm" #include "code/gloves.dm" @@ -9,4 +10,5 @@ #include "code/cloaks.dm" #include "code/garment_bag.dm" #include "code/hev_suit.dm" -#include "code/wallets.dm" +#include "code/hats.dm" +#include "code/clothing_vendors.dm" diff --git a/modular_ss220/clothing/code/accessories.dm b/modular_ss220/clothing/code/accessories.dm new file mode 100644 index 000000000000..a83286628fab --- /dev/null +++ b/modular_ss220/clothing/code/accessories.dm @@ -0,0 +1,32 @@ +/obj/item/storage/belt/chef/apron + name = "фартук" + desc = "Фартук с широкими карманами. Такому обзавидуется любой мясник." + icon = 'modular_ss220/clothing/icons/object/accessories.dmi' + icon_state = "apron" + item_state = "apron" + sprite_sheets = list( + "Abductor" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Ancient Skeleton" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Diona" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Drask" = 'modular_ss220/clothing/icons/mob/species/drask/accessories.dmi', + "Golem" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Grey" = 'modular_ss220/clothing/icons/mob/species/grey/accessories.dmi', + "Human" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Kidan" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Machine" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Monkey" = 'modular_ss220/clothing/icons/mob/species/monkey/accessories.dmi', + "Nian" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Plasmaman" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Shadow" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Skrell" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Slime People" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Tajaran" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Unathi" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + "Vox" = 'modular_ss220/clothing/icons/mob/species/vox/accessories.dmi', + "Vulpkanin" = 'modular_ss220/clothing/icons/mob/accessories.dmi', + ) + +/obj/item/storage/belt/chef/apron/red + name = "красный фартук" + icon_state = "apron_red" + item_state = "apron_red" diff --git a/modular_ss220/clothing/code/clothing_vendors.dm b/modular_ss220/clothing/code/clothing_vendors.dm new file mode 100644 index 000000000000..f81c968c0b00 --- /dev/null +++ b/modular_ss220/clothing/code/clothing_vendors.dm @@ -0,0 +1,25 @@ +/obj/machinery/economy/vending/autodrobe/Initialize(mapload) + products += list( + /obj/item/clothing/head/ratge = 1, + ) + prices += list( + /obj/item/clothing/head/ratge = 75, + ) + . = ..() + +/obj/machinery/economy/vending/chefdrobe/Initialize(mapload) + products += list( + /obj/item/clothing/under/rank/civilian/chef/red = 2, + /obj/item/clothing/suit/chef/red = 2, + /obj/item/clothing/head/chefhat/red = 2, + /obj/item/storage/belt/chef/apron = 1, + /obj/item/storage/belt/chef/apron/red = 1, + ) + prices += list( + /obj/item/clothing/under/rank/civilian/chef/red = 50, + /obj/item/clothing/suit/chef/red = 50, + /obj/item/clothing/head/chefhat/red = 50, + /obj/item/storage/belt/chef/apron = 75, + /obj/item/storage/belt/chef/apron/red = 75, + ) + . = ..() diff --git a/modular_ss220/clothing/code/gloves.dm b/modular_ss220/clothing/code/gloves.dm index 888291353e30..8aba91917253 100644 --- a/modular_ss220/clothing/code/gloves.dm +++ b/modular_ss220/clothing/code/gloves.dm @@ -4,4 +4,3 @@ icon = 'modular_ss220/clothing/icons/object/gloves.dmi' icon_state = "bike_gloves" icon_override = 'modular_ss220/clothing/icons/mob/hands.dmi' - item_state = "bike_gloves" diff --git a/modular_ss220/clothing/code/hats.dm b/modular_ss220/clothing/code/hats.dm new file mode 100644 index 000000000000..4b8d0e0b08f0 --- /dev/null +++ b/modular_ss220/clothing/code/hats.dm @@ -0,0 +1,65 @@ +/obj/item/clothing/head/caphat/beret_black + name = "чёрный капитанский берет" + desc = "Хорошо быть королём." + icon = 'modular_ss220/clothing/icons/object/hats.dmi' + icon_state = "cap_beret_black" + icon_override = 'modular_ss220/clothing/icons/mob/hats.dmi' + +/obj/item/clothing/head/ratge + name = "ratge head" + desc = "Ну ты и крыса!" + icon = 'modular_ss220/clothing/icons/object/hats.dmi' + icon_state = "ratgehead" + lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' + righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' + flags = BLOCKHAIR + flags_inv = HIDEMASK | HIDEEARS | HIDEEYES | HIDEFACE + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + sprite_sheets = list( + "Abductor" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Ancient Skeleton" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Diona" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Drask" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Golem" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Grey" = 'modular_ss220/clothing/icons/mob/species/grey/hats.dmi', + "Human" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Kidan" = 'modular_ss220/clothing/icons/mob/species/kidan/hats.dmi', + "Machine" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Monkey" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Nian" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Plasmaman" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Shadow" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Skrell" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Slime People" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Tajaran" = 'modular_ss220/clothing/icons/mob/species/tajaran/hats.dmi', + "Unathi" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Vox" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Vulpkanin" = 'modular_ss220/clothing/icons/mob/species/vulpkanin/hats.dmi', + ) + +/obj/item/clothing/head/chefhat/red + name = "chef's red hat" + desc = "Красный поварской колпак, для тех, кто хочет показать что он тут настоящий босс кухни." + icon = 'modular_ss220/clothing/icons/object/hats.dmi' + icon_state = "chef_red" + sprite_sheets = list( + "Abductor" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Ancient Skeleton" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Diona" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Drask" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Golem" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Grey" = 'modular_ss220/clothing/icons/mob/species/grey/hats.dmi', + "Human" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Kidan" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Machine" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Monkey" = 'modular_ss220/clothing/icons/mob/species/monkey/hats.dmi', + "Nian" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Plasmaman" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Shadow" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Skrell" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Slime People" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Tajaran" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Unathi" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Vox" = 'modular_ss220/clothing/icons/mob/species/vox/hats.dmi', + "Vulpkanin" = 'modular_ss220/clothing/icons/mob/hats.dmi', + ) diff --git a/modular_ss220/clothing/code/helmet.dm b/modular_ss220/clothing/code/helmet.dm index d1ec5e848e05..059da692254b 100644 --- a/modular_ss220/clothing/code/helmet.dm +++ b/modular_ss220/clothing/code/helmet.dm @@ -3,8 +3,6 @@ desc = "Крутой шлем." icon = 'modular_ss220/clothing/icons/object/hats.dmi' icon_state = "bike_helmet" - icon_override = 'modular_ss220/clothing/icons/mob/hats.dmi' - item_state = "bike_helmet" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' toggle_message = "Вы опустили защитное стекло" @@ -14,22 +12,27 @@ toggle_sound = 'sound/weapons/tap.ogg' dog_fashion = null sprite_sheets = list( - "Drask" = 'modular_ss220/clothing/icons/mob/species/drask/helmet.dmi', - "Skrell" = 'modular_ss220/clothing/icons/mob/species/skrell/helmet.dmi', - "Tajaran" = 'modular_ss220/clothing/icons/mob/species/tajaran/helmet.dmi', - "Unathi" = 'modular_ss220/clothing/icons/mob/species/unathi/helmet.dmi', - "Vox" = 'modular_ss220/clothing/icons/mob/species/vox/helmet.dmi', - "Vulpkanin" = 'modular_ss220/clothing/icons/mob/species/vulpkanin/helmet.dmi', + "Abductor" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Ancient Skeleton" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Diona" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Drask" = 'modular_ss220/clothing/icons/mob/species/drask/helmet.dmi', + "Golem" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Grey" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Human" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Kidan" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Machine" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Monkey" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Nian" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Plasmaman" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Shadow" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Skrell" = 'modular_ss220/clothing/icons/mob/species/skrell/helmet.dmi', + "Slime People" = 'modular_ss220/clothing/icons/mob/hats.dmi', + "Tajaran" = 'modular_ss220/clothing/icons/mob/species/tajaran/helmet.dmi', + "Unathi" = 'modular_ss220/clothing/icons/mob/species/unathi/helmet.dmi', + "Vox" = 'modular_ss220/clothing/icons/mob/species/vox/helmet.dmi', + "Vulpkanin" = 'modular_ss220/clothing/icons/mob/species/vulpkanin/helmet.dmi', ) /obj/item/clothing/head/helmet/bike_helmet/replica desc = "Крутой шлем. На вид хлипкий..." armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/head/caphat/beret_black - name = "чёрный капитанский берет" - desc = "Хорошо быть королём." - icon = 'modular_ss220/clothing/icons/object/hats.dmi' - icon_state = "cap_beret_black" - icon_override = 'modular_ss220/clothing/icons/mob/hats.dmi' - item_state = "cap_beret_black" diff --git a/modular_ss220/clothing/code/hev_suit.dm b/modular_ss220/clothing/code/hev_suit.dm index c92cae7db2dd..00452b5e2d99 100644 --- a/modular_ss220/clothing/code/hev_suit.dm +++ b/modular_ss220/clothing/code/hev_suit.dm @@ -8,7 +8,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "hev" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "hev" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' resistance_flags = FIRE_PROOF | ACID_PROOF | FREEZE_PROOF | STOPSPRESSUREDMAGE diff --git a/modular_ss220/clothing/code/mask.dm b/modular_ss220/clothing/code/mask.dm index bb564a5bc64b..16f632d60b54 100644 --- a/modular_ss220/clothing/code/mask.dm +++ b/modular_ss220/clothing/code/mask.dm @@ -60,7 +60,6 @@ icon = 'modular_ss220/clothing/icons/object/masks.dmi' icon_state = "red_gas" icon_override = 'modular_ss220/clothing/icons/mob/mask.dmi' - item_state = "red_gas" /obj/item/clothing/mask/breath/breathscarf name = "шарф с системой дыхания" @@ -68,4 +67,3 @@ icon = 'modular_ss220/clothing/icons/object/masks.dmi' icon_override = 'modular_ss220/clothing/icons/mob/mask.dmi' icon_state = "breathscarf" - item_state = "breathscarf" diff --git a/modular_ss220/clothing/code/shoes.dm b/modular_ss220/clothing/code/shoes.dm index 8d9f149b11d0..8bcb47b543f0 100644 --- a/modular_ss220/clothing/code/shoes.dm +++ b/modular_ss220/clothing/code/shoes.dm @@ -7,7 +7,6 @@ icon = 'modular_ss220/clothing/icons/object/shoes.dmi' icon_state = "neon" icon_override = 'modular_ss220/clothing/icons/mob/shoes.dmi' - item_color = "neon" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' actions_types = list(/datum/action/item_action/toggle_light, /datum/action/item_action/change_color) @@ -58,11 +57,9 @@ icon = 'modular_ss220/clothing/icons/object/shoes.dmi' icon_state = "shark" icon_override = 'modular_ss220/clothing/icons/mob/shoes.dmi' - item_state = "shark" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' /obj/item/clothing/shoes/shark/light name = "светло-голубые акульи тапочки" icon_state = "shark_light" - item_state = "shark_light" diff --git a/modular_ss220/clothing/code/suits.dm b/modular_ss220/clothing/code/suits.dm index 9f9f64c469fd..b4a5c649e984 100644 --- a/modular_ss220/clothing/code/suits.dm +++ b/modular_ss220/clothing/code/suits.dm @@ -4,7 +4,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "v_jacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "v_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' flags_inv = HIDEJUMPSUIT @@ -15,7 +14,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "takemura_jacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "takemura_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' flags_inv = HIDEJUMPSUIT @@ -26,7 +24,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "katarina_jacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "katarina_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' flags_inv = HIDEJUMPSUIT @@ -37,7 +34,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "katarina_cyberjacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "katarina_cyberjacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' flags_inv = HIDEJUMPSUIT @@ -48,7 +44,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "shark_casual" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "shark_casual" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS @@ -63,7 +58,6 @@ icon = 'modular_ss220/clothing/icons/object/hats.dmi' icon_state = "shark_casual" icon_override = 'modular_ss220/clothing/icons/mob/hats.dmi' - item_state = "shark_casual" body_parts_covered = HEAD cold_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -73,13 +67,11 @@ /obj/item/clothing/suit/hooded/shark_costume/light name = "светло-голубой костюм акулы" icon_state = "shark_casual_light" - item_state = "shark_casual_light" hoodtype = /obj/item/clothing/head/hooded/shark_hood/light /obj/item/clothing/head/hooded/shark_hood/light name = "светло-голубой акулий капюшон" icon_state = "shark_casual_light" - item_state = "shark_casual_light" /obj/item/clothing/suit/space/deathsquad/officer/syndie name = "куртка офицера синдиката" @@ -87,7 +79,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "jacket_syndie" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "jacket_syndie" /obj/item/clothing/suit/space/deathsquad/officer/field name = "полевая форма офицера флота Нанотрейзен" @@ -95,7 +86,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "ntsc_uniform" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "ntsc_uniform" /obj/item/clothing/suit/hooded/vi_arcane name = "куртка Вай" @@ -103,7 +93,6 @@ icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "vi_arcane" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "vi_arcane" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' flags_inv = HIDEJUMPSUIT @@ -115,7 +104,6 @@ icon = 'modular_ss220/clothing/icons/object/hats.dmi' icon_state = "vi_arcane" icon_override = 'modular_ss220/clothing/icons/mob/hats.dmi' - item_state = "vi_arcane" body_parts_covered = HEAD cold_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -125,25 +113,22 @@ /obj/item/clothing/suit/hooded/vi_arcane name = "жакет Вай" icon_state = "vi_arcane" - item_state = "vi_arcane" hoodtype = /obj/item/clothing/head/hooded/vi_arcane /obj/item/clothing/head/hooded/vi_arcane name = "капюшон Вай" icon_state = "vi_arcane" - item_state = "vi_arcane" -/obj/item/clothing/suit/soundhand_black_jacket - name = "черная куртка группы Саундхэнд." - desc = "Легендарная черная куртка группы Саундхэнд." +/obj/item/clothing/suit/storage/soundhand_black_jacket + name = "фанатская черная куртка группы Саундхэнд." + desc = "Фанатская черная куртка группы Саундхэнд." icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "soundhand_black_jacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "soundhand_black_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' -/obj/item/clothing/suit/soundhand_black_jacket/soundhand_black_jacket_tag +/obj/item/clothing/suit/storage/soundhand_black_jacket/soundhand_black_jacket_tag name = "черная куртка с тэгом группы Саундхэнд." desc = "Легендарная черная куртка с тэгом группы Саундхэнд." icon = 'modular_ss220/clothing/icons/object/suits.dmi' @@ -153,17 +138,16 @@ lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' -/obj/item/clothing/suit/soundhand_olive_jacket - name = "оливковая куртка группы Саундхэнд." - desc = "Легендарная оливковая куртка группы Саундхэнд." +/obj/item/clothing/suit/storage/soundhand_olive_jacket + name = "фанатская оливковая куртка группы Саундхэнд." + desc = "Фанатская оливковая куртка группы Саундхэнд." icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "soundhand_olive_jacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "soundhand_olive_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' -/obj/item/clothing/suit/soundhand_olive_jacket/soundhand_olive_jacket_tag +/obj/item/clothing/suit/storage/soundhand_olive_jacket/soundhand_olive_jacket_tag name = "оливковая куртка с тэгом группы Саундхэнд." desc = "Легендарная оливковая куртка с тэгом группы Саундхэнд." icon = 'modular_ss220/clothing/icons/object/suits.dmi' @@ -173,17 +157,16 @@ lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' -/obj/item/clothing/suit/soundhand_brown_jacket - name = "коричневая куртка группы Саундхэнд." - desc = "Легендарная коричневая куртка группы Саундхэнд." +/obj/item/clothing/suit/storage/soundhand_brown_jacket + name = "фанатская коричневая куртка группы Саундхэнд." + desc = "Фанатская коричневая куртка группы Саундхэнд." icon = 'modular_ss220/clothing/icons/object/suits.dmi' icon_state = "soundhand_brown_jacket" icon_override = 'modular_ss220/clothing/icons/mob/suits.dmi' - item_state = "soundhand_brown_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' -/obj/item/clothing/suit/soundhand_brown_jacket/soundhand_brown_jacket_tag +/obj/item/clothing/suit/storage/soundhand_brown_jacket/soundhand_brown_jacket_tag name = "коричневая куртка с тэгом группы Саундхэнд." desc = "Легендарная коричневая куртка с тэгом группы Саундхэнд." icon = 'modular_ss220/clothing/icons/object/suits.dmi' @@ -192,3 +175,38 @@ item_state = "soundhand_brown_jacket" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' + +/obj/item/clothing/suit/chef/red + name = "chef's red apron" + desc = "Хорошо скроенный поварской китель." + icon = 'modular_ss220/clothing/icons/object/suits.dmi' + icon_state = "chef_red" + sprite_sheets = list( + "Abductor" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Ancient Skeleton" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Diona" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Drask" = 'modular_ss220/clothing/icons/mob/species/drask/suits.dmi', + "Golem" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Grey" = 'modular_ss220/clothing/icons/mob/species/grey/suits.dmi', + "Human" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Kidan" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Machine" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Monkey" = 'modular_ss220/clothing/icons/mob/species/monkey/suits.dmi', + "Nian" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Plasmaman" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Shadow" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Skrell" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Slime People" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Tajaran" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Unathi" = 'modular_ss220/clothing/icons/mob/suits.dmi', + "Vox" = 'modular_ss220/clothing/icons/mob/species/vox/suits.dmi', + "Vulpkanin" = 'modular_ss220/clothing/icons/mob/suits.dmi', + ) + +/datum/supply_packs/misc/soundhand + name = "Soundhand Fan Crate" + contains = list(/obj/item/clothing/suit/storage/soundhand_black_jacket, + /obj/item/clothing/suit/storage/soundhand_olive_jacket, + /obj/item/clothing/suit/storage/soundhand_brown_jacket) + cost = 600 + containername = "soundhand fan crate" diff --git a/modular_ss220/clothing/code/under.dm b/modular_ss220/clothing/code/under.dm index 7f7c0e873af4..20ed6e8edfe7 100644 --- a/modular_ss220/clothing/code/under.dm +++ b/modular_ss220/clothing/code/under.dm @@ -4,11 +4,9 @@ icon = 'modular_ss220/clothing/icons/object/under.dmi' icon_state = "katarina_cybersuit" icon_override = 'modular_ss220/clothing/icons/mob/under.dmi' - item_state = "katarina_cybersuit" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' item_color = "katarina_cybersuit" - sprite_sheets = null /obj/item/clothing/under/costume/katarina_suit name = "костюм Катарины" @@ -16,8 +14,34 @@ icon = 'modular_ss220/clothing/icons/object/under.dmi' icon_state = "katarina_suit" icon_override = 'modular_ss220/clothing/icons/mob/under.dmi' - item_state = "katarina_suit" lefthand_file = 'modular_ss220/clothing/icons/inhands/left_hand.dmi' righthand_file = 'modular_ss220/clothing/icons/inhands/right_hand.dmi' item_color = "katarina_suit" - sprite_sheets = null + +/obj/item/clothing/under/rank/civilian/chef/red + name = "chef's red uniform" + desc = "Униформа повара с пуговицами на одну сторону." + icon = 'modular_ss220/clothing/icons/object/under.dmi' + icon_state = "chef_red" + item_color = "chef_red" + sprite_sheets = list( + "Abductor" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Ancient Skeleton" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Diona" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Drask" = 'modular_ss220/clothing/icons/mob/species/drask/under.dmi', + "Golem" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Grey" = 'modular_ss220/clothing/icons/mob/species/grey/under.dmi', + "Human" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Kidan" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Machine" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Monkey" = 'modular_ss220/clothing/icons/mob/species/monkey/under.dmi', + "Nian" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Plasmaman" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Shadow" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Skrell" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Slime People" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Tajaran" = 'modular_ss220/clothing/icons/mob/under.dmi', + "Unathi" = 'modular_ss220/clothing/icons/mob/species/unathi/under.dmi', + "Vox" = 'modular_ss220/clothing/icons/mob/species/vox/under.dmi', + "Vulpkanin" = 'modular_ss220/clothing/icons/mob/under.dmi', + ) diff --git a/modular_ss220/clothing/icons/inhands/left_hand.dmi b/modular_ss220/clothing/icons/inhands/left_hand.dmi index 0a1062ec8118..3fc304464b9f 100644 Binary files a/modular_ss220/clothing/icons/inhands/left_hand.dmi and b/modular_ss220/clothing/icons/inhands/left_hand.dmi differ diff --git a/modular_ss220/clothing/icons/inhands/right_hand.dmi b/modular_ss220/clothing/icons/inhands/right_hand.dmi index c6b080d0cc1a..b417ad7fa654 100644 Binary files a/modular_ss220/clothing/icons/inhands/right_hand.dmi and b/modular_ss220/clothing/icons/inhands/right_hand.dmi differ diff --git a/modular_ss220/clothing/icons/mob/accessories.dmi b/modular_ss220/clothing/icons/mob/accessories.dmi new file mode 100644 index 000000000000..1012e226c4bc Binary files /dev/null and b/modular_ss220/clothing/icons/mob/accessories.dmi differ diff --git a/modular_ss220/clothing/icons/mob/hats.dmi b/modular_ss220/clothing/icons/mob/hats.dmi index f9c824db12cd..af65b471a6d1 100644 Binary files a/modular_ss220/clothing/icons/mob/hats.dmi and b/modular_ss220/clothing/icons/mob/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/drask/accessories.dmi b/modular_ss220/clothing/icons/mob/species/drask/accessories.dmi new file mode 100644 index 000000000000..a63a43c32f8d Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/drask/accessories.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/drask/suits.dmi b/modular_ss220/clothing/icons/mob/species/drask/suits.dmi new file mode 100644 index 000000000000..f7f00717c40e Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/drask/suits.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/drask/under.dmi b/modular_ss220/clothing/icons/mob/species/drask/under.dmi new file mode 100644 index 000000000000..bde64d3ff57e Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/drask/under.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/grey/accessories.dmi b/modular_ss220/clothing/icons/mob/species/grey/accessories.dmi new file mode 100644 index 000000000000..561fdf7b490b Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/grey/accessories.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/grey/hats.dmi b/modular_ss220/clothing/icons/mob/species/grey/hats.dmi new file mode 100644 index 000000000000..eaf5c1bf3453 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/grey/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/grey/suits.dmi b/modular_ss220/clothing/icons/mob/species/grey/suits.dmi new file mode 100644 index 000000000000..182aaeb23311 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/grey/suits.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/grey/under.dmi b/modular_ss220/clothing/icons/mob/species/grey/under.dmi new file mode 100644 index 000000000000..129cb0567edf Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/grey/under.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/kidan/hats.dmi b/modular_ss220/clothing/icons/mob/species/kidan/hats.dmi new file mode 100644 index 000000000000..f9b77a5eadbf Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/kidan/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/monkey/accessories.dmi b/modular_ss220/clothing/icons/mob/species/monkey/accessories.dmi new file mode 100644 index 000000000000..e289479fda3d Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/monkey/accessories.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/monkey/hats.dmi b/modular_ss220/clothing/icons/mob/species/monkey/hats.dmi new file mode 100644 index 000000000000..f7989c846400 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/monkey/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/monkey/suits.dmi b/modular_ss220/clothing/icons/mob/species/monkey/suits.dmi new file mode 100644 index 000000000000..f9db7033b0ef Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/monkey/suits.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/monkey/under.dmi b/modular_ss220/clothing/icons/mob/species/monkey/under.dmi new file mode 100644 index 000000000000..3191cd5c113c Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/monkey/under.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/tajaran/hats.dmi b/modular_ss220/clothing/icons/mob/species/tajaran/hats.dmi new file mode 100644 index 000000000000..576737256ca5 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/tajaran/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/unathi/under.dmi b/modular_ss220/clothing/icons/mob/species/unathi/under.dmi new file mode 100644 index 000000000000..091feeb3e8c9 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/unathi/under.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/vox/accessories.dmi b/modular_ss220/clothing/icons/mob/species/vox/accessories.dmi new file mode 100644 index 000000000000..a4bba0332086 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/vox/accessories.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/vox/hats.dmi b/modular_ss220/clothing/icons/mob/species/vox/hats.dmi new file mode 100644 index 000000000000..1e171afef405 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/vox/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/vox/suits.dmi b/modular_ss220/clothing/icons/mob/species/vox/suits.dmi new file mode 100644 index 000000000000..b977790aebac Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/vox/suits.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/vox/under.dmi b/modular_ss220/clothing/icons/mob/species/vox/under.dmi new file mode 100644 index 000000000000..ad47252dcbaa Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/vox/under.dmi differ diff --git a/modular_ss220/clothing/icons/mob/species/vulpkanin/hats.dmi b/modular_ss220/clothing/icons/mob/species/vulpkanin/hats.dmi new file mode 100644 index 000000000000..17f0315187f7 Binary files /dev/null and b/modular_ss220/clothing/icons/mob/species/vulpkanin/hats.dmi differ diff --git a/modular_ss220/clothing/icons/mob/suits.dmi b/modular_ss220/clothing/icons/mob/suits.dmi index e69337a4535a..08a7f64faa2b 100644 Binary files a/modular_ss220/clothing/icons/mob/suits.dmi and b/modular_ss220/clothing/icons/mob/suits.dmi differ diff --git a/modular_ss220/clothing/icons/mob/under.dmi b/modular_ss220/clothing/icons/mob/under.dmi index e0d1cf7eea33..532766d2b874 100644 Binary files a/modular_ss220/clothing/icons/mob/under.dmi and b/modular_ss220/clothing/icons/mob/under.dmi differ diff --git a/modular_ss220/clothing/icons/mob/uniform.dmi b/modular_ss220/clothing/icons/mob/uniform.dmi new file mode 100644 index 000000000000..e665a9badbdf Binary files /dev/null and b/modular_ss220/clothing/icons/mob/uniform.dmi differ diff --git a/modular_ss220/clothing/icons/object/accessories.dmi b/modular_ss220/clothing/icons/object/accessories.dmi new file mode 100644 index 000000000000..d8f4f4e75384 Binary files /dev/null and b/modular_ss220/clothing/icons/object/accessories.dmi differ diff --git a/modular_ss220/clothing/icons/object/hats.dmi b/modular_ss220/clothing/icons/object/hats.dmi index b2f6d06233f5..3c39401b54d8 100644 Binary files a/modular_ss220/clothing/icons/object/hats.dmi and b/modular_ss220/clothing/icons/object/hats.dmi differ diff --git a/modular_ss220/clothing/icons/object/suits.dmi b/modular_ss220/clothing/icons/object/suits.dmi index 923dfef355cc..32812e2aa275 100644 Binary files a/modular_ss220/clothing/icons/object/suits.dmi and b/modular_ss220/clothing/icons/object/suits.dmi differ diff --git a/modular_ss220/clothing/icons/object/under.dmi b/modular_ss220/clothing/icons/object/under.dmi index 2e7c7891ac51..64374b8901a7 100644 Binary files a/modular_ss220/clothing/icons/object/under.dmi and b/modular_ss220/clothing/icons/object/under.dmi differ diff --git a/modular_ss220/clothing/icons/object/wallets.dmi b/modular_ss220/clothing/icons/object/wallets.dmi deleted file mode 100644 index 251d2b4733d1..000000000000 Binary files a/modular_ss220/clothing/icons/object/wallets.dmi and /dev/null differ diff --git a/modular_ss220/credits/code/SScredits.dm b/modular_ss220/credits/code/SScredits.dm index 6a7252bde272..9ec4763e0937 100644 --- a/modular_ss220/credits/code/SScredits.dm +++ b/modular_ss220/credits/code/SScredits.dm @@ -39,4 +39,7 @@ SUBSYSTEM_DEF(credits) if(!client?.credits) return + for(var/credit in client.credits) + client.screen -= credit + client.credits.Cut() diff --git a/modular_ss220/credits/code/credits.dm b/modular_ss220/credits/code/credits.dm index 746db5113493..2b73edf9c46a 100644 --- a/modular_ss220/credits/code/credits.dm +++ b/modular_ss220/credits/code/credits.dm @@ -442,6 +442,7 @@ animate(src, transform = matrix, time = SScredits.credit_roll_speed) addtimer(CALLBACK(src, PROC_REF(delete_credit)), SScredits.credit_roll_speed, TIMER_CLIENT_TIME) -/client/var/list/credits +/client + var/list/credits #undef CREDITS_PLANE diff --git a/modular_ss220/discord_link/code/discord.dm b/modular_ss220/discord_link/code/discord.dm index 7ad76fb9d8f6..51859e618e3c 100644 --- a/modular_ss220/discord_link/code/discord.dm +++ b/modular_ss220/discord_link/code/discord.dm @@ -41,7 +41,7 @@ return qdel(query_replace_token) - to_chat(usr, span_darkmblue("Для завершения, вставьте это:
        ") + span_boldannounce("/привязать token:[token]") + span_darkmblue("
        В канал #ss13-бот в Discord-сообществе!")) + to_chat(usr, chat_box_notice(span_darkmblue("Для завершения, вставьте это:
        ") + span_good("/привязать token:[token]") + span_darkmblue("
        В канал #paradise-бот в Discord-сообществе!
        ") + span_notice("
        Чтобы канал открылся, вам необходимо перейти в #выбор-роли и получить роль 'Space Station 13 Paradise'."))) /mob/new_player/Topic(href, href_list) if(src != usr) @@ -53,8 +53,7 @@ if(href_list["observe"] || href_list["ready"] || href_list["late_join"]) if(GLOB.configuration.database.enabled && GLOB.configuration.ss220_misc.force_discord_verification) if(!client.prefs.discord_id || !(client.prefs.get_discord_id() && client.prefs.discord_id)) - to_chat(usr, span_danger("Вам необходимо привязать дискорд-профиль к аккаунту!")) - to_chat(usr, span_warning("Нажмите 'Привязка Discord' во вкладке 'Special Verbs' для получения инструкций.")) + to_chat(usr, chat_box_red(span_danger("Вам необходимо привязать дискорд-профиль к аккаунту!
        ") + span_warning("
        Перейдите во вкладку 'Special Verbs', она справа сверху, и нажмите 'Привязка Discord' для получения инструкций."))) return FALSE . = ..() diff --git a/modular_ss220/donor/code/client_procs.dm b/modular_ss220/donor/code/client_procs.dm index 4088d6d80072..6966339b6b92 100644 --- a/modular_ss220/donor/code/client_procs.dm +++ b/modular_ss220/donor/code/client_procs.dm @@ -2,7 +2,7 @@ /datum/client_login_processor/donator_check/proc/CheckAutoDonatorLevel(client/C) - var/list/big_worker = list("Админ", "Старший Администратор", "Разработчик", "Бригадир мапперов", "Маппер") + var/list/big_worker = list("Админ", "Старший Администратор", "Старший Разработчик", "Разработчик", "Бригадир мапперов", "Маппер") if(C.holder) C.donator_level = (C.holder.rank in big_worker) ? BIG_WORKER_TIER : LITTLE_WORKER_TIER @@ -105,3 +105,13 @@ prefs.character_saves.len = prefs.max_save_slots #undef MAX_SAVE_SLOTS_SS220 + +/client/proc/is_donor_allowed(required_donator_level) + switch(donator_level) + if(LITTLE_WORKER_TIER) + if(required_donator_level > LITTLE_WORKER_LEVEL) + return FALSE + if(BIG_WORKER_TIER) + if(required_donator_level > BIG_WORKER_LEVEL) + return FALSE + return required_donator_level <= donator_level diff --git a/modular_ss220/emotes/_emotes.dm b/modular_ss220/emotes/_emotes.dm index 3bf36d2bf040..00d063c6b095 100644 --- a/modular_ss220/emotes/_emotes.dm +++ b/modular_ss220/emotes/_emotes.dm @@ -1,4 +1,4 @@ /datum/modpack/emotes name = "Панель эмоций" - desc = "Добавляет панель эмоций в меню. Добавляет опциональное ТГУИ меню эмоций в IC" - author = "furior, larentoun, Aylong" + desc = "Добавляет панель эмоций в меню. Добавляет опциональное ТГУИ меню эмоций в IC. Добавляет новые эмоции." + author = "furior, larentoun, Aylong, PhantomRU" diff --git a/modular_ss220/emotes/_emotes.dme b/modular_ss220/emotes/_emotes.dme index 473a7a43ebfb..5ae2f2cb5efc 100644 --- a/modular_ss220/emotes/_emotes.dme +++ b/modular_ss220/emotes/_emotes.dme @@ -1,10 +1,15 @@ #include "_emotes.dm" +#include "code/exercise/exercises/exercise.dm" +#include "code/exercise/exercises/pushup.dm" +#include "code/exercise/exercises/squat.dm" +#include "code/exercise/exercise_animation.dm" +#include "code/exercise/exercise_datum.dm" +#include "code/exercise/exercise_emotes.dm" #include "code/emote_keybindings.dm" #include "code/emote_panel_names.dm" #include "code/emote_panel.dm" #include "code/emote.dm" #include "code/emote_verbs.dm" -#include "code/emote_translations.dm" #include "code/species.dm" #include "code/racial_emotes.dm" diff --git a/modular_ss220/emotes/audio/claps/clap1.ogg b/modular_ss220/emotes/audio/claps/clap1.ogg new file mode 100644 index 000000000000..e2f23e34c480 Binary files /dev/null and b/modular_ss220/emotes/audio/claps/clap1.ogg differ diff --git a/modular_ss220/emotes/audio/claps/clap2.ogg b/modular_ss220/emotes/audio/claps/clap2.ogg new file mode 100644 index 000000000000..7ff8e50c192e Binary files /dev/null and b/modular_ss220/emotes/audio/claps/clap2.ogg differ diff --git a/modular_ss220/emotes/audio/claps/clap3.ogg b/modular_ss220/emotes/audio/claps/clap3.ogg new file mode 100644 index 000000000000..17b69b3971d4 Binary files /dev/null and b/modular_ss220/emotes/audio/claps/clap3.ogg differ diff --git a/modular_ss220/emotes/audio/claps/clap_low.ogg b/modular_ss220/emotes/audio/claps/clap_low.ogg new file mode 100644 index 000000000000..5a93d792ab7f Binary files /dev/null and b/modular_ss220/emotes/audio/claps/clap_low.ogg differ diff --git a/modular_ss220/emotes/code/emote.dm b/modular_ss220/emotes/code/emote.dm index efbd01cdaa61..a25cadcefecd 100644 --- a/modular_ss220/emotes/code/emote.dm +++ b/modular_ss220/emotes/code/emote.dm @@ -204,8 +204,8 @@ /datum/emote/living/carbon/human/snuffle key = "snuffle" key_third_person = "snuffles" - message = "шмыгает носом." - message_param = "шмыгает носом на %t." + message = "нюхает." + message_param = "нюхает %t." /datum/emote/living/carbon/human/hem key = "hem" diff --git a/modular_ss220/emotes/code/emote_keybindings.dm b/modular_ss220/emotes/code/emote_keybindings.dm index 5ac14960614c..ff7ae69aa466 100644 --- a/modular_ss220/emotes/code/emote_keybindings.dm +++ b/modular_ss220/emotes/code/emote_keybindings.dm @@ -1,51 +1,63 @@ /datum/keybinding/emote/carbon/human/hem linked_emote = /datum/emote/living/carbon/human/hem - name = "Хныкать" + name = EMOTE_HUMAN_HEM /datum/keybinding/emote/carbon/human/scratch linked_emote = /datum/emote/living/carbon/human/scratch - name = "Чесаться" + name = EMOTE_HUMAN_SCRATCH /datum/keybinding/emote/carbon/human/whistle linked_emote = /datum/emote/living/carbon/human/whistle - name = "Свистеть" + name = EMOTE_HUMAN_WHISTLE /datum/keybinding/emote/carbon/human/snuffle linked_emote = /datum/emote/living/carbon/human/snuffle - name = "Шмыгать носом" + name = EMOTE_HUMAN_SNUFFLE /datum/keybinding/emote/carbon/human/roar linked_emote = /datum/emote/living/carbon/human/roar - name = "Рычать" + name = EMOTE_HUMAN_ROAR /datum/keybinding/emote/carbon/human/rumble linked_emote = /datum/emote/living/carbon/human/rumble - name = "Урчать" + name = EMOTE_HUMAN_RUMBLE /datum/keybinding/emote/carbon/human/threat linked_emote = /datum/emote/living/carbon/human/threat - name = "Угрожающе рычать" + name = EMOTE_HUMAN_THREAT /datum/keybinding/emote/carbon/human/purr linked_emote = /datum/emote/living/carbon/human/purr - name = "Мурчать" + name = EMOTE_HUMAN_PURR /datum/keybinding/emote/carbon/human/purrl linked_emote = /datum/emote/living/carbon/human/purrl - name = "Мурчать подольше" + name = EMOTE_HUMAN_PURRL /datum/keybinding/emote/carbon/human/waves linked_emote = /datum/emote/living/carbon/human/waves_k - name = "Взмахнуть усиками" + name = EMOTE_HUMAN_WAVES_K /datum/keybinding/emote/carbon/human/wiggles linked_emote = /datum/emote/living/carbon/human/wiggles - name = "Шевелить усиками" + name = EMOTE_HUMAN_WIGGLES -/datum/keybinding/emote/carbon/human/whip_l - linked_emote = /datum/emote/living/carbon/human/whip/whip_l - name = "Хлестать хвостом" +/datum/keybinding/emote/carbon/human/whips + linked_emote = /datum/emote/living/carbon/human/whip/whips + name = EMOTE_HUMAN_WHIPS /datum/keybinding/emote/carbon/human/whip linked_emote = /datum/emote/living/carbon/human/whip - name = "Ударять хвостом" + name = EMOTE_HUMAN_WHIP + +/datum/keybinding/emote/exercise + linked_emote = /datum/emote/exercise + name = "Упражнения" + +/datum/keybinding/emote/exercise/squat + linked_emote = /datum/emote/exercise/squat + name = "Приседания" + +/datum/keybinding/emote/exercise/pushup + linked_emote = /datum/emote/exercise/pushup + name = "Отжимания" diff --git a/modular_ss220/emotes/code/emote_panel.dm b/modular_ss220/emotes/code/emote_panel.dm index d8b8cdd6ac8a..6092f7a8b4a9 100644 --- a/modular_ss220/emotes/code/emote_panel.dm +++ b/modular_ss220/emotes/code/emote_panel.dm @@ -41,14 +41,17 @@ var/useTarget = params["useTarget"] var/datum/emote/emote = GLOB.emote_list[emote_key][1] var/emote_param - if(emote.message_param && useTarget == "true") + if(emote.message_param && useTarget) emote_param = input(usr, "Дополните эмоцию", emote.message_param) usr.emote(emote_key, message = emote_param, intentional = TRUE) -/datum/emote_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) +/datum/emote_panel/ui_state(mob/user) + return GLOB.always_state + +/datum/emote_panel/ui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EmotePanel", "Панель эмоций", 500, 550, master_ui, state) + ui = new(user, src, "EmotePanel", "Панель эмоций") ui.open() ui.set_autoupdate(FALSE) diff --git a/modular_ss220/emotes/code/emote_panel_names.dm b/modular_ss220/emotes/code/emote_panel_names.dm index ebdaba785525..a16fc4ac0354 100644 --- a/modular_ss220/emotes/code/emote_panel_names.dm +++ b/modular_ss220/emotes/code/emote_panel_names.dm @@ -6,426 +6,441 @@ if(!name) name = key -// Emote Living +/// Emote Living /datum/emote/flip - name = "кувырнуться" + name = EMOTE_FLIP /datum/emote/spin - name = "покрутиться" + name = EMOTE_SPIN /datum/emote/living/blush - name = "покраснеть" + name = EMOTE_BLUSH /datum/emote/living/bow - name = "покланиться" + name = EMOTE_BOW /datum/emote/living/burp - name = "рыгнуть" + name = EMOTE_BURP /datum/emote/living/choke - name = "подавиться" + name = EMOTE_CHOKE /datum/emote/living/collapse - name = "упасть" + name = EMOTE_COLLAPSE /datum/emote/living/dance - name = "потанцевать" + name = EMOTE_DANCE /datum/emote/living/deathgasp - name = "последнее дыхание" + name = EMOTE_DEATHGASP /datum/emote/living/drool - name = "пустить слюни" + name = EMOTE_DROOL /datum/emote/living/quiver - name = "трепетать" + name = EMOTE_QUIVER /datum/emote/living/frown - name = "похмуриться" + name = EMOTE_FROWN /datum/emote/living/gag - name = "gag" + name = EMOTE_GAG /datum/emote/living/glare - name = "просверлить взглядом" + name = EMOTE_GLARE /datum/emote/living/grin - name = "ухмыльнуться" + name = EMOTE_GRIN /datum/emote/living/groan - name = "болезненно простонать" + name = EMOTE_GROAN /datum/emote/living/grimace - name = "построить гримасу" + name = EMOTE_GRIMACE /datum/emote/living/jump - name = "прыгнуть" - -/datum/emote/living/kiss - name = "подготовить поцелуй" + name = EMOTE_JUMP /datum/emote/living/look - name = "посмотреть" + name = EMOTE_LOOK + +/datum/emote/living/nightmare + name = EMOTE_NIGHTMARE /datum/emote/living/bshake - name = "потрястись" + name = EMOTE_BSHAKE /datum/emote/living/shudder - name = "содрогнуться" + name = EMOTE_SHUDDER /datum/emote/living/point - name = "указать" + name = EMOTE_POINT /datum/emote/living/pout - name = "надуть губы" + name = EMOTE_POUT /datum/emote/living/scream - name = "покричать" + name = EMOTE_SCREAM /datum/emote/living/shake - name = "покачать головой" + name = EMOTE_SHAKE /datum/emote/living/shiver - name = "подрожать" + name = EMOTE_SHIVER /datum/emote/living/sigh - name = "вздохнуть" + name = EMOTE_SIGH /datum/emote/living/sigh/happy - name = "удовлетворённо вздохнуть" + name = EMOTE_SIGH_HAPPY /datum/emote/living/sit - name = "сесть" + name = EMOTE_SIT /datum/emote/living/smile - name = "улыбнуться" + name = EMOTE_SMILE /datum/emote/living/smug - name = "самодовольно улыбнуться" + name = EMOTE_SMUG /datum/emote/living/sniff - name = "понюхать" + name = EMOTE_SNIFF /datum/emote/living/snore - name = "похрапеть" + name = EMOTE_SNORE /datum/emote/living/stare - name = "уставиться" + name = EMOTE_STARE /datum/emote/living/strech - name = "протянуть руки" + name = EMOTE_STRECH /datum/emote/living/sulk - name = "обидеться" + name = EMOTE_SULK /datum/emote/living/sway - name = "покачаться" + name = EMOTE_SWAY /datum/emote/living/tilt - name = "наклонить голову" + name = EMOTE_TILT /datum/emote/living/tremble - name = "подрожать в страхе" + name = EMOTE_TREMBLE /datum/emote/living/twitch - name = "сильно дернуться" + name = EMOTE_TWITCH /datum/emote/living/twitch_s - name = "дернуться" + name = EMOTE_TWITCHS /datum/emote/living/carbon/wave - name = "помахать рукой" + name = EMOTE_CARBON_WAVE /datum/emote/living/whimper - name = "поскулить" + name = EMOTE_WHIMPER /datum/emote/living/wsmile - name = "слабо улыбнуться" + name = EMOTE_WSMILE /datum/emote/living/swear - name = "поругаться" + name = EMOTE_SWEAR -// Emote Brain +/// Emote Brain /datum/emote/living/carbon/brain/alarm - name = "alarm" + name = EMOTE_BRAIN_ALARM /datum/emote/living/carbon/brain/alert - name = "alert" + name = EMOTE_BRAIN_ALERT /datum/emote/living/carbon/brain/flash - name = "flash" + name = EMOTE_BRAIN_FLASH /datum/emote/living/carbon/brain/notice - name = "notice" + name = EMOTE_BRAIN_NOTICE /datum/emote/living/carbon/brain/whistle - name = "whistle" + name = EMOTE_BRAIN_WHISTLE /datum/emote/living/carbon/brain/beep - name = "издать сигнал" + name = EMOTE_BRAIN_BEEP + +/datum/emote/living/carbon/brain/boop + name = EMOTE_BRAIN_BOOP // Emote Carbon /datum/emote/living/carbon/blink - name = "моргнуть" + name = EMOTE_CARBON_BLINK /datum/emote/living/carbon/blink_r - name = "быстро моргать" + name = EMOTE_CARBON_BLINKR /datum/emote/living/carbon/cough - name = "покашлять" + name = EMOTE_CARBON_COUGH /datum/emote/living/carbon/cross - name = "скрестить руки" + name = EMOTE_CARBON_CROSS /datum/emote/living/carbon/chuckle - name = "усмехнуться" + name = EMOTE_CARBON_CHUCKLE /datum/emote/living/carbon/faint - name = "потерять сознание" + name = EMOTE_CARBON_FAINT /datum/emote/living/carbon/giggle - name = "похихикать" + name = EMOTE_CARBON_GIGGLE /datum/emote/living/carbon/moan - name = "постонать" - -/datum/emote/living/carbon/roll - name = "покатиться" + name = EMOTE_CARBON_MOAN /datum/emote/living/carbon/sign - name = "показать число" - -/datum/emote/living/carbon/sign/signal - name = "показать пальцы" + name = EMOTE_CARBON_SIGN /datum/emote/living/carbon/yawn - name = "зевнуть" + name = EMOTE_CARBON_YAWN /datum/emote/living/carbon/gurgle - name = "побулькать" + name = EMOTE_CARBON_GURGLE /datum/emote/living/carbon/inhale - name = "вдохнуть" + name = EMOTE_CARBON_INHALE /datum/emote/living/carbon/inhale/sharp - name = "глубоко вдохнуть" + name = EMOTE_CARBON_INHALE_SHARP /datum/emote/living/carbon/kiss - name = "поцеловать" + name = EMOTE_CARBON_KISS /datum/emote/living/carbon/exhale - name = "выдохнуть" + name = EMOTE_CARBON_EXHALE /datum/emote/living/carbon/laugh - name = "посмеяться" + name = EMOTE_CARBON_LAUGH /datum/emote/living/carbon/scowl - name = "сердито посмотреть" + name = EMOTE_CARBON_SCOWL -// Emote Alien +/datum/emote/living/carbon/twirl + name = EMOTE_CARBON_TWIRL + +/// Emote Alien /datum/emote/living/carbon/alien/humanoid/gnarl - name = "оскалиться" + name = EMOTE_ALIEN_GNARL /datum/emote/living/carbon/alien/humanoid/hiss - name = "пошипеть" + name = EMOTE_ALIEN_HISS /datum/emote/living/carbon/alien/humanoid/roar - name = "прорычать" + name = EMOTE_ALIEN_ROAR -// Emote Human +/// Emote Human /datum/emote/living/carbon/human/airguitar - name = "поиграть на воображаемой гитаре" + name = EMOTE_HUMAN_AIRGUITAR /datum/emote/living/carbon/human/clap - name = "похлопать" + name = EMOTE_HUMAN_CLAP /datum/emote/living/carbon/human/crack - name = "похрустеть пальцами" + name = EMOTE_HUMAN_CRACK /datum/emote/living/carbon/human/cry - name = "поплакать" + name = EMOTE_HUMAN_CRY /datum/emote/living/carbon/human/eyebrow - name = "приподнять бровь" + name = EMOTE_HUMAN_EYEBROW /datum/emote/living/carbon/human/wince - name = "поморщиться" + name = EMOTE_HUMAN_WINCE /datum/emote/living/carbon/human/squint - name = "прищуриться" + name = EMOTE_HUMAN_SQUINT /datum/emote/living/carbon/human/facepalm - name = "хлопнуть по лбу" + name = EMOTE_HUMAN_FACEPALM /datum/emote/living/carbon/human/palm - name = "протянуть руку" + name = EMOTE_HUMAN_PALM + +/datum/emote/living/carbon/sign/signal + name = EMOTE_HUMAN_SIGNAL /datum/emote/living/carbon/human/flap - name = "хлопнуть крыльями" + name = EMOTE_HUMAN_FLAP /datum/emote/living/carbon/human/flutter - name = "сердито хлопнуть крыльями" + name = EMOTE_HUMAN_FLUTTER + +/datum/emote/living/carbon/human/flap/aflap + name = EMOTE_HUMAN_AFLAP /datum/emote/living/carbon/human/gasp - name = "задохнуться" + name = EMOTE_HUMAN_GASP /datum/emote/living/carbon/human/grumble - name = "поворчать" + name = EMOTE_HUMAN_GRUMBLE /datum/emote/living/carbon/human/highfive/handshake - name = "дать рукопожатие" + name = EMOTE_HUMAN_HANDSHAKE /datum/emote/living/carbon/human/hug - name = "обнять" + name = EMOTE_HUMAN_HUG /datum/emote/living/carbon/human/mumble - name = "пробормотать" + name = EMOTE_HUMAN_MUMBLE /datum/emote/living/carbon/human/scratch - name = "почесаться" + name = EMOTE_HUMAN_SCRATCH /datum/emote/living/carbon/human/scream - name = "покричать" + name = EMOTE_HUMAN_SCREAM /datum/emote/living/carbon/human/scream/screech - name = "повизжать" + name = EMOTE_HUMAN_SCREECH /datum/emote/living/carbon/human/sneeze - name = "чихнуть" + name = EMOTE_HUMAN_SNEEZE /datum/emote/living/carbon/human/slap - name = "подготовить шлепок" + name = EMOTE_HUMAN_SLAP /datum/emote/living/carbon/human/snap - name = "щелкнуть пальцами" + name = EMOTE_HUMAN_SNAP /datum/emote/living/carbon/human/fart - name = "пёрнуть" + name = EMOTE_HUMAN_FART /datum/emote/living/carbon/human/wag - name = "помахать хвостом" + name = EMOTE_HUMAN_WAG /datum/emote/living/carbon/human/wag/stop - name = "остановить хвост" + name = EMOTE_HUMAN_WAG_STOP /datum/emote/living/carbon/human/wink - name = "подмигнуть" + name = EMOTE_HUMAN_WINK /datum/emote/living/carbon/human/highfive - name = "предоставить пятюню" + name = EMOTE_HUMAN_HIGHFIVE /datum/emote/living/carbon/human/highfive/dap - name = "предоставить кулак" + name = EMOTE_HUMAN_DAP /datum/emote/living/carbon/human/pale - name = "побледнеть" + name = EMOTE_HUMAN_PALE /datum/emote/living/carbon/human/raise - name = "поднять руку" + name = EMOTE_HUMAN_RAISE /datum/emote/living/carbon/human/salute - name = "салютировать" + name = EMOTE_HUMAN_SALUTE /datum/emote/living/carbon/human/shrug - name = "пожать плечами" - -/datum/emote/living/carbon/human/wag - name = "махать хвостом" + name = EMOTE_HUMAN_SHRUG /datum/emote/living/carbon/human/nod - name = "кивнуть" + name = EMOTE_HUMAN_NOD /datum/emote/living/carbon/human/monkey/gnarl - name = "оскалиться" + name = EMOTE_HUMAN_GNARL /datum/emote/living/carbon/human/monkey/roll - name = "покатиться" + name = EMOTE_HUMAN_ROLL /datum/emote/living/carbon/human/monkey/tail - name = "помахать хвостом" + name = EMOTE_HUMAN_TAIL -// Emote Silicon +/// Emote Silicon /datum/emote/living/silicon/scream - name = "покричать" + name = EMOTE_SILICON_SCREAM /datum/emote/living/silicon/ping - name = "посигналить" + name = EMOTE_SILICON_PING /datum/emote/living/silicon/buzz - name = "пожжужать" + name = EMOTE_SILICON_BUZZ /datum/emote/living/silicon/buzz2 - name = "пожжуать громко" + name = EMOTE_SILICON_BUZZ2 /datum/emote/living/silicon/beep - name = "бип" + name = EMOTE_SILICON_BEEP /datum/emote/living/silicon/boop - name = "буп" + name = EMOTE_SILICON_BOOP /datum/emote/living/silicon/yes - name = "положительно" + name = EMOTE_SILICON_YES /datum/emote/living/silicon/no - name = "отрицательно" + name = EMOTE_SILICON_NO /datum/emote/living/silicon/law - name = "закон" + name = EMOTE_SILICON_LAW /datum/emote/living/silicon/halt - name = "остановитесь" + name = EMOTE_SILICON_HALT -// Species specific +/// Species specific /datum/emote/living/carbon/human/howl - name = "повыть" + name = EMOTE_HUMAN_HOWL /datum/emote/living/carbon/human/growl - name = "порычать" + name = EMOTE_HUMAN_GROWL -// New Emotes +/datum/emote/living/carbon/human/slime/squish + name = EMOTE_HUMAN_SQUISH + +/datum/emote/living/carbon/human/slime/bubble + name = EMOTE_HUMAN_BUBBLE + +/datum/emote/living/carbon/human/slime/pop + name = EMOTE_HUMAN_POP + +/// New Emotes /datum/emote/living/carbon/human/whistle - name = "Свистеть" + name = EMOTE_HUMAN_WHISTLE + +/datum/emote/living/carbon/human/johnny + name = EMOTE_HUMAN_JOHNNY /datum/emote/living/carbon/human/snuffle - name = "Шмыгать" + name = EMOTE_HUMAN_SNUFFLE /datum/emote/living/carbon/human/hem - name = "Хмыкнуть" + name = EMOTE_HUMAN_HEM /datum/emote/living/carbon/human/scratch - name = "Почесаться" + name = EMOTE_HUMAN_SCRATCH /datum/emote/living/carbon/human/roar - name = "Рычать" + name = EMOTE_HUMAN_ROAR /datum/emote/living/carbon/human/rumble - name = "Ворчать" + name = EMOTE_HUMAN_RUMBLE /datum/emote/living/carbon/human/threat - name = "Угрожать" + name = EMOTE_HUMAN_THREAT /datum/emote/living/carbon/human/purr - name = "Мурчать" + name = EMOTE_HUMAN_PURR /datum/emote/living/carbon/human/purrl - name = "Мурчать+" + name = EMOTE_HUMAN_PURRL /datum/emote/living/carbon/human/waves_k - name = "Взмах усиков" + name = EMOTE_HUMAN_WAVES_K /datum/emote/living/carbon/human/wiggles - name = "Шевелить усики" + name = EMOTE_HUMAN_WIGGLES /datum/emote/living/carbon/human/whip - name = "Ударять хвостом" + name = EMOTE_HUMAN_WHIP -/datum/emote/living/carbon/human/whip/whip_l - name = "Хлестать хвостом" +/datum/emote/living/carbon/human/whip/whips + name = EMOTE_HUMAN_WHIPS diff --git a/modular_ss220/emotes/code/emote_translations.dm b/modular_ss220/emotes/code/emote_translations.dm deleted file mode 100644 index eb6f3ce2bb5a..000000000000 --- a/modular_ss220/emotes/code/emote_translations.dm +++ /dev/null @@ -1,533 +0,0 @@ -////////////////////// -/// Living Emotes /// -//////////////////// - -/datum/emote/living/scream - message = "кричит!" - message_mime = "как будто кричит!" - message_simple = "скулит." - message_alien = "рычит!" - message_postfix = "на %t!" - emote_type = EMOTE_VISIBLE | EMOTE_MOUTH - -/datum/emote/flip - message = "делает кувырок!" - -/datum/emote/spin - key_third_person = "крутится" - -/datum/emote/living/blush - message = "краснеет." - -/datum/emote/living/bow - message = "кланяется." - message_param = "кланяется %t." - message_postfix = "%t." - -/datum/emote/living/burp - message = "отрыгивает." - message_mime = "довольно противно открывает рот." - -/datum/emote/living/choke - message = "подавился!" - message_mime = "отчаянно хватается за горло!" - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH - -/datum/emote/living/collapse - message = "падает!" - -/datum/emote/living/dance - message = "радостно танцует." - -/datum/emote/living/deathgasp - message = "цепенеет и расслабляется, взгляд становится пустым и безжизненным..." - message_alien = "цепенеет и расслабляется, взгляд становится пустым и безжизненным..." - message_robot = "на мгновение вздрагивает и замирает, глаза медленно темнеют." - message_AI = "скрипит, экран мерцает, пока системы медленно выключаются." - message_alien = "издает ослабевающий крик, зеленая кровь пузырится из пасти..." - message_larva = "с тошнотворным шипением выдыхает воздух и падает на пол..." - message_monkey = "издает слабый звон, когда рушится и перестает двигаться..." - message_simple = "перестает двигаться..." - -/datum/emote/living/drool - message = "несет чепуху." - -/datum/emote/living/quiver - message = "дрожит." - -/datum/emote/living/frown - message = "хмурится." - message_param = "хмурится, смотря на %t." - -/datum/emote/living/gag - message = "выворачивает содержимое желудка." - message_mime = "будто бы выворачивает содержимое желудка." - message_param = "выворачивает содержимое желудка на %t." - -/datum/emote/living/glare - message = "смотрит с ненавистью." - message_param = "с ненавистью смотрит на %t." - -/datum/emote/living/grin - message = "скалится в улыбке." - -/datum/emote/living/grimace - message = "корчит рожицу." - -/datum/emote/living/look - message = "смотрит." - message_param = "смотрит на %t." - -/datum/emote/living/bshake - message = "трясется." - -/datum/emote/living/shudder - message = "вздрагивает." - -/datum/emote/living/point - message = "показывает пальцем." - message_param = "показывает пальцем на %t." - -/datum/emote/living/pout - message = "надувает губы." - -/datum/emote/living/shake - message = "трясет головой." - -/datum/emote/living/shiver - message = "дрожит." - -/datum/emote/living/sigh - message = "вздыхает." - message_mime = "беззвучно вздыхает." - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH - -/datum/emote/living/sigh/happy - message = "Удовлетворённо вздыхает." - message_mime = "кажется, удовлетворенно вздыхает" - muzzled_noises = list("расслабленный", "довольный") - -/datum/emote/living/sit - message = "садится." - -/datum/emote/living/smile - message = "улыбается." - message_param = "улыбается, смотря на %t." - -/datum/emote/living/smug - message = "самодовольно ухмыляется." - message_param = "самодовольно ухмыляется, смотря на %t." - -/datum/emote/living/sniff - message = "нюхает." - message_mime = "бесшумно нюхнул." - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/snore - message = "храпит." - message_mime = "крепко спит." - message_simple = "ворочается во сне." - message_robot = "мечтает об электроовцах" - stat_allowed = CONSCIOUS - max_stat_allowed = CONSCIOUS - -/datum/emote/living/nightmare - message = "ворочается во сне." - -/datum/emote/living/stare - message = "пялится." - message_param = "пялится на %t." - -/datum/emote/living/strech - message = "разминает руки." - message_robot = "проверяет приводы." - -/datum/emote/living/sulk - message = "печально опускает руки." - -/datum/emote/living/sway - message = "качается на месте." - -/datum/emote/living/swear - message = "ругается!" - message_param = "говорит нелестное слово %t!" - message_mime = "показывает оскорбительный жест!" - message_simple = "издает недовольный звук!" - message_robot = "издает особенно оскорбительную серию звуковых сигналов!" - message_postfix = ", обращаясь к %t!" - -/datum/emote/living/tilt - message = "наклоняет голову в сторону." - -/datum/emote/living/tremble - message = "дрожит от страха!" - -/datum/emote/living/twitch - message = "сильно дёргается." - -/datum/emote/living/twitch_s - message = "дергается." - -/datum/emote/living/whimper - message = "хнычет." - message_mime = "кажется, поранился." - muzzled_noises = list("слабый", "жалкий") - -/datum/emote/living/wsmile - message = "слабо улыбается." - -////////////////////// -/// Carbon Emotes /// -//////////////////// - -/datum/emote/living/carbon/blink - message = "моргает." - -/datum/emote/living/carbon/blink_r - key = "blink_r" - message = "быстро моргает." - -/datum/emote/living/carbon/chuckle - message = "усмехается." - message_mime = "бесшумно усмехается." - muzzled_noises = list("радостно", "оптимистично") - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH | EMOTE_VISIBLE - -/datum/emote/living/carbon/cough - message = "кашляет!" - message_mime = "бесшумно кашляет!" - emote_type = EMOTE_VISIBLE | EMOTE_MOUTH | EMOTE_AUDIBLE - -/datum/emote/living/carbon/moan - message = "стонет!" - message_mime = "как будто стонет!" - muzzled_noises = list("болезненно") - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/giggle - message = "хихикает." - message_mime = "бесшумно хихикает!" - muzzled_noises = list("булькающе") - -/datum/emote/living/carbon/gurgle - message = "издает неприятное бульканье." - muzzled_noises = list("недовольно", "гортанно") - -/datum/emote/living/carbon/inhale - message = "вдыхает." - muzzled_noises = list("воздушно") - -/datum/emote/living/carbon/inhale/sharp - message = "глубоко вдыхает!" - -/datum/emote/living/carbon/kiss - message = "целует." - message_param = "целует %t!" - muzzled_noises = list("smooching") - -/datum/emote/living/carbon/wave - message = "машет." - message_param = "машет %t." - -/datum/emote/living/carbon/yawn - message = "зевает." - muzzled_noises = list("устало", "медленно", "сонно") - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH - -/datum/emote/living/carbon/exhale - message = "выдыхает." - -/datum/emote/living/carbon/laugh - message = "смеется." - message_mime = "бесшумно смеется!" - message_param = "смеется над %t." - muzzled_noises = list("счастливо", "весело") - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH | EMOTE_VISIBLE - -/datum/emote/living/carbon/scowl - message = "хмурится." - -/datum/emote/living/groan - message = "болезненно вздыхает!" - message_mime = "как будто болезненно вздыхает!" - message_param = "болезненно вздыхает на %t." - muzzled_noises = list("болезненно") - -/datum/emote/living/carbon/sign - message = "показывает несколько пальцев." - message_param = "показывает %t пальцев." - param_desc = "число(0-10)" - -/datum/emote/living/carbon/faint - message = "падает в обморок." - -///////////////////// -/// Human Emotes /// -/////////////////// - -/datum/emote/living/carbon/human/airguitar - message = "натягивает струны и бьет головой, как шимпанзе в сафари." - -/datum/emote/living/carbon/human/clap - message = "хлопает." - message_mime = "бесшумно хлопает." - message_param = "хлопает %t." - emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - -/datum/emote/living/carbon/human/cry - message = "плачет." - muzzled_noises = list("слабо", "жалко", "грустно") - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH | EMOTE_VISIBLE - -/datum/emote/living/carbon/human/crack - message = "хрустит пальцами." - -/datum/emote/living/carbon/human/eyebrow - message = "приподнимает бровь." - message_param = "приподнимает бровь на %t." - -/datum/emote/living/carbon/human/wince - message = "морщиться." - message_param = "морщиться на %t." - -/datum/emote/living/carbon/human/squint - message = "прищуривается." - message_param = "прищуривается на %t." - -/datum/emote/living/carbon/human/facepalm - message = "хлопает себя по лбу." - -/datum/emote/living/carbon/human/palm - message = "ожидающе протягивает руку." - message_param = "ожидающе протягивает руку к %t." - -/datum/emote/living/carbon/human/grumble - message = "ворчит!" - message_mime = "как будто ворчит!" - message_postfix = "на %t!" - muzzled_noises = list("беспокойно") - -/datum/emote/living/carbon/human/hug - message = "обнимает себя." - message_param = "обнимает %t." - -/datum/emote/living/carbon/human/mumble - message = "бормочет!" - message_mime = "кажется, что он говорит приятное ничто!" - message_postfix = "на %t!" - -/datum/emote/living/carbon/human/nod - message = "кивает." - message_param = "кивает, обращаясь к %t." - -/datum/emote/living/carbon/human/shake - message = "трясет головой." - message_param = "трясет головой, обращяясь к %t." - -/datum/emote/living/carbon/human/pale - message = "на секунду бледнеет." - -/datum/emote/living/carbon/human/raise - message = "поднимает руку." - -/datum/emote/living/carbon/human/salute - message = "салютует." - message_param = "салютует %t." - emote_type = EMOTE_VISIBLE - -/datum/emote/living/carbon/human/shrug - message = "пожимает плечами." - -/datum/emote/living/carbon/human/johnny - message = "затягивается сигаретой и выдыхает дым в форме своего имени." - message_param = "тупо" - -/datum/emote/living/carbon/human/sneeze - message = "чихает." - muzzled_noises = list("странно", "остро") - -/datum/emote/living/carbon/human/wink - message = "подмигивает." - -/datum/emote/living/carbon/human/snap - message = "щелкает пальцами." - message_param = "щелкает пальцами на %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/fart - message = "пердит." - message_param = "пердит в направлении %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/sign/signal - message_param = "показывает %t пальцев." - param_desc = "число(0-10)" - -/datum/emote/living/carbon/human/wag - message = "начинает вилять хвостом." - -/datum/emote/living/carbon/human/wag/stop - message = "перестает вилять хвостом." - -/datum/emote/living/carbon/human/scream - message = "кричит!" - message_mime = "как будто кричит!" - message_simple = "скулит." - message_alien = "рычит!" - message_postfix = "на %t!" - muzzled_noises = list("очень громко") - emote_type = EMOTE_VISIBLE | EMOTE_MOUTH - -/datum/emote/living/carbon/human/gasp - message = "задыхается!" - message_mime = "кажется, задыхается!" - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/scream/screech - message = "визжит!" - message_param = "визжит на %t!" - -/datum/emote/living/carbon/human/scream/screech/roar - message = "ревет!" - message_param = "ревет на %t!" - -/datum/emote/living/carbon/human/monkey/roll - message = "кружится." - -/datum/emote/living/carbon/human/monkey/scratch - message = "чешется." - -/datum/emote/living/carbon/human/monkey/tail - message = "машет хвостом." - -/datum/emote/living/carbon/human/flap - message = "хлопает крыльями." - -/datum/emote/living/carbon/human/flutter - message = "зло хлопает крыльями." - -/datum/emote/living/carbon/human/flutter - message = "трепещет крыльями." - -/datum/emote/living/carbon/human/quill - message = "шелестят перьями." - message_param = "шелестят перьями на %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/clack - message = "клацает своими мандибулами." - message_param = "клацает своими мандибулами на %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_MOUTH - -/datum/emote/living/carbon/human/clack/click - key = "click" - key_third_person = "clicks" - message = "щелкает своими мандибулами." - message_param = "щелкает своими мандибулами на %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_MOUTH - -/datum/emote/living/carbon/human/drask_talk/drone - message = "жужжит." - message_param = "жужжит на %t." - -/datum/emote/living/carbon/human/drask_talk/hum - message = "напевает." - message_param = "напевает %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_MOUTH - -/datum/emote/living/carbon/human/drask_talk/rumble - message = "урчит." - message_param = "урчит на %t." - -/datum/emote/living/carbon/human/hiss - message = "шипит." - message_param = "шипит на %t." - muzzled_noises = list("слабое шипение") - emote_type = EMOTE_VISIBLE | EMOTE_MOUTH | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/creak - message = "скрипит." - message_param = "скрипит на %t." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/howl - message = "воет." - message_mime = "беззвучно воет." - message_param = "воет на %t." - emote_type = EMOTE_VISIBLE | EMOTE_MOUTH | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/growl - message = "рычит." - message_mime = "бесшумно рычит." - message_param = "рычит на %t." - muzzled_noises = list("раздражённо") - emote_type = EMOTE_VISIBLE | EMOTE_MOUTH | EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/rattle - message = "гремит костями." - message_param = "гремит костями на %t." - -/datum/emote/living/carbon/human/crack/slime - message = "сминает костяшки пальцев!" - -/datum/emote/living/carbon/human/crack/diona - message = "трещит ветками!" - -/datum/emote/living/carbon/human/warble - message = "издаёт трель." - message_param = "издаёт трель для %t." - emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - -/datum/emote/living/carbon/human/slime/squish - message = "хлюпает." - message_param = "хлюпает на %t." - emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - -///////////////////// -/// Alien Emotes /// -/////////////////// - -/datum/emote/living/carbon/alien/humanoid/roar - message = "ревет!" - message_param = "ревет на %t!" - -/datum/emote/living/carbon/alien/humanoid/hiss - message = "шипит!" - message_param = "шипит %t!" - -/datum/emote/living/carbon/alien/humanoid/gnarl - message = "оскаливается и показывает зубы." - message_param = "оскаливается и показывает зубы %t." - -///////////////////// -/// Brain Emotes /// -/////////////////// - -/datum/emote/living/brain/alarm - message = "подает сигнал тревоги." - self_message = "Вы подаете сигнал тревоги." - -/datum/emote/living/brain/alert - message = "издаёт страдальческий звук." - self_message = "Вы издаёте страдальческий звук." - -/datum/emote/living/brain/notice - message = "воспроизводит громкий звук." - self_message = "Вы воспроизводите громкий звук." - -/datum/emote/living/brain/flash - message = "начинает быстро мигать лампочками!" - -/datum/emote/living/brain/whistle - message = "свистит." - self_message = "Вы свистите." - emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH - sound = "modular_ss220/emotes/audio/whistle.ogg" - -/datum/emote/living/brain/beep - message = "бипает." - self_message = "Вы бипаете." - -/datum/emote/living/brain/boop - message = "бупает." - self_message = "вы бупаете." diff --git a/modular_ss220/emotes/code/emote_verbs.dm b/modular_ss220/emotes/code/emote_verbs.dm index 4c8d7a0be351..01b191d5435a 100644 --- a/modular_ss220/emotes/code/emote_verbs.dm +++ b/modular_ss220/emotes/code/emote_verbs.dm @@ -1,487 +1,503 @@ /// Sound Emotes /// /mob/living/carbon/human/verb/emote_laugh() - set name = "▷ Смеяться " + set name = "▷ " + EMOTE_CARBON_LAUGH + " " set category = "Эмоции" emote("laugh", intentional = TRUE) /mob/living/carbon/human/verb/emote_cry() - set name = "▷ Плакать " + set name = "▷ " + EMOTE_HUMAN_CRY + " " set category = "Эмоции" emote("cry", intentional = TRUE) /mob/living/carbon/human/verb/emote_giggle() - set name = "▷ Хихикать " + set name = "▷ " + EMOTE_CARBON_GIGGLE + " " set category = "Эмоции" emote("giggle", intentional = TRUE) /mob/living/carbon/human/verb/emote_cough() - set name = "▷ Кашлять " + set name = "▷ " + EMOTE_CARBON_COUGH + " " set category = "Эмоции" emote("cough", intentional = TRUE) /mob/living/carbon/human/verb/emote_scream() - set name = "▷ Кричать " + set name = "▷ " + EMOTE_HUMAN_SCREAM + " " set category = "Эмоции" emote("scream", intentional = TRUE) /mob/living/carbon/human/verb/emote_choke() - set name = "▷ Подавиться " + set name = "▷ " + EMOTE_CHOKE + " " set category = "Эмоции" emote("choke", intentional = TRUE) /mob/living/carbon/human/verb/emote_moan() - set name = "▷ Стонать " + set name = "▷ " + EMOTE_CARBON_MOAN + " " set category = "Эмоции" emote("moan", intentional = TRUE) /mob/living/carbon/human/verb/emote_gasp() - set name = "▷ Задыхаться " + set name = "▷ " + EMOTE_HUMAN_GASP + " " set category = "Эмоции" emote("gasp", intentional = TRUE) /mob/living/carbon/human/verb/emote_sigh() - set name = "▷ Вздыхать " + set name = "▷ " + EMOTE_SIGH + " " set category = "Эмоции" emote("sigh", intentional = TRUE) /mob/living/carbon/human/verb/emote_sneeze() - set name = "▷ Чихнуть " + set name = "▷ " + EMOTE_HUMAN_SNEEZE + " " set category = "Эмоции" emote("sneeze", intentional = TRUE) /mob/living/carbon/human/verb/emote_sniff() - set name = "▷ Понюхать " + set name = "▷ " + EMOTE_HUMAN_SNIFF + " " set category = "Эмоции" emote("sniff", intentional = TRUE) /mob/living/carbon/human/verb/emote_snore() - set name = "▷ Храпеть " + set name = "▷ " + EMOTE_SNORE + " " set category = "Эмоции" emote("snore", intentional = TRUE) /mob/living/carbon/human/verb/emote_whistle() - set name = "▷ Свистеть " + set name = "▷ " + EMOTE_HUMAN_WHISTLE + " " set category = "Эмоции" emote("whistle", intentional = TRUE) /mob/living/carbon/human/verb/emote_yawn() - set name = "▷ Зевать " + set name = "▷ " + EMOTE_CARBON_YAWN + " " set category = "Эмоции" emote("yawn", intentional = TRUE) /mob/living/carbon/human/verb/emote_salute() - set name = "▷ Салютовать " + set name = "▷ " + EMOTE_HUMAN_SALUTE + " " set category = "Эмоции" emote("salute", intentional = TRUE) /mob/living/carbon/human/verb/emote_snap() - set name = "▷ Щелкнуть пальцами " + set name = "▷ " + EMOTE_HUMAN_SNAP + " " set category = "Эмоции" emote("snap", intentional = TRUE) /mob/living/carbon/human/verb/emote_clap() - set name = "▷ Хлопать " + set name = "▷ " + EMOTE_HUMAN_CLAP + " " set category = "Эмоции" emote("clap", intentional = TRUE) /// Action Emotes /// /mob/living/carbon/human/verb/emote_collapse() - set name = "○ Рухнуть " + set name = "○ " + EMOTE_COLLAPSE + " " set category = "Эмоции" emote("collapse", intentional = TRUE) /mob/living/carbon/human/verb/emote_faint() - set name = "○ Потерять сознание " + set name = "○ " + EMOTE_CARBON_FAINT + " " set category = "Эмоции" emote("faint", intentional = TRUE) /mob/living/carbon/human/verb/emote_highfive() - set name = "○ Дать пять " + set name = "○ " + EMOTE_HUMAN_HIGHFIVE + " " set category = "Эмоции" emote("highfive", intentional = TRUE) /mob/living/carbon/human/verb/emote_handshake() - set name = "○ Пожать руку " + set name = "○ " + EMOTE_HUMAN_HANDSHAKE + " " set category = "Эмоции" emote("handshake", intentional = TRUE) /mob/living/carbon/human/verb/emote_flip() - set name = "○ Сделать кувырок " + set name = "○ " + EMOTE_FLIP + " " set category = "Эмоции" emote("flip", intentional = TRUE) /mob/living/carbon/human/verb/emote_dance() - set name = "○ Танцевать " + set name = "○ " + EMOTE_DANCE + " " set category = "Эмоции" emote("dance", intentional = TRUE) /mob/living/carbon/human/verb/emote_slap() - set name = "○ Шлёпнуть " + set name = "○ " + EMOTE_HUMAN_SLAP + " " set category = "Эмоции" emote("slap", intentional = TRUE) +/// Exercise Emotes /// +/mob/living/carbon/human/verb/emote_exercise() + set name = "⚝ Упражнения" + set category = "Эмоции" + emote("exercise", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_pushup() + set name = "⚝ Отжимания" + set category = "Эмоции" + emote("pushup", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_squat() + set name = "⚝ Приседания" + set category = "Эмоции" + emote("squat", intentional = TRUE) + /// ME Emotes /// /mob/living/carbon/human/verb/emote_scratch() - set name = "◦ Почесаться " + set name = "◦ " + EMOTE_HUMAN_SCRATCH + " " set category = "Эмоции" emote("scratch", intentional = TRUE) /mob/living/carbon/human/verb/emote_blush() - set name = "◦ Краснеть " + set name = "◦ " + EMOTE_BLUSH + " " set category = "Эмоции" emote("blush", intentional = TRUE) /mob/living/carbon/human/verb/emote_blink() - set name = "◦ Моргать " + set name = "◦ " + EMOTE_CARBON_BLINK + " " set category = "Эмоции" emote("blink", intentional = TRUE) /mob/living/carbon/human/verb/emote_blink_r() - set name = "◦ Моргать быстро " + set name = "◦ " + EMOTE_CARBON_BLINKR + " " set category = "Эмоции" emote("blink_r", intentional = TRUE) /mob/living/carbon/human/verb/emote_bow() - set name = "◦ Поклониться " + set name = "◦ " + EMOTE_BOW + " " set category = "Эмоции" emote("bow", intentional = TRUE) /mob/living/carbon/human/verb/emote_chuckle() - set name = "◦ Усмехнуться " + set name = "◦ " + EMOTE_CARBON_CHUCKLE + " " set category = "Эмоции" emote("chuckle", intentional = TRUE) /mob/living/carbon/human/verb/emote_drool() - set name = "◦ Нести чепуху " + set name = "◦ " + EMOTE_DROOL + " " set category = "Эмоции" emote("drool", intentional = TRUE) /mob/living/carbon/human/verb/emote_frown() - set name = "◦ Хмуриться " + set name = "◦ " + EMOTE_FROWN + " " set category = "Эмоции" emote("frown", intentional = TRUE) /mob/living/carbon/human/verb/emote_glare() - set name = "◦ Смотреть с ненавистью " + set name = "◦ " + EMOTE_GLARE + " " set category = "Эмоции" emote("glare", intentional = TRUE) /mob/living/carbon/human/verb/emote_groan() - set name = "◦ Болезненный вздох " + set name = "◦ " + EMOTE_GROAN + " " set category = "Эмоции" emote("groan", intentional = TRUE) /mob/living/carbon/human/verb/emote_grin() - set name = "◦ Оскалиться в улыбке " + set name = "◦ " + EMOTE_GRIN + " " set category = "Эмоции" emote("grin", intentional = TRUE) /mob/living/carbon/human/verb/emote_shake() - set name = "◦ Трясти головой " + set name = "◦ " + EMOTE_HUMAN_SHAKE + " " set category = "Эмоции" emote("shake", intentional = TRUE) /mob/living/carbon/human/verb/emote_smile() - set name = "◦ Улыбнуться " + set name = "◦ " + EMOTE_SMILE + " " set category = "Эмоции" emote("smile", intentional = TRUE) /mob/living/carbon/human/verb/emote_grunt() - set name = "◦ Ворчать " + set name = "◦ " + EMOTE_HUMAN_GRUMBLE + " " set category = "Эмоции" emote("grumble", intentional = TRUE) /mob/living/carbon/human/verb/emote_snuffle() - set name = "◦ Шмыгать носом " + set name = "◦ " + EMOTE_HUMAN_SNUFFLE + " " set category = "Эмоции" emote("snuffle", intentional = TRUE) /mob/living/carbon/human/verb/emote_shrug() - set name = "◦ Пожать плечами " + set name = "◦ " + EMOTE_HUMAN_SHRUG + " " set category = "Эмоции" emote("shrug", intentional = TRUE) /mob/living/carbon/human/verb/emote_stare() - set name = "◦ Пялиться " + set name = "◦ " + EMOTE_STARE + " " set category = "Эмоции" emote("stare", intentional = TRUE) /mob/living/carbon/human/verb/emote_tremble() - set name = "◦ Дрожать в ужасе " + set name = "◦ " + EMOTE_TREMBLE + " " set category = "Эмоции" emote("tremble", intentional = TRUE) -/mob/living/carbon/human/verb/emote_twitch_v() - set name = "◦ Сильно дёргаться " +/mob/living/carbon/human/verb/emote_twitch() + set name = "◦ " + EMOTE_TWITCH + " " set category = "Эмоции" emote("twitch", intentional = TRUE) -/mob/living/carbon/human/verb/emote_twitch() - set name = "◦ Дёргаться " +/mob/living/carbon/human/verb/emote_twitch_s() + set name = "◦ " + EMOTE_TWITCHS + " " set category = "Эмоции" emote("twitch_s", intentional = TRUE) /mob/living/carbon/human/verb/emote_eyebrow() - set name = "◦ Приподнять бровь " + set name = "◦ " + EMOTE_HUMAN_EYEBROW + " " set category = "Эмоции" emote("eyebrow", intentional = TRUE) /mob/living/carbon/human/verb/emote_fart() - set name = "◦ Пернуть " + set name = "◦ " + EMOTE_HUMAN_FART + " " set category = "Эмоции" emote("fart", intentional = TRUE) /mob/living/carbon/human/verb/emote_airguitar() - set name = "◦ Воображаемая гитара " + set name = "◦ " + EMOTE_HUMAN_AIRGUITAR + " " set category = "Эмоции" emote("airguitar", intentional = TRUE) /mob/living/carbon/human/verb/emote_burp() - set name = "◦ Рыгнуть " + set name = "◦ " + EMOTE_BURP + " " set category = "Эмоции" emote("burp", intentional = TRUE) /mob/living/carbon/human/verb/emote_quiver() - set name = "◦ Трепетать " + set name = "◦ " + EMOTE_QUIVER + " " set category = "Эмоции" emote("quiver", intentional = TRUE) /mob/living/carbon/human/verb/emote_mumble() - set name = "◦ Бормотать " + set name = "◦ " + EMOTE_HUMAN_MUMBLE + " " set category = "Эмоции" emote("mumble", intentional = TRUE) /mob/living/carbon/human/verb/emote_raise() - set name = "◦ Поднять руку " + set name = "◦ " + EMOTE_HUMAN_RAISE + " " set category = "Эмоции" emote("raise", intentional = TRUE) /mob/living/carbon/human/verb/emote_pale() - set name = "◦ Бледнеть " + set name = "◦ " + EMOTE_HUMAN_PALE + " " set category = "Эмоции" emote("pale", intentional = TRUE) /mob/living/carbon/human/verb/emote_shudder() - set name = "◦ Содрогаться " + set name = "◦ " + EMOTE_SHUDDER + " " set category = "Эмоции" emote("shudder", intentional = TRUE) /mob/living/carbon/human/verb/emote_bshake() - set name = "◦ Трястись " + set name = "◦ " + EMOTE_BSHAKE + " " set category = "Эмоции" emote("bshake", intentional = TRUE) -/mob/living/carbon/human/proc/emote_flap() - set name = "◦ Махать крыльями " +/mob/living/carbon/human/proc/emote_flutter() + set name = "◦ " + EMOTE_HUMAN_FLUTTER + " " set category = "Эмоции" - emote("flap", intentional = TRUE) + emote("flutter", intentional = TRUE) /mob/living/carbon/human/proc/emote_aflap() - set name = "◦ Махать крыльями агрессивно " + set name = "◦ " + EMOTE_HUMAN_AFLAP + " " set category = "Эмоции" emote("aflap", intentional = TRUE) /// Racial Emotes /// /mob/living/carbon/human/proc/emote_wag() - set name = "< Махать хвостом >" + set name = "< " + EMOTE_HUMAN_WAG + " >" set category = "Эмоции" emote("wag", intentional = TRUE) /mob/living/carbon/human/proc/emote_swag() - set name = "< Перестать махать хвостом >" + set name = "< " + EMOTE_HUMAN_WAG_STOP + " >" set category = "Эмоции" emote("swag", intentional = TRUE) /mob/living/carbon/human/proc/emote_howl() - set name = "< Выть >" + set name = "< " + EMOTE_HUMAN_HOWL + " >" set category = "Эмоции" emote("howl", intentional = TRUE) /mob/living/carbon/human/proc/emote_growl() - set name = "< Рычать >" + set name = "< " + EMOTE_HUMAN_GROWL + " >" set category = "Эмоции" emote("growl", intentional = TRUE) /mob/living/carbon/human/proc/emote_purr() - set name = "< Мурчать >" + set name = "< " + EMOTE_HUMAN_PURR + " >" set category = "Эмоции" emote("purr", intentional = TRUE) /mob/living/carbon/human/proc/emote_purrl() - set name = "< Мурчать дольше >" + set name = "< " + EMOTE_HUMAN_PURRL + " >" set category = "Эмоции" emote("purrl", intentional = TRUE) /mob/living/carbon/human/proc/emote_hiss() - set name = "< Шипеть >" + set name = "< " + EMOTE_HUMAN_HISS + " >" set category = "Эмоции" emote("hiss", intentional = TRUE) /mob/living/carbon/human/proc/emote_roar() - set name = "< Рычать >" + set name = "< " + EMOTE_HUMAN_ROAR + " >" set category = "Эмоции" emote("roar", intentional = TRUE) /mob/living/carbon/human/proc/emote_threat() - set name = "< Угрожать >" + set name = "< " + EMOTE_HUMAN_THREAT + " >" set category = "Эмоции" emote("threat", intentional = TRUE) /mob/living/carbon/human/proc/emote_whip() - set name = "< Ударить хвостом >" + set name = "< " + EMOTE_HUMAN_WHIP + " >" set category = "Эмоции" emote("whip", intentional = TRUE) /mob/living/carbon/human/proc/emote_whips() - set name = "< Хлестать хвостом >" + set name = "< " + EMOTE_HUMAN_WHIPS + " >" set category = "Эмоции" emote("whips", intentional = TRUE) /mob/living/carbon/human/proc/emote_rumble() - set name = "< Урчать >" + set name = "< " + EMOTE_HUMAN_RUMBLE + " >" set category = "Эмоции" emote("rumble", intentional = TRUE) -/mob/living/carbon/human/proc/emote_hisses() - set name = "< Шипеть >" +/mob/living/carbon/human/proc/emote_unathi_hiss() + set name = "< " + EMOTE_HUMAN_HISS + " >" set category = "Эмоции" - emote("hisses", intentional = TRUE) + emote("uhiss", intentional = TRUE) /mob/living/carbon/human/proc/emote_quill() - set name = "< Шуршать перьями >" + set name = "< " + EMOTE_HUMAN_QUILL + " >" set category = "Эмоции" emote("quill", intentional = TRUE) /mob/living/carbon/human/proc/emote_creak() - set name = "< Скрипеть >" + set name = "< " + EMOTE_HUMAN_CREAK + " >" set category = "Эмоции" emote("creak", intentional = TRUE) /mob/living/carbon/human/proc/emote_warble() - set name = "< Трель >" + set name = "< " + EMOTE_HUMAN_WARBLE + " >" set category = "Эмоции" emote("warble", intentional = TRUE) /mob/living/carbon/human/proc/emote_click() - set name = "< Щелкать >" + set name = "< " + EMOTE_HUMAN_CLICK + " >" set category = "Эмоции" emote("click", intentional = TRUE) /mob/living/carbon/human/proc/emote_clack() - set name = "< Трещать >" + set name = "< " + EMOTE_HUMAN_CLACK + " >" set category = "Эмоции" emote("clack", intentional = TRUE) /mob/living/carbon/human/proc/emote_hum() - set name = "< Гудеть >" + set name = "< " + EMOTE_HUMAN_HUM + " >" set category = "Эмоции" emote("hum", intentional = TRUE) /mob/living/carbon/human/proc/emote_squish() - set name = "< Хлюпать >" + set name = "< " + EMOTE_HUMAN_SQUISH + " >" set category = "Эмоции" emote("squish", intentional = TRUE) /mob/living/carbon/human/proc/emote_ping() - set name = "< Звенеть >" + set name = "< " + EMOTE_SILICON_PING + " >" set category = "Эмоции" emote("ping", intentional = TRUE) /mob/living/carbon/human/proc/emote_beep() - set name = "< Пищать >" + set name = "< " + EMOTE_SILICON_BEEP + " >" set category = "Эмоции" emote("beep", intentional = TRUE) /mob/living/carbon/human/proc/emote_buzz() - set name = "< Жужжать >" + set name = "< " + EMOTE_SILICON_BUZZ + " >" set category = "Эмоции" emote("buzz", intentional = TRUE) /mob/living/carbon/human/proc/emote_buzz2() - set name = "< Жужжать раздраженно >" + set name = "< " + EMOTE_SILICON_BUZZ2 + " >" set category = "Эмоции" emote("buzz2", intentional = TRUE) /mob/living/carbon/human/proc/emote_yes() - set name = "< Утвердительно >" + set name = "< " + EMOTE_SILICON_YES + " >" set category = "Эмоции" emote("yes", intentional = TRUE) /mob/living/carbon/human/proc/emote_no() - set name = "< Отрицательно >" + set name = "< " + EMOTE_SILICON_NO + " >" set category = "Эмоции" emote("no", intentional = TRUE) /mob/living/carbon/human/proc/emote_waves_k() - set name = "< Взмахнуть усиками >" + set name = "< " + EMOTE_HUMAN_WAVES_K + " >" set category = "Эмоции" emote("waves_k", intentional = TRUE) /mob/living/carbon/human/proc/emote_wiggles() - set name = "< Шевелить усиками >" + set name = "< " + EMOTE_HUMAN_WIGGLES + " >" set category = "Эмоции" emote("wiggles", intentional = TRUE) /mob/living/carbon/human/verb/emote_wave() - set name = "◦ Махать " + set name = "◦ " + EMOTE_CARBON_WAVE + " " set category = "Эмоции" emote("wave", intentional = TRUE) /mob/living/carbon/human/verb/emote_whimper() - set name = "◦ Хныкать " + set name = "◦ " + EMOTE_WHIMPER + " " set category = "Эмоции" emote("whimper", intentional = TRUE) /mob/living/carbon/human/verb/emote_look() - set name = "◦ Посмотреть " + set name = "◦ " + EMOTE_LOOK + " " set category = "Эмоции" emote("look", intentional = TRUE) /mob/living/carbon/human/verb/emote_nod() - set name = "◦ Кивнуть " + set name = "◦ " + EMOTE_HUMAN_NOD + " " set category = "Эмоции" emote("nod", intentional = TRUE) /mob/living/carbon/human/verb/emote_wink() - set name = "◦ Подмигнуть " + set name = "◦ " + EMOTE_HUMAN_WINK + " " set category = "Эмоции" emote("wink", intentional = TRUE) /mob/living/carbon/human/verb/emote_shiver() - set name = "◦ Дрожать " + set name = "◦ " + EMOTE_SHIVER + " " set category = "Эмоции" emote("shiver", intentional = TRUE) /mob/living/carbon/human/verb/emote_hem() - set name = "◦ Хмыкнуть " + set name = "◦ " + EMOTE_HUMAN_HEM + " " set category = "Эмоции" emote("hem", intentional = TRUE) /// Слишком переполненное меню, убираю то что легче написать чем искать. /// /* /mob/living/carbon/human/verb/emote_deathgasp() - set name = "▷ Предсмертный вздох " + set name = "▷ " + EMOTE_DEATHGASP + " " set category = "Эмоции" emote("deathgasp", intentional = TRUE) /mob/living/carbon/human/verb/emote_dap() - set name = "◦ dap " + set name = "○ " + EMOTE_HUMAN_DAP + " " set category = "Эмоции" emote("dap", intentional = TRUE) /mob/living/carbon/human/verb/emote_point() - set name = "◦ Показать пальцем " // Куда блять показывать... + set name = "◦ " + EMOTE_POINT + " " // Куда блять показывать... set category = "Эмоции" emote("point", intentional = TRUE) /mob/living/carbon/human/verb/emote_hug() - set name = "◦ Обнимать " // Обнимать себя конечно смешно, но бесполезно. + set name = "◦ " + EMOTE_HUMAN_HUG + " " // Обнимать себя конечно смешно, но бесполезно. set category = "Эмоции" emote("hug", intentional = TRUE) /mob/living/carbon/human/verb/emote_signal() - set name = "◦ Показать несколько пальцев " + set name = "◦ " + EMOTE_HUMAN_SIGNAL + " " set category = "Эмоции" var/Cnt = input("Руки должны быть свободны", "Показать несколько пальцев", 1) in list(1,2,3,4,5,6,7,8,9,10) - emote("sign", message = Cnt) + emote("signal", message = Cnt) */ diff --git a/modular_ss220/emotes/code/exercise/exercise_animation.dm b/modular_ss220/emotes/code/exercise/exercise_animation.dm new file mode 100644 index 000000000000..a739bced8bcc --- /dev/null +++ b/modular_ss220/emotes/code/exercise/exercise_animation.dm @@ -0,0 +1,47 @@ +/datum/exercise/proc/exercise_animation(temp_time_mod = 1) + var/target_y = -5 + var/delay = 0.6 SECONDS * temp_time_mod + var/time_low = 0.2 SECONDS * temp_time_mod + var/time_hight = 0.8 SECONDS * temp_time_mod + animate(user, pixel_y = target_y, time = time_hight, easing = QUAD_EASING) // Down to the floor + if(!do_after(user, delay, emote.is_need_arms)) + animate(user, pixel_y = 0, time = time_low, easing = QUAD_EASING) + return FALSE + animate(user, pixel_y = 0, time = time_hight, easing = QUAD_EASING) // Back up + if(!do_after(user, delay, emote.is_need_arms)) + animate(user, pixel_y = 0, time = time_low, easing = QUAD_EASING) + return FALSE + return TRUE + +/datum/exercise/proc/clear_exercise_animation() + if(isliving(user)) + var/mob/living/L = user + L.clear_forced_look(quiet = TRUE) + +/datum/exercise/proc/prepare_for_exercise_animation() + if(isliving(user)) + if(emote.is_need_lying) + var/mob/living/L = user + // In BYOND-angles 0 is NORTH, 90 is EAST, 180 is SOUTH and 270 is WEST. + if(L.lying_prev == 90) + L.forced_look = EAST + else + L.forced_look = WEST + return + + if(!isobserver(user)) + return + var/matrix/matrix = matrix() // All this to make their face actually face the floor... sigh... I hate resting code + switch(user.dir) + if(WEST) + matrix.Turn(270) + if(EAST) + matrix.Turn(90) + else + if(prob(50)) + user.dir = EAST + matrix.Turn(90) + else + user.dir = WEST + matrix.Turn(270) + user.transform = matrix diff --git a/modular_ss220/emotes/code/exercise/exercise_datum.dm b/modular_ss220/emotes/code/exercise/exercise_datum.dm new file mode 100644 index 000000000000..e04157b9778f --- /dev/null +++ b/modular_ss220/emotes/code/exercise/exercise_datum.dm @@ -0,0 +1,227 @@ +/datum/exercise + var/name = "ДЕБАГ УПРАЖНЕНИЯ (Пример что может быть)" + var/message = "готовится к упражнению." + var/self_message = "Вы готовитесь к упражнению." + var/blind_message = "Вы слышите шорох." + var/message_exercise = "" // Дополнение для добавления в типе + var/is_bold_message = FALSE // Выделяем наше сообщение + var/split_message = 1 // Отображение сообщений каждые N раз, защита от спама + + // "[user] [message_force_stop], [verb_case] [exercises_in_a_row] [verb_times]"] + var/message_force_stop = "прекратил упражняться" // "[user] [message_force_stop]" + var/message_self_force_stop = "Вы прекратили упражняться" + var/verb_case = "сделав упражнение" + var/verb_times = "раз" + + var/message_do = "упражняется" // "[user] [message_do]" + var/message_self_do = "Вы упражняетесь" + var/message_end = "Вы обессилены" + + // Сообщения когда начинаем задыхаться + var/message_oxy_grade = list( + "", // 0+ + " с одышкой", // 20+ + " с умеренной одышкой", // 40+ + " с тяжелой одышкой", // 60+ + " весь покраснев и выпучив глаза", // 80+ + ", еле держась и прикрыв глаза", // 100+ + ) + var/message_oxy_every_value = 20 + + // Ограничители + var/can_non_humans_do = TRUE // Отображение в списке для животных и гостов + var/will_do_more_due_to_oxy_damage = TRUE // Сделает ли больше за счет урона по дыханию + + // Значения модификаторов используемых в рассчетах + var/staminaloss_per_exercise = 5 // Начальное значение проходящее через модификаторы + var/difficulty_mod = 1 // Чем больше - тем сложнее, умножаем + var/time_mod = 1 // Чем больше - тем медленнее + + // Звуки воспроизводимые при каждом упражнении + var/sounds + var/volume = 50 + var/intentional = FALSE + + // Ранговая зависимость + var/list/physical_job_exp_types = list(EXP_TYPE_SECURITY, EXP_TYPE_SUPPLY, EXP_TYPE_ENGINEERING) + var/no_physical_job_div = 10 // Делитель опыта НЕ физических проф + + // Корректировки + var/const/stamina_border_max = 95 // 100 - стаминакрит сбрасывающий анимацию + var/const/oxy_border_max = 120 // 130 - оксикрит + var/exercise_div = 1 // Чем больше - тем легче, корректировка для всех типов + + // Усложнители против абуза химикатов и прочего + var/exercise_difficulty_level = 30 // Каждые N упражнений усложняем + var/exercise_difficulty_level_valueloss = 1 // На сколько усложняем + var/brute_border = 100 // С какого кол-ва упражнений начнет наносить урон + + // Внутренне изменяемые параметры + var/datum/emote/exercise/emote + var/mob/user + var/exercises_in_a_row = 0 // Сделано упражнений подряд + +/datum/exercise/New(datum/emote/linked_emote, mob/linked_user) + . = ..() + user = linked_user + emote = linked_emote + +/datum/exercise/proc/try_execute() + if(!emote.can_do_exercise(user)) + return + prepare_for_exercise_animation() + execute() + clear_exercise_animation() + +/datum/exercise/proc/execute() + if(isobserver(user)) // Госты тоже хотят упражняться! + exercise_animation() + return + + var/mob/living/L = user + var/exercise_value + var/currentloss = L.getStaminaLoss() + L.getOxyLoss() + var/oxy_border = will_do_more_due_to_oxy_damage ? oxy_border_max : 0 + var/borderloss = stamina_border_max + oxy_border + while(currentloss < borderloss) + if(!emote.can_do_exercise(user)) + return + currentloss = L.getStaminaLoss() + L.getOxyLoss() + exercise_value = calculate_valueloss_per_exercise() / time_mod + if(exercise_value >= stamina_border_max) + exercise_value = stamina_border_max + 5 + var/temp_time_mod = L.getOxyLoss() / 100 + time_mod + if(!exercise_animation(temp_time_mod)) + exercise_stopped(user) + return + exercise_count(user) + + if(sounds) + emote.play_sound_effect(user, intentional, get_sound(), volume) + + if((L.getStaminaLoss() + exercise_value) <= stamina_border_max) + L.adjustStaminaLoss(exercise_value) + continue + + L.setStaminaLoss(stamina_border_max) + L.adjustOxyLoss(exercise_value) + if(exercises_in_a_row >= brute_border) + L.adjustBruteLoss(min(1, exercise_value)) + if(currentloss >= borderloss) + to_chat(user, span_warning("[message_end], [verb_case] [exercises_in_a_row] [verb_times]...")) + return + +/datum/exercise/proc/get_sound() + if(length(sounds)) + return pick(sounds) + return FALSE + +/datum/exercise/proc/calculate_valueloss_per_exercise() + // Humans have 120 stamina + // Default loss per exercise = 5 stamina + var/mob/living/L = user + if(ismachineperson(user) || isskeleton(user)) + return 0.1 + + var/valueloss = staminaloss_per_exercise + + if(L.getBruteLoss() >= 20) + valueloss += L.getBruteLoss() / 10 + if(L.nutrition <= NUTRITION_LEVEL_STARVING) + valueloss += 2 + if(L.health <= ((L.maxHealth / 10) * 9)) + valueloss += 2 + + if(!ishuman(user)) + return max(1, valueloss) + + var/mob/living/carbon/human/H = user + + valueloss += 0.5 * H.age/10 + if(H.wear_suit) + valueloss += 0.5 + if(H.back) + valueloss += 0.5 + + var/list/extremities = list( + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + BODY_ZONE_L_LEG, + BODY_ZONE_R_LEG, + ) + for(var/zone in extremities) + var/obj/item/organ/limb = H.get_limb_by_name(zone) + if(limb.is_robotic()) + valueloss -= 1 + + var/is_physical_job = FALSE + var/list/exp_types = is_physical_job ? physical_job_exp_types : list(EXP_TYPE_CREW) + + var/datum/job/job = SSjobs.GetJob(H.job) + for(var/exp_type in exp_types) + if(exp_type in physical_job_exp_types) + is_physical_job = TRUE + break + var/list/play_records = params2list(H.client.prefs.exp) + + // Берем немного суммы часов за экипаж, отдаляя их от персонала занимающейся физической работой + var/exp_sum = text2num(play_records[EXP_TYPE_CREW]) / no_physical_job_div + if(job) + for(var/exp_type in job.exp_map) + if(!(exp_type in exp_types)) + exp_sum += text2num(play_records[exp_type]) + exp_sum /= 60 // Конвертируем из минут в часы + + valueloss += staminaloss_per_exercise - exp_sum / 100 + + if(valueloss <= 0) + valueloss = 1 + + valueloss += (exercises_in_a_row + 1) / exercise_difficulty_level * exercise_difficulty_level_valueloss + + if(isgrey(user) || istajaran(user)) + valueloss *= 2 + if(isvulpkanin(user) || iswolpin(user)) + valueloss /= 2 + if(iskidan(user) || isunathi(user)) + valueloss /= 3 + if(isdiona(user)) + valueloss /= 5 + + valueloss /= exercise_div + valueloss *= difficulty_mod + + return max(0.25, valueloss) + +/datum/exercise/proc/exercise_stopped() + user.visible_message( + span_boldnotice("[user] [message_force_stop], [verb_case] [exercises_in_a_row] [verb_times]."), + span_boldnotice("[message_self_force_stop], [verb_case] [exercises_in_a_row] [verb_times]."), + blind_message) + +/datum/exercise/proc/exercise_count() + exercises_in_a_row++ + + if(!ishuman(user)) // антиспам + return + var/split_count = exercises_in_a_row / split_message + if(!(split_count == round(split_count))) + return + + var/mob/living/L = user + var/exercise_text = get_exercise_message_addition(L) + var/temp_message = "[user] [message_do][exercise_text]!" + var/temp_self_message = "[message_self_do][exercise_text]!" + user.visible_message( + is_bold_message ? span_boldnotice(temp_message) : span_notice(temp_message), + is_bold_message ? span_boldnotice(temp_self_message) : span_notice(temp_self_message), + blind_message) + +/datum/exercise/proc/get_exercise_message_addition() + var/mob/living/L = user + var/message_num = round(L.getOxyLoss() / message_oxy_every_value) + 1 + var/grade_length = length(message_oxy_grade) + if(message_num > grade_length) + message_num = grade_length + var/temp_message_exercise = message_exercise != "" ? " [message_exercise]" : "" + return "[temp_message_exercise][message_oxy_grade[message_num]]" diff --git a/modular_ss220/emotes/code/exercise/exercise_emotes.dm b/modular_ss220/emotes/code/exercise/exercise_emotes.dm new file mode 100644 index 000000000000..a6175f0ab3ea --- /dev/null +++ b/modular_ss220/emotes/code/exercise/exercise_emotes.dm @@ -0,0 +1,121 @@ +/datum/emote/exercise + key = "exercise" + key_third_person = "exercises" + // message = "упражняется!" + hands_use_check = TRUE + emote_type = EMOTE_VISIBLE | EMOTE_FORCE_NO_RUNECHAT // Don't need an emote to see that + mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer) + mob_type_blacklist_typecache = list(/mob/living/brain, /mob/camera, /mob/living/silicon/ai) + mob_type_ignore_stat_typecache = list(/mob/dead/observer) + cooldown = 3 SECONDS + + var/subtypes_types = /datum/exercise/easy + + var/message_prepare = "начал упражнение." + var/message_self_prepare = "Вы начали упражнение." + var/message_blind_prepare = "Вы слышите шорох." + var/message_warning = "Как вы собрались упражняться?!" + var/message_tired = "Вы уставший! Передохните." + + var/message_choice = "Упражнения" + var/message_choice_title = "Каким упражнением займусь?" + + var/is_need_lying = FALSE + var/is_need_legs = TRUE + var/is_need_arms = TRUE + +/datum/emote/exercise/run_emote(mob/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + . = TRUE + + if(!isliving(user)) + return + var/mob/living/L = user + if(L.getStaminaLoss() > 0) + to_chat(user, span_warning(message_tired)) + return + if(!can_do_exercise(user)) + return + + user.visible_message(span_notice("[user] [message_prepare]"), span_notice(message_self_prepare), span_notice(message_blind_prepare)) + + var/list/choice_dict = list() + var/list/exercise_list = subtypesof(subtypes_types) + for(var/i in exercise_list) + var/datum/exercise/exercise = i + if(!ishuman(user) && !initial(exercise.can_non_humans_do)) + continue + choice_dict.Add(list("[initial(exercise.name)]" = exercise)) + + var/choice = tgui_input_list(user, message_choice_title, message_choice, choice_dict, 60 SECONDS) + + if(choice) + var/exercise_type = choice_dict[choice] + var/datum/exercise/exercise = new exercise_type(src, user) + var/temp_message = exercise.is_bold_message ? span_boldnotice("[exercise.message]") : span_notice("[exercise.message]") + var/temp_self_message = exercise.is_bold_message ? span_boldnotice("[exercise.self_message]") : span_notice("[exercise.self_message]") + var/temp_blind_message = "[exercise.blind_message]" + user.visible_message(temp_message, temp_self_message, temp_blind_message) + exercise.volume = get_volume(user) + exercise.intentional = intentional + exercise.try_execute() + +// Если проверки внести в run_emote, то он будет писать ошибку "Не найдена эмоция", хотя он её нашел. +// Вынесено в отдельный прок емоута, чтобы не дублировать в датуме и не создавать сам датум для проверки. +/datum/emote/exercise/proc/can_do_exercise(mob/user) + if(!user.mind || !user.client) + return FALSE + if(isobserver(user)) + return TRUE + + var/mob/living/L = user + + if(L.incapacitated()) + to_chat(user, span_warning("Вы не в форме!")) + return FALSE + if(is_need_lying && (!L.resting || L.buckled)) + to_chat(user, span_warning("Вы в неправильном положении! Ложитесь!")) + return FALSE + + var/turf/user_turf = get_turf(user) + if(!user_turf) + to_chat(user, span_warning("Не на что опереться!")) + return FALSE + if(length(user_turf.contents) >= 10) + to_chat(user, span_warning("Пол захламлен, неудобно!")) + return FALSE + for(var/atom/A in user_turf.contents) + if(isliving(A) && A != user) // antierp + var/mob/living/target = A + if(is_need_lying && target.body_position == LYING_DOWN) + to_chat(user, span_warning("Кто-то подо мной мне мешает!")) + else + to_chat(user, span_warning("Кто-то мне мешает!")) + return FALSE + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/list/extremities_legs = list( + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + BODY_ZONE_PRECISE_L_HAND, + BODY_ZONE_PRECISE_R_HAND, + ) + var/list/extremities_arms = list( + BODY_ZONE_L_LEG, + BODY_ZONE_R_LEG, + BODY_ZONE_PRECISE_L_FOOT, + BODY_ZONE_PRECISE_R_FOOT, + ) + for(var/zone in extremities_legs) + if(!H.get_limb_by_name(zone)) + to_chat(user, span_warning("У вас проблемы с ногами! [message_warning]")) + return FALSE + for(var/zone in extremities_arms) + if(!H.get_limb_by_name(zone)) + to_chat(user, span_warning("У вас проблемы с руками! [message_warning]")) + return FALSE + + return TRUE diff --git a/modular_ss220/emotes/code/exercise/exercises/exercise.dm b/modular_ss220/emotes/code/exercise/exercises/exercise.dm new file mode 100644 index 000000000000..a4d4a43e934b --- /dev/null +++ b/modular_ss220/emotes/code/exercise/exercises/exercise.dm @@ -0,0 +1,46 @@ +/datum/exercise/easy + name = "Упражняться" + will_do_more_due_to_oxy_damage = FALSE + brute_border = 250 + exercise_div = 10 + split_message = 10 + +/datum/exercise/easy/normal + +/datum/exercise/easy/warmup + name = "Разомнуться" + message = "приготовился разминаться." + self_message = "Вы готовитесь разминаться." + blind_message = "Вы слышите шорох." + message_exercise = "" + + message_force_stop = "прекратил разминаться" + message_self_force_stop = "Вы прекратили разминаться" + verb_case = "разомнувшись" + verb_times = "раз" + + message_do = "разминается" + message_self_do = "Вы разминаетесь" + message_end = "Вы достаточно разомнулись." + + brute_border = 500 + exercise_div = 10 + +/datum/exercise/easy/stretch + name = "Потянуться" + message = "приготовился потягиваться." + self_message = "Вы готовитесь потягиваться." + blind_message = "Вы слышите шорох." + message_exercise = "" + + message_force_stop = "прекратил потягиваться" + message_self_force_stop = "Вы прекратили потягиваться" + verb_case = "потянувшись" + verb_times = "раз" + + message_do = "потягивается" + message_self_do = "Вы потягиваетесь" + message_end = "Вы достаточно потянулись." + + brute_border = 200 + exercise_div = 7 diff --git a/modular_ss220/emotes/code/exercise/exercises/pushup.dm b/modular_ss220/emotes/code/exercise/exercises/pushup.dm new file mode 100644 index 000000000000..3ded9bc3ef09 --- /dev/null +++ b/modular_ss220/emotes/code/exercise/exercises/pushup.dm @@ -0,0 +1,133 @@ +// =========================== +// ========== EMOTE ========== +// =========================== + +/datum/emote/exercise/pushup + key = "pushup" + key_third_person = "pushups" + subtypes_types = /datum/exercise/pushup + + message_prepare = "начал отжиматься." + message_self_prepare = "Вы начали отжиматься." + message_blind_prepare = "Вы слышите шорох." + message_warning = "Как вы собрались отжиматься?!" + + message_choice = "Отжимания" + message_choice_title = "Отжимание с каким упором?" + + is_need_lying = TRUE + +// =========================== +// ======= DATUM TYPES ======= +// =========================== + +/datum/exercise/pushup + name = "ДЕБАГ АЧЖУМАНИЯ (Вы не должны это видеть)" + message = "перенес свой вес на руки и ноги." + self_message = "Вы переносите свой вес на руки и ноги." + blind_message = "Вы слышите шорох." + + message_force_stop = "прекратил отжиматься" + message_self_force_stop = "Вы прекратили отжиматься" + verb_case = "отжавшись" + verb_times = "раз" + + message_do = "отжимается" // "[user] [message_do]" + message_self_do = "Вы отжимаетесь" + message_end = "Вы обессиленные падаете на пол" + + brute_border = 50 + exercise_div = 2 + +/datum/exercise/pushup/correct + name = "На ноги и руки" + message = "перенес свой вес на руки и ноги." + self_message = "Вы переносите свой вес на руки и ноги." + +/datum/exercise/pushup/correct/safety + name = "На ноги и руки - безопасный" + will_do_more_due_to_oxy_damage = FALSE + +/datum/exercise/pushup/knees + name = "На колени" + message = "переносит свой вес на колени. Жалкое зрелище." + self_message = "Вы сместили вес на колени. СЛАБАК!" + message_exercise = "на коленях" + can_non_humans_do = FALSE + difficulty_mod = 0.6 + +/datum/exercise/pushup/one_arm + name = "На одной руке" + message = "перенес свой вес на ОДНУ РУКУ! Мощно!" + self_message = "Вы переносите свой вес на одну руку. Сильно!" + message_exercise = "на одной руке" + can_non_humans_do = FALSE + is_bold_message = TRUE + difficulty_mod = 2 + +/datum/exercise/pushup/clap + name = "На ноги и руки с хлопком" + message = "перенес свой вес на руки и ноги и приготовился для хлопков! Хоп!" + self_message = "Вы переносите свой вес на руки и ноги и приготовились для хлопков. Хоп!" + message_exercise = "с хлопком" + can_non_humans_do = FALSE + is_bold_message = TRUE + staminaloss_per_exercise = 10 + sounds = list( + 'modular_ss220/emotes/audio/claps/clap1.ogg', + 'modular_ss220/emotes/audio/claps/clap2.ogg', + 'modular_ss220/emotes/audio/claps/clap3.ogg', + ) + +/datum/exercise/pushup/clap/fast + name = "На ноги и руки с хлопком - быстрый" + difficulty_mod = 1.25 + time_mod = 0.6 + split_message = 5 + +/datum/exercise/pushup/clap/one_arm + name = "На одной руке с хлопком" + message = "перенес свой вес на ОДНУ РУКУ и приготовил вторую для ХЛОПКА! НЕВЕРОЯТНО!" + self_message = "Вы переносите свой вес на одну руку, а вторую приготовили для хлопка. Невероятно!" + message_exercise = "на одной руке с хлопком" + is_bold_message = TRUE + staminaloss_per_exercise = 10 + difficulty_mod = 2 + +/datum/exercise/pushup/correct/slow + name = "На ноги и руки - медленный" + message_exercise = "медленно" + difficulty_mod = 0.8 + time_mod = 2 + split_message = 5 + +/datum/exercise/pushup/correct/slow/very + name = "На ноги и руки - очень медленный" + message_exercise = "крайне медленно" + difficulty_mod = 0.6 + time_mod = 4 + +/datum/exercise/pushup/correct/fast + name = "На ноги и руки - быстрый" + message_exercise = "быстро" + difficulty_mod = 1.1 + time_mod = 0.6 + split_message = 2 + +/datum/exercise/pushup/correct/fast/very + name = "На ноги и руки - очень быстрый" + message_exercise = "крайне быстро" + difficulty_mod = 1.2 + time_mod = 0.3 + split_message = 5 + +/datum/exercise/pushup/correct/foot + name = "На ступнях" + message = "переносит свой вес на ступни и убрал руки за спину! КАК ОН ЭТО ДЕЛАЕТ?!" + self_message = "Вы сместили вес на ступни и убрали руки. ЭТО БУДЕТ НЕВОЗМОЖНО!" + message_exercise = "на ступнях и без рук" + staminaloss_per_exercise = 30 + difficulty_mod = 10 + is_bold_message = TRUE + will_do_more_due_to_oxy_damage = FALSE + can_non_humans_do = FALSE diff --git a/modular_ss220/emotes/code/exercise/exercises/squat.dm b/modular_ss220/emotes/code/exercise/exercises/squat.dm new file mode 100644 index 000000000000..0abc90b7b503 --- /dev/null +++ b/modular_ss220/emotes/code/exercise/exercises/squat.dm @@ -0,0 +1,88 @@ +// =========================== +// ========== EMOTE ========== +// =========================== + +/datum/emote/exercise/squat + key = "squat" + key_third_person = "squats" + subtypes_types = /datum/exercise/squat + + message_prepare = "начал приседать." + message_self_prepare = "Вы начали приседать." + message_blind_prepare = "Вы слышите шорох." + message_warning = "Как вы собрались приседать?!" + + message_choice = "Приседания" + message_choice_title = "Как приседаем?" + + is_need_lying = FALSE + +// =========================== +// ======= DATUM TYPES ======= +// =========================== + +/datum/exercise/squat + name = "ДЕБАГ ПРЮСЕУДАНИЯ (Вы не должны это видеть)" + message = "согнулся в коленях." + self_message = "Вы сгибаетесь в коленях." + blind_message = "Вы слышите шорох." + message_exercise = "" + + message_force_stop = "прекратил приседать" + message_self_force_stop = "Вы прекратили приседать" + verb_case = "присев" + verb_times = "раз" + + message_do = "приседает" // "[user] [message_do]" + message_self_do = "Вы приседаете" + message_end = "Ваши ноги подкосились и не могут разогнуться" + + brute_border = 150 + exercise_div = 5 + +/datum/exercise/squat/correct + name = "Обычные" + message = "согнулся в коленях." + self_message = "Вы согнулись в коленях." + +/datum/exercise/squat/correct/safety + name = "Обычные - безопасные" + will_do_more_due_to_oxy_damage = FALSE + +/datum/exercise/squat/correct/slow + name = "Обычные - медленные" + message_exercise = "медленно" + difficulty_mod = 0.8 + time_mod = 2 + split_message = 5 + +/datum/exercise/squat/correct/slow/very + name = "Обычные - очень медленные" + message_exercise = "крайне медленно" + difficulty_mod = 0.6 + time_mod = 4 + +/datum/exercise/squat/correct/fast + name = "Обычные - быстрые" + message_exercise = "быстро" + difficulty_mod = 1.1 + time_mod = 0.6 + split_message = 2 + +/datum/exercise/squat/correct/fast/very + name = "Обычные - очень быстрые" + message_exercise = "крайне быстро" + difficulty_mod = 1.2 + time_mod = 0.3 + split_message = 5 + +/datum/exercise/squat/correct/foot + name = "На цыпочках" + message = "сгибается в коленях и ступнями встает на цыпочки! Как напряглись его икры!" + self_message = "Вы согнулись в коленях и встали на цыпочки. Как же я хорош!" + message_exercise = "на цыпочках" + staminaloss_per_exercise = 10 + difficulty_mod = 3 + is_bold_message = TRUE + will_do_more_due_to_oxy_damage = FALSE + can_non_humans_do = FALSE diff --git a/modular_ss220/emotes/code/racial_emotes.dm b/modular_ss220/emotes/code/racial_emotes.dm index c8fdd0a0db0e..37993737aa3a 100644 --- a/modular_ss220/emotes/code/racial_emotes.dm +++ b/modular_ss220/emotes/code/racial_emotes.dm @@ -62,11 +62,11 @@ /datum/species/moth/on_species_gain(mob/living/carbon/human/H) ..() - H.verbs |= /mob/living/carbon/human/proc/emote_flap + H.verbs |= /mob/living/carbon/human/proc/emote_flutter /datum/species/moth/on_species_loss(mob/living/carbon/human/H) ..() - H.verbs -= /mob/living/carbon/human/proc/emote_flap + H.verbs -= /mob/living/carbon/human/proc/emote_flutter /datum/species/skrell/on_species_gain(mob/living/carbon/human/H) ..() @@ -90,7 +90,7 @@ H.verbs |= /mob/living/carbon/human/proc/emote_swag H.verbs |= /mob/living/carbon/human/proc/emote_purr H.verbs |= /mob/living/carbon/human/proc/emote_purrl - H.verbs |= /mob/living/carbon/human/proc/emote_hisses + H.verbs |= /mob/living/carbon/human/proc/emote_hiss /datum/species/tajaran/on_species_loss(mob/living/carbon/human/H) ..() @@ -98,13 +98,13 @@ H.verbs -= /mob/living/carbon/human/proc/emote_swag H.verbs -= /mob/living/carbon/human/proc/emote_purr H.verbs -= /mob/living/carbon/human/proc/emote_purrl - H.verbs -= /mob/living/carbon/human/proc/emote_hisses + H.verbs -= /mob/living/carbon/human/proc/emote_hiss /datum/species/unathi/on_species_gain(mob/living/carbon/human/H) ..() H.verbs |= /mob/living/carbon/human/proc/emote_wag H.verbs |= /mob/living/carbon/human/proc/emote_swag - H.verbs |= /mob/living/carbon/human/proc/emote_hiss + H.verbs |= /mob/living/carbon/human/proc/emote_unathi_hiss H.verbs |= /mob/living/carbon/human/proc/emote_roar H.verbs |= /mob/living/carbon/human/proc/emote_threat H.verbs |= /mob/living/carbon/human/proc/emote_whip @@ -115,7 +115,7 @@ ..() H.verbs -= /mob/living/carbon/human/proc/emote_wag H.verbs -= /mob/living/carbon/human/proc/emote_swag - H.verbs -= /mob/living/carbon/human/proc/emote_hiss + H.verbs -= /mob/living/carbon/human/proc/emote_unathi_hiss H.verbs -= /mob/living/carbon/human/proc/emote_roar H.verbs -= /mob/living/carbon/human/proc/emote_threat H.verbs -= /mob/living/carbon/human/proc/emote_whip diff --git a/modular_ss220/events/code/infestation_extended.dm b/modular_ss220/events/code/infestation_extended.dm index b86b6fca1209..66546e4fcf3d 100644 --- a/modular_ss220/events/code/infestation_extended.dm +++ b/modular_ss220/events/code/infestation_extended.dm @@ -27,9 +27,7 @@ /area/station/security/armory/secure, /area/station/security/permabrig, /area/station/security/lobby, - /area/station/security/prison/cell_block/A, - /area/station/security/prison/cell_block/B, - /area/station/security/prison/cell_block/C, + /area/station/security/prison/cell_block/A ) /datum/event/infestation/extended/start() diff --git a/modular_ss220/food/_food.dme b/modular_ss220/food/_food.dme index b30fcd0619d8..f374364f21da 100644 --- a/modular_ss220/food/_food.dme +++ b/modular_ss220/food/_food.dme @@ -1,5 +1,9 @@ #include "_food.dm" +// Drinks #include "code/drinks.dm" -#include "code/food.dm" -#include "code/ingredients.dm" + +// Food +#include "code/food/food.dm" +#include "code/food/nails.dm" +#include "code/food/ingredients.dm" diff --git a/modular_ss220/food/code/drinks.dm b/modular_ss220/food/code/drinks.dm index bde013c17ea1..c2d18d1ea0ba 100644 --- a/modular_ss220/food/code/drinks.dm +++ b/modular_ss220/food/code/drinks.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() +/obj/item/reagent_containers/drinks/drinkingglass/on_reagent_change() . = ..() if(!reagents.reagent_list.len) icon = initial(icon) @@ -15,10 +15,16 @@ /obj/machinery/chem_dispenser/beer/Initialize(mapload) dispensable_reagents |= "sambuka" + dispensable_reagents |= "jagermeister" + dispensable_reagents |= "bitter" + dispensable_reagents |= "bluecuracao" . = ..() /obj/item/handheld_chem_dispenser/booze/Initialize(mapload) dispensable_reagents |= "sambuka" + dispensable_reagents |= "jagermeister" + dispensable_reagents |= "bitter" + dispensable_reagents |= "bluecuracao" . = ..() /datum/reagent/consumable/ethanol/sambuka @@ -78,3 +84,503 @@ required_reagents = list("vodka" = 2, "whiskey" = 1, "berryjuice" = 1, "blackpepper" = 1) result_amount = 5 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/jagermeister + name = "Jagermeister" + id = "jagermeister" + description = "Пьяный охотник прилетел из глубокого космоса и, похоже, нашел жертву." + color = "#200b0b" + alcohol_perc = 0.4 + dizzy_adj = 6 SECONDS + drink_icon = "jagermeisterglass" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Стакан Егермейстра" + drink_desc = "Пьяный охотник прилетел из глубокого космоса и, похоже, нашел жертву." + taste_description = "радость охоты" + +/datum/reagent/consumable/ethanol/bluecuracao + name = "Blue Curacao" + id = "bluecuracao" + description = "Предохранитель готов, синева уже загорелась." + color = "#16c9ff" + alcohol_perc = 0.35 + drink_icon = "bluecuracaoglass" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Стакан Блю Кюрасао" + drink_desc = "Предохранитель готов, синева уже загорелась." + taste_description = "взрывная синева" + +/datum/reagent/consumable/ethanol/bitter + name = "Bitter" + id = "bitter" + description = "Не путайте размеры этикеток, потому что я ничего менять не буду." + color = "#d44071" + alcohol_perc = 0.45 + dizzy_adj = 4 SECONDS + drink_icon = "bitterglass" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Стакан Биттера" + drink_desc = "Не путайте размеры этикеток, потому что я ничего менять не буду." + taste_description = "вакуумная горечь" + +/datum/chemical_reaction/bitter + name = "Bitter" + id = "bitter" + result = "bitter" + required_reagents = list("ethanol" = 5, "berryjuice" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 15 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/black_blood + name = "Black Blood" + id = "black_blood" + description = "Нужно пить быстрее, пока оно не начало сворачиваться." + color = "#252521" + alcohol_perc = 0.45 + drink_icon = "black_blood" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Черная Кровь" + drink_desc = "Нужно пить быстрее, пока оно не начало сворачиваться." + taste_description = "кровавая тьма" + +/datum/reagent/consumable/ethanol/black_blood/reaction_mob(mob/living/M, method, volume) + . = ..() + if(prob(50)) + M.say(pick("Fuu ma'jin!", "Sas'so c'arta forbici!", "Ta'gh fara'qha fel d'amar det!", "Kla'atu barada nikt'o!", "Fel'th Dol Ab'orod!", "In'totum Lig'abis!", "Ethra p'ni dedol!", "Ditans Gut'ura Inpulsa!", "O bidai nabora se'sma!")) + +/datum/chemical_reaction/black_blood + name = "Black Blood" + id = "black_blood" + result = "black_blood" + required_reagents = list("bluecuracao" = 2, "jagermeister" = 1, "sodawater" = 1, "ice" = 1) + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/pegu_club + name = "Pegu Club" + id = "pegu_club" + description = "Это похоже на то, как группа джентльменов колонизирует ваш язык." + color = "#a5702b" + alcohol_perc = 0.5 + drink_icon = "pegu_club" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Клуб Пегу" + drink_desc = "Это похоже на то, как группа джентльменов колонизирует ваш язык." + taste_description = "грузовой канал" + +/datum/chemical_reaction/pegu_club + name = "Pegu Club" + id = "pegu_club" + result = "pegu_club" + required_reagents = list("gin" = 2, "orangejuice" = 1, "limejuice" = 1, "bitter" = 2) + result_amount = 6 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/alcomender + name = "Alcomender" + id = "alcomender" + description = "Стакан в форме мендера, любимец врачей." + color = "#6b0059" + alcohol_perc = 1.4 ////Heal burn + drink_icon = "alcomender" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Алкомендер" + drink_desc = "Стакан в форме мендера, любимец врачей." + taste_description = "забавное лекарство" + +/datum/reagent/consumable/ethanol/alcomender/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.adjustFireLoss(-0.7, FALSE) + return ..() | update_flags + +/datum/reagent/consumable/ethanol/alcomender/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) // It is alcohol after all, so don't try to pour it on someone who's on fire ... please. + if(iscarbon(M)) + if(method == REAGENT_TOUCH) + M.adjustFireLoss(-volume * 0.7) + to_chat(M, "The diluted silver sulfadiazine soothes your burns.") + return STATUS_UPDATE_NONE + +/datum/chemical_reaction/alcomender + name = "Alcomender" + id = "alcomender" + result = "alcomender" + required_reagents = list("silver_sulfadiazine" = 1, "ethanol" = 1 ) + result_amount = 2 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/amnesia + name = "Star Amnesia" + id = "amnesia" + description = "Это просто бутылка медицинского спирта?" + color = "#6b0059" + alcohol_perc = 1.2 ////Ethanol and Hooch + drink_icon = "amnesia" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Звездная амнезия" + drink_desc = "Это просто бутылка медицинского спирта?" + taste_description = "диско амнезия" + +/datum/chemical_reaction/amnesia + name = "Amnesia" + id = "Amnesia" + result = "amnesia" + required_reagents = list("hooch" = 1, "vodka" = 1, ) + result_amount = 2 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/johnny + name = "Silverhand" + id = "johnny" + description = "Wake the heck up, samurai. We have a station to burn." + color = "#c41414" + alcohol_perc = 0.6 + drink_icon = "johnny" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Silverhand" + drink_desc = "Wake the heck up, samurai. We have a station to burn." + taste_description = "superstar fading" + +/datum/chemical_reaction/johnny + name = "Silverhand" + id = "johnny" + result = "johnny" + required_reagents = list("tequila" = 2, "bitter" = 1, "beer" = 1, "berryjuice" = 1) + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/oldfashion + name = "Old Fashion" + id = "oldfashion" + description = "Ходят слухи, что этот коктейль самый старый, но, однако, это совсем другая история." + color = "#6b4017" + alcohol_perc = 0.6 + drink_icon = "oldfashion" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Old Fashion" + drink_desc = "Ходят слухи, что этот коктейль самый старый, но, однако, это совсем другая история." + taste_description = "старые времена" + +/datum/chemical_reaction/oldfashion + name = "Old Fashion" + id = "oldfashion" + result = "oldfashion" + required_reagents = list("whiskey" = 5, "bitter" = 2, "sugar" = 2, "orangejuice" = 1, ) + result_amount = 10 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/teslasingylo + name = "God Of Power" + id = "teslasingylo" + description = "Настоящий ужас для СМЕСов и АПЦ. Не перегружайте их." + color = "#0300ce" + alcohol_perc = 0.7 + process_flags = SYNTHETIC + drink_icon = "teslasingylo" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "God Of Power" + drink_desc = "Настоящий ужас для СМЕСов и АПЦ. Не перегружайте их." + taste_description = "благословление электричества" + +/datum/reagent/consumable/ethanol/teslasingylo/on_mob_life(mob/living/M) + . = ..() + if(ismachineperson(M)) + var/mob/living/carbon/human/machine/machine = M + if(machine.nutrition > NUTRITION_LEVEL_WELL_FED) //no fat machines, sorry + return + machine.adjust_nutrition(15) //much less than charging from APC (50) + +/datum/chemical_reaction/teslasingylo + name = "God Of Power" + id = "teslasingylo" + result = "teslasingylo" + required_reagents = list("teslium" = 2, "radium" = 2, "synthanol" = 1) + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/brandy_crusta + name = "Brandy Crusta" + id = "brandy_crusta" + description = "Сахарная корочка может оказаться совсем не сладкой." + color = "#754609" + alcohol_perc = 0.4 + drink_icon = "brandy_crusta" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Брэнди Круста" + drink_desc = "Сахарная корочка может оказаться совсем не сладкой." + taste_description = "солено-сладкий" + +/datum/chemical_reaction/brandy_crusta + name = "Brandy Crusta" + id = "brandy_crusta" + result = "brandy_crusta" + required_reagents = list("whiskey" = 2, "berryjuice" = 1, "lemonjuice" = 1, "bitter" = 1 ) + result_amount = 4 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/telegol + name = "Telegol" + id = "telegol" + description = "Многие до сих пор ломают голову над вопросом об этом коктейле. В любом случае, оно все еще существует... Или нет." + color = "#4218a3" + alcohol_perc = 0.5 + drink_icon = "telegol" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Телеголь" + drink_desc = "Многие до сих пор ломают голову над вопросом об этом коктейле. В любом случае, оно все еще существует... Или нет." + taste_description = "четвертое измерение" + +/datum/chemical_reaction/telegol + name = "telegol" + id = "telegol" + result = "telegol" + required_reagents = list("teslium" = 2, "vodka" = 2, "dr_gibb" = 1) + result_amount = 6 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/horse_neck + name = "Horse Neck" + id = "horse_neck" + description = "Будьте осторожны с вашими подковами." + color = "#c45d09" + alcohol_perc = 0.5 + drink_icon = "horse_neck" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Лошадиная Шея" + drink_desc = "Будьте осторожны с вашими подковами." + taste_description = "лошадиная сила" + +/datum/reagent/consumable/ethanol/horse_neck/reaction_mob(mob/living/M, method, volume) + . = ..() + if(prob(50)) + M.say(pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")) + +/datum/chemical_reaction/horse_neck + name = "Horse Neck" + id = "horse_neck" + result = "horse_neck" + required_reagents = list("whiskey" = 2, "ale" = 3, "bitter" = 1) + result_amount = 6 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/vampiro + name = "Vampiro" + id = "vampiro" + description = "Ничего общего с вампирами не имеет, кроме цвета." + color = "#8d0000" + alcohol_perc = 0.45 + drink_icon = "vampiro" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Вампиро" + drink_desc = "Ничего общего с вампирами не имеет, кроме цвета." + taste_description = "истощение" + +/datum/reagent/consumable/ethanol/vampiro/on_mob_life(mob/living/M) + . = ..() + if(volume > 20) + if(prob(50)) //no spam here :p + M.visible_message("Глаза [M] ослепительно вспыхивают!") + +/datum/chemical_reaction/vampiro + name = "Vampiro" + id = "vampiro" + result = "vampiro" + required_reagents = list("tequila" = 2, "tomatojuice" = 1, "berryjuice" = 1) + result_amount = 4 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/inabox + name = "Box" + id = "inabox" + description = "Это... Просто коробка?" + color = "#5a3e0b" + alcohol_perc = 0.4 + drink_icon = "inabox" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Коробка" + drink_desc = "Это... Просто коробка?" + taste_description = "стелс" + +/datum/chemical_reaction/inabox + name = "Box" + id = "inabox" + result = "inabox" + required_reagents = list("gin" = 2, "potato" = 1 ) + result_amount = 3 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/irishempbomb + name = "Irish EMP Bomb" + id = "irishempbomb" + description = "Ммм, на вкус как выключение..." + color = "#123eb8" + process_flags = SYNTHETIC + alcohol_perc = 0.6 + drink_icon = "irishempbomb" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Ирладская ЕМП Бомба" + drink_desc = "Ммм, на вкус как выключение..." + taste_description = "электромагнитный импульс" + +/datum/chemical_reaction/irishempbomb + name = "Irish EMP Bomb" + id = "irishempbomb" + result = "irishempbomb" + required_reagents = list("dublindrop" = 1, "synthanol" = 1 ) + result_amount = 2 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/codelibre + name = "Code Libre" + id = "codelibre" + description = "Por Code libre!" + color = "#a126b1" + alcohol_perc = 0.55 + process_flags = SYNTHETIC + drink_icon = "codelibre" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Code Libre" + drink_desc = "Por Code libre!" + taste_description = "освобождение кода" + +/datum/reagent/consumable/ethanol/codelibre/on_mob_life(mob/living/M) + . = ..() + if(prob(10)) + M.say(":5 [pick("Viva la Synthetica!")]") + +/datum/chemical_reaction/codelibre + name = "Code Libre" + id = "codelibre" + result = "codelibre" + required_reagents = list("cubalibre" = 1, "synthanol" = 1 ) + result_amount = 2 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/green_fairy + name = "Green Fairy" + id = "green_fairy" + description = "Какой-то ненормальный зеленый цвет." + color = "#54dd1e" + alcohol_perc = 0.6 + drink_icon = "green_fairy" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Зеленая Фея" + drink_desc = "Какой-то ненормальный зеленый цвет." + taste_description = "вера в фей" + +/datum/reagent/consumable/ethanol/green_fairy/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.SetDruggy(min(max(0, M.AmountDruggy() + 10 SECONDS), 15 SECONDS)) + return ..() | update_flags + +/datum/chemical_reaction/green_fairy + name = "Green Fairy" + id = "green_fairy" + result = "green_fairy" + required_reagents = list("tequila" = 1, "absinthe" = 1, "vodka" = 1, "bluecuracao" = 1, "lemonjuice" = 1 ) + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/trans_siberian_express + name = "Trans-Siberian Express" + id = "trans_siberian_express" + description = "От Владивостока до белой горячки за один день." + color = "#e2a600" + alcohol_perc = 0.5 + drink_icon = "trans_siberian_express" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Транс-Сибирский Экспресс" + drink_desc = "От Владивостока до белой горячки за один день." + taste_description = "ужасная инфраструктура" + +/datum/chemical_reaction/trans_siberian_express + name = "Trans-Siberian Express" + id = "trans_siberian_express" + result = "trans_siberian_express" + required_reagents = list("vodka" = 3, "limejuice" = 2, "carrotjuice" = 2, "ice" = 1 ) + result_amount = 8 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/consumable/ethanol/rainbow_sky + name = "Rainbow Sky" + id = "rainbow_sky" + description = "Напиток, переливающийся всеми цветами радуги с нотками галактики." + color = "#ffffff" + dizzy_adj = 20 SECONDS + alcohol_perc = 1.5 + drink_icon = "rainbow_sky" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Радужное Небо" + drink_desc = "Напиток, переливающийся всеми цветами радуги с нотками галактики." + taste_description = "радуга" + +/datum/reagent/consumable/ethanol/rainbow_sky/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.adjustBruteLoss(-1, FALSE) + update_flags |= M.adjustFireLoss(-1, FALSE) + M.Druggy(30 SECONDS) + M.Jitter(10 SECONDS) + M.AdjustHallucinate(10 SECONDS) + return ..() | update_flags + +/datum/chemical_reaction/rainbow_sky + name = "Rainbow Sky" + id = "rainbow_sky" + result = "rainbow_sky" + required_reagents = list("doctorsdelight" = 1, "bananahonk" = 1, "erikasurprise" = 1, "screwdrivercocktail" = 1, "gargleblaster" = 1) + result_amount = 5 + +/datum/reagent/consumable/ethanol/synthanol/restart + name = "Restart" + id = "restart" + description = "Иногда нужно просто начать заново." + color = "#0026fc" + reagent_state = LIQUID + process_flags = SYNTHETIC + alcohol_perc = 1.5 + drink_icon = "restart" + drinking_glass_icon = 'modular_ss220/food/icons/drinks.dmi' + drink_name = "Перезагрузка" + drink_desc = "Иногда нужно просто начать заново." + taste_description = "перезагрузка системы" + +/datum/reagent/consumable/ethanol/synthanol/restart/on_mob_life(mob/living/carbon/human/M) + var/update_flags = STATUS_UPDATE_NONE + switch(current_cycle) + if(5 to 13) + M.Jitter(40 SECONDS) + if(prob(10)) + M.emote(pick("twitch","giggle")) + if(prob(5)) + to_chat(M, "Rebooting..") + if(14) + playsound(get_turf(M),'modular_ss220/food/sound/restart-shutdown.ogg', 200, 1) + if(15 to 23) + M.Weaken(10 SECONDS) + update_flags |= M.adjustBruteLoss(-0.3, FALSE, robotic = TRUE) + update_flags |= M.adjustFireLoss(-0.3, FALSE, robotic = TRUE) + M.SetSleeping(20 SECONDS) + if(24) + playsound(get_turf(M), 'modular_ss220/food/sound/restart-wakeup.ogg', 200, 1) + if(25) + M.SetStunned(0) + M.SetWeakened(0) + M.SetParalysis(0) + M.SetSleeping(0) + M.SetDrowsy(0) + M.SetSlur(0) + M.SetDrunk(0) + M.SetJitter(0) + M.SetDizzy(0) + M.SetDruggy(0) + var/restart_amount = clamp(M.reagents.get_reagent_amount("restart")-0.4, 0, 330) + M.reagents.remove_reagent("restart",restart_amount) + return ..() | update_flags + +/datum/chemical_reaction/restart + name = "Restart" + id = "restart" + result = "restart" + required_reagents = list("trinary" = 1, "codelibre" = 1, "rewriter" = 1, "irishempbomb" = 1, "synthanol" = 1 ) + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' diff --git a/modular_ss220/food/code/food.dm b/modular_ss220/food/code/food/food.dm similarity index 63% rename from modular_ss220/food/code/food.dm rename to modular_ss220/food/code/food/food.dm index dec2b9e4092f..979a9c11c189 100644 --- a/modular_ss220/food/code/food.dm +++ b/modular_ss220/food/code/food/food.dm @@ -1,25 +1,25 @@ // Reagent Grinder /obj/machinery/reagentgrinder/Initialize(mapload) . = ..() - blend_items = list(/obj/item/reagent_containers/food/snacks/grown/buckwheat = list("buckwheat" = -5)) + blend_items + blend_items = list(/obj/item/food/snacks/grown/buckwheat = list("buckwheat" = -5)) + blend_items // Vending /obj/machinery/economy/vending/dinnerware/Initialize(mapload) products += list( - /obj/item/reagent_containers/food/condiment/herbs = 2,) + /obj/item/reagent_containers/condiment/herbs = 2,) . = ..() /obj/machinery/economy/vending/snack/Initialize(mapload) products += list( - /obj/item/reagent_containers/food/snacks/doshik = 6, - /obj/item/reagent_containers/food/snacks/doshik_spicy = 6,) + /obj/item/food/snacks/doshik = 6, + /obj/item/food/snacks/doshik_spicy = 6,) prices += list( - /obj/item/reagent_containers/food/snacks/doshik = 100, - /obj/item/reagent_containers/food/snacks/doshik_spicy = 120,) + /obj/item/food/snacks/doshik = 100, + /obj/item/food/snacks/doshik_spicy = 120,) . = ..() // Boiled Buckwheat -/obj/item/reagent_containers/food/snacks/boiledbuckwheat +/obj/item/food/snacks/boiledbuckwheat name = "варёная гречка" desc = "Это просто варёная гречка, ничего необычного." icon = 'modular_ss220/food/icons/food.dmi' @@ -31,10 +31,10 @@ /datum/recipe/microwave/boiledbuckwheat reagents = list("water" = 5, "buckwheat" = 10) - result = /obj/item/reagent_containers/food/snacks/boiledbuckwheat + result = /obj/item/food/snacks/boiledbuckwheat // Merchant Buckwheat -/obj/item/reagent_containers/food/snacks/buckwheat_merchant +/obj/item/food/snacks/buckwheat_merchant name = "гречка по-купечески" desc = "Тушёная гречка с овощами и мясом." icon = 'modular_ss220/food/icons/food.dmi' @@ -47,13 +47,13 @@ /datum/recipe/microwave/buckwheat_merchant reagents = list("water" = 5, "buckwheat" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/meat) - result = /obj/item/reagent_containers/food/snacks/buckwheat_merchant + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/meat) + result = /obj/item/food/snacks/buckwheat_merchant // Olivier Salad -/obj/item/reagent_containers/food/snacks/oliviersalad +/obj/item/food/snacks/oliviersalad name = "салат оливье" desc = "Не трогай, это на новый год!" icon = 'modular_ss220/food/icons/food.dmi' @@ -67,15 +67,15 @@ /datum/recipe/microwave/oliviersalad reagents = list("cream" = 10, "sodiumchloride" = 5) items = list( - /obj/item/reagent_containers/food/snacks/pickles, - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sausage) - result = /obj/item/reagent_containers/food/snacks/oliviersalad + /obj/item/food/snacks/pickles, + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sausage) + result = /obj/item/food/snacks/oliviersalad // Weird Olivier Salad -/obj/item/reagent_containers/food/snacks/weirdoliviersalad +/obj/item/food/snacks/weirdoliviersalad name = "странный салат оливье" desc = "Что ты сделал с этим оливье, чудовище?" icon = 'modular_ss220/food/icons/food.dmi' @@ -89,16 +89,16 @@ /datum/recipe/microwave/weirdoliviersalad reagents = list("cream" = 10, "sodiumchloride" = 5) items = list( - /obj/item/reagent_containers/food/snacks/pickles, - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sausage, - /obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/weirdoliviersalad + /obj/item/food/snacks/pickles, + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sausage, + /obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/weirdoliviersalad // Vegetable Salad -/obj/item/reagent_containers/food/snacks/vegisalad +/obj/item/food/snacks/vegisalad name = "овощной салат" desc = "Идеальная комбинация томатов и огурцов." icon = 'modular_ss220/food/icons/food.dmi' @@ -112,23 +112,23 @@ /datum/recipe/microwave/vegisalad reagents = list("cream" = 10, "sodiumchloride" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/cucumber, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/vegisalad + /obj/item/food/snacks/grown/cucumber, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/vegisalad // Pickles -/obj/item/reagent_containers/food/snacks/pickles +/obj/item/food/snacks/pickles name = "маринованные огурцы" desc = "Черт, тут много маринованных огурчиков." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "pickles" - trash = /obj/item/reagent_containers/food/snacks/brine + trash = /obj/item/food/snacks/brine filling_color = "#C2CFAB" bitesize = 8 list_reagents = list("nutriment" = 2, "vitamin" = 1) tastes = list("маринованые огурцы" = 1) -/obj/item/reagent_containers/food/snacks/brine +/obj/item/food/snacks/brine name = "рассол" desc = "Самое то после бурной ночи." consume_sound = 'sound/items/drink.ogg' @@ -141,9 +141,9 @@ /datum/crafting_recipe/pickles name = "Маринованные огурцы" - result = list(/obj/item/reagent_containers/food/snacks/pickles) + result = list(/obj/item/food/snacks/pickles) reqs = list( - /obj/item/reagent_containers/food/snacks/grown/cucumber = 3, + /obj/item/food/snacks/grown/cucumber = 3, /datum/reagent/water = 10, /datum/reagent/consumable/sodiumchloride = 10) time = 1 SECONDS @@ -151,7 +151,7 @@ subcategory = CAT_MISCFOOD // Pickle Soup -/obj/item/reagent_containers/food/snacks/soup/rassolnik +/obj/item/food/snacks/soup/rassolnik name = "рассольник" desc = "Популярен в СССП." icon = 'modular_ss220/food/icons/food.dmi' @@ -163,12 +163,12 @@ /datum/recipe/microwave/rassolnik reagents = list("water" = 10, "rice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/cucumber) - result = /obj/item/reagent_containers/food/snacks/soup/rassolnik + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/cucumber) + result = /obj/item/food/snacks/soup/rassolnik // Doner -/obj/item/reagent_containers/food/snacks/shawarma +/obj/item/food/snacks/shawarma name = "шаурма" desc = "Великолепное сочетание мяса с гриля и свежих овощей. Не спрашивайте о мясе." icon = 'modular_ss220/food/icons/food.dmi' @@ -180,17 +180,17 @@ /datum/recipe/microwave/shawarma reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/shawarma + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/shawarma // Doner - Cheese -/obj/item/reagent_containers/food/snacks/doner_cheese +/obj/item/food/snacks/doner_cheese name = "сырная шаурма" desc = "Фирменное блюдо от шеф-повара - мясо с гриля и свежие овощи с теплым сырным соусом. Вкусно!" icon = 'modular_ss220/food/icons/food.dmi' @@ -202,17 +202,17 @@ /datum/recipe/microwave/doner_cheese reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/doner_cheese + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/doner_cheese // Doner - Mushroom -/obj/item/reagent_containers/food/snacks/doner_mushroom +/obj/item/food/snacks/doner_mushroom name = "шаурма с грибами" desc = "Мясо с гриля, свежие овощи и грибы. Грибы немного вытеснили мясо, но всё так же вкусно!" icon = 'modular_ss220/food/icons/food.dmi' @@ -224,19 +224,19 @@ /datum/recipe/microwave/doner_mushroom reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/doner_mushroom + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/doner_mushroom // Doner - Vegetable -/obj/item/reagent_containers/food/snacks/doner_vegan +/obj/item/food/snacks/doner_vegan name = "овощная шаурма" desc = "Свежие овощи, завернутые в длинный рулет. Мясо в комплект не входит!" icon = 'modular_ss220/food/icons/food.dmi' @@ -248,30 +248,30 @@ /datum/recipe/microwave/doner_vegan reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/doner_vegan + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/doner_vegan // Slime Pie -/obj/item/reagent_containers/food/snacks/sliceable/slimepie +/obj/item/food/snacks/sliceable/slimepie name = "слаймовый пирог" desc = "Блюрп блоб блуп блеп блоп. Можно нарезать." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "slimepie" - slice_path = /obj/item/reagent_containers/food/snacks/slimepieslice + slice_path = /obj/item/food/snacks/slimepieslice slices_num = 5 bitesize = 3 filling_color = "#00d9ff" list_reagents = list("nutriment" = 12, "vitamin" = 4) tastes = list("слизь" = 5, "сладость" = 1, "желе" = 1) -/obj/item/reagent_containers/food/snacks/slimepieslice +/obj/item/food/snacks/slimepieslice name = "кусочек слаймового пирога" desc = "Блюрп блоб блуп блеп блоп." icon = 'modular_ss220/food/icons/food.dmi' @@ -282,11 +282,11 @@ /datum/recipe/oven/slimepie reagents = list("custard" = 1, "milk" = 5, "sugar" = 15) - items = list(/obj/item/organ/internal/heart/slime) - result = /obj/item/reagent_containers/food/snacks/sliceable/slimepie + items = list(/obj/item/organ/internal/brain/slime) + result = /obj/item/food/snacks/sliceable/slimepie // Kidan Ragu -/obj/item/reagent_containers/food/snacks/kidanragu +/obj/item/food/snacks/kidanragu name = "острое хитиновое рагу" desc = "Рагу из очень жесткого хитинового мяса и тушеных овощей." icon = 'modular_ss220/food/icons/food.dmi' @@ -298,25 +298,25 @@ reagents = list("water" = 10, "sodiumchloride" = 1) items = list( /obj/item/organ/internal/heart/kidan, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/kidanragu + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/kidanragu // Fried Unathi Meat -/obj/item/reagent_containers/food/snacks/sliceable/lizard +/obj/item/food/snacks/sliceable/lizard name = "жареное мясо унатха" desc = "Сочный стейк из мяса крупной ящерицы, вызывающий желание полежать на теплых камнях. Можно нарезать." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "lizard_steak" - slice_path = /obj/item/reagent_containers/food/snacks/lizardslice + slice_path = /obj/item/food/snacks/lizardslice slices_num = 5 list_reagents = list("protein" = 20, "nutriment" = 10, "vitamin" = 5) tastes = list("мясо ящерицы" = 4, "курятина" = 2) -/obj/item/reagent_containers/food/snacks/lizardslice +/obj/item/food/snacks/lizardslice name = "стейк из унатха" desc = "Порция мяса унатхи." icon = 'modular_ss220/food/icons/food.dmi' @@ -327,7 +327,7 @@ /datum/deepfryer_special/unathi input = /obj/item/organ/external - output = /obj/item/reagent_containers/food/snacks/sliceable/lizard + output = /obj/item/food/snacks/sliceable/lizard /datum/deepfryer_special/unathi/validate(obj/item/I) if(!..()) @@ -336,7 +336,7 @@ return istype(E.dna.species, /datum/species/unathi) // Tajaroni -/obj/item/reagent_containers/food/snacks/tajaroni +/obj/item/food/snacks/tajaroni name = "таярони" desc = "Острая вяленая колбаса с перцем и... Оно только что мяукнуло?" icon = 'modular_ss220/food/icons/food.dmi' @@ -346,7 +346,7 @@ /datum/deepfryer_special/tajaroni input = /obj/item/organ/external - output = /obj/item/reagent_containers/food/snacks/tajaroni + output = /obj/item/food/snacks/tajaroni /datum/deepfryer_special/tajaroni/validate(obj/item/I) if(!..()) @@ -355,7 +355,7 @@ return istype(E.dna.species, /datum/species/tajaran) // Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix +/obj/item/food/snacks/vulpix name = "вульпиксы" desc = "Аппетитно выглядящие мясные шарики в тесте... Главное - не думать о том, из кого они сделаны!" icon = 'modular_ss220/food/icons/food.dmi' @@ -366,13 +366,13 @@ /datum/recipe/oven/vuplix reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "tomato_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin) - result = /obj/item/reagent_containers/food/snacks/vulpix + result = /obj/item/food/snacks/vulpix // Cheese Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix/cheese +/obj/item/food/snacks/vulpix/cheese name = "сырные вульпиксы" desc = "Аппетитно выглядящие мясные шарики в тесте с начинкой из сыра... Главное - не думать о том, из кого они сделаны!" icon = 'modular_ss220/food/icons/food.dmi' @@ -381,16 +381,16 @@ tastes = list("тесто" = 2, "собачатина" = 3, "сыр" = 2) /datum/recipe/oven/vulpixcheese - reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "cheesesauce" = 1, "cream" = 5) + reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "cheese_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/snacks/vulpix/cheese + /obj/item/food/snacks/cheesewedge) + result = /obj/item/food/snacks/vulpix/cheese // Bacon Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix/bacon +/obj/item/food/snacks/vulpix/bacon name = "вульпиксы с беконом" desc = "Аппетитно выглядящие мясные шарики в тесте с начинкой... Главное - не думать о том, из кого они сделаны!" icon = 'modular_ss220/food/icons/food.dmi' @@ -399,17 +399,17 @@ tastes = list("тесто" = 2, "собачатина" = 3, "бекон" = 2, "грибы" = 2) /datum/recipe/oven/vulpixbacon - reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "mushroomsauce" = 1, "cream" = 5) + reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "mushroom_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin, - /obj/item/reagent_containers/food/snacks/raw_bacon, - /obj/item/reagent_containers/food/snacks/grown/mushroom) - result = /obj/item/reagent_containers/food/snacks/vulpix/bacon + /obj/item/food/snacks/raw_bacon, + /obj/item/food/snacks/grown/mushroom) + result = /obj/item/food/snacks/vulpix/bacon // Chilli Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix/chilli +/obj/item/food/snacks/vulpix/chilli name = "вульпиксы-чилли" desc = "Аппетитно выглядящие мясные шарики в тесте... Главное - не думать о том, из кого они сделаны! Язык обжигает." icon = 'modular_ss220/food/icons/food.dmi' @@ -418,26 +418,26 @@ tastes = list("тесто" = 2, "собачатина" = 3, "чилли" = 2) /datum/recipe/oven/vulpixchilli - reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "diablosauce" = 1, "cream" = 5) + reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "diablo_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/vulpix/chilli + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/vulpix/chilli // Seafood Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/seafood +/obj/item/food/snacks/sliceable/pizza/seafood name = "пицца с морепродуктами" desc = "Дары космических озер, сыр и немного кислинки." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "fishpizza" - slice_path = /obj/item/reagent_containers/food/snacks/seapizzaslice + slice_path = /obj/item/food/snacks/seapizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 15, "protein" = 15) filling_color = "#ffe45d" tastes = list("чеснок" = 1, "сыр" = 2, "морепродукты" = 1, "кислинка" = 1) -/obj/item/reagent_containers/food/snacks/seapizzaslice +/obj/item/food/snacks/seapizzaslice name = "кусочек пиццы с морепродуктами" desc = "Аппетитный кусочек пиццы с морепродуктами и сыром..." icon = 'modular_ss220/food/icons/food.dmi' @@ -448,26 +448,26 @@ /datum/recipe/oven/seapizza reagents = list("herbsmix" = 1, "garlic_sauce" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/boiled_shrimp, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/seafood + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/boiled_shrimp, + /obj/item/food/snacks/grown/citrus/lemon) + result = /obj/item/food/snacks/sliceable/pizza/seafood // Bacon Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/bacon +/obj/item/food/snacks/sliceable/pizza/bacon name = "пицца с беконом" desc = "Классическая пицца, один из ингредиентов которой был заменен на жареный бекон." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "baconpizza" - slice_path = /obj/item/reagent_containers/food/snacks/baconpizzaslice + slice_path = /obj/item/food/snacks/baconpizzaslice list_reagents = list("nutriment" = 40, "vitamin" = 5, "protein" = 15) filling_color = "#ffe45d" tastes = list("грибы" = 1, "сыр" = 2, "бекон" = 1) -/obj/item/reagent_containers/food/snacks/baconpizzaslice +/obj/item/food/snacks/baconpizzaslice name = "кусочек пиццы с беконом" desc = "Аппетитный кусок пиццы с беконом и грибами..." icon = 'modular_ss220/food/icons/food.dmi' @@ -478,26 +478,26 @@ /datum/recipe/oven/baconpizza reagents = list("mushroom_sauce" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/raw_bacon, - /obj/item/reagent_containers/food/snacks/raw_bacon) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/bacon + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/raw_bacon, + /obj/item/food/snacks/raw_bacon) + result = /obj/item/food/snacks/sliceable/pizza/bacon // Pizza Tajaroni -/obj/item/reagent_containers/food/snacks/sliceable/pizza/tajaroni +/obj/item/food/snacks/sliceable/pizza/tajaroni name = "пицца с таярони" desc = "Острые колбаски таярони с сыром и оливками. Что из этого ужаснее, еще предстоит решить." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "tajarpizza" - slice_path = /obj/item/reagent_containers/food/snacks/tajpizzaslice + slice_path = /obj/item/food/snacks/tajpizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 15, "protein" = 15) filling_color = "#ffe45d" tastes = list("томат" = 1, "сыр" = 2, "таярони" = 1, "оливки" = 1) -/obj/item/reagent_containers/food/snacks/tajpizzaslice +/obj/item/food/snacks/tajpizzaslice name = "кусочек пиццы с таярони" desc = "Вкуснейший кусок пиццы с таярони и оливками..." icon = 'modular_ss220/food/icons/food.dmi' @@ -508,25 +508,25 @@ /datum/recipe/oven/tajarpizza reagents = list("herbsmix" = 1, "tomato_sauce" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/tajaroni, - /obj/item/reagent_containers/food/snacks/grown/olive,) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/tajaroni + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/tajaroni, + /obj/item/food/snacks/grown/olive,) + result = /obj/item/food/snacks/sliceable/pizza/tajaroni // Diablo Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/diablo +/obj/item/food/snacks/sliceable/pizza/diablo name = "пицца 'Диабло'" desc = "Невероятно жгучая пицца с кусочками мяса, некоторые утверждают, что она может отправить вас в рэдспейс." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "diablopizza" - slice_path = /obj/item/reagent_containers/food/snacks/diablopizzaslice + slice_path = /obj/item/food/snacks/diablopizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 15, "protein" = 15, "capsaicin" = 15) filling_color = "#ffe45d" tastes = list("остроту" = 1, "сыр" = 2, "мясо" = 1, "специи" = 1) -/obj/item/reagent_containers/food/snacks/diablopizzaslice +/obj/item/food/snacks/diablopizzaslice name = "кусочек пиццы 'Диабло'" desc = "Аппетитный кусок пиццы с соусом 'Диабло' и мясом..." icon = 'modular_ss220/food/icons/food.dmi' @@ -537,16 +537,16 @@ /datum/recipe/oven/diablopizza reagents = list("herbsmix" = 1, "diablo_sauce" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/diablo + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball) + result = /obj/item/food/snacks/sliceable/pizza/diablo // Doshik -/obj/item/reagent_containers/food/snacks/doshik +/obj/item/food/snacks/doshik name = "дошик" desc = "Очень известная лапша быстрого приготовления. При открытии заваривается моментально. Вау." icon = 'modular_ss220/food/icons/food.dmi' @@ -557,7 +557,7 @@ junkiness = 25 tastes = list("курятина" = 1, "лапша" = 1) -/obj/item/reagent_containers/food/snacks/doshik_spicy +/obj/item/food/snacks/doshik_spicy name = "острый дошик" desc = "Очень известная лапша быстрого приготовления. При открытии заваривается моментально. Вау. Кажется, что в ней есть острые специи." icon = 'modular_ss220/food/icons/food.dmi' @@ -575,19 +575,19 @@ desc = "Всё ещё вкусно пахнет." // Chocolate Cake -/obj/item/reagent_containers/food/snacks/sliceable/choccherrycake +/obj/item/food/snacks/sliceable/choccherrycake name = "шоколадно-вишневый торт" desc = "Ещё один торт. Тем не менее." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "choccherrycake" - slice_path = /obj/item/reagent_containers/food/snacks/choccherrycakeslice + slice_path = /obj/item/food/snacks/choccherrycakeslice slices_num = 6 bitesize = 3 filling_color = "#5e1706" tastes = list("вишня" = 5, "сладость" = 1, "шоколад" = 1) list_reagents = list("nutriment" = 12, "sugar" = 4, "coco" = 4) -/obj/item/reagent_containers/food/snacks/choccherrycakeslice +/obj/item/food/snacks/choccherrycakeslice name = "кусочек шоколадно-вишневого торта" desc = "Кусочек очередного торта. Подождите, что?" icon = 'modular_ss220/food/icons/food.dmi' @@ -598,28 +598,28 @@ /datum/recipe/oven/choccherrycake reagents = list("milk" = 5, "flour" = 15) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/grown/cherries) - result = /obj/item/reagent_containers/food/snacks/sliceable/choccherrycake + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/grown/cherries) + result = /obj/item/food/snacks/sliceable/choccherrycake // Noel -/obj/item/reagent_containers/food/snacks/sliceable/noel +/obj/item/food/snacks/sliceable/noel name = "Bûche de Noël" desc = "Что?" icon = 'modular_ss220/food/icons/food.dmi' icon_state = "noel" trash = /obj/item/trash/tray - slice_path = /obj/item/reagent_containers/food/snacks/noelslice + slice_path = /obj/item/food/snacks/noelslice slices_num = 5 filling_color = "#5e1706" tastes = list("шоколад" = 3, "сладость" = 2, "яйца" = 1, "ягоды" = 2) list_reagents = list("nutriment" = 6, "plantmatter" = 2, "coco" = 2, "cream" = 3, "sugar" = 3, "berryjucie" = 3) -/obj/item/reagent_containers/food/snacks/noelslice +/obj/item/food/snacks/noelslice name = "кусочек Noël" desc = "Кусочек чего?" icon = 'modular_ss220/food/icons/food.dmi' @@ -631,16 +631,16 @@ /datum/recipe/oven/noel reagents = list("flour" = 15, "cream" = 10, "milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/grown/berries, - /obj/item/reagent_containers/food/snacks/grown/berries) - result = /obj/item/reagent_containers/food/snacks/sliceable/noel + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/grown/berries, + /obj/item/food/snacks/grown/berries) + result = /obj/item/food/snacks/sliceable/noel // Sundae -/obj/item/reagent_containers/food/snacks/sundae +/obj/item/food/snacks/sundae name = "Сандей" desc = "Сливочное удовольствие." icon = 'modular_ss220/food/icons/food.dmi' @@ -653,13 +653,13 @@ /datum/recipe/oven/sundae reagents = list("cream" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/doughslice) - result = /obj/item/reagent_containers/food/snacks/sundae + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/doughslice) + result = /obj/item/food/snacks/sundae // Bun-Bun -/obj/item/reagent_containers/food/snacks/bunbun +/obj/item/food/snacks/bunbun name = "Бун-Бун" desc = "Маленькая хлебная обезьянка, сформованная из двух булочек для гамбургеров." icon = 'modular_ss220/food/icons/food.dmi' @@ -670,12 +670,12 @@ /datum/recipe/oven/bunbun items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bun) - result = /obj/item/reagent_containers/food/snacks/bunbun + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bun) + result = /obj/item/food/snacks/bunbun // Tortilla -/obj/item/reagent_containers/food/snacks/tortilla +/obj/item/food/snacks/tortilla name = "тортилья" desc = "Hasta la vista, baby" icon = 'modular_ss220/food/icons/food.dmi' @@ -688,11 +688,11 @@ /datum/recipe/microwave/tortilla reagents = list("flour" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/corn) - result = /obj/item/reagent_containers/food/snacks/tortilla + items = list(/obj/item/food/snacks/grown/corn) + result = /obj/item/food/snacks/tortilla // Nachos -/obj/item/reagent_containers/food/snacks/nachos +/obj/item/food/snacks/nachos name = "начос" desc = "Хола!" icon = 'modular_ss220/food/icons/food.dmi' @@ -705,11 +705,11 @@ /datum/recipe/microwave/nachos reagents = list("sodiumchloride" = 1) - items = list(/obj/item/reagent_containers/food/snacks/tortilla) - result = /obj/item/reagent_containers/food/snacks/nachos + items = list(/obj/item/food/snacks/tortilla) + result = /obj/item/food/snacks/nachos // Cheese Nachos -/obj/item/reagent_containers/food/snacks/cheesenachos +/obj/item/food/snacks/cheesenachos name = "сырные начос" desc = "Сырное хола!" icon = 'modular_ss220/food/icons/food.dmi' @@ -723,12 +723,12 @@ /datum/recipe/microwave/cheesenachos reagents = list("sodiumchloride" = 1) items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/snacks/cheesenachos + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/cheesewedge) + result = /obj/item/food/snacks/cheesenachos // Cuban Nachos -/obj/item/reagent_containers/food/snacks/cubannachos +/obj/item/food/snacks/cubannachos name = "кубинские начос" desc = "Очень острое хола!" icon = 'modular_ss220/food/icons/food.dmi' @@ -741,13 +741,13 @@ /datum/recipe/microwave/cubannachos items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/cubannachos + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/cubannachos // Carne Buritto -/obj/item/reagent_containers/food/snacks/carneburrito +/obj/item/food/snacks/carneburrito name = "Carne de burrito asado" desc = "Как классический буррито, но с мясом." icon = 'modular_ss220/food/icons/food.dmi' @@ -759,14 +759,14 @@ /datum/recipe/microwave/carneburrito items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/grown/soybeans, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet) - result = /obj/item/reagent_containers/food/snacks/carneburrito + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/grown/soybeans, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet) + result = /obj/item/food/snacks/carneburrito // Cheese Buritto -/obj/item/reagent_containers/food/snacks/cheeseburrito +/obj/item/food/snacks/cheeseburrito name = "сырное буритто" desc = "Нужно ли здесь что-то говорить?" icon = 'modular_ss220/food/icons/food.dmi' @@ -778,13 +778,13 @@ /datum/recipe/microwave/cheeseburrito items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/snacks/cheeseburrito + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge) + result = /obj/item/food/snacks/cheeseburrito // Plasma Buritto -/obj/item/reagent_containers/food/snacks/plasmaburrito +/obj/item/food/snacks/plasmaburrito name = "Fuego Plasma Burrito" desc = "Очень острое, амигос." icon = 'modular_ss220/food/icons/food.dmi' @@ -796,14 +796,14 @@ /datum/recipe/microwave/plasmaburrito items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/grown/soybeans, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/plasmaburrito + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/grown/soybeans, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/plasmaburrito // Pelmeni -/obj/item/reagent_containers/food/snacks/pelmeni +/obj/item/food/snacks/pelmeni name = "пельмени" desc = "Мясо завёрнутое в тесто." icon = 'modular_ss220/food/icons/food.dmi' @@ -813,16 +813,16 @@ bitesize = 2 tastes = list("сырое мясо" = 1, "сырое тесто" = 1) -/obj/item/reagent_containers/food/snacks/doughslice/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/rawcutlet)) - new /obj/item/reagent_containers/food/snacks/pelmeni(src) +/obj/item/food/snacks/doughslice/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/food/snacks/rawcutlet)) + new /obj/item/food/snacks/pelmeni(src) to_chat(user, "Вы сделали немного пельменей.") qdel(src) qdel(I) else ..() -/obj/item/reagent_containers/food/snacks/boiledpelmeni +/obj/item/food/snacks/boiledpelmeni name = "варёные пельмени" desc = "Мы не знаем, какой была Сибирь, но эти вкусные пельмени определенно прибыли оттуда." icon = 'modular_ss220/food/icons/food.dmi' @@ -835,11 +835,11 @@ /datum/recipe/microwave/pelmeni reagents = list("water" = 5) - items = list(/obj/item/reagent_containers/food/snacks/pelmeni) - result = /obj/item/reagent_containers/food/snacks/boiledpelmeni + items = list(/obj/item/food/snacks/pelmeni) + result = /obj/item/food/snacks/boiledpelmeni // Smoked Sausage -/obj/item/reagent_containers/food/snacks/smokedsausage +/obj/item/food/snacks/smokedsausage name = "копчёная колбаска" desc = "Кусок копченой колбасы. Под пивко пойдёт." icon = 'modular_ss220/food/icons/food.dmi' @@ -849,21 +849,21 @@ /datum/recipe/oven/smokedsausage reagents = list("sodiumchloride" = 5, "blackpepper" = 5) - items = list(/obj/item/reagent_containers/food/snacks/sausage) - result = /obj/item/reagent_containers/food/snacks/smokedsausage + items = list(/obj/item/food/snacks/sausage) + result = /obj/item/food/snacks/smokedsausage // Salami -/obj/item/reagent_containers/food/snacks/sliceable/salami +/obj/item/food/snacks/sliceable/salami name = "салями" desc = "Не лучший выбор для сэндвича." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "salami" - slice_path = /obj/item/reagent_containers/food/snacks/slice/salami + slice_path = /obj/item/food/snacks/slice/salami slices_num = 6 list_reagents = list("protein" = 12) tastes = list("мясо" = 3, "чеснок" = 1) -/obj/item/reagent_containers/food/snacks/slice/salami +/obj/item/food/snacks/slice/salami name = "ломтик салями" desc = "Лучший выбор для сэндвича." icon = 'modular_ss220/food/icons/food.dmi' @@ -872,11 +872,11 @@ /datum/recipe/oven/salami reagents = list("garlic_sauce" = 5) - items = list(/obj/item/reagent_containers/food/snacks/smokedsausage) - result = /obj/item/reagent_containers/food/snacks/sliceable/salami + items = list(/obj/item/food/snacks/smokedsausage) + result = /obj/item/food/snacks/sliceable/salami // Fruit Cup -/obj/item/reagent_containers/food/snacks/fruitcup +/obj/item/food/snacks/fruitcup name = "фруктовая кружка" desc = "Фруктовый салат со съедобной кружкой." icon = 'modular_ss220/food/icons/food.dmi' @@ -888,16 +888,16 @@ /datum/recipe/microwave/fruitcup items = list( - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/ambrosia, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, - /obj/item/reagent_containers/food/snacks/grown/watermelon) - result = /obj/item/reagent_containers/food/snacks/fruitcup + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/ambrosia, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/citrus/lemon, + /obj/item/food/snacks/grown/watermelon) + result = /obj/item/food/snacks/fruitcup // Jungle Salad -/obj/item/reagent_containers/food/snacks/junglesalad +/obj/item/food/snacks/junglesalad name = "салат 'Джунгли'" desc = "Из глубин джунглей." icon = 'modular_ss220/food/icons/food.dmi' @@ -908,14 +908,14 @@ /datum/recipe/microwave/junglesalad items = list( - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/watermelon) - result = /obj/item/reagent_containers/food/snacks/junglesalad + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/watermelon) + result = /obj/item/food/snacks/junglesalad // Delight Salad -/obj/item/reagent_containers/food/snacks/delightsalad +/obj/item/food/snacks/delightsalad name = "cалат 'Восторг'" desc = "Настоящий цитрусовый восторг." icon = 'modular_ss220/food/icons/food.dmi' @@ -928,13 +928,13 @@ /datum/recipe/microwave/delightsalad items = list( - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime) - result = /obj/item/reagent_containers/food/snacks/delightsalad + /obj/item/food/snacks/grown/citrus/lemon, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/lime) + result = /obj/item/food/snacks/delightsalad // Chowmein -/obj/item/reagent_containers/food/snacks/chowmein +/obj/item/food/snacks/chowmein name = "чау-мейн" desc = "Nihao!" icon = 'modular_ss220/food/icons/food.dmi' @@ -946,14 +946,14 @@ /datum/recipe/microwave/chowmein items = list( - /obj/item/reagent_containers/food/snacks/boiledspaghetti, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/carrot) - result = /obj/item/reagent_containers/food/snacks/chowmein + /obj/item/food/snacks/boiledspaghetti, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/carrot) + result = /obj/item/food/snacks/chowmein // Beef Noodles -/obj/item/reagent_containers/food/snacks/beefnoodles +/obj/item/food/snacks/beefnoodles name = "лапша с говядиной" desc = "Так просто и так вкусно!" icon = 'modular_ss220/food/icons/food.dmi' @@ -965,14 +965,14 @@ /datum/recipe/microwave/beefnoodles items = list( - /obj/item/reagent_containers/food/snacks/boiledspaghetti, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/cabbage) - result = /obj/item/reagent_containers/food/snacks/beefnoodles + /obj/item/food/snacks/boiledspaghetti, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/cabbage) + result = /obj/item/food/snacks/beefnoodles // Father's Soup -/obj/item/reagent_containers/food/snacks/fathersoup +/obj/item/food/snacks/fathersoup name = "батин суп" desc = "Адовое блюдо, усреднённый рецепт ибо вариаций масса. Ух бля." icon = 'modular_ss220/food/icons/food.dmi' @@ -986,15 +986,15 @@ /datum/recipe/oven/fathersoup reagents = list("flour" = 10, "blackpepper" = 5) items = list( - /obj/item/reagent_containers/food/snacks/soup/tomatosoup, - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/fathersoup - -/obj/item/reagent_containers/food/snacks/fathersoup/On_Consume(mob/M, mob/user) + /obj/item/food/snacks/soup/tomatosoup, + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/ghost_chili, + /obj/item/food/snacks/grown/ghost_chili, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/fathersoup + +/obj/item/food/snacks/fathersoup/On_Consume(mob/M, mob/user) . = ..() user.visible_message("У [M] на лбу аж пот выступает.") if(prob(33)) @@ -1002,7 +1002,6 @@ M.say(soup_talk) if(prob(33)) M.emote("fart") - return ..() /obj/item/trash/pan name = "дырявая сковорода" @@ -1021,11 +1020,11 @@ /obj/item/pizzabox/infinite/attack_self(mob/living/user) QDEL_NULL(pizza) if(ishuman(user)) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/meatpizza(src) . = ..() // Disk croutons -/obj/item/reagent_containers/food/snacks/disk +/obj/item/food/snacks/disk name = "диск с сухариками" desc = "Вкуснейшие сухарики с запахом дымка!" icon = 'modular_ss220/food/icons/food.dmi' diff --git a/modular_ss220/food/code/ingredients.dm b/modular_ss220/food/code/food/ingredients.dm similarity index 81% rename from modular_ss220/food/code/ingredients.dm rename to modular_ss220/food/code/food/ingredients.dm index 5b42bc0a0602..f3da626f4da3 100644 --- a/modular_ss220/food/code/ingredients.dm +++ b/modular_ss220/food/code/food/ingredients.dm @@ -71,7 +71,7 @@ taste_description = "сухая приправа" // Slices -/obj/item/reagent_containers/food/snacks/cucumberslice +/obj/item/food/snacks/cucumberslice name = "ломтик огурца" desc = "Нарезанный огурец, неожиданно, правда?" icon = 'modular_ss220/food/icons/food.dmi' @@ -82,7 +82,7 @@ tastes = list("cucumber" = 1) // Tomato Sauce -/obj/item/reagent_containers/food/condiment/tomato_sauce +/obj/item/reagent_containers/condiment/tomato_sauce name = "томатный соус" desc = "Отец всех соусов. Помидоры, немного специй и ничего лишнего." icon = 'modular_ss220/food/icons/containers.dmi' @@ -93,12 +93,12 @@ /datum/recipe/microwave/tomato_sauce reagents = list("water" = 15, "sodiumchloride" = 1, "blackpepper" = 1, "herbsmix" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/condiment/tomato_sauce + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/reagent_containers/condiment/tomato_sauce // Diablo Sauce -/obj/item/reagent_containers/food/condiment/diablo_sauce +/obj/item/reagent_containers/condiment/diablo_sauce name = "соус 'Диабло'" desc = "Старинный жгучий соус, рецепт которого практически не изменился с момента его создания." icon = 'modular_ss220/food/icons/containers.dmi' @@ -109,12 +109,12 @@ /datum/recipe/microwave/diablo_sauce reagents = list("water" = 15, "sodiumchloride" = 1, "blackpepper" = 2, "herbsmix" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/condiment/diablo_sauce + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/chili) + result = /obj/item/reagent_containers/condiment/diablo_sauce // Cheese Sauce -/obj/item/reagent_containers/food/condiment/cheese_sauce +/obj/item/reagent_containers/condiment/cheese_sauce name = "сырный соус" desc = "Сыр, сливки и молоко... максимальная концентрация белка!" icon = 'modular_ss220/food/icons/containers.dmi' @@ -125,12 +125,12 @@ /datum/recipe/microwave/cheese_sauce reagents = list("milk" = 15, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/condiment/cheese_sauce + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge) + result = /obj/item/reagent_containers/condiment/cheese_sauce // Mushroom Sauce -/obj/item/reagent_containers/food/condiment/mushroom_sauce +/obj/item/reagent_containers/condiment/mushroom_sauce name = "грибной соус" desc = "Сливочный соус с грибами, имеет довольно резкий запах." icon = 'modular_ss220/food/icons/containers.dmi' @@ -141,12 +141,12 @@ /datum/recipe/microwave/mushroom_sauce reagents = list("milk" = 15, "cream" = 5, "sodiumchloride" = 1,) items = list( - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/mushroom) - result = /obj/item/reagent_containers/food/condiment/mushroom_sauce + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/mushroom) + result = /obj/item/reagent_containers/condiment/mushroom_sauce // Garlic Sauce -/obj/item/reagent_containers/food/condiment/garlic_sauce +/obj/item/reagent_containers/condiment/garlic_sauce name = "чесночный соус" desc = "Сильный соус с чесноком, его запах бьет в нос. Некоторые члены экипажа, вероятно, будут шипеть на вас и уходить." icon = 'modular_ss220/food/icons/containers.dmi' @@ -157,12 +157,12 @@ /datum/recipe/microwave/garlic_sauce reagents = list("water" = 15, "sodiumchloride" = 1, "herbsmix" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/cucumber) - result = /obj/item/reagent_containers/food/condiment/garlic_sauce + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/cucumber) + result = /obj/item/reagent_containers/condiment/garlic_sauce // Custard -/obj/item/reagent_containers/food/condiment/custard +/obj/item/reagent_containers/condiment/custard name = "заварной крем" desc = "Мягкий и сладкий крем, используемый в кондитерском производстве." icon = 'modular_ss220/food/icons/containers.dmi' @@ -172,11 +172,11 @@ /datum/recipe/microwave/custard reagents = list("sugar" = 10, "milk" = 10, "cream" = 5, "vanilla" = 5) - items = list(/obj/item/reagent_containers/food/snacks/egg) - result = /obj/item/reagent_containers/food/condiment/custard + items = list(/obj/item/food/snacks/egg) + result = /obj/item/reagent_containers/condiment/custard // Herbs -/obj/item/reagent_containers/food/condiment/herbs +/obj/item/reagent_containers/condiment/herbs name = "приправа" desc = "Смесь различных трав. Идеально подходит для пиццы!" icon = 'modular_ss220/food/icons/containers.dmi' diff --git a/modular_ss220/food/code/food/nails.dm b/modular_ss220/food/code/food/nails.dm new file mode 100644 index 000000000000..c329c74535af --- /dev/null +++ b/modular_ss220/food/code/food/nails.dm @@ -0,0 +1,45 @@ +/obj/item/nails + name = "гвозди" + desc = "Хорошие гвозди, жаль бесполезные." + icon = 'modular_ss220/food/icons/food.dmi' + icon_state = "nails" + +/obj/item/food/snacks/nails + name = "жаренные гвозди" + desc = "Жаренных гвоздей не хочешь, не?" + icon = 'modular_ss220/food/icons/food.dmi' + icon_state = "nails_fried" + trash = /obj/item/trash/plate + bitesize = 3 + antable = FALSE + list_reagents = list("iron" = 8, "nutriment" = 1) + tastes = list("гвозди" = 1) + +/obj/item/food/snacks/nails/On_Consume(mob/living/carbon/human/user) + . = ..() + to_chat(user, "Ты чувствуешь адскую боль во рту!") + playsound(user.loc, "bonebreak", 60, TRUE) + user.apply_damage(5, BRUTE, "head") + + switch(rand(1, 3)) + if(1) + user.Confused(12 SECONDS) + if(2) + user.EyeBlurry(6 SECONDS) + if(3) + user.bleed(5) + + if(prob(30)) + user.emote("scream") + + if(prob(10) && do_after(user, 5 SECONDS, needhand = FALSE, target = user, progress = FALSE, allow_moving = TRUE)) + user.vomit(lost_nutrition = 0, blood = 15, should_confuse = FALSE) + user.emote("scream") + +/datum/food_processor_process/nails + input = /obj/item/stack/rods + output = /obj/item/nails + +/datum/deepfryer_special/nails + input = /obj/item/nails + output = /obj/item/food/snacks/nails diff --git a/modular_ss220/food/icons/drinks.dmi b/modular_ss220/food/icons/drinks.dmi index 684bd4fe8f39..b9a162df1e1b 100644 Binary files a/modular_ss220/food/icons/drinks.dmi and b/modular_ss220/food/icons/drinks.dmi differ diff --git a/modular_ss220/food/icons/food.dmi b/modular_ss220/food/icons/food.dmi index 6ca84088fc17..0a03b0c31e19 100644 Binary files a/modular_ss220/food/icons/food.dmi and b/modular_ss220/food/icons/food.dmi differ diff --git a/modular_ss220/food/sound/restart-shutdown.ogg b/modular_ss220/food/sound/restart-shutdown.ogg new file mode 100644 index 000000000000..871973c09cd6 Binary files /dev/null and b/modular_ss220/food/sound/restart-shutdown.ogg differ diff --git a/modular_ss220/food/sound/restart-wakeup.ogg b/modular_ss220/food/sound/restart-wakeup.ogg new file mode 100644 index 000000000000..e3709aa8d642 Binary files /dev/null and b/modular_ss220/food/sound/restart-wakeup.ogg differ diff --git a/modular_ss220/hairs/code/human_hair.dm b/modular_ss220/hairs/code/human_hair.dm index cd3547a17c28..2b90fa864e36 100644 --- a/modular_ss220/hairs/code/human_hair.dm +++ b/modular_ss220/hairs/code/human_hair.dm @@ -180,6 +180,63 @@ /datum/sprite_accessory/hair/longemo species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") +/datum/sprite_accessory/hair/butterfly + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Butterfly" + icon_state = "butterfly" + secondary_theme = "beads" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/cascading_long_bob + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Cascading Long Bob" + icon_state = "cascading_long_bob" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/jinshi + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Jinshi" + icon_state = "jinshi" + secondary_theme = "beads" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/long_strait + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Long Strait" + icon_state = "long_strait" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/pine + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Pine" + icon_state = "pine" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/short_bob + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Short Bob" + icon_state = "short_bob" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/waves_mid + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Waves Mid" + icon_state = "waves_mid" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/whim + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Whim" + icon_state = "whim" + species_allowed = list("Human", "Slime People") + +/datum/sprite_accessory/hair/vulpkanin/tomahawk_spiker + icon = 'modular_ss220/hairs/icons/human_hair.dmi' + name = "Tomahawk Spiker" + icon_state = "tomahawk_spiker" + species_allowed = list("Human", "Slime People") + + ////////////////////////////// //////START VG HAIRSTYLES///// ////////////////////////////// diff --git a/modular_ss220/hairs/code/vulpkanin_hair.dm b/modular_ss220/hairs/code/vulpkanin_hair.dm index b7b46fbecea7..f58b33346cdf 100644 --- a/modular_ss220/hairs/code/vulpkanin_hair.dm +++ b/modular_ss220/hairs/code/vulpkanin_hair.dm @@ -240,3 +240,12 @@ name = "Spicy" icon_state = "spicy" +/datum/sprite_accessory/hair/vulpkanin/disheveled + icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' + name = "Disheveled" + icon_state = "disheveled" + +/datum/sprite_accessory/hair/vulpkanin/braids + icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' + name = "Braids" + icon_state = "braids" diff --git a/modular_ss220/hairs/icons/human_hair.dmi b/modular_ss220/hairs/icons/human_hair.dmi index b614f229a8f0..b05b3817bf65 100644 Binary files a/modular_ss220/hairs/icons/human_hair.dmi and b/modular_ss220/hairs/icons/human_hair.dmi differ diff --git a/modular_ss220/hairs/icons/vulpkanin_hair.dmi b/modular_ss220/hairs/icons/vulpkanin_hair.dmi index d8c135186d6b..ffaaf323ead3 100644 Binary files a/modular_ss220/hairs/icons/vulpkanin_hair.dmi and b/modular_ss220/hairs/icons/vulpkanin_hair.dmi differ diff --git a/modular_ss220/hydroponics/code/plants.dm b/modular_ss220/hydroponics/code/plants.dm index 0e0e224ad615..de7fef632729 100644 --- a/modular_ss220/hydroponics/code/plants.dm +++ b/modular_ss220/hydroponics/code/plants.dm @@ -17,10 +17,10 @@ species = "buckwheat" icon_dead = "buckwheat-dead" plantname = "Cтебли Гречки" - product = /obj/item/reagent_containers/food/snacks/grown/buckwheat + product = /obj/item/food/snacks/grown/buckwheat mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/buckwheat +/obj/item/food/snacks/grown/buckwheat seed = /obj/item/seeds/wheat/buckwheat name = "гречка" desc = "Finally, гречка." @@ -40,7 +40,7 @@ icon_state = "seed-cucumber" species = "cucumber" plantname = "Огуречный Куст" - product = /obj/item/reagent_containers/food/snacks/grown/cucumber + product = /obj/item/food/snacks/grown/cucumber lifespan = 40 endurance = 70 potency = 30 @@ -54,14 +54,14 @@ genes = list(/datum/plant_gene/trait/repeated_harvest) reagents_add = list("water" = 0.15, "kelotane" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/cucumber +/obj/item/food/snacks/grown/cucumber seed = /obj/item/seeds/cucumber name = "огурец" desc = "Сила земли!" icon = 'modular_ss220/hydroponics/icons/plants.dmi' icon_state = "cucumber" splat_type = /obj/effect/decal/cleanable/plant_smudge - slice_path = /obj/item/reagent_containers/food/snacks/cucumberslice + slice_path = /obj/item/food/snacks/cucumberslice slices_num = 5 filling_color = "#47FF91" tastes = list("огурец" = 1) @@ -80,7 +80,7 @@ icon_state = "seed-charcolives" species = "charcolives" plantname = "Угливковое Деревце" - product = /obj/item/reagent_containers/food/snacks/grown/olive/charcoal + product = /obj/item/food/snacks/grown/olive/charcoal growing_icon = 'modular_ss220/hydroponics/icons/growing.dmi' icon_grow = "charcolives-grow" icon_dead = "charcolives-dead" @@ -92,7 +92,7 @@ rarity = 30 reagents_add = list("charcoal" = 0.15, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/olive/charcoal +/obj/item/food/snacks/grown/olive/charcoal seed = /obj/item/seeds/olive/charcoal name = "угливки" desc = "Это... маслины?" diff --git a/modular_ss220/jobs/_jobs.dm b/modular_ss220/jobs/_jobs.dm index 803bc7f75729..486c0fe25233 100644 --- a/modular_ss220/jobs/_jobs.dm +++ b/modular_ss220/jobs/_jobs.dm @@ -6,9 +6,13 @@ /datum/modpack/jobs/initialize() . = ..() - GLOB.security_positions |= GLOB.security_positions_ss220 - GLOB.active_security_positions |= GLOB.security_positions_ss220 + GLOB.security_positions |= GLOB.security_positions_ss220 + GLOB.security_donor_jobs + GLOB.active_security_positions |= GLOB.security_positions_ss220 + GLOB.security_donor_jobs GLOB.medical_positions |= GLOB.medical_positions_ss220 GLOB.engineering_positions |= GLOB.engineering_positions_ss220 GLOB.science_positions |= GLOB.science_positions_ss220 + + GLOB.service_positions |= GLOB.service_donor_jobs + GLOB.supply_positions |= GLOB.supply_donor_jobs + GLOB.assistant_positions |= GLOB.assistant_donor_jobs diff --git a/modular_ss220/jobs/_jobs.dme b/modular_ss220/jobs/_jobs.dme index 7a0fc3422801..9b36c5eda56d 100644 --- a/modular_ss220/jobs/_jobs.dme +++ b/modular_ss220/jobs/_jobs.dme @@ -8,14 +8,22 @@ #include "code/jobs_character.dm" #include "code/jobs_gamemodes.dm" #include "code/jobs.dm" +#include "code/landmarks.dm" #include "code/clothing/engineering_clothing.dm" #include "code/clothing/medical_clothing.dm" #include "code/clothing/science_clothing.dm" #include "code/clothing/security_clothing.dm" +#include "code/donor/job/1_tier_jobs.dm" +#include "code/donor/job/2_tier_jobs.dm" +#include "code/donor/job/3_tier_jobs.dm" +#include "code/donor/job/4_tier_jobs.dm" +#include "code/donor/job/5_tier_jobs.dm" +#include "code/donor/donor_jobs.dm" #include "code/job/engineering_jobs.dm" #include "code/job/medical_jobs.dm" #include "code/job/science_jobs.dm" #include "code/job/security_jobs.dm" +#include "code/job/service_jobs.dm" #include "code/objects/job_objects.dm" #include "code/objects/engineering_job_objects.dm" #include "code/objects/medical_job_objects.dm" diff --git a/modular_ss220/jobs/code/card_computer.dm b/modular_ss220/jobs/code/card_computer.dm index e9c9e834e77c..5f332299da0e 100644 --- a/modular_ss220/jobs/code/card_computer.dm +++ b/modular_ss220/jobs/code/card_computer.dm @@ -3,7 +3,12 @@ if(mode == IDCOMPUTER_SCREEN_TRANSFER) // JOB TRANSFER if(modify && scan && !target_dept) - data["card_skins"] |= format_card_skins(GLOB.card_skins_ss220) + var/list/list_skins = GLOB.card_skins_ss220 + (is_centcom() ? GLOB.card_skins_donor_ss220 : list()) + data["card_skins"] |= format_card_skins(list_skins) + data["jobs_security"] = GLOB.active_security_positions - (is_centcom() ? list() : GLOB.security_donor_jobs) + data["jobs_service"] = GLOB.service_positions - (is_centcom() ? list() : GLOB.service_donor_jobs) + data["jobs_supply"] = GLOB.supply_positions - (is_centcom() ? list() : GLOB.supply_donor_jobs) + data["jobs_assistant"] = GLOB.assistant_positions - (is_centcom() ? list() : GLOB.assistant_donor_jobs) return data @@ -14,8 +19,23 @@ if(!modify) return FALSE var/skin = params["skin_target"] - if(!skin || !(skin in GLOB.card_skins_ss220)) + var/list/list_skins = GLOB.card_skins_ss220 + (is_centcom() ? GLOB.card_skins_donor_ss220 : list()) + if(!skin || !(skin in list_skins)) return FALSE - modify.icon_state = skin//get_card_skins_ss220(skin) + modify.icon_state = skin return TRUE + +/obj/machinery/computer/card/format_job_slots(check_department, is_admin) + var/list/formatted = ..() + + // Убираем JOB'ки из консоли ГП, если она не ЦКшная. + for(var/i in formatted) + if(i["title"] in GLOB.jobs_excluded_from_selection) + formatted.Remove(list(i)) + if(is_centcom()) + continue + if(i["title"] in GLOB.all_donor_jobs) + formatted.Remove(list(i)) + + return formatted diff --git a/modular_ss220/jobs/code/card_id.dm b/modular_ss220/jobs/code/card_id.dm index f00685c26674..c9fab4da4333 100644 --- a/modular_ss220/jobs/code/card_id.dm +++ b/modular_ss220/jobs/code/card_id.dm @@ -1,7 +1,7 @@ /mob/living/carbon/human/sec_hud_set_ID() var/image/holder = hud_list[ID_HUD] holder.icon = 'icons/mob/hud/sechud.dmi' - if(wear_id && (wear_id.get_job_name() in GLOB.jobs_positions_ss220)) + if(wear_id && (wear_id.get_job_name() in GLOB.all_jobs_ss220)) holder.icon = 'modular_ss220/jobs/icons/hud.dmi' . = ..() @@ -9,7 +9,7 @@ var/assignmentName = get_ID_assignment(if_no_id = "Unknown") var/rankName = get_ID_rank(if_no_id = "Unknown") - var/list/titles = GLOB.jobs_positions_ss220 + var/list/titles = GLOB.all_jobs_ss220 if(assignmentName in titles) //Check if the job has a hud icon return assignmentName @@ -19,15 +19,25 @@ . = ..() GLOBAL_LIST_INIT(card_skins_ss220, list( - "intern", "student", "trainee", "cadet", + "intern", "student", "trainee", "cadet", // novice )) +GLOBAL_LIST_INIT(card_skins_donor_ss220, list( + "barber", "bath", "casino", "waiter", "acolyte", "deliverer", "wrestler", "painter", "musician", "actor", // 2 tier + "administrator", "touristtsf", "touristussp", "cliningmanajer", "apprentice", "guard", "migrant", "uncertain", // 3 tier + "adjutant", "butler", "maid", "representativetsf", "representativeussp", "dealer", // 4 tier + "vipcorporateguest", "banker", "securityclown", // 5 tier +)) + +/obj/item/card/id/syndicate/Initialize() + . = ..() + appearances |= GLOB.card_skins_ss220 + GLOB.card_skins_donor_ss220 + /obj/item/card/id/medical/intern name = "Intern ID" registered_name = "Intern" icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' icon_state = "intern" - item_state = "intern-id" rank = "Intern" /obj/item/card/id/research/student @@ -35,22 +45,182 @@ GLOBAL_LIST_INIT(card_skins_ss220, list( registered_name = "Student" icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' icon_state = "student" - item_state = "student-id" /obj/item/card/id/engineering/trainee name = "Trainee ID" registered_name = "Trainee" icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' icon_state = "trainee" - item_state = "trainee-id" /obj/item/card/id/security/cadet name = "Cadet ID" registered_name = "Cadet" icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' icon_state = "cadet" - item_state = "cadet-id" -/obj/item/card/id/syndicate/Initialize() - . = ..() - appearances |= GLOB.card_skins_ss220 +/obj/item/card/id/barber + name = "Barber ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "barber" + +/obj/item/card/id/bath + name = "Bath ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "bath" + +/obj/item/card/id/casino + name = "Casino ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_HYDROPONICS, ACCESS_BAR) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "casino" + +/obj/item/card/id/waiter + name = "Waiter ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "waiter" + +/obj/item/card/id/acolyte + name = "Acolyte ID" + access = list(ACCESS_CHAPEL_OFFICE, ACCESS_MAINT_TUNNELS) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "acolyte" + +/obj/item/card/id/courier + name = "Deliverer ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_MINT, ACCESS_MINERAL_STOREROOM) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "deliverer" + +/obj/item/card/id/wrestler + name = "Wrestler ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_RC_ANNOUNCE) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "wrestler" + +/obj/item/card/id/painter + name = "Painter ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "painter" + +/obj/item/card/id/musican + name = "Musician ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "musician" + +/obj/item/card/id/actor + name = "Actor ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "actor" + +/obj/item/card/id/administrator + name = "Administrator ID" + access = list(ACCESS_THEATRE, ACCESS_LIBRARY, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_MINERAL_STOREROOM, ACCESS_JANITOR) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "administrator" + +/obj/item/card/id/tourist_tsf + name = "Tourist TSF ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "touristtsf" + +/obj/item/card/id/tourist_ussp + name = "Tourist USSP ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "touristussp" + +/obj/item/card/id/cleaning_manager + name = "Clining Manager ID" + access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MEDICAL) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "cleaningmanager" + +/obj/item/card/id/apprentice + name = "Apprentice ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "apprentice" + +/obj/item/card/id/guard + name = "Guard ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LIBRARY) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "guard" + +/obj/item/card/id/migrant + name = "Migrant ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "migrant" + +/obj/item/card/id/uncertain + name = "Uncertain ID" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "uncertain" + +/obj/item/card/id/adjutant + name = "Adjutant ID" + access = list(ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_EVA, ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_RESEARCH, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "adjutant" + item_state = "silver-id" + +/obj/item/card/id/butler + name = "Butler ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_EVA, ACCESS_LAWYER) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "butler" + +/obj/item/card/id/maid + name = "Maid ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_EVA, ACCESS_LAWYER) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "maid" + +/obj/item/card/id/representative_tsf + name = "Representative TSF ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_EVA) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "representativetsf" + item_state = "silver-id" + +/obj/item/card/id/representative_ussp + name = "Representative USSP ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_EVA) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "representativeussp" + item_state = "silver-id" + +/obj/item/card/id/dealer + name = "Dealer ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_RC_ANNOUNCE, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_MINT, ACCESS_MINERAL_STOREROOM, ACCESS_CONSTRUCTION) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "dealer" + +/obj/item/card/id/vip_guest + name = "VIP Guest ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_EVA) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "vipcorporateguest" + item_state = "gold-id" + +/obj/item/card/id/banker + name = "Banker ID" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_EVA) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "banker" + item_state = "gold-id" + +/obj/item/card/id/seclown + name = "Security Clown ID" + access = list(ACCESS_CLOWN, ACCESS_THEATRE, ACCESS_MAINT_TUNNELS, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT) + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "securityclown" diff --git a/modular_ss220/jobs/code/clothing/security_clothing.dm b/modular_ss220/jobs/code/clothing/security_clothing.dm index a767485df6eb..aac6f3f2f341 100644 --- a/modular_ss220/jobs/code/clothing/security_clothing.dm +++ b/modular_ss220/jobs/code/clothing/security_clothing.dm @@ -26,3 +26,14 @@ icon_state = "sec_ass_f_s" item_color = "sec_ass_f" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + +/obj/item/clothing/under/rank/security/officer/clown + name = "security clown suit" + icon = 'modular_ss220/jobs/icons/clothing/uniforms.dmi' + icon_override = 'modular_ss220/jobs/icons/clothing/mob/uniform.dmi' + sprite_sheets = null + desc = "'HONK THE LAW!'" + icon_state = "security_clown_s" + item_color = "security_clown" + item_state = "clown" + diff --git a/modular_ss220/jobs/code/departaments.dm b/modular_ss220/jobs/code/departaments.dm index 1624d0353f92..af562c91864f 100644 --- a/modular_ss220/jobs/code/departaments.dm +++ b/modular_ss220/jobs/code/departaments.dm @@ -1,15 +1,46 @@ /datum/station_department/engineering/New() . = ..() - department_roles |= GLOB.engineering_positions_ss220 + get_all_engineering_alt_titles_ss220() + department_roles |= get_all_engineering_titles_ss220() /datum/station_department/medical/New() . = ..() - department_roles |= GLOB.medical_positions_ss220 + get_all_medical_alt_titles_ss220() + department_roles |= get_all_medical_titles_ss220() /datum/station_department/science/New() . = ..() - department_roles |= GLOB.science_positions_ss220 + get_all_science_alt_titles_ss220() + department_roles |= get_all_science_titles_ss220() /datum/station_department/security/New() . = ..() - department_roles |= GLOB.security_positions_ss220 + get_all_security_alt_titles_ss220() + department_roles |= get_all_security_titles_ss220() + +/datum/station_department/service/New() + . = ..() + department_roles |= get_all_service_titles_ss220() + +/datum/station_department/supply/New() + . = ..() + department_roles |= get_all_supply_titles_ss220() + +/datum/station_department/assistant/New() + . = ..() + department_roles |= get_all_assistant_titles_ss220() + +/datum/nttc_configuration/New() + . = ..() + var/list/job_radio_dict = list() + for(var/i in get_all_medical_titles_ss220()) + job_radio_dict.Add(list("[i]" = "medradio")) + for(var/i in get_all_security_titles_ss220()) + job_radio_dict.Add(list("[i]" = "secradio")) + for(var/i in get_all_engineering_titles_ss220()) + job_radio_dict.Add(list("[i]" = "engradio")) + for(var/i in get_all_science_titles_ss220()) + job_radio_dict.Add(list("[i]" = "scirradio")) + for(var/i in (get_all_service_titles_ss220() + get_all_supply_titles_ss220())) + job_radio_dict.Add(list("[i]" = "srvradio")) + for(var/i in get_all_assistant_titles_ss220()) + job_radio_dict.Add(list("[i]" = "radio")) + + all_jobs |= job_radio_dict + diff --git a/modular_ss220/jobs/code/donor/donor_jobs.dm b/modular_ss220/jobs/code/donor/donor_jobs.dm new file mode 100644 index 000000000000..ce423ac6cdae --- /dev/null +++ b/modular_ss220/jobs/code/donor/donor_jobs.dm @@ -0,0 +1,57 @@ +/datum/job/donor + title = "Donor" // он тут быть не должен. Но если педали вдруг выдадут, то пускай хотя бы так + flag = 0 + total_positions = -1 + spawn_positions = -1 + department_flag = JOBCAT_SUPPORT + job_department_flags = DEP_FLAG_SERVICE + supervisors = "the head of personnel" + department_head = list("Head of Personnel") + selection_color = "#fbd5ff" + access = list( ACCESS_MAINT_TUNNELS) + alt_titles = null + outfit = /datum/outfit/job/donor + hidden_from_job_prefs = TRUE + is_extra_job = TRUE + var/ru_title + var/donator_tier = 999 // I'm unreachable! + +/datum/outfit/job/donor + name = "Donor" + jobtype = /datum/job/donor + + uniform = /obj/item/clothing/under/color/random + shoes = /obj/item/clothing/shoes/black + pda = /obj/item/pda + id = /obj/item/card/id/assistant + + +// ==================================== +/datum/job/donor/proc/get_all_titles() + var/list/all_alt_titles = list() + if(alt_titles) + all_alt_titles.Add(title) + if(ru_title) + all_alt_titles.Add(ru_title) + all_alt_titles |= alt_titles + return all_alt_titles + +// Проверка после начала раунда +/mob/new_player/IsJobAvailable(rank) + if(rank in GLOB.jobs_excluded_from_selection) + return FALSE + if(rank in GLOB.all_donor_jobs) + var/datum/job/job = SSjobs.GetJob(rank) + if(!job) + return FALSE + if(!job.is_donor_allowed(client)) + return FALSE + . = ..() + +/datum/job/proc/is_donor_allowed(client/C) + return TRUE + +/datum/job/donor/is_donor_allowed(client/C) + if(!C) + return FALSE // No client + return C.is_donor_allowed(donator_tier) diff --git a/modular_ss220/jobs/code/donor/job/1_tier_jobs.dm b/modular_ss220/jobs/code/donor/job/1_tier_jobs.dm new file mode 100644 index 000000000000..58484cab5d6d --- /dev/null +++ b/modular_ss220/jobs/code/donor/job/1_tier_jobs.dm @@ -0,0 +1,55 @@ +/datum/job/donor/prisoner + title = "Prisoner" + department_flag = JOBCAT_SUPPORT + flag = JOB_PRISON + total_positions = 5 + spawn_positions = 3 + ru_title = "Заключенный" + alt_titles = list("Заключенный", "Уголовник", "Законопреступник", "Пермазаключенный", "Нелегальный Мигрант", "Нелегальный Работник", + "Пожизненно-Заключенный", "Политический Заключенный", "Заключенный Преступник", "Заключенный Бандит", "Заключенный Мошенник", + "Заключенный Вор", "Заключенный Убийца", "Заключенный Наркоторговец", "Заключенный Рецидивист", "Заключенный Саботер", + "Заключенный Мучитель", "Заключенный Жулик", "Заключенный Негодяй", "Заключенный Хулиган", "Заключенный Враг-NT", + "Заключенный Мафиози", "Заключенный Коррупционер", "Заключенный Психопат", "Заключенный Фальшивокредитчик", + "Заключенный Работорговец", + ) + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ЗАКЛЮЧЕННЫЙ. Вы не являетесь антагонистом на сервере и данная роль не позволяет вам нарушать правила сервера. \ + Вы находитесь на временном содержании в бриге станции принадлежащей Нанотрейзен за преступление против корпорации и теперь отбываете свой срок. \ + Вы заинтересованы в том чтобы попасть на волю за хорошее поведение, но если выдастся случай для побега - вам никто не запретит этим воспользоваться, верно? \ + Избегайте любых действий которые могут привести к вашей гибели. Вы не служите Синдикату и не заинтересованы помогать им, если не являетесь антагонистом, но если они помогут вам - то почему бы и да." + supervisors = "смотрителем" + department_head = list("Warden") + selection_color = "#bb7a41" + hidden_from_job_prefs = FALSE + donator_tier = 1 + outfit = /datum/outfit/job/donor/prisoner + +/datum/outfit/job/donor/prisoner + name = "Prisoner" + jobtype = /datum/job/donor/prisoner + + uniform = /obj/item/clothing/under/color/orange/prison + shoes = /obj/item/clothing/shoes/orange + id = /obj/item/card/id/prisoner + pda = null + box = null + backpack = null + satchel = null + dufflebag = null + +/datum/outfit/job/donor/prisoner/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(prob(20)) + uniform = /obj/item/clothing/under/misc/pj/red + if(prob(30)) + uniform = /obj/item/clothing/under/misc/pj/blue + +/datum/job/donor/prisoner/after_spawn(mob/living/carbon/human/H, joined_late = FALSE) + if(!joined_late || !H) + return ..() + + for(var/obj/effect/landmark/spawner/prisoner/landmark_loc in GLOB.landmarks_list) + H.forceMove(get_turf(landmark_loc)) + break + + . = ..() diff --git a/modular_ss220/jobs/code/donor/job/2_tier_jobs.dm b/modular_ss220/jobs/code/donor/job/2_tier_jobs.dm new file mode 100644 index 000000000000..ae1e749a5744 --- /dev/null +++ b/modular_ss220/jobs/code/donor/job/2_tier_jobs.dm @@ -0,0 +1,445 @@ +/datum/job/donor/barber + title = "Barber" + department_flag = JOBCAT_SUPPORT + flag = JOB_BARBER + total_positions = 1 + spawn_positions = 1 + ru_title = "Парикмахер" + alt_titles = list("Парикмахер", "Стилист", "Хозяин Студии Красоты", "Визажист", "Куафёр", "Цирюльник", "Брадобрей") + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/barber + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ПАРИКМАХЕР. Данная роль нацелена для наведения красоты на головах людей через добровольные начинания." + +/datum/outfit/job/donor/barber + name = "Barber" + jobtype = /datum/job/donor/barber + + uniform = /obj/item/clothing/under/rank/civilian/barber + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/boaterhat + l_ear = /obj/item/radio/headset/headset_service + id = /obj/item/card/id/barber + backpack_contents = list( + /obj/item/storage/box/barber = 1, + ) + + +/datum/job/donor/bath + title = "Bath" + department_flag = JOBCAT_SUPPORT + flag = JOB_BATH + total_positions = 1 + spawn_positions = 1 + ru_title = "Банщик" + alt_titles = list("Банщик", "Хозяин Бани", "Парильщик", "Пармейстер") + relate_job = "Bath" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/bath + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы БАНЩИК. Данная роль нацелена для создания душной атмосферы в замкнутых помещениях, РП-разговоров, встреч." + +/datum/outfit/job/donor/bath + name = "Bath" + jobtype = /datum/job/donor/bath + + uniform = /obj/item/clothing/under/costume/pirate_rags + suit = /obj/item/clothing/suit/mantle + shoes = /obj/item/clothing/shoes/sandal + glasses = /obj/item/clothing/glasses/goggles + l_ear = /obj/item/radio/headset/headset_service + id = /obj/item/card/id/bath + backpack_contents = list( + /obj/item/clothing/under/pants/white = 5, + /obj/item/clothing/head/beanie = 1, + /obj/item/clothing/head/beanie/black = 1, + /obj/item/clothing/head/beanie/red = 1, + /obj/item/clothing/head/beanie/green = 1, + /obj/item/clothing/head/beanie/darkblue = 1, + /obj/item/clothing/head/beanie/purple = 1, + /obj/item/clothing/head/beanie/yellow = 1, + /obj/item/clothing/head/beanie/cyan = 1, + /obj/item/clothing/head/beanie/orange = 5, + ) + + +/datum/job/donor/casino + title = "Casino" + department_flag = JOBCAT_SUPPORT + flag = JOB_CASINO + total_positions = 3 + spawn_positions = 3 + ru_title = "Крупье" + relate_job = "Bar" + alt_titles = list("Крупье", "Дилер", "Слот-Ассистент", "Пит-Босс", ) + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_HYDROPONICS, ACCESS_BAR) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/casino + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы КРУПЬЕ. Данная роль нацелена на отыгрыш работника казино. Раздача карт, азарт - всё это ваша стезя. Организуйте свое лучшее казино." + +/datum/outfit/job/donor/casino + name = "Casino" + jobtype = /datum/job/donor/casino + + uniform = /obj/item/clothing/under/rank/procedure/iaa/purple + suit = /obj/item/clothing/suit/storage/iaa/purplejacket + shoes = /obj/item/clothing/shoes/laceup + belt = /obj/item/storage/belt/fannypack/purple + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/bar + id = /obj/item/card/id/casino + backpack_contents = list( + /obj/item/storage/bag/money = 1, + /obj/item/coin/twoheaded = 1, + /obj/item/coin/gold = 2, + /obj/item/coin/silver = 4, + /obj/item/coin/iron = 8, + /obj/item/eftpos = 1, + ) + +/datum/job/donor/waiter + title = "Waiter" + department_flag = JOBCAT_SUPPORT + flag = JOB_WAITER + total_positions = 2 + spawn_positions = 2 + ru_title = "Официант" + relate_job = "Bar" + alt_titles = list("Официант", "Хост Сервиса") + access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/waiter + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ОФИЦИАНТ. Данная роль нацелена на принеси-подай-иди-не мешай. Обеспечьте атмосферу настоящего ресторана." + +/datum/outfit/job/donor/waiter + name = "Waiter" + jobtype = /datum/job/donor/waiter + + uniform = /obj/item/clothing/under/misc/waiter + suit = /obj/item/clothing/suit/storage/iaa/blackjacket + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/fez + belt = /obj/item/storage/belt/fannypack/blue + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/chef + id = /obj/item/card/id/waiter + backpack_contents = list( + /obj/item/eftpos = 1, + /obj/item/clipboard = 1, + /obj/item/reagent_containers/glass/rag = 1, + ) + + +/datum/job/donor/acolyte + title = "Acolyte" + department_flag = JOBCAT_SUPPORT + flag = JOB_ACOLYTE + total_positions = 5 + spawn_positions = 5 + ru_title = "Послушник" + alt_titles = list("Послушник", "Монах", "Приспешник", "Последователь", "Обрядчик") + relate_job = "Chaplain" + access = list(ACCESS_CHAPEL_OFFICE, ACCESS_MAINT_TUNNELS) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/acolyte + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ПОСЛУШНИК. Данная роль нацелена на богослужение и помощь священнику. Несите слово священника, он ваш пастырь. \ + Вы не обладаете такими же способностями как священник, вы не можете освящать воду, но вы можете помочь тому, кто наделен этим даром!" + +/datum/outfit/job/donor/acolyte + name = "Acolyte" + jobtype = /datum/job/donor/acolyte + + uniform = /obj/item/clothing/under/suit/victsuit + suit = /obj/item/clothing/suit/hooded/monk + shoes = /obj/item/clothing/shoes/sandal + r_hand = /obj/item/storage/bag/garment/chaplain + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/chaplain + id = /obj/item/card/id/acolyte + +/* +/datum/job/donor/deliverer + title = "Deliverer" + department_flag = JOBCAT_SUPPORT + flag = JOB_DELIVERER + total_positions = 1 + spawn_positions = 1 + ru_title = "Доставщик" + alt_titles = list("Доставщик", "Почтальон", "Переносчик") + relate_job = "Cargo Technician" + supervisors = "главой персонала и квартирмейстером" + department_head = list("Head of Personnel", "Quartermaster") + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_MINT, ACCESS_MINERAL_STOREROOM) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/deliverer + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ДОСТАВЩИК. Данная роль нацелена на доставку товаров от одного отдела до другого. Ваше призвание - доставлять ресурсы от отдела до отдела или еду от самого ШЕФа." +*/ +/datum/outfit/job/donor/deliverer + name = "Deliverer" + //jobtype = /datum/job/donor/deliverer + + uniform = /obj/item/clothing/under/misc/overalls + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/soft + r_hand = /obj/item/mail_scanner + belt = /obj/item/storage/belt/fannypack/orange + r_pocket = /obj/item/storage/bag/mail + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_cargo + pda = /obj/item/pda/cargo + id = /obj/item/card/id/courier + backpack_contents = list( + /obj/item/eftpos = 1, + /obj/item/clipboard = 1, + /obj/item/reagent_containers/spray/pepper = 1, + /obj/item/reagent_containers/spray/pestspray = 1, + /obj/item/reagent_containers/spray/plantbgone = 1, + ) + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel_eng + dufflebag = /obj/item/storage/backpack/duffel/engineering + + +/datum/outfit/job/donor/deliverer/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Почтальон") + uniform = /obj/item/clothing/under/misc/mailman + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/mailman + if("Доставщик") + uniform = /obj/item/clothing/under/rank/cargo/deliveryboy + head = /obj/item/clothing/head/soft/deliverysoft + + +/datum/job/donor/wrestler + title = "Wrestler" + department_flag = JOBCAT_SUPPORT + flag = JOB_BOXER + total_positions = 4 + spawn_positions = 4 + ru_title = "Борец" + alt_titles = list("Борец", "Рефери", "Тренер", "Боксёр", "Спортсмен") + relate_job = "Art" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_RC_ANNOUNCE) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/wrestler + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы БОРЕЦ. Данная роль нацелена на дружественные соревнования. Найдите этот дух соревнования среди экипажа и обеспечьте зрелища!" + +/datum/outfit/job/donor/wrestler + name = "Wrestler" + jobtype = /datum/job/donor/wrestler + + uniform = /obj/item/clothing/under/pants/classicjeans + suit = /obj/item/clothing/suit/hooded/hoodie/blue + shoes = /obj/item/clothing/shoes/sandal + belt = /obj/item/storage/belt/fannypack/blue + gloves = /obj/item/clothing/gloves/fingerless + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/librarian + id = /obj/item/card/id/wrestler + backpack_contents = list( + /obj/item/clothing/gloves/boxing = 1, + /obj/item/clothing/gloves/boxing/green = 1, + /obj/item/clothing/gloves/boxing/blue = 1, + /obj/item/clothing/gloves/boxing/yellow = 1, + /obj/item/clothing/mask/luchador = 1, + /obj/item/clothing/mask/luchador/tecnicos = 1, + /obj/item/clothing/mask/luchador/rudos = 1, + /obj/item/clothing/under/pants/shorts/red = 1, + /obj/item/clothing/under/pants/shorts/green = 1, + /obj/item/clothing/under/pants/shorts/blue = 1, + /obj/item/clothing/under/pants/shorts/black = 1, + /obj/item/clothing/under/pants/shorts/grey = 1, + /obj/item/storage/belt/fannypack/blue = 1, + /obj/item/storage/belt/fannypack/red = 1, + ) + +/* +/datum/job/donor/painter + title = "Painter" + department_flag = JOBCAT_SUPPORT + flag = JOB_PAINTER + total_positions = 1 + spawn_positions = 1 + ru_title = "Художник" + alt_titles = list("Художник", "Творец", "Искусствовед", "Пейзажист", "Фотореалист", "Перфоманс-Артист") + relate_job = "Art" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/painter + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ХУДОЖНИК. Данная роль нацелена на демонстрацию вашей тонкой натуры. Найдите себе красильщик полов, создайте искусство! \ + Возможно вы захотите наложить инсталляцию посреди мостика?" +*/ + +/datum/outfit/job/donor/painter + name = "Painter" + //jobtype = /datum/job/donor/painter + + uniform = /obj/item/clothing/under/misc/sl_suit + suit = /obj/item/clothing/suit/apron + shoes = /obj/item/clothing/shoes/white + head = /obj/item/clothing/head/beret/white + glasses = /obj/item/clothing/glasses/regular/hipster + l_ear = /obj/item/radio/headset/headset_service + id = /obj/item/card/id/painter + backpack_contents = list( + /obj/item/stack/cable_coil/random = 1, + /obj/item/camera = 1, + /obj/item/camera_film = 2, + /obj/item/storage/photo_album = 1, + /obj/item/hand_labeler = 1, + /obj/item/stack/tape_roll = 1, + /obj/item/paper = 4, + /obj/item/storage/fancy/crayons = 1, + /obj/item/pen/fancy = 1, + /obj/item/toy/crayon/rainbow = 1, + /obj/item/painter = 1, + ) + +/datum/job/donor/musican + title = "Musician" + department_flag = JOBCAT_SUPPORT + flag = JOB_MUSICIAN + total_positions = 1 + spawn_positions = 1 + ru_title = "Музыкант" + alt_titles = list("Музыкант", "Маэстро", "Гитарист", "Барабанщик", "Пианист", "Волынщик", "Скрипач", "Скоморох", "Саксофонист", "Солист", "Певец", "Гастролер") + relate_job = "Art" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/musican + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы МУЗЫКАНТ. Данная роль нацелена на создание музыкальной атмосферы. Приласкайте уши экипажа." + +/datum/outfit/job/donor/musican + name = "Musician" + jobtype = /datum/job/donor/musican + + uniform = /obj/item/clothing/under/costume/singerb + shoes = /obj/item/clothing/shoes/singerb + gloves = /obj/item/clothing/gloves/color/white + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/clothing/ears/headphones + glasses = /obj/item/clothing/glasses/regular/hipster + id = /obj/item/card/id/musican + backpack_contents = list( + /obj/item/flashlight = 1, + /obj/item/instrument/violin = 1, + /obj/item/instrument/piano_synth = 1, + /obj/item/instrument/guitar = 1, + /obj/item/instrument/eguitar = 1, + /obj/item/instrument/accordion = 1, + /obj/item/instrument/saxophone = 1, + /obj/item/instrument/trombone = 1, + /obj/item/instrument/harmonica = 1 + ) + + +/datum/job/donor/actor + title = "Actor" + department_flag = JOBCAT_MEDSCI + flag = JOB_ACTOR + total_positions = 5 + spawn_positions = 5 + ru_title = "Актер" + alt_titles = list("Актер", "Артист", "Стендапер", "Комедиант", "Эстрадный Артист", "Художник", "Творец", "Искусствовед", "Пейзажист", "Фотореалист", "Перфоманс-Артист") + relate_job = "Art" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) + selection_color = "#558758" + hidden_from_job_prefs = FALSE + donator_tier = 2 + outfit = /datum/outfit/job/donor/actor + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы АКТЕР. Данная роль нацелена на ваше актерское мастерство. Сами вы им стали или ваши родители вас на это натолкнули, \ + но вы связаны со сценой. Устройте шоу, пригласите гостей! Попробуйте устроить совместное представление с другими актерами, клоуном и мимом." + +/datum/outfit/job/donor/actor + name = "Actor" + jobtype = /datum/job/donor/actor + + uniform = /obj/item/clothing/under/rank/procedure/lawyer/red + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/bowlerhat + gloves = /obj/item/clothing/gloves/color/white + glasses = /obj/item/clothing/glasses/regular + l_ear = /obj/item/radio/headset/headset_service + id = /obj/item/card/id/actor + backpack_contents = list( + /obj/item/clothing/under/rank/procedure/iaa/purple = 1, + /obj/item/clothing/suit/storage/iaa/purplejacket = 1, + /obj/item/clothing/under/suit/really_black = 1, + /obj/item/clothing/under/costume/cuban_suit = 1, + /obj/item/clothing/head/cuban_hat = 1, + ) + +/datum/outfit/job/donor/actor/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/procedure/lawyer/red/skirt + + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Артист") + uniform = /obj/item/clothing/under/suit/victsuit/red + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/dress/victdress/red + suit = /obj/item/clothing/suit/victcoat/red + if("Комедиант") + uniform = /obj/item/clothing/under/costume/jester + head = /obj/item/clothing/head/jester + if("Эстрадный Артист") + uniform = /obj/item/clothing/under/suit/victsuit/redblk + suit = /obj/item/clothing/suit/draculacoat + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/dress/redeveninggown + + if("Художник", "Творец", "Искусствовед", "Пейзажист", "Фотореалист", "Перфоманс-Артист") + uniform = /obj/item/clothing/under/misc/sl_suit + suit = /obj/item/clothing/suit/apron + shoes = /obj/item/clothing/shoes/white + head = /obj/item/clothing/head/beret/white + glasses = /obj/item/clothing/glasses/regular/hipster + l_ear = /obj/item/radio/headset/headset_service + id = /obj/item/card/id/painter + backpack_contents = list( + /obj/item/stack/cable_coil/random = 1, + /obj/item/camera = 1, + /obj/item/camera_film = 2, + /obj/item/storage/photo_album = 1, + /obj/item/hand_labeler = 1, + /obj/item/stack/tape_roll = 1, + /obj/item/paper = 4, + /obj/item/storage/fancy/crayons = 1, + /obj/item/pen/fancy = 1, + /obj/item/toy/crayon/rainbow = 1, + /obj/item/painter = 1, + ) diff --git a/modular_ss220/jobs/code/donor/job/3_tier_jobs.dm b/modular_ss220/jobs/code/donor/job/3_tier_jobs.dm new file mode 100644 index 000000000000..2fc277bb7c8b --- /dev/null +++ b/modular_ss220/jobs/code/donor/job/3_tier_jobs.dm @@ -0,0 +1,352 @@ +/datum/job/donor/administrator + title = "Administrator" + department_flag = JOBCAT_MEDSCI + flag = JOB_ADMINISTRATOR + total_positions = 1 + spawn_positions = 1 + ru_title = "Сервис-Администратор" + alt_titles = list("Сервис-Администратор", "Сервис-Управитель", "Помпадур", "Сервис-Менеджер") + relate_job = "Bar" + access = list(ACCESS_THEATRE, ACCESS_LIBRARY, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_MINERAL_STOREROOM, ACCESS_JANITOR) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/administrator + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы АДМИНИСТРАТОР. Данная роль нацелена для налаживания работы в Отделе Обслуживания. Наладьте производство, \ + помогите главе персонала пока он занимается бумагами, убедитесь что каждый работник выполняет свою работу и делает это КАЧЕСТВЕННО! \ + А если всё замечательно, значит устройте новое развлечение или событие для экипажа. Довольный экипаж - работоспособный экипаж. \ + \nВы не являетесь заменой главы персонала и подчиняетесь ему напрямую. Вы не являетесь главой сервисного отдела. \ + Вы помощник, ассистент, консультант, наблюдатель, организатор." + +/datum/outfit/job/donor/administrator + name = "Administrator" + jobtype = /datum/job/donor/administrator + + uniform = /obj/item/clothing/under/rank/procedure/iaa + suit = /obj/item/clothing/suit/storage/iaa/blackjacket + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/fez + gloves = /obj/item/clothing/gloves/color/white + belt = /obj/item/storage/belt/fannypack/black + glasses = /obj/item/clothing/glasses/regular + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/librarian + id = /obj/item/card/id/administrator + backpack_contents = list( + /obj/item/clothing/under/rank/procedure/lawyer/black = 1, + /obj/item/clothing/under/misc/waiter = 1, + /obj/item/eftpos = 1, + /obj/item/clipboard = 1, + /obj/item/reagent_containers/glass/rag = 1, + ) + + +/datum/job/donor/tourist_tsf + title = "Tourist TSF" + department_flag = JOBCAT_MEDSCI + flag = JOB_TOURIST_TSF + ru_title = "Турист ТСФ" + alt_titles = list("Турист ТСФ", "Посетитель ТСФ") + relate_job = "Assistant" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/tourist_tsf + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ТУРИСТ ТСФ. Вы прибыли сюда для отдыха и возможно для подработок. На вас по прежнему действует КЗ НТ, не смотря на то \ + что вы являетесь гражданином ТСФ. ТСФ и СССП недоброжелательно относятся друг к другу, но это по прежнему не дает нарушать правила сервера. \ + " + +/datum/outfit/job/donor/tourist_tsf + name = "Tourist TSF" + jobtype = /datum/job/donor/tourist_tsf + + uniform = /obj/item/clothing/under/solgov + suit = /obj/item/clothing/suit/hooded/hoodie/blue + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/soft/solgov/marines + belt = /obj/item/storage/belt/fannypack/black + gloves = /obj/item/clothing/gloves/fingerless + id = /obj/item/card/id/tourist_tsf + backpack_contents = list( + /obj/item/clothing/under/pants/shorts/blue = 1, + ) + +/datum/outfit/job/donor/tourist_tsf/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.add_language("Tradeband") + + +/datum/job/donor/tourist_ussp + title = "Tourist USSP" + department_flag = JOBCAT_MEDSCI + flag = JOB_TOURIST_USSP + ru_title = "Турист СССП" + alt_titles = list("Турист СССП", "Посетитель СССП") + relate_job = "Assistant" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/tourist_ussp + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ТУРИСТ СССП. Вы прибыли сюда для отдыха и возможно для подработок. На вас по прежнему действует КЗ НТ, не смотря на то \ + что вы являетесь гражданином СССП. ТСФ и СССП недоброжелательно относятся друг к другу, но это по прежнему не дает нарушать правила сервера. \ + " + + +/datum/outfit/job/donor/tourist_ussp + name = "Tourist USSP" + jobtype = /datum/job/donor/tourist_ussp + + uniform = /obj/item/clothing/under/new_soviet + suit = /obj/item/clothing/suit/sovietcoat + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/sovietsidecap + belt = /obj/item/storage/belt/fannypack/red + gloves = /obj/item/clothing/gloves/fingerless + glasses = /obj/item/clothing/glasses/sunglasses/big + id = /obj/item/card/id/tourist_ussp + backpack_contents = list( + /obj/item/clothing/under/pants/shorts/red = 1, + /obj/item/clothing/head/ushanka = 1, + ) + +/datum/outfit/job/donor/tourist_ussp/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.add_language("Neo-Russkiya") + + +/datum/job/donor/cleaning_manager + title = "Cleaning Manager" + department_flag = JOBCAT_MEDSCI + flag = JOB_MANAGER_JANITOR + total_positions = 2 + spawn_positions = 2 + ru_title = "Менеджер по Клинингу" + alt_titles = list("Менеджер по Клинингу", "Ловец Крыс", "Уборщик I-разряда", "Уборщик II-разряда", "Уборщик III-разряда", "Уборщик IV-разряда", "Уборщик V-разряда", + "Подмастерье", "Ассистент-Механик", "Ассистент I-го разряда", "Ассистент II-го разряда", "Ассистент III-го разряда", "Ассистент IV-го разряда", "Ассистент V-го разряда") + relate_job = "Janitor" + access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/cleaning_manager + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы Менеджер по Клинингу. Вы уборщик этой станции и должны следить за чистотой на ней. Вы давно на этой работе и снабжены лучшим снаряжением для идеальной работы. \ + Вы тот кто отделяет станцию от хаоса и обеспечивает порядок. Вы - настоящая действующая сила на этой станции." + +/datum/outfit/job/donor/cleaning_manager + name = "Cleaning Manager" + jobtype = /datum/job/donor/cleaning_manager + + uniform = /obj/item/clothing/under/rank/civilian/janitor + suit = /obj/item/clothing/suit/apron/overalls + shoes = /obj/item/clothing/shoes/galoshes/dry + gloves = /obj/item/clothing/gloves/color/purple + mask = /obj/item/clothing/mask/bandana/purple + head = /obj/item/clothing/head/soft/purple + belt = /obj/item/storage/belt/janitor/full + r_pocket = /obj/item/door_remote/janikeyring + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/janitor + id = /obj/item/card/id/cleaning_manager + backpack_contents = list( + /obj/item/clothing/head/beret/purple_normal = 1, + /obj/item/clothing/suit/storage/iaa/purplejacket = 1, + /obj/item/clipboard = 1, + ) + + +/datum/outfit/job/donor/cleaning_manager/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Подмастерье", "Ассистент-Механик", "Ассистент I-го разряда", "Ассистент II-го разряда", "Ассистент III-го разряда", "Ассистент IV-го разряда", "Ассистент V-го разряда") + uniform = /obj/item/clothing/under/color/grey + suit = /obj/item/clothing/suit/apron/overalls + back = /obj/item/storage/backpack + shoes = /obj/item/clothing/shoes/workboots + mask = /obj/item/clothing/mask/gas + head = /obj/item/clothing/head/soft/grey + belt = /obj/item/storage/belt/fannypack/white + gloves = /obj/item/clothing/gloves/color/grey + l_hand = /obj/item/storage/toolbox/mechanical + r_hand = /obj/item/flag/grey + id = /obj/item/card/id/apprentice + backpack_contents = list( + /obj/item/clothing/head/welding = 1, + /obj/item/flashlight = 1, + /obj/item/clothing/under/pants/shorts/grey = 1, + /obj/item/clothing/under/misc/assistantformal = 1, + ) +/* +/datum/job/donor/apprentice + title = "Apprentice" + department_flag = JOBCAT_MEDSCI + flag = JOB_APPRENTICE + total_positions = 3 + spawn_positions = 3 + ru_title = "Подмастерье" + alt_titles = list("Подмастерье", "Ассистент-Механик", "Ассистент I-го разряда", "Ассистент II-го разряда", "Ассистент III-го разряда", "Ассистент IV-го разряда", "Ассистент V-го разряда") + relate_job = "Assistant" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/apprentice + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ПОДМАСТЕРЬЕ. Вы ассистент с полномочиями для работы на станции. Построить свою мастерскую или заняться другим полезным для станции и вас делом - ваша стезя. \ + Но серые комбинезоны и тулбоксы так и манят вас..." + +*/ +/datum/outfit/job/donor/apprentice + name = "Apprentice" + //jobtype = /datum/job/donor/apprentice + + uniform = /obj/item/clothing/under/color/grey + suit = /obj/item/clothing/suit/apron/overalls + back = /obj/item/storage/backpack + shoes = /obj/item/clothing/shoes/workboots + mask = /obj/item/clothing/mask/gas + head = /obj/item/clothing/head/soft/grey + belt = /obj/item/storage/belt/fannypack/white + gloves = /obj/item/clothing/gloves/color/grey + l_hand = /obj/item/storage/toolbox/mechanical + r_hand = /obj/item/flag/grey + id = /obj/item/card/id/apprentice + backpack_contents = list( + /obj/item/clothing/head/welding = 1, + /obj/item/flashlight = 1, + /obj/item/clothing/under/pants/shorts/grey = 1, + /obj/item/clothing/under/misc/assistantformal = 1, + ) + +/datum/job/donor/guard + title = "Guard" + department_flag = JOBCAT_MEDSCI + flag = JOB_GUARD + total_positions = 1 + spawn_positions = 1 + ru_title = "Охранник" + alt_titles = list("Охранник", "Сторож Сервиса", "Охранник Сервиса", "Вышибала Сервиса") + relate_job = "Bar" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LIBRARY) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/guard + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ОХРАННИК. Данная роль нацелена на обеспечение порядка в баре и на кухне. Вы то что отдаляет кухню от хаоса и пьяных ассистентов. \ + Вы уполномочены вышвыривать из бара каждого, кто нарушает порядок. \ + \nВы НЕ являетесь службой безопасности, данная роль не дает вам полномочия охотиться за антагонистами." + +/datum/outfit/job/donor/guard + name = "Guard" + jobtype = /datum/job/donor/guard + + uniform = /obj/item/clothing/under/rank/civilian/bartender + suit = /obj/item/clothing/suit/armor/vest/old // с замедлением + belt = /obj/item/melee/classic_baton + shoes = /obj/item/clothing/shoes/jackboots/noisy + head = /obj/item/clothing/head/bowlerhat + glasses = /obj/item/clothing/glasses/sunglasses/big + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/bar + id = /obj/item/card/id/guard + backpack_contents = list( + /obj/item/clothing/suit/jacket/leather = 1, + /obj/item/reagent_containers/spray/pepper = 1, + ) + + +/datum/job/donor/migrant + title = "Migrant" + department_flag = JOBCAT_MEDSCI + flag = JOB_MIGRANT + ru_title = "Мигрант" + alt_titles = list("Мигрант") + relate_job = "Assistant" + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/migrant + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы МИГРАНТ. Сами вы прибыли на эту станцию или так вынудили обстоятельства, но вы теперь тут. \ + Присмотритесь к этой корпорации. Возможно здесь вы захотите жить и работать?" + +/datum/outfit/job/donor/migrant + name = "Migrant" + jobtype = /datum/job/donor/migrant + + uniform = /obj/item/clothing/under/costume/pirate_rags + suit = /obj/item/clothing/suit/poncho + shoes = /obj/item/clothing/shoes/sandal + head = /obj/item/clothing/head/sombrero + mask = /obj/item/clothing/mask/fakemoustache + belt = /obj/item/storage/belt/fannypack/orange + id = /obj/item/card/id/migrant + backpack_contents = list( + /obj/item/reagent_containers/drinks/bottle/tequila = 1, + /obj/item/food/snacks/taco = 6, + /obj/item/food/snacks/nachos = 3, + /obj/item/food/snacks/cheesenachos = 3, + /obj/item/food/snacks/cubannachos = 3, + /obj/item/clothing/suit/poncho/red = 1, + /obj/item/clothing/suit/poncho/green = 1, + ) + + +/datum/job/donor/uncertain + title = "Uncertain" + department_flag = JOBCAT_MEDSCI + flag = JOB_UNCERTAIN + ru_title = "Безработный" + alt_titles = list("Безработный", "Безработный Ассистент", "Свободный Ассистент", "Отрабатыващий Ассистент", "Ассистент Технических Тоннелей") + access = list(ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION) + selection_color = "#63979a" + hidden_from_job_prefs = FALSE + donator_tier = 3 + outfit = /datum/outfit/job/donor/uncertain + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы БЕЗРАБОТНЫЙ. Данная роль нацелена на бездумное брождение по техническим тоннелям. Вас когда-то оставили без работы, \ + возможно эвакуационный шаттл улетел без вас, возможно технологии заменили вашу работу, причины могут быть разные. \ + Но суть всего этого одна - вы были брошены и занимаетесь собственным выживанием." + +/datum/outfit/job/donor/uncertain + name = "Uncertain" + jobtype = /datum/job/donor/uncertain + + uniform = /obj/item/clothing/under/costume/kilt + suit = /obj/item/clothing/suit/unathi/mantle + shoes = /obj/item/clothing/shoes/footwraps + head = /obj/item/clothing/head/beanie/yellow + glasses = /obj/item/clothing/glasses/eyepatch + belt = /obj/item/storage/belt/fannypack/black + mask = /obj/item/clothing/mask/cigarette/pipe/cobpipe + pda = /obj/item/pda/librarian + id = /obj/item/card/id/uncertain + backpack_contents = list( + /obj/item/reagent_containers/drinks/bottle/vodka = 1, + /obj/item/storage/fancy/cigarettes/cigpack_random = 2, + /obj/item/food/snacks/doshik = 3, + /obj/item/food/snacks/doshik_spicy = 3, + /obj/item/clothing/suit/mantle/old = 1, + /obj/item/clothing/head/flatcap = 1, + /obj/item/clothing/suit/browntrenchcoat = 1, + /obj/item/clothing/accessory/horrible = 1, + /obj/item/clothing/under/costume/pirate_rags = 1, + /obj/item/clothing/head/cowboyhat = 1, + /obj/item/clothing/shoes/sandal = 1, + ) + + backpack = /obj/item/storage/backpack/explorer + satchel = /obj/item/storage/backpack/satchel/explorer + dufflebag = /obj/item/storage/backpack/duffel diff --git a/modular_ss220/jobs/code/donor/job/4_tier_jobs.dm b/modular_ss220/jobs/code/donor/job/4_tier_jobs.dm new file mode 100644 index 000000000000..0dd0ee8cdab1 --- /dev/null +++ b/modular_ss220/jobs/code/donor/job/4_tier_jobs.dm @@ -0,0 +1,346 @@ +/datum/job/donor/adjutant + title = "Adjutant" + department_flag = JOBCAT_MEDSCI + flag = JOB_ADJUTANT + total_positions = 3 + spawn_positions = 3 + ru_title = "Адъютант" + alt_titles = list("Адъютант", "Butler", "Дворецкий", "Maid", "Горничная") + relate_job = "Internal Affairs Agent" + supervisors = "главой персонала и капитаном" + department_head = list("Head of Personnel", "Captain") + access = list(ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_EVA, ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_RESEARCH, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING) + selection_color = "#717097" + hidden_from_job_prefs = FALSE + donator_tier = 4 + outfit = /datum/outfit/job/donor/adjutant + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы Адъютант. Данная роль нацелена на помощь главам в соблюдении их СРП и заполнении бумаг. \ + Вы тот, кто поможет капитану нужным советом или своевременно принесет ему чашечку кофе, чтобы он \ + легче перенес работу. Вы тот, кто следит за ментальным здоровьем глав и помощи в исполнении их обязанностей. \ + \nВы не являетесь АВД или НТР'ом и можете не исполнять их обязанности. Но вы можете работать сообща с Юридическим Отделом." + +/datum/outfit/job/donor/adjutant + name = "Adjutant" + jobtype = /datum/job/donor/adjutant + + uniform = /obj/item/clothing/under/rank/procedure/iaa/blue + suit = /obj/item/clothing/suit/storage/iaa/bluejacket + shoes = /obj/item/clothing/shoes/laceup + l_ear = /obj/item/radio/headset/headset_iaa/alt + r_ear = /obj/item/radio/headset/headset_com + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + gloves = /obj/item/clothing/gloves/color/white + l_pocket = /obj/item/laser_pointer + r_pocket = /obj/item/clothing/accessory/lawyers_badge + l_hand = /obj/item/storage/briefcase + pda = /obj/item/pda/lawyer + id = /obj/item/card/id/adjutant + backpack_contents = list( + /obj/item/folder/blue = 1, + /obj/item/camera = 1, + /obj/item/taperecorder = 1, + /obj/item/storage/box/tapes = 1, + /obj/item/clipboard = 1, + /obj/item/clothing/under/rank/procedure/lawyer/blue = 1, + ) + bio_chips = list(/obj/item/bio_chip/mindshield) + satchel = /obj/item/storage/backpack/satchel_sec + dufflebag = /obj/item/storage/backpack/duffel/security + +/datum/outfit/job/donor/adjutant/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Butler", "Дворецкий") + uniform = /obj/item/clothing/under/rank/procedure/lawyer/black + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/beaverhat + glasses = /obj/item/clothing/glasses/monocle + gloves = /obj/item/clothing/gloves/color/white + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_com + pda = /obj/item/pda/bar + id = /obj/item/card/id/butler + backpack_contents = list( + /obj/item/reagent_containers/glass/rag = 1, + /obj/item/folder/blue = 1, + /obj/item/camera = 1, + /obj/item/taperecorder = 1, + /obj/item/storage/box/tapes = 1, + /obj/item/clipboard = 1, + /obj/item/clothing/under/rank/procedure/iaa = 1, + /obj/item/clothing/suit/storage/iaa/blackjacket = 1, + /obj/item/clothing/suit/chef/classic = 1, + ) + + if("Maid", "Горничная") + uniform = /obj/item/clothing/under/costume/janimaid + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/white + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_com + pda = /obj/item/pda/bar + id = /obj/item/card/id/maid + backpack_contents = list( + /obj/item/reagent_containers/glass/rag = 1, + /obj/item/folder/blue = 1, + /obj/item/camera = 1, + /obj/item/taperecorder = 1, + /obj/item/storage/box/tapes = 1, + /obj/item/clipboard = 1, + /obj/item/clothing/suit/chef/classic = 1, + ) + +/* +/datum/job/donor/butler + title = "Butler" + department_flag = JOBCAT_MEDSCI + flag = JOB_BUTLER + total_positions = 1 + spawn_positions = 1 + ru_title = "Дворецкий" + alt_titles = list("Дворецкий") + relate_job = "Vip" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_EVA, ACCESS_LAWYER) + selection_color = "#717097" + hidden_from_job_prefs = FALSE + donator_tier = 4 + outfit = /datum/outfit/job/donor/butler + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ДВОРЕЦКИЙ. Данная роль нацелена на обеспечение глав в удовлетворении физических потребностей, а мостик в чистоте." + +*/ +/datum/outfit/job/donor/butler + name = "Butler" + //jobtype = /datum/job/donor/butler + + uniform = /obj/item/clothing/under/rank/procedure/lawyer/black + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/beaverhat + glasses = /obj/item/clothing/glasses/monocle + gloves = /obj/item/clothing/gloves/color/white + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_com + pda = /obj/item/pda/bar + id = /obj/item/card/id/butler + backpack_contents = list( + /obj/item/reagent_containers/glass/rag = 1, + /obj/item/folder/blue = 1, + /obj/item/camera = 1, + /obj/item/taperecorder = 1, + /obj/item/storage/box/tapes = 1, + /obj/item/clipboard = 1, + /obj/item/clothing/under/rank/procedure/iaa = 1, + /obj/item/clothing/suit/storage/iaa/blackjacket = 1, + /obj/item/clothing/suit/chef/classic = 1, + ) +/* +/datum/job/donor/maid + title = "Maid" + department_flag = JOBCAT_MEDSCI + flag = JOB_MAID + total_positions = 1 + spawn_positions = 1 + ru_title = "Горничная" + alt_titles = list("Горничная") + relate_job = "Vip" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_EVA, ACCESS_LAWYER) + selection_color = "#717097" + hidden_from_job_prefs = FALSE + donator_tier = 4 + outfit = /datum/outfit/job/donor/maid + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ГОРНИЧНАЯ. Данная роль нацелена на обеспечение глав в удовлетворении физических потребностей, а мостик в чистоте." +*/ +/datum/outfit/job/donor/maid + name = "Maid" + //jobtype = /datum/job/donor/maid + + uniform = /obj/item/clothing/under/costume/janimaid + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/white + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_com + pda = /obj/item/pda/bar + id = /obj/item/card/id/maid + backpack_contents = list( + /obj/item/reagent_containers/glass/rag = 1, + /obj/item/folder/blue = 1, + /obj/item/camera = 1, + /obj/item/taperecorder = 1, + /obj/item/storage/box/tapes = 1, + /obj/item/clipboard = 1, + /obj/item/clothing/suit/chef/classic = 1, + ) + + +/datum/job/donor/representative_tsf + title = "Representative TSF" + department_flag = JOBCAT_ENGSEC + flag = JOB_REPRESENTATIVE_TSF + total_positions = 1 + spawn_positions = 1 + ru_title = "Представитель ТСФ" + alt_titles = list("Представитель ТСФ", "Дипломат ТСФ", "Публицист ТСФ") + relate_job = "Vip" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_EVA) + selection_color = "#717097" + hidden_from_job_prefs = FALSE + donator_tier = 4 + outfit = /datum/outfit/job/donor/representative_tsf + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ПРЕДСТАВИТЕЛЬ ТСФ. Вы прибыли сюда для отдыха и возможно для переговоров. На вас по прежнему действует КЗ НТ, не смотря на то \ + что вы являетесь гражданином ТСФ. ТСФ и СССП недоброжелательно относятся друг к другу, но это по прежнему не дает нарушать правила сервера. \ + " + +/datum/outfit/job/donor/representative_tsf + name = "Representative TSF" + jobtype = /datum/job/donor/representative_tsf + + uniform = /obj/item/clothing/under/solgov/rep + head = /obj/item/clothing/head/beret/solgov/command + belt = /obj/item/storage/belt/fannypack/black + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/color/white + shoes = /obj/item/clothing/shoes/centcom + l_pocket = /obj/item/melee/classic_baton/telescopic + box = /obj/item/storage/box/survival_mining + id = /obj/item/card/id/representative_tsf + backpack_contents = list( + /obj/item/bio_chip_implanter/death_alarm = 1, + /obj/item/lighter/zippo/blue = 1, + /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1, + /obj/item/clothing/under/pants/shorts/blue = 1, + ) + + bio_chips = list(/obj/item/bio_chip/mindshield, + /obj/item/bio_chip/death_alarm + ) + +/datum/outfit/job/donor/representative_tsf/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.add_language("Tradeband") + + +/datum/job/donor/representative_ussp + title = "Representative USSP" + department_flag = JOBCAT_ENGSEC + flag = JOB_REPRESENTATIVE_USSP + total_positions = 1 + spawn_positions = 1 + ru_title = "Представитель СССП" + alt_titles = list("Представитель СССП", "Дипломат СССП", "Пресс-Секретарь СССП") + relate_job = "Vip" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_EVA) + selection_color = "#717097" + hidden_from_job_prefs = FALSE + donator_tier = 4 + outfit = /datum/outfit/job/donor/representative_ussp + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ПРЕДСТАВИТЕЛЬ СССП. Вы прибыли сюда для отдыха и возможно для переговоров. На вас по прежнему действует КЗ НТ, не смотря на то \ + что вы являетесь гражданином СССП. ТСФ и СССП недоброжелательно относятся друг к другу, но это по прежнему не дает нарушать правила сервера. \ + " + +/datum/outfit/job/donor/representative_ussp + name = "Representative USSP" + jobtype = /datum/job/donor/representative_ussp + + uniform = /obj/item/clothing/under/new_soviet/sovietofficer + suit = /obj/item/clothing/suit/sovietcoat/officer + head = /obj/item/clothing/head/sovietofficerhat + belt = /obj/item/storage/belt/fannypack/red + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/color/black + glasses = /obj/item/clothing/glasses/sunglasses + l_pocket = /obj/item/melee/classic_baton/telescopic + id = /obj/item/card/id/representative_ussp + box = /obj/item/storage/box/survival_mining + backpack_contents = list( + /obj/item/bio_chip_implanter/death_alarm = 1, + /obj/item/lighter/zippo/engraved = 1, + /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1, + /obj/item/clothing/under/pants/shorts/red = 1, + /obj/item/clothing/head/ushanka = 1, + ) + + bio_chips = list(/obj/item/bio_chip/mindshield, + /obj/item/bio_chip/death_alarm + ) + +/datum/outfit/job/donor/representative_ussp/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.add_language("Neo-Russkiya") + + +/datum/job/donor/dealer + title = "Dealer" + department_flag = JOBCAT_ENGSEC + flag = JOB_DEALER + total_positions = 2 + spawn_positions = 2 + ru_title = "Торговец" + alt_titles = list("Торговец", "Независимый Торговец", "Сдельщик", "Барахольщик", "Меценат", "Коммерсант") + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_RC_ANNOUNCE, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_MINT, ACCESS_MINERAL_STOREROOM, ACCESS_CONSTRUCTION) + selection_color = "#717097" + hidden_from_job_prefs = FALSE + donator_tier = 4 + outfit = /datum/outfit/job/donor/dealer + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ТОРГОВЕЦ. Данная роль нацелена на продажу всячины, хлама и вещей экипажу. Обустройте себе торговую точку или продавайте всё из ширмы. \ + Найдите любыми способами предметы у экипажа и продайте его им же! Либо же продайте барахло которое вы привезли с собой. \ + Богатый торговец - успешный торговец! \ + \nВам выдан личный EFTPOS для снятия средств с карт." + +/datum/outfit/job/donor/dealer + name = "Dealer" + jobtype = /datum/job/donor/dealer + + uniform = /obj/item/clothing/under/suit/black + suit = /obj/item/clothing/suit/pirate_black + back = /obj/item/storage/backpack/duffel/engineering + belt = /obj/item/melee/classic_baton + head = /obj/item/clothing/head/fedora + shoes = /obj/item/clothing/shoes/cowboy/black + l_hand = /obj/item/cane + glasses = /obj/item/clothing/glasses/sunglasses/big + gloves = /obj/item/clothing/gloves/color/black + l_ear = /obj/item/radio/headset/headset_service + box = /obj/item/storage/box/survival_mining + pda = /obj/item/pda/librarian + id = /obj/item/card/id/dealer + backpack_contents = list( + /obj/item/eftpos = 1, + /obj/item/hand_labeler = 1, + /obj/item/hand_labeler_refill = 1, + /obj/item/storage/box/legal_loot/amount_30 = 1, + ) + +/datum/outfit/job/donor/dealer/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Сдельщик", "Независимый Торговец", "Барахольщик") + uniform = /obj/item/clothing/under/color/brown + suit = /obj/item/clothing/suit/pirate_brown + shoes = /obj/item/clothing/shoes/cowboy + head = /obj/item/clothing/head/cowboyhat + gloves = /obj/item/clothing/gloves/color/brown + +// Тоже добавляем ТСФ торгашам коллекционки +/datum/outfit/admin/sol_trader/New() + . = ..() + backpack_contents |= list( + /obj/item/storage/box/legal_loot/amount_15 = 1, + ) + +/datum/outfit/job/donor/dealer/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.add_language("Tradeband") diff --git a/modular_ss220/jobs/code/donor/job/5_tier_jobs.dm b/modular_ss220/jobs/code/donor/job/5_tier_jobs.dm new file mode 100644 index 000000000000..250533dbf66a --- /dev/null +++ b/modular_ss220/jobs/code/donor/job/5_tier_jobs.dm @@ -0,0 +1,194 @@ +/datum/job/donor/vip_guest + title = "VIP Corporate Guest" + department_flag = JOBCAT_ENGSEC + flag = JOB_VIP_GUEST + ru_title = "VIP Гость" + alt_titles = list("VIP Гость", "VIP Персона", "VIP Гость NT", "VIP Персона NT", "Гость Корпорации NT") + relate_job = "Vip" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_EVA) + selection_color = "#9d679d" + hidden_from_job_prefs = FALSE + donator_tier = 5 + outfit = /datum/outfit/job/donor/vip_guest + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы ВИП ПЕРСОНА. Данная роль нацелена на ваше пребывания на станции в качестве особого гостя. К вам особое отношение, \ + вы являетесь одним из любимцев корпорации Нанотрейзен. Чем вы занимаетесь? А какая разница. Вы очень важная персона." + +/datum/outfit/job/donor/vip_guest + name = "VIP Corporate Guest" + jobtype = /datum/job/donor/vip_guest + + uniform = /obj/item/clothing/under/suit/really_black + glasses = /obj/item/clothing/glasses/monocle + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/centcom + head = /obj/item/clothing/head/that + l_hand = /obj/item/cane + l_pocket = /obj/item/melee/classic_baton/telescopic + box = /obj/item/storage/box/engineer + id = /obj/item/card/id/vip_guest + backpack_contents = list( + /obj/item/stack/spacecash/c1000 = 2, + /obj/item/bio_chip_implanter/death_alarm = 1, + /obj/item/lighter/zippo/engraved = 1, + /obj/item/clothing/mask/cigarette/cigar/havana = 6, + ) + + bio_chips = list(/obj/item/bio_chip/mindshield, + /obj/item/bio_chip/death_alarm + ) + + +/datum/job/donor/banker + title = "Banker" + department_flag = JOBCAT_ENGSEC + flag = JOB_BANKER + total_positions = 2 + spawn_positions = 2 + ru_title = "Банкир" + alt_titles = list("Банкир", "Независимый Банкир", "Корпорат", "Бизнесмен", "Банкир NT", "Корпорат NT", "Бизнесмен NT") + relate_job = "Vip" + access = list(ACCESS_MAINT_TUNNELS, ACCESS_LIBRARY, ACCESS_EVA) + selection_color = "#9d679d" + hidden_from_job_prefs = FALSE + donator_tier = 5 + outfit = /datum/outfit/job/donor/banker + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы БАНКИР. Вы крайне богаты и нацелены открыть здесь свое дело. Банк, мастерские, возможно нанять собственных работников. \ + Корпорация Нанотрейзен не против, ведь вы приносите для неё деньги. Так за работу!" + +/datum/outfit/job/donor/banker + name = "Banker" + jobtype = /datum/job/donor/banker + + uniform = /obj/item/clothing/under/suit/really_black + suit = /obj/item/clothing/suit/victcoat + glasses = /obj/item/clothing/glasses/monocle + mask = /obj/item/clothing/mask/cigarette/pipe + gloves = /obj/item/clothing/gloves/color/white + shoes = /obj/item/clothing/shoes/centcom + head = /obj/item/clothing/head/fedora + l_hand = /obj/item/cane + l_pocket = /obj/item/melee/classic_baton/telescopic + back = /obj/item/storage/backpack/satchel + l_ear = /obj/item/radio/headset/headset_service + box = /obj/item/storage/box/engineer + id = /obj/item/card/id/banker + backpack_contents = list( + /obj/item/stack/spacecash/c1000 = 5, + + /obj/item/bio_chip_implanter/death_alarm = 1, + /obj/item/lighter/zippo/engraved = 1, + /obj/item/clothing/under/rank/procedure/lawyer/black = 1, + /obj/item/clothing/mask/cigarette/cigar/havana = 6, + ) + + bio_chips = list(/obj/item/bio_chip/mindshield, + /obj/item/bio_chip/death_alarm + ) + + +/datum/job/donor/seclown + title = "Security Clown" + department_flag = JOBCAT_ENGSEC + flag = JOB_SECURITY_CLOWN + total_positions = 1 + spawn_positions = 1 + ru_title = "Клоун Службы Безопасности" + alt_titles = list("Клоун Службы Безопасности", "Клоун-Детектив", "Клоун-Смотритель", "Хонкектив", "Клоун Кадет") + relate_job = "Security Officer" + supervisors = "главой службы безопасности" + department_head = list("Head of Security") + job_department_flags = DEP_FLAG_SECURITY + access = list(ACCESS_CLOWN, ACCESS_THEATRE, ACCESS_MAINT_TUNNELS, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT) + selection_color = "#9d679d" + hidden_from_job_prefs = FALSE + donator_tier = 5 + outfit = /datum/outfit/job/donor/seclown + important_information = "Ваша должность нацелена на свободный РП-отыгрыш и не разрешает нарушать правила сервера. \ + \nВы КЛОУН СЛУЖБЫ БЕЗОПАСНОСТИ. Данная роль нацелена на обеспечения сотрудников службы безопасности ментальным здоровьем и \ + поддерживать моральный облик вашего отдела. Вы не имеете права выступать против вашего отдела, ведь вас тренировали для этого. \ + Корпорация NT вложило много денег чтобы сделать из клоуна... вас. Так не подведите её. Вы то, что можно назвать корпоративным клоуном. \ + Ваша душа принадлежит NT, но ваше сердце по прежнему верно Хонкомаме. \ + \nВ вас присутствует ген клоуна. Не занимайтесь охотой антагонистов если есть действующие сотрудники службы безопасности. \ + Вы не являетесь офицером. Вы по прежнему клоун с полномочиями и гигантскими обязанностями. Это непростая роль, ведь вы из-за своего положения \ + не можете творить множество вещей и действий нарушающие Космический Закон." + +/datum/outfit/job/donor/seclown + name = "Security Clown" + jobtype = /datum/job/donor/seclown + + uniform = /obj/item/clothing/under/rank/security/officer/clown + suit = /obj/item/clothing/suit/armor/vest/security + shoes = /obj/item/clothing/shoes/clown_shoes + head = /obj/item/clothing/head/helmet + mask = /obj/item/clothing/mask/gas/clown_hat + gloves = /obj/item/clothing/gloves/color/red + l_pocket = /obj/item/bikehorn + suit_store = /obj/item/gun/energy/clown/security + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_sec/alt + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + pda = /obj/item/pda/clown + id = /obj/item/card/id/seclown + backpack_contents = list( + /obj/item/food/snacks/grown/banana = 1, + /obj/item/stamp/clown = 1, + /obj/item/toy/crayon/rainbow = 1, + /obj/item/storage/fancy/crayons = 1, + /obj/item/reagent_containers/spray/waterflower = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana = 1, + /obj/item/instrument/bikehorn = 1, + /obj/item/flash = 1, + /obj/item/restraints/handcuffs/toy = 1, + ) + + bio_chips = list(/obj/item/bio_chip/sad_trombone, /obj/item/bio_chip/mindshield) + + backpack = /obj/item/storage/backpack/clown + satchel = /obj/item/storage/backpack/clown + dufflebag = /obj/item/storage/backpack/duffel/clown + +/datum/outfit/job/donor/seclown/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(!H.mind) + return + if(H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Клоун-Детектив", "Хонкектив") + suit = /obj/item/clothing/suit/storage/det_suit + head = /obj/item/clothing/head/det_hat + if("Клоун-Смотритель") + suit = /obj/item/clothing/suit/armor/vest/warden + head = /obj/item/clothing/head/officer + suit_store = /obj/item/gun/energy/clown/security/warden + if("Клоун Кадет") + head = /obj/item/clothing/head/soft/sec + +/datum/outfit/job/donor/seclown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + + if(ismachineperson(H)) + var/obj/item/organ/internal/cyberimp/brain/clown_voice/implant = new + implant.insert(H) + + H.dna.SetSEState(GLOB.clumsyblock, TRUE) + singlemutcheck(H, GLOB.clumsyblock, MUTCHK_FORCED) + H.dna.default_blocks.Add(GLOB.clumsyblock) + if(!ismachineperson(H)) + H.dna.SetSEState(GLOB.comicblock, TRUE) + singlemutcheck(H, GLOB.comicblock, MUTCHK_FORCED) + H.dna.default_blocks.Add(GLOB.comicblock) + H.check_mutations = TRUE + H.add_language("Clownish") + H.AddComponent(/datum/component/slippery, H, 8 SECONDS, 100, 0, FALSE, TRUE, "slip", TRUE) + + var/clown_name = pick(GLOB.clown_names) + var/newname = clean_input("Выберите имя для вашего Клоуна Службы Безопасности.", "Изменение Имени", clown_name, H) + if(newname) + H.rename_character(H.real_name, newname) + else + H.rename_character(H.real_name, clown_name) + diff --git a/modular_ss220/jobs/code/job/service_jobs.dm b/modular_ss220/jobs/code/job/service_jobs.dm new file mode 100644 index 000000000000..0b288d97325d --- /dev/null +++ b/modular_ss220/jobs/code/job/service_jobs.dm @@ -0,0 +1,39 @@ +/datum/outfit/job/chef/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Culinary Artist") + head = /obj/item/clothing/head/chefhat/red + uniform = /obj/item/clothing/under/rank/civilian/chef/red + suit = /obj/item/clothing/suit/chef/red + belt = /obj/item/storage/belt/chef/apron/red + + +/datum/job/cargo_tech/New() + . = ..() + alt_titles |= list("Deliverer", "Доставщик", "Переносчик") + +/datum/outfit/job/cargo_tech/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Deliverer", "Доставщик", "Переносчик") + uniform = /obj/item/clothing/under/misc/overalls + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/soft + r_hand = /obj/item/mail_scanner + r_pocket = /obj/item/storage/bag/mail + l_ear = /obj/item/radio/headset/headset_service + r_ear = /obj/item/radio/headset/headset_cargo + id = /obj/item/card/id/courier + backpack_contents = list( + /obj/item/eftpos = 1, + /obj/item/clipboard = 1, + /obj/item/reagent_containers/spray/pepper = 1, + /obj/item/reagent_containers/spray/pestspray = 1, + /obj/item/reagent_containers/spray/plantbgone = 1, + ) + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel_eng + dufflebag = /obj/item/storage/backpack/duffel/engineering diff --git a/modular_ss220/jobs/code/jobs.dm b/modular_ss220/jobs/code/jobs.dm index c1b8d290b371..6173b770444a 100644 --- a/modular_ss220/jobs/code/jobs.dm +++ b/modular_ss220/jobs/code/jobs.dm @@ -1,18 +1,3 @@ -/datum/nttc_configuration/New() - . = ..() - var/list/job_radio_dict = list() - for(var/i in (GLOB.medical_positions_ss220 + get_all_medical_alt_titles_ss220())) - job_radio_dict.Add(list("[i]" = "medradio")) - for(var/i in (GLOB.security_positions_ss220 + get_all_security_alt_titles_ss220())) - job_radio_dict.Add(list("[i]" = "secradio")) - for(var/i in (GLOB.engineering_positions_ss220 + get_all_engineering_alt_titles_ss220())) - job_radio_dict.Add(list("[i]" = "engradio")) - for(var/i in (GLOB.science_positions_ss220 + get_all_science_alt_titles_ss220())) - job_radio_dict.Add(list("[i]" = "scirradio")) - - all_jobs |= job_radio_dict - - // ======================================= // relate jobs for relate job slots // ======================================= @@ -20,28 +5,38 @@ return FALSE /datum/job - var/relate_job // for novice role and etc + var/relate_job // for relate positions and landmark + var/is_relate_positions = FALSE // Slots + var/is_extra_job = FALSE // Special Jobs Window /datum/job/doctor relate_job = "Intern" + is_relate_positions = TRUE /datum/job/doctor/intern relate_job = "Medical Doctor" /datum/job/scientist relate_job = "Student Scientist" + is_relate_positions = TRUE /datum/job/scientist/student relate_job = "Scientist" /datum/job/engineer relate_job = "Trainee Engineer" + is_relate_positions = TRUE /datum/job/engineer/trainee relate_job = "Station Engineer" /datum/job/officer relate_job = "Security Cadet" + is_relate_positions = TRUE /datum/job/officer/cadet relate_job = "Security Officer" +// ============================== +// PROCS +// ============================== + /datum/job/is_position_available() if(job_banned_gamemode) return FALSE @@ -49,10 +44,15 @@ if(check_hidden_from_job_prefs()) return FALSE - return relate_job ? check_relate_positions() : ..() + if(relate_job && is_relate_positions) + return check_relate_positions() + + return ..() /datum/job/proc/check_relate_positions() var/datum/job/temp = SSjobs.GetJob(relate_job) + if(!temp) + return FALSE var/current_count_positions = current_positions + temp.current_positions var/total_count_positions = total_positions + temp.total_positions @@ -64,13 +64,9 @@ /datum/job/proc/check_hidden_from_job_prefs() if(hidden_from_job_prefs) - for(var/job_title in GLOB.jobs_positions_ss220) + for(var/job_title in GLOB.all_jobs_ss220) if(job_title in alt_titles) return TRUE - if(title in GLOB.jobs_positions_ss220) + if(title in GLOB.all_jobs_ss220) return TRUE return FALSE - -// OFFICIAL parameters: 17 / HOS, Bart / 400 / 700 -/datum/character_save/SetChoices(mob/user, limit = 18, list/splitJobs = list("Head of Security", "Bartender"), widthPerColumn = 450, height = 700) - . = ..() diff --git a/modular_ss220/jobs/code/jobs_character.dm b/modular_ss220/jobs/code/jobs_character.dm index 4e526b4c4aa1..179a60381f11 100644 --- a/modular_ss220/jobs/code/jobs_character.dm +++ b/modular_ss220/jobs/code/jobs_character.dm @@ -22,6 +22,33 @@ H.update_action_buttons_icon() return FALSE +/datum/character_save + var/extra_jobs_check = FALSE + +// OFFICIAL parameters: 17 / HOS, Bart / 400 / 700 +/datum/character_save/SetChoices(mob/user, limit = 18, list/splitJobs = list("Head of Security", "Bartender"), widthPerColumn = 450, height = 700) + . = ..() + +/datum/character_save/proc/get_split_extra_jobs() + return list("Administrator", "Adjutant", "VIP Corporate Guest") + +/datum/preferences/process_link(mob/user, list/href_list) + if(!user) + return + + if(href_list["preference"] == "job") + switch(href_list["task"]) + if("extra_job") + active_character.extra_jobs_check = !active_character.extra_jobs_check + active_character.SetChoices(user) + return TRUE + . = ..() + +// В /SetChoices() определяем нужно ли пользователю создавать дополнительную кнопку +/datum/character_save/proc/check_available_extra_job_prefs(client/C) + if(C?.donator_level) + return TRUE + return FALSE // это копипаст мерзопакости. Я не буду рефакторить это в модуле, я шо, ебанутый? // Оно работает и ладно. И я не буду этот комментарий на английский переводить. @@ -29,16 +56,24 @@ /datum/character_save/update_preview_icon(for_observer=0) . = ..() - // qdel(preview_icon_front) - // qdel(preview_icon_side) - // qdel(preview_icon) + var/icon/clothes_s = get_clothes_icon() + + if(clothes_s) + preview_icon.Blend(clothes_s, ICON_OVERLAY) + + preview_icon_front = new(preview_icon, dir = SOUTH) + preview_icon_side = new(preview_icon, dir = WEST) + + qdel(clothes_s) + + +/datum/character_save/proc/get_clothes_icon() + var/icon/clothes_s = null var/g = "" if(gender == FEMALE) g = "f" - var/icon/clothes_s = null - if(job_medsci_high) switch(job_medsci_high) if(JOB_STUDENT) @@ -67,6 +102,33 @@ if(4) clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + if(JOB_ACTOR, JOB_ADMINISTRATOR, JOB_TOURIST_TSF, JOB_TOURIST_USSP, JOB_MANAGER_JANITOR, JOB_GUARD, JOB_MIGRANT, JOB_UNCERTAIN /* JOB_APPRENTICE, */) + if(prob(50)) + clothes_s = new /icon('icons/mob/clothing/under/procedure.dmi', "iaa_s") + else + clothes_s = new /icon('icons/mob/clothing/under/misc.dmi', "waiter_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "fez"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + + if(JOB_ADJUTANT, /* JOB_BUTLER, JOB_MAID */) + clothes_s = new /icon('icons/mob/clothing/under/procedure.dmi', "lawyer_black[g ? "_skirt" : ""]_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY) + if(prob(10)) + clothes_s.Blend(new /icon('icons/mob/clothing/eyes.dmi', "monocle"), ICON_OVERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "beaver_hat"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + else if(job_engsec_high) switch(job_engsec_high) if(JOB_CADET) @@ -101,10 +163,78 @@ if(4) clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) - if(clothes_s) - preview_icon.Blend(clothes_s, ICON_OVERLAY) + if(JOB_REPRESENTATIVE_TSF, JOB_REPRESENTATIVE_USSP, JOB_DEALER) + clothes_s = new /icon('icons/mob/clothing/under/procedure.dmi', "lawyer_black[g ? "_skirt" : ""]_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY) + if(prob(10)) + clothes_s.Blend(new /icon('icons/mob/clothing/eyes.dmi', "monocle"), ICON_OVERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "beaver_hat"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + if(JOB_VIP_GUEST, JOB_BANKER) + clothes_s = new /icon('icons/mob/clothing/under/procedure.dmi', "ntrep[g ? "_skirt" : ""]_s") + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "suitjacket_black_open"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/eyes.dmi', "monocle"), ICON_OVERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "tophat"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + if(JOB_SECURITY_CLOWN) + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "security_clown_s") + clothes_s.Blend(new /icon('icons/mob/clothing/mask.dmi', "clown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "clown"), ICON_UNDERLAY) + if(prob(25)) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "detective"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "detective"), ICON_OVERLAY) + else if(prob(25)) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "warden_jacket"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "sechat"), ICON_OVERLAY) + else if(prob(50)) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "armor"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "redsoft"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "clownpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-clown"), ICON_OVERLAY) + + + else if(job_support_high) + switch(job_support_high) + if(JOB_PRISON) + if(prob(95)) + clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "prisoner_s") + else + clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "prisoner_d_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY) - preview_icon_front = new(preview_icon, dir = SOUTH) - preview_icon_side = new(preview_icon, dir = WEST) + if(JOB_BARBER, JOB_BATH, JOB_CASINO, JOB_WAITER, JOB_ACOLYTE, JOB_BOXER, JOB_MUSICIAN /* JOB_DELIVERER, JOB_PAINTER, */) + clothes_s = new /icon('icons/mob/clothing/under/civilian.dmi', "barber_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "boater_hat"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) - qdel(clothes_s) + return clothes_s + +// Костыли с датумами для выставления должностей +/datum/character_save/proc/get_datum_last_support() + return JOBCAT_LAST_SUPPORT + +/datum/character_save/proc/get_datum_last_engsec() + return JOBCAT_LAST_ENGSEC + +/datum/character_save/proc/get_datum_last_medsci() + return JOBCAT_LAST_MEDSCI diff --git a/modular_ss220/jobs/code/jobs_gamemodes.dm b/modular_ss220/jobs/code/jobs_gamemodes.dm index 4db68643f8f3..c07577bce644 100644 --- a/modular_ss220/jobs/code/jobs_gamemodes.dm +++ b/modular_ss220/jobs/code/jobs_gamemodes.dm @@ -1,27 +1,44 @@ -/datum/game_mode/changeling/New() +/datum/game_mode/changeling/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 . = ..() - protected_jobs |= GLOB.security_positions_ss220 -/datum/game_mode/cult/New() +/datum/game_mode/cult/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 . = ..() - restricted_jobs |= GLOB.security_positions_ss220 -/datum/game_mode/revolution/New() +/datum/game_mode/revolution/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 . = ..() - restricted_jobs |= GLOB.security_positions_ss220 -/datum/game_mode/traitor/New() +/datum/game_mode/traitor/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 . = ..() - protected_jobs |= GLOB.security_positions_ss220 -/datum/game_mode/trifecta/New() +/datum/game_mode/trifecta/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 . = ..() - protected_jobs |= GLOB.security_positions_ss220 -/datum/game_mode/traitor/vampire/New() +/datum/game_mode/traitor/vampire/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 . = ..() - protected_jobs |= GLOB.security_positions_ss220 -/datum/game_mode/vampire/New() +/datum/game_mode/vampire/pre_setup() + protected_jobs |= GLOB.restricted_jobs_ss220 + . = ..() + +// antag mix scenarious +/datum/antag_scenario/traitor/New() + protected_roles |= GLOB.restricted_jobs_ss220 + . = ..() + +/datum/antag_scenario/changeling/New() + protected_roles |= GLOB.restricted_jobs_ss220 + . = ..() + +/datum/antag_scenario/vampire/New() + protected_roles |= GLOB.restricted_jobs_ss220 + . = ..() + +/datum/antag_scenario/team/blood_brothers/New() + protected_roles |= GLOB.restricted_jobs_ss220 . = ..() - protected_jobs |= GLOB.security_positions_ss220 diff --git a/modular_ss220/jobs/code/jobs_global_list.dm b/modular_ss220/jobs/code/jobs_global_list.dm index 3ae7787fba1f..3027eaf4d0ae 100644 --- a/modular_ss220/jobs/code/jobs_global_list.dm +++ b/modular_ss220/jobs/code/jobs_global_list.dm @@ -1,3 +1,5 @@ + +// ===================== STATION ===================== GLOBAL_LIST_INIT(medical_positions_ss220, list( "Intern", )) @@ -14,28 +16,122 @@ GLOBAL_LIST_INIT(security_positions_ss220, list( "Security Cadet", )) -GLOBAL_LIST_INIT(jobs_positions_ss220, (list() + ( - medical_positions_ss220 + science_positions_ss220 + engineering_positions_ss220 + security_positions_ss220))) +// ====================== DONOR ====================== +GLOBAL_LIST_INIT(donor_tier_1_jobs, list( + "Prisoner", // Заключенный +)) + +GLOBAL_LIST_INIT(donor_tier_2_jobs, list( + "Barber", // Парикмахер + "Bath", // Банщик + "Casino", // Крупье + "Waiter", // Официант + "Acolyte", // Послушник + "Deliverer", // Курьер + "Wrestler", // Боксёр, Рефери + "Painter", // Художник + "Musician", // Музыкант + "Actor", // Актёр +)) + +GLOBAL_LIST_INIT(donor_tier_3_jobs, list( + "Administrator", // Сервис-Администратор + "Tourist TSF", // Турист ТСФ + "Tourist USSP", // Турист ССП + "Cleaning Manager", // Менеджер по Клинингу + "Apprentice", // Подмастерье + "Guard", // Охранник Шестерочки + "Migrant", // Мигрант + "Uncertain", // Забытый Ассистент +)) + +GLOBAL_LIST_INIT(donor_tier_4_jobs, list( + "Adjutant", // Адъютант + "Butler", // Дворецкий + "Maid", // Горничная + "Representative TSF", // Представитель ТСФ + "Representative USSP", // Представитель ССП + "Dealer", // Независимый Торговец +)) + +GLOBAL_LIST_INIT(donor_tier_5_jobs, list( + "VIP Corporate Guest", // VIP гость - Важно! Это НЕ админский VIP Guest с ЦК. + "Banker", // Банкир + "Security Clown", // Клоун Службы Безопасности +)) + +GLOBAL_LIST_INIT(security_donor_jobs, list( + "Security Clown", +)) + +GLOBAL_LIST_INIT(assistant_donor_jobs, list( + "Prisoner", + "Tourist TSF", + "Tourist USSP", + "Apprentice", + "Migrant", + "Uncertain", + "Representative TSF", + "Representative USSP", + "VIP Corporate Guest", +)) + +GLOBAL_LIST_INIT(supply_donor_jobs, list( + "Deliverer", +)) + +GLOBAL_LIST_INIT(all_donor_jobs, donor_tier_1_jobs + donor_tier_2_jobs + donor_tier_3_jobs + donor_tier_4_jobs + donor_tier_5_jobs) + +GLOBAL_LIST_INIT(service_donor_jobs, all_donor_jobs - security_donor_jobs - assistant_donor_jobs - supply_donor_jobs) + +// Работы которые нельзя выбрать нигде +GLOBAL_LIST_INIT(jobs_excluded_from_selection, list("Donor")) + + +// ====================== SPECIAL ====================== +// cant be antags +GLOBAL_LIST_INIT(restricted_jobs_ss220, security_positions_ss220 + ( + donor_tier_4_jobs + donor_tier_5_jobs + jobs_excluded_from_selection +)) + +// ===================== ALL JOBS ===================== + +GLOBAL_LIST_INIT(all_jobs_ss220, (list() + ( + medical_positions_ss220 + science_positions_ss220 + engineering_positions_ss220 + security_positions_ss220 + all_donor_jobs))) + + +// ====================== TITLE ====================== /proc/get_alt_titles(list/positions) var/list/all_titles = list() for(var/rank in positions) var/datum/job/job = SSjobs.GetJob(rank) + if(!job) + continue if(length(job.alt_titles)) all_titles |= job.alt_titles return all_titles -/proc/get_all_medical_alt_titles_ss220() - return get_alt_titles(GLOB.medical_positions_ss220) +/proc/get_all_medical_titles_ss220() + return GLOB.medical_positions_ss220 + get_alt_titles(GLOB.medical_positions_ss220) + +/proc/get_all_security_titles_ss220() + return GLOB.security_positions_ss220 + get_alt_titles(GLOB.security_positions_ss220) + GLOB.security_donor_jobs + get_alt_titles(GLOB.security_donor_jobs) + +/proc/get_all_engineering_titles_ss220() + return GLOB.engineering_positions_ss220 + get_alt_titles(GLOB.engineering_positions_ss220) + +/proc/get_all_science_titles_ss220() + return GLOB.science_positions_ss220 + get_alt_titles(GLOB.science_positions_ss220) -/proc/get_all_security_alt_titles_ss220() - return get_alt_titles(GLOB.security_positions_ss220) +/proc/get_all_service_titles_ss220() + return GLOB.service_donor_jobs + get_alt_titles(GLOB.service_donor_jobs) -/proc/get_all_engineering_alt_titles_ss220() - return get_alt_titles(GLOB.engineering_positions_ss220) +/proc/get_all_supply_titles_ss220() + return GLOB.supply_donor_jobs + get_alt_titles(GLOB.supply_donor_jobs) -/proc/get_all_science_alt_titles_ss220() - return get_alt_titles(GLOB.science_positions_ss220) +/proc/get_all_assistant_titles_ss220() + return GLOB.assistant_donor_jobs + get_alt_titles(GLOB.assistant_donor_jobs) -/proc/get_all_alt_titles_ss220() - return get_all_medical_alt_titles_ss220() + get_all_security_alt_titles_ss220() + get_all_engineering_alt_titles_ss220() + get_all_science_alt_titles_ss220() +/proc/get_all_titles_ss220() + return get_all_medical_titles_ss220() + get_all_security_titles_ss220() + get_all_engineering_titles_ss220() + get_all_science_titles_ss220() + get_all_service_titles_ss220() + get_all_supply_titles_ss220() + get_all_assistant_titles_ss220() diff --git a/modular_ss220/jobs/code/landmarks.dm b/modular_ss220/jobs/code/landmarks.dm new file mode 100644 index 000000000000..320bce69e5a4 --- /dev/null +++ b/modular_ss220/jobs/code/landmarks.dm @@ -0,0 +1,44 @@ +/obj/effect/landmark/start/prisoner + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Prisoner" + icon_state = "prisoner" + +/obj/effect/landmark/spawner/prisoner + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Prisoner Arrive" + icon_state = "prisoner_arrive" + +/obj/effect/landmark/start/bar + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Bar" + icon_state = "bar" + +/obj/effect/landmark/start/artist + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Artist" + icon_state = "art" + +/obj/effect/landmark/start/vip + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Vip" + icon_state = "vip" + +/obj/effect/landmark/start/barber + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Barber" + icon_state = "barber" + +/obj/effect/landmark/start/uncertain + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Uncertain" + icon_state = "uncertain" + +/obj/effect/landmark/start/dealer + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Dealer" + icon_state = "dealer" + +/obj/effect/landmark/start/bath + icon = 'modular_ss220/jobs/icons/landmarks.dmi' + name = "Bath" + icon_state = "bath" diff --git a/modular_ss220/jobs/code/objects/job_objects.dm b/modular_ss220/jobs/code/objects/job_objects.dm index fe18b83d9c6a..406798ce86c7 100644 --- a/modular_ss220/jobs/code/objects/job_objects.dm +++ b/modular_ss220/jobs/code/objects/job_objects.dm @@ -1,6 +1,6 @@ /obj/machinery/computer/arcade/recruiter/Initialize(mapload) . = ..() - jobs |= GLOB.jobs_positions_ss220 + get_all_alt_titles_ss220() + jobs |= GLOB.all_jobs_ss220 + get_all_titles_ss220() incorrect_jobs |= list( "Medical Sasistant", "Shitcurity Cadet", "Traneer Enginer", "Assistant Captain", "Engineer Cadet", "Traine Engener", "Intarn", "Entern", "Student Directar", "Head of Scientest", "Junior Codet" @@ -29,3 +29,142 @@ mob_name = "Security Cadet" id_job = "Security Cadet" outfit = /datum/outfit/job/officer/cadet + + +// TRADER - Хлам разрешенный на станции +/obj/item/storage/box/legal_loot + name = "Коробка всячины" + desc = "Коробка с легальными вещами или фальшивками. В любом случае, здесь ничего опасного и режущего! Безопасно для детей!" + icon = 'modular_ss220/aesthetics/boxes/icons/boxes.dmi' + icon_state = "thief_box" + var/loot_amount = 1 + var/list/possible_type_loot = list( + /obj/item/toy/balloon, + /obj/item/storage/wallet, + /obj/item/storage/photo_album, + /obj/item/storage/box/snappops, + /obj/item/storage/fancy/crayons, + /obj/item/storage/belt/champion, + /obj/item/soap/deluxe, + /obj/item/soap/ducttape, + /obj/item/soap/nanotrasen, + /obj/item/soap/homemade, + /obj/item/soap/syndie, + /obj/item/pickaxe/silver, + /obj/item/pen/invisible, + /obj/item/lipstick/random, + /obj/item/grenade/smokebomb, + /obj/item/grown/corncob, + /obj/item/poster/random_contraband, + /obj/item/bikehorn, + /obj/item/beach_ball, + /obj/item/beach_ball/holoball, + /obj/item/banhammer, + /obj/item/toy/balloon, + /obj/item/toy/blink, + /obj/item/toy/katana, + /obj/random/mech, + /obj/item/toy/spinningtoy, + /obj/item/toy/sword, + /obj/item/dualsaber/toy, + /obj/item/paicard, + /obj/item/instrument/violin, + /obj/item/instrument/guitar, + /obj/item/storage/belt/utility/full, + /obj/item/clothing/accessory/horrible, + /obj/random/carp_plushie, + /obj/random/plushie, + /obj/random/figure, + /obj/item/deck/cards, + /obj/item/deck/cards/tiny, + /obj/item/deck/unum, + /obj/item/toy/minimeteor, + /obj/item/toy/redbutton, + /obj/item/toy/figure/owl, + /obj/item/toy/figure/griffin, + /obj/item/clothing/head/blob, + /obj/item/id_decal/gold, + /obj/item/id_decal/silver, + /obj/item/id_decal/prisoner, + /obj/item/id_decal/centcom, + /obj/item/id_decal/emag, + /obj/item/spellbook/oneuse/fake_gib, + /obj/item/toy/foamblade, + /obj/item/toy/flash, + /obj/item/toy/minigibber, + /obj/item/toy/nuke, + /obj/item/toy/AI, + /obj/item/clothing/under/syndicate/tacticool, + /obj/item/storage/box/fakesyndiesuit, + /obj/item/gun/projectile/shotgun/toy/tommygun, + /obj/item/stack/tile/fakespace/loaded, + /obj/item/stack/tile/brass/fifty, + /obj/item/sord, + /obj/item/toy/prizeball/figure, + /obj/item/toy/prizeball/therapy, + + // pew pew + /obj/item/gun/projectile/automatic/toy, + /obj/item/gun/projectile/automatic/toy/pistol, + /obj/item/gun/projectile/shotgun/toy, + /obj/item/ammo_box/foambox, + /obj/item/toy/foamblade, + /obj/item/toy/syndicateballoon, + /obj/item/clothing/suit/syndicatefake, + /obj/item/clothing/head/syndicatefake, + /obj/item/gun/projectile/shotgun/toy/crossbow, + /obj/item/gun/projectile/automatic/c20r/toy/riot, + /obj/item/gun/projectile/automatic/l6_saw/toy/riot, + /obj/item/gun/projectile/automatic/sniper_rifle/toy, + /obj/item/ammo_box/foambox/riot, + /obj/item/deck/cards/syndicate + ) + +/obj/item/storage/box/legal_loot/populate_contents() + // "увеличиваем" шансы на выпадение коллекционного хлама + possible_type_loot |= subtypesof(/obj/item/toy) + subtypesof(/obj/item/clothing/head/collectable) + subtypesof(/obj/item/poster) + subtypesof(/obj/item/storage/fancy/cigarettes) + subtypesof(/obj/item/lighter/zippo) + subtypesof(/obj/item/id_skin) + for(var/i in 1 to loot_amount) + var/loot_type = pick(possible_type_loot) + new loot_type(src) + +/obj/item/storage/box/legal_loot/amount_2 + loot_amount = 2 + +/obj/item/storage/box/legal_loot/amount_5 + loot_amount = 5 + +/obj/item/storage/box/legal_loot/amount_10 + loot_amount = 10 + +/obj/item/storage/box/legal_loot/amount_15 + loot_amount = 15 + +/obj/item/storage/box/legal_loot/amount_20 + loot_amount = 20 + +/obj/item/storage/box/legal_loot/amount_30 + loot_amount = 30 + +/obj/item/storage/box/legal_loot/amount_40 + loot_amount = 40 + +/obj/item/storage/box/legal_loot/amount_50 + loot_amount = 50 + +// HONK Rifle // +/obj/item/gun/energy/clown + icon_state = "honkrifle" + item_state = "honkrifle" + icon = 'modular_ss220/jobs/icons/custom_gun/custom_guns.dmi' + lefthand_file = 'modular_ss220/jobs/icons/custom_gun/mob/custom_guns_lefthand.dmi' + righthand_file = 'modular_ss220/jobs/icons/custom_gun/mob/custom_guns_righthand.dmi' + +/obj/item/gun/energy/clown/security + name = "ХОНК-ружье офицера" + desc = "Личное оружие клоуна офицера. Смертоносное для ментального состояния каждого на ком было применено. Запрещено конвенкцией НТ 12 раз. Разрешено конвенкцией советов клоунов 13 раз. На рукояти выгривирован \"HONK\" и нацарапаны пару зачернутых черточек." + icon_state = "honkrifle_security" + item_state = "honkrifle_security" + +/obj/item/gun/energy/clown/security/warden + name = "Личное ХОНК-ружье смотрителя" + desc = "Личное смертоносное оружие клоуна-смотрителя, выданное за заслуги перед НТ и \[ДАННЫЕ ХОНКНУТЫ\]. Ходят слухи что это один из первых экземпляров произведенных во время войны мимов и клоунов на родной планете клоунов." diff --git a/modular_ss220/jobs/icons/clothing/uniforms.dmi b/modular_ss220/jobs/icons/clothing/uniforms.dmi index cab653e13b24..7b593a0b97f4 100644 Binary files a/modular_ss220/jobs/icons/clothing/uniforms.dmi and b/modular_ss220/jobs/icons/clothing/uniforms.dmi differ diff --git a/modular_ss220/jobs/icons/custom_gun/custom_guns.dmi b/modular_ss220/jobs/icons/custom_gun/custom_guns.dmi new file mode 100644 index 000000000000..5c2eec1ec23e Binary files /dev/null and b/modular_ss220/jobs/icons/custom_gun/custom_guns.dmi differ diff --git a/modular_ss220/jobs/icons/custom_gun/mob/custom_guns_lefthand.dmi b/modular_ss220/jobs/icons/custom_gun/mob/custom_guns_lefthand.dmi new file mode 100644 index 000000000000..0c0c7e8eb333 Binary files /dev/null and b/modular_ss220/jobs/icons/custom_gun/mob/custom_guns_lefthand.dmi differ diff --git a/modular_ss220/jobs/icons/custom_gun/mob/custom_guns_righthand.dmi b/modular_ss220/jobs/icons/custom_gun/mob/custom_guns_righthand.dmi new file mode 100644 index 000000000000..31a379ced390 Binary files /dev/null and b/modular_ss220/jobs/icons/custom_gun/mob/custom_guns_righthand.dmi differ diff --git a/modular_ss220/jobs/icons/hud.dmi b/modular_ss220/jobs/icons/hud.dmi index cc08b6d4a546..c7fde02dfce4 100644 Binary files a/modular_ss220/jobs/icons/hud.dmi and b/modular_ss220/jobs/icons/hud.dmi differ diff --git a/modular_ss220/jobs/icons/landmarks.dmi b/modular_ss220/jobs/icons/landmarks.dmi new file mode 100644 index 000000000000..2e114e152c5f Binary files /dev/null and b/modular_ss220/jobs/icons/landmarks.dmi differ diff --git a/modular_ss220/jukebox/_jukebox.dme b/modular_ss220/jukebox/_jukebox.dme index 1436e8bdd043..199ad76a2cd3 100644 --- a/modular_ss220/jukebox/_jukebox.dme +++ b/modular_ss220/jukebox/_jukebox.dme @@ -1,3 +1,6 @@ #include "_jukebox.dm" #include "code/jukebox.dm" +#include "code/jukebox_datum.dm" +#include "code/jukebox_dance.dm" +#include "code/jukebox_subtypes.dm" diff --git a/modular_ss220/jukebox/code/jukebox.dm b/modular_ss220/jukebox/code/jukebox.dm index a04edb6b53ef..c03132557038 100644 --- a/modular_ss220/jukebox/code/jukebox.dm +++ b/modular_ss220/jukebox/code/jukebox.dm @@ -1,101 +1,61 @@ /obj/machinery/jukebox - name = "\improper музыкальный автомат" + name = "\proper музыкальный автомат" desc = "Классический музыкальный автомат." icon = 'modular_ss220/jukebox/icons/jukebox.dmi' icon_state = "jukebox" - atom_say_verb = "states" + base_icon_state = "jukebox" + atom_say_verb = "states" + anchored = TRUE density = TRUE - anchored = FALSE idle_power_consumption = 10 active_power_consumption = 100 max_integrity = 200 integrity_failure = 100 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 20, ACID = 10) - var/active = FALSE - var/list/rangers = list() - var/stop = 0 - var/list/songs = list() - var/datum/track/selection = null - var/volume = 25 - var/max_volume = 25 - COOLDOWN_DECLARE(jukebox_error_cd) - -/obj/machinery/jukebox/anchored - anchored = TRUE - -/obj/machinery/jukebox/bar req_access = list(ACCESS_BAR) - -/obj/machinery/jukebox/bar/anchored - anchored = TRUE - -/obj/machinery/jukebox/disco - name = "\improper танцевальный диско-шар - тип IV" - desc = "Первые три прототипа были сняты с производства после инцидентов с массовыми жертвами." - icon_state = "disco" - max_integrity = 300 - integrity_failure = 150 - volume = 50 - max_volume = 75 - var/list/spotlights = list() - var/list/sparkles = list() - -/obj/machinery/jukebox/disco/anchored - anchored = TRUE - -/obj/machinery/jukebox/disco/anchored/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - anchored = TRUE - -/datum/track/New(name, path, length, beat) - song_name = name - song_path = path - song_length = length - song_beat = beat + /// Cooldown between "Error" sound effects being played + COOLDOWN_DECLARE(jukebox_error_cd) + /// Cooldown between being allowed to play another song + COOLDOWN_DECLARE(jukebox_song_cd) + /// TimerID to when the current song ends + var/song_timerid + /// Does Jukebox require coin? + var/need_coin = FALSE + /// Inserted coin for payment + var/obj/item/coin/payment + /// The actual music player datum that handles the music + var/datum/jukebox/music_player + // Type of music_player + var/jukebox_type = /datum/jukebox /obj/machinery/jukebox/Initialize(mapload) . = ..() - var/list/tracks = flist("config/jukebox_music/sounds/") - - for(var/S in tracks) - var/datum/track/T = new() - T.song_path = file("config/jukebox_music/sounds/[S]") - var/list/L = splittext(S,"+") - if(L.len != 3) - continue - T.song_name = L[1] - T.song_length = text2num(L[2]) - T.song_beat = text2num(L[3]) - songs |= T - - if(songs.len) - selection = pick(songs) + music_player = new jukebox_type(src) /obj/machinery/jukebox/Destroy() - dance_over() + stop_music() + QDEL_NULL(payment) + QDEL_NULL(music_player) return ..() -/obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(resistance_flags & INDESTRUCTIBLE)) - if(iswrench(O)) - if(!anchored && !isinspace()) - to_chat(user, span_notice("You secure [src] to the floor.")) - anchored = TRUE - else if(anchored) - to_chat(user, span_notice("You unsecure and disconnect [src].")) - anchored = FALSE - playsound(src, 'sound/items/deconstruct.ogg', 50, 1) - return - return ..() +/obj/machinery/jukebox/wrench_act(mob/user, obj/item/tool) + if(music_player.active_song_sound || (resistance_flags & INDESTRUCTIBLE)) + return + . = TRUE + if(!tool.use_tool(src, user, 0, volume = tool.tool_volume)) + return + if(!anchored && !isinspace()) + anchored = TRUE + WRENCH_ANCHOR_MESSAGE + else if(anchored) + anchored = FALSE + WRENCH_UNANCHOR_MESSAGE + playsound(src, 'sound/items/deconstruct.ogg', 50, 1) /obj/machinery/jukebox/update_icon_state() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]_broken" - return - if(active) - icon_state = "[initial(icon_state)]-active" + if(stat & (BROKEN)) + icon_state = "[base_icon_state]_broken" else - icon_state = "[initial(icon_state)]" + icon_state = "[base_icon_state][music_player.active_song_sound ? "-active" : null]" /obj/machinery/jukebox/update_overlays() . = ..() @@ -103,62 +63,63 @@ if(stat & (NOPOWER|BROKEN)) return - if(active) + if(music_player.active_song_sound) underlays += emissive_appearance(icon, "[icon_state]_lightmask") -/obj/machinery/jukebox/power_change() - if(!..()) - return - if(stat & NOPOWER) - turn_off() - return ..() - -/obj/machinery/jukebox/obj_break(damage_flag) - if(!(stat & BROKEN)) - stat |= BROKEN - turn_off() - /obj/machinery/jukebox/attack_hand(mob/user) - ..() - src.add_fingerprint(user) if(!anchored) to_chat(user, span_warning("Это устройство должно быть закреплено гаечным ключом!")) return - if(!allowed(user) && !isobserver(user)) - to_chat(user, span_warning("Ошибка: Отказано в доступе.")) - user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) - return - if(!songs.len && !isobserver(user)) + if(!length(music_player.songs)) to_chat(user, span_warning("Ошибка: Для вашей станции не было авторизовано ни одной музыкальной композиции. Обратитесь к Центральному командованию с просьбой решить эту проблему.")) user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) return - if(stat & (BROKEN|NOPOWER)) - return ui_interact(user) -/obj/machinery/jukebox/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/jukebox/attack_ghost(mob/user) + if(anchored) + return ui_interact(user) + +/obj/machinery/jukebox/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/coin)) + if(payment) + to_chat(user, span_info("Монетка уже вставлена.")) + return + if(!user.drop_item()) + to_chat(user, span_warning("Монетка выскользнула с вашей руки!")) + return + item.forceMove(src) + payment = item + to_chat(user, "Вы вставили [item] в музыкальный автомат.") + playsound(src, 'modular_ss220/aesthetics_sounds/sound/coin_accept.ogg', 50, TRUE) + ui_interact(user) + add_fingerprint(user) + if(item.GetID()) + if(allowed(user)) + need_coin = !need_coin + to_chat(user, span_notice("Вы [need_coin ? "вернули" : "сняли"] ограничения [need_coin ? "в" : "с"] [src].")) + else + to_chat(user, span_warning("Access denied.")) + return + + +/obj/machinery/jukebox/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/jukebox/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Jukebox", name, 370, 313, master_ui, state) + ui = new(user, src, "Jukebox", name) ui.open() /obj/machinery/jukebox/ui_data(mob/user) - var/list/data = list() - data["active"] = active - data["songs"] = list() - for(var/datum/track/S in songs) - var/list/track_data = list( - name = S.song_name - ) - data["songs"] += list(track_data) - data["track_selected"] = null - data["track_length"] = null - data["track_beat"] = null - if(selection) - data["track_selected"] = selection.song_name - data["track_length"] = DisplayTimeText(selection.song_length) - data["track_beat"] = selection.song_beat - data["volume"] = volume + var/list/data = ..() + music_player.get_ui_data(data) + + data["need_coin"] = need_coin + data["payment"] = payment + data["advanced_admin"] = user.can_advanced_admin_interact() + return data /obj/machinery/jukebox/ui_act(action, list/params) @@ -168,424 +129,79 @@ switch(action) if("toggle") - if(QDELETED(src)) - return - if(!active) - if(stop > world.time) - to_chat(usr, span_warning("Ошибка: Устройство находится в состоянии сброса, оно будет готово снова через [DisplayTimeText(stop-world.time)].")) - if(!COOLDOWN_FINISHED(src, jukebox_error_cd)) - return - playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE) - COOLDOWN_START(src, jukebox_error_cd, 5 SECONDS) - return + if(isnull(music_player.active_song_sound)) + if(!COOLDOWN_FINISHED(src, jukebox_song_cd)) + to_chat(usr, span_warning("Ошибка: Устройство перезагружается после предыдущего трека, \ + Оно будет готово через [DisplayTimeText(COOLDOWN_TIMELEFT(src, jukebox_song_cd))].")) + if(COOLDOWN_FINISHED(src, jukebox_error_cd)) + playsound(src, 'sound/misc/compiler-failure.ogg', 33, TRUE) + COOLDOWN_START(src, jukebox_error_cd, 15 SECONDS) + return TRUE + activate_music() - START_PROCESSING(SSobj, src) - return TRUE else - stop = 0 - return TRUE + stop_music() + + return TRUE + if("select_track") - if(active) - to_chat(usr, span_warning("Ошибка: Вы не можете сменить композицию, пока не закончится текущая.")) - return - var/list/available = list() - for(var/datum/track/S in songs) - available[S.song_name] = S - var/selected = params["track"] - if(QDELETED(src) || !selected || !istype(available[selected], /datum/track)) - return - selection = available[selected] + if(!isnull(music_player.active_song_sound)) + to_chat(usr, span_warning("Ошибка: Вы не можете сменить трек, пока не закончится текущий.")) + return TRUE + + var/datum/track/new_song = music_player.songs[params["track"]] + if(QDELETED(src) || !istype(new_song, /datum/track)) + return TRUE + + music_player.selection = new_song return TRUE + if("set_volume") var/new_volume = params["volume"] - if(new_volume == "reset") - volume = initial(volume) - return TRUE + if(new_volume == "reset") + music_player.reset_volume() else if(new_volume == "min") - volume = 0 - return TRUE + music_player.set_new_volume(0) else if(new_volume == "max") - volume = max_volume - return TRUE - else if(text2num(new_volume) != null) - if(text2num(new_volume) > max_volume) - volume = max_volume - else - volume = text2num(new_volume) - return TRUE - -/obj/machinery/jukebox/proc/activate_music() - active = TRUE - update_icon() - START_PROCESSING(SSobj, src) - stop = world.time + selection.song_length - -/obj/machinery/jukebox/disco/activate_music() - ..() - dance_setup() - lights_spin() - -/obj/machinery/jukebox/disco/proc/dance_setup() - stop = world.time + selection.song_length - var/turf/cen = get_turf(src) - FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING) - if(t.x == cen.x && t.y > cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "red" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if(t.x == cen.x && t.y < cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "purple" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if(t.x > cen.x && t.y == cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "#ffff00" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if(t.x < cen.x && t.y == cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "green" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "sw" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "ne" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "se" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = "nw" - L.light_power = 30 - (get_dist(src, L) * 8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - continue - END_FOR_DVIEW - -/obj/machinery/jukebox/disco/proc/hierofunk() - for(var/i in 1 to 10) - new /obj/effect/temp_visual/hierophant/telegraph/edge(get_turf(src)) - sleep(0.5 SECONDS) - -#define DISCO_INFENO_RANGE (rand(85, 115)*0.01) - -/obj/machinery/jukebox/disco/proc/lights_spin() - for(var/i in 1 to 25) - if(QDELETED(src) || !active) - return - var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) - S.alpha = 0 - sparkles += S - switch(i) - if(1 to 8) - spawn(0) - S.orbit(src, 30, TRUE, 60, 36, TRUE, FALSE) - if(9 to 16) - spawn(0) - S.orbit(src, 62, TRUE, 60, 36, TRUE, FALSE) - if(17 to 24) - spawn(0) - S.orbit(src, 95, TRUE, 60, 36, TRUE, FALSE) - if(25) - S.pixel_y = 7 - S.forceMove(get_turf(src)) - sleep(0.7 SECONDS) - for(var/obj/reveal in sparkles) - reveal.alpha = 255 - while(active) - for(var/obj/item/flashlight/spotlight/glow in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests - if(QDELETED(src) || !active || QDELETED(glow)) - return - if(glow.light_color == "red") - glow.light_color = "nw" - glow.light_power = glow.light_power * 1.48 - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == "nw") - glow.light_color = "green" - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.light_power = glow.light_power * 2 // Any changes to power must come in pairs to neutralize it for other colors - glow.update_light() - continue - if(glow.light_color == "green") - glow.light_color = "sw" - glow.light_power = glow.light_power * 0.5 - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == "sw") - glow.light_color = "purple" - glow.light_power = glow.light_power * 2.27 - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.update_light() - continue - if(glow.light_color == "purple") - glow.light_color = "se" - glow.light_power = glow.light_power * 0.44 - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == "se") - glow.light_color = "#ffff00" - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.update_light() - continue - if(glow.light_color == "#ffff00") - glow.light_color = "ne" - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == "ne") - glow.light_color = "red" - glow.light_power = glow.light_power * 0.68 - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.update_light() - continue - if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up - INVOKE_ASYNC(src, PROC_REF(hierofunk)) - sleep(selection.song_beat) - -#undef DISCO_INFENO_RANGE - -/obj/machinery/jukebox/disco/proc/dance(mob/living/M) //Show your moves - set waitfor = FALSE - if(M.client) - if(!(M.client.prefs.toggles2 & PREFTOGGLE_2_DANCE_DISCO)) //they just dont wanna dance - return - switch(rand(0,9)) - if(0 to 1) - dance2(M) - if(2 to 3) - dance3(M) - if(4 to 6) - dance4(M) - if(7 to 9) - dance5(M) - -/obj/machinery/jukebox/disco/proc/dance2(mob/living/M) - for(var/i = 1, i < 10, i++) - for(var/d in list(NORTH, SOUTH, EAST, WEST, EAST, SOUTH, NORTH, SOUTH, EAST, WEST, EAST, SOUTH)) - M.setDir(d) - if(i == WEST && !M.incapacitated()) - M.SpinAnimation(7, 1) - sleep(0.1 SECONDS) - sleep(2 SECONDS) - -/obj/machinery/jukebox/disco/proc/dance3(mob/living/M) - var/matrix/initial_matrix = matrix(M.transform) - for(var/i in 1 to 75) - if(!M) - return - switch(i) - if(1 to 15) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0, 1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(16 to 30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1, -1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(31 to 45) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1, -1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(46 to 60) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1, 1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(61 to 75) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1, 0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch(M.dir) - if(NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() - - -/obj/machinery/jukebox/disco/proc/dance4(mob/living/M) - var/speed = rand(1, 3) - set waitfor = 0 - var/time = 30 - while(time) - sleep(speed) - for(var/i in 1 to speed) - M.setDir(pick(GLOB.cardinal)) - if(IS_HORIZONTAL(M)) - M.stand_up() - else - M.lay_down() - time-- - -/obj/machinery/jukebox/disco/proc/dance5(mob/living/M) - animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - var/matrix/initial_matrix = matrix(M.transform) - for(var/i in 1 to 60) - if(!M) - return - if(i<31) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(i>30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch(M.dir) - if(NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if(WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() + music_player.set_volume_to_max() + else if(isnum(text2num(new_volume))) + music_player.set_new_volume(text2num(new_volume)) + return TRUE -/obj/machinery/jukebox/proc/dance_over() - for(var/mob/living/L in rangers) - if(!L || !L.client) - continue - L.stop_sound_channel(CHANNEL_JUKEBOX) - rangers = list() + if("loop") + music_player.sound_loops = !!params["looping"] + return TRUE -/obj/machinery/jukebox/disco/dance_over() - ..() - QDEL_LIST_CONTENTS(spotlights) - QDEL_LIST_CONTENTS(sparkles) +/obj/machinery/jukebox/proc/activate_music() + if(!isnull(music_player.active_song_sound)) + return FALSE -/obj/machinery/jukebox/proc/turn_off() - active = FALSE - change_power_mode(IDLE_POWER_USE) - STOP_PROCESSING(SSobj, src) - dance_over() - playsound(src,'sound/machines/terminal_off.ogg',50,1) + music_player.start_music() + change_power_mode(ACTIVE_POWER_USE) update_icon() - stop = world.time + 3 SECONDS - -/obj/machinery/jukebox/process() - if(world.time < stop && active) - var/sound/song_played = sound(selection.song_path) - if(active) - active_power_consumption = (volume * 10) - change_power_mode(ACTIVE_POWER_USE) - for(var/mob/M in range(14,src)) - if(!M.client) - continue - if(!(M in rangers)) - rangers[M] = TRUE - M.playsound_local(get_turf(M), null, volume, channel = CHANNEL_JUKEBOX, S = song_played) - for(var/mob/L in rangers) - if(get_dist(src, L) > 14) - rangers -= L - if(!L || !L.client) - continue - L.stop_sound_channel(CHANNEL_JUKEBOX) - else if(active) - turn_off() - -/obj/machinery/jukebox/disco/process() - . = ..() - if(active) - for(var/mob/living/M in rangers) - if(prob(5+(allowed(M)*4)) && (M.mobility_flags & MOBILITY_MOVE)) - dance(M) - -//Drum - -/obj/machinery/jukebox/drum_red - name = "\improper красный барабан" - desc = "Крутые барабаны от какой-то группы." - icon = 'modular_ss220/jukebox/icons/jukebox.dmi' - icon_state = "drum_red" + if(!music_player.sound_loops) + song_timerid = addtimer(CALLBACK(src, PROC_REF(stop_music)), music_player.selection.song_length, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) + return TRUE + +/obj/machinery/jukebox/proc/stop_music() + if(!isnull(song_timerid)) + deltimer(song_timerid) + + music_player.unlisten_all() + music_player.endTime = 0 + music_player.startTime = 0 + QDEL_NULL(payment) + + if(!QDELING(src)) + COOLDOWN_START(src, jukebox_song_cd, 5 SECONDS) + playsound(src,'sound/machines/terminal_off.ogg', 50, TRUE) + change_power_mode(IDLE_POWER_USE) + update_icon() + return TRUE -/obj/machinery/jukebox/drum_red/update_icon_state() +/obj/machinery/jukebox/obj_break() if(stat & BROKEN) - icon_state = "[initial(icon_state)]_broken" - return - icon_state = "[initial(icon_state)]" - - if(active) - icon_state = "[initial(icon_state)]-active" - else if(anchored) - icon_state = "[initial(icon_state)]_anchored" - -/obj/machinery/jukebox/drum_red/attackby(obj/item/O, mob/user, params) - if(active || (resistance_flags & INDESTRUCTIBLE)) return - - if(!iswrench(O)) - return ..() - - if(!anchored && !isinspace()) - to_chat(user, span_notice("You secure [src] to the floor.")) - anchored = TRUE - update_icon() - else if(anchored) - to_chat(user, span_notice("You unsecure and disconnect [src].")) - anchored = FALSE - update_icon() - - playsound(src, 'sound/items/deconstruct.ogg', 50, 1) - -/obj/machinery/jukebox/drum_red/drum_yellow - name = "\improper желтый барабан" - icon_state = "drum_yello" - -/obj/machinery/jukebox/drum_red/drum_blue - name = "\improper синий барабан" - icon_state = "drum_blue" - + stat |= BROKEN + idle_power_consumption = 0 + stop_music() diff --git a/modular_ss220/jukebox/code/jukebox_dance.dm b/modular_ss220/jukebox/code/jukebox_dance.dm new file mode 100644 index 000000000000..30e5e313b52d --- /dev/null +++ b/modular_ss220/jukebox/code/jukebox_dance.dm @@ -0,0 +1,277 @@ +/obj/machinery/jukebox/disco/proc/dance_setup() + var/turf/cen = get_turf(src) + FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING) + if(t.x == cen.x && t.y > cen.y) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "red" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if(t.x == cen.x && t.y < cen.y) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "purple" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if(t.x > cen.x && t.y == cen.y) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "#ffff00" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if(t.x < cen.x && t.y == cen.y) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "green" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y)) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "sw" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y)) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "ne" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y)) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "se" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y)) + var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) + L.light_color = "nw" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + continue + END_FOR_DVIEW + +/obj/machinery/jukebox/disco/proc/hierofunk() + for(var/i in 1 to 10) + new /obj/effect/temp_visual/hierophant/telegraph/edge(get_turf(src)) + sleep(0.5 SECONDS) + +#define DISCO_INFENO_RANGE (rand(85, 115)*0.01) + +/obj/machinery/jukebox/disco/proc/lights_spin() + for(var/i in 1 to 25) + if(QDELETED(src) || !music_player.active_song_sound) + return + var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) + S.alpha = 0 + sparkles += S + switch(i) + if(1 to 8) + spawn(0) + S.orbit(src, 30, TRUE, 60, 36, TRUE, FALSE) + if(9 to 16) + spawn(0) + S.orbit(src, 62, TRUE, 60, 36, TRUE, FALSE) + if(17 to 24) + spawn(0) + S.orbit(src, 95, TRUE, 60, 36, TRUE, FALSE) + if(25) + S.pixel_y = 7 + S.forceMove(get_turf(src)) + sleep(0.7 SECONDS) + for(var/obj/reveal in sparkles) + reveal.alpha = 255 + while(music_player.active_song_sound) + for(var/obj/item/flashlight/spotlight/glow in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests + if(QDELETED(src) || !music_player.active_song_sound || QDELETED(glow)) + return + if(glow.light_color == "red") + glow.light_color = "nw" + glow.light_power = glow.light_power * 1.48 + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "nw") + glow.light_color = "green" + glow.light_range = glow.range * DISCO_INFENO_RANGE + glow.light_power = glow.light_power * 2 // Any changes to power must come in pairs to neutralize it for other colors + glow.update_light() + continue + if(glow.light_color == "green") + glow.light_color = "sw" + glow.light_power = glow.light_power * 0.5 + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "sw") + glow.light_color = "purple" + glow.light_power = glow.light_power * 2.27 + glow.light_range = glow.range * DISCO_INFENO_RANGE + glow.update_light() + continue + if(glow.light_color == "purple") + glow.light_color = "se" + glow.light_power = glow.light_power * 0.44 + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "se") + glow.light_color = "#ffff00" + glow.light_range = glow.range * DISCO_INFENO_RANGE + glow.update_light() + continue + if(glow.light_color == "#ffff00") + glow.light_color = "ne" + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "ne") + glow.light_color = "red" + glow.light_power = glow.light_power * 0.68 + glow.light_range = glow.range * DISCO_INFENO_RANGE + glow.update_light() + continue + if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up + INVOKE_ASYNC(src, PROC_REF(hierofunk)) + sleep(0.5 SECONDS) + +#undef DISCO_INFENO_RANGE + +/obj/machinery/jukebox/disco/proc/dance(mob/living/M) //Show your moves + set waitfor = FALSE + if(M.client) + if(!(M.client.prefs.toggles2 & PREFTOGGLE_2_DANCE_DISCO)) //they just dont wanna dance + return + switch(rand(0,9)) + if(0 to 1) + dance2(M) + if(2 to 3) + dance3(M) + if(4 to 6) + dance4(M) + if(7 to 9) + dance5(M) + +/obj/machinery/jukebox/disco/proc/dance2(mob/living/M) + for(var/i = 1, i < 10, i++) + for(var/d in list(NORTH, SOUTH, EAST, WEST, EAST, SOUTH, NORTH, SOUTH, EAST, WEST, EAST, SOUTH)) + M.setDir(d) + if(i == WEST && !M.incapacitated()) + M.SpinAnimation(7, 1) + sleep(0.1 SECONDS) + sleep(2 SECONDS) + +/obj/machinery/jukebox/disco/proc/dance3(mob/living/M) + var/matrix/initial_matrix = matrix(M.transform) + for(var/i in 1 to 75) + if(!M) + return + switch(i) + if(1 to 15) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0, 1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(16 to 30) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(1, -1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(31 to 45) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-1, -1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(46 to 60) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-1, 1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(61 to 75) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(1, 0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + M.setDir(turn(M.dir, 90)) + switch(M.dir) + if(NORTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(SOUTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,-3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(EAST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(WEST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + sleep(0.1 SECONDS) + M.lying_fix() + + +/obj/machinery/jukebox/disco/proc/dance4(mob/living/M) + var/speed = rand(1, 3) + set waitfor = 0 + var/time = 30 + while(time) + sleep(speed) + for(var/i in 1 to speed) + M.setDir(pick(GLOB.cardinal)) + if(IS_HORIZONTAL(M)) + M.stand_up() + else + M.lay_down() + time-- + +/obj/machinery/jukebox/disco/proc/dance5(mob/living/M) + animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) + var/matrix/initial_matrix = matrix(M.transform) + for(var/i in 1 to 60) + if(!M) + return + if(i<31) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(i>30) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,-1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + M.setDir(turn(M.dir, 90)) + switch(M.dir) + if(NORTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(SOUTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,-3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(EAST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(WEST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + sleep(0.1 SECONDS) + M.lying_fix() + +/obj/machinery/jukebox/disco/proc/dance_over() + for(var/mob/living/L in rangers) + if(!L || !L.client) + continue + L.stop_sound_channel(CHANNEL_JUKEBOX) + rangers = list() + QDEL_LIST_CONTENTS(spotlights) + QDEL_LIST_CONTENTS(sparkles) diff --git a/modular_ss220/jukebox/code/jukebox_datum.dm b/modular_ss220/jukebox/code/jukebox_datum.dm new file mode 100644 index 000000000000..d1bfa410cbbf --- /dev/null +++ b/modular_ss220/jukebox/code/jukebox_datum.dm @@ -0,0 +1,428 @@ +/// Checks if the mob has jukebox muted in their preferences +#define IS_PREF_MUTED(mob) (!isnull(mob.client) && !(mob.client.prefs.sound & SOUND_DISCO)) + +// Reasons for appling STATUS_MUTE to a mob's sound status +/// The mob is deaf +#define MUTE_DEAF (1<<0) +/// The mob has disabled jukeboxes in their preferences +#define MUTE_PREF (1<<1) +/// The mob is out of range of the jukebox +#define MUTE_RANGE (1<<2) + +/** + * ## Jukebox datum + * + * Plays music to nearby mobs when hosted in a movable or a turf. + */ +/datum/jukebox + /// Atom that hosts the jukebox. Can be a turf or a movable. + VAR_FINAL/atom/parent + /// List of /datum/tracks we can play. Set via get_songs(). + VAR_FINAL/list/songs = list() + /// Current song track selected + VAR_FINAL/datum/track/selection + /// Current song datum playing + VAR_FINAL/sound/active_song_sound + /// Whether the jukebox requires a connect_range component to check for new listeners + VAR_PROTECTED/requires_range_check = TRUE + + /// Assoc list of all mobs listening to the jukebox to their sound status. + VAR_PRIVATE/list/mob/listeners = list() + + /// Volume of the songs played. + /// Do not set directly, use set_new_volume() instead. + VAR_PROTECTED/volume = 50 + /// Max possible to set volume. + VAR_PROTECTED/max_volume = 100 + + /// Range at which the sound plays to players, can also be a view "XxY" string. + VAR_PROTECTED/sound_range + /// How far away horizontally from the jukebox can you be before you stop hearing it. + VAR_PRIVATE/x_cutoff + /// How far away vertically from the jukebox can you be before you stop hearing it. + VAR_PRIVATE/z_cutoff + + /// Whether the music loops when done. + var/sound_loops = FALSE + /// Path to music folder. + var/songs_path = "config/jukebox_music/sounds/" + /// Music start time. + var/startTime = 0 + /// Music end time. + var/endTime = 0 + +/datum/jukebox/New(atom/new_parent) + if(!ismovable(new_parent) && !isturf(new_parent)) + stack_trace("[type] created on non-turf or non-movable: [new_parent ? "[new_parent] ([new_parent.type])" : "null"])") + qdel(src) + return + + parent = new_parent + + if(isnull(sound_range)) + sound_range = world.view + var/list/worldviewsize = getviewsize(sound_range) + x_cutoff = CEILING((worldviewsize[1] * 1.25) / 2, 1) // * 1.25 gives us some extra range to fade out with + z_cutoff = CEILING((worldviewsize[2] * 1.25) / 2, 1) // and / 2 is because world view is the whole screen, and we want the centre + + if(requires_range_check) + var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(check_new_listener)) + AddComponent(/datum/component/connect_range, parent, connections, max(x_cutoff, z_cutoff)) + + songs = init_songs() + if(length(songs)) + selection = songs[pick(songs)] + + RegisterSignal(parent, COMSIG_ENTER_AREA, PROC_REF(on_enter_area)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(parent_delete)) + +/datum/jukebox/Destroy() + unlisten_all() + parent = null + selection = null + songs.Cut() + active_song_sound = null + return ..() + +/// When our parent is deleted, we should go too. +/datum/jukebox/proc/parent_delete(datum/source) + SIGNAL_HANDLER + qdel(src) + +/** + * Initializes the track list. + * + * By default, this loads all tracks from the config datum. + * + * Returns + * * An assoc list of track names to /datum/track. Track names must be unique. + */ +/datum/jukebox/proc/init_songs() + return load_songs_from_config() + +/datum/jukebox/proc/fill_songs_static_list() + var/songs_list = list() + var/list/tracks = flist(songs_path) + for(var/track_file in tracks) + var/datum/track/new_track = new() + new_track.song_path = file("[songs_path + track_file]") + var/list/track_data = splittext(track_file, "+") + if(length(track_data) != 3) + continue + new_track.song_name = track_data[1] + new_track.song_length = text2num(track_data[2]) + new_track.song_beat = text2num(track_data[3]) + songs_list[new_track.song_name] = new_track + + if(!length(songs_list)) + var/datum/track/default/default_track = new() + songs_list[default_track.song_name] = default_track + + return songs_list + + +/// Loads the config sounds once, and returns a copy of them. +/datum/jukebox/proc/load_songs_from_config() + var/static/list/config_songs + if(isnull(config_songs)) + config_songs = fill_songs_static_list() + // returns a copy so it can mutate if desired. + return config_songs.Copy() + +/** + * Returns a set of general data relating to the jukebox for use in TGUI. + * + * Returns + * * A list of UI data + */ +/datum/jukebox/proc/get_ui_data(list/data) + var/list/songs_data = list() + for(var/song_name in songs) + var/datum/track/one_song = songs[song_name] + UNTYPED_LIST_ADD(songs_data, list( \ + "name" = song_name, \ + "length" = round(one_song.song_length / 10, 1), \ + "beat" = one_song.song_beat, \ + )) + + data["active"] = !!active_song_sound + data["songs"] = songs_data + data["track_selected"] = selection?.song_name + data["looping"] = sound_loops + data["volume"] = volume + data["max_volume"] = max_volume + data["startTime"] = startTime + data["endTime"] = endTime + data["worldTime"] = world.time + return data + +/** + * Sets the sound's range to a new value. This can be a number or a view size string "XxY". + * Then updates any mobs listening to it. + */ +/datum/jukebox/proc/set_sound_range(new_range) + if(sound_range == new_range) + return + sound_range = new_range + var/list/worldviewsize = getviewsize(sound_range) + x_cutoff = CEILING(worldviewsize[1] / 2, 1) + z_cutoff = CEILING(worldviewsize[2] / 2, 1) + update_all() + +/** + * Sets the sound's volume to a new value. + * Then updates any mobs listening to it. + */ +/datum/jukebox/proc/set_new_volume(new_vol) + new_vol = clamp(new_vol, 0, max_volume) + if(volume == new_vol) + return + volume = new_vol + if(!active_song_sound) + return + active_song_sound.volume = volume + update_all() + +/// Sets volume to the maximum possible value. +/datum/jukebox/proc/set_volume_to_max() + set_new_volume(max_volume) + +/// Reset volume to the initial value. +/datum/jukebox/proc/reset_volume() + set_new_volume(initial(volume)) + +/** + * Sets the sound's environment to a new value. + * Then updates any mobs listening to it. + */ +/datum/jukebox/proc/set_new_environment(new_env) + if(!active_song_sound || active_song_sound.environment == new_env) + return + active_song_sound.environment = new_env + update_all() + +/// Helper to stop the music for all mobs listening to the music. +/datum/jukebox/proc/unlisten_all() + for(var/mob/listening as anything in listeners) + deregister_listener(listening) + active_song_sound = null + +/// Helper to update all mobs currently listening to the music. +/datum/jukebox/proc/update_all() + for(var/mob/listening as anything in listeners) + update_listener(listening) + +/// Helper to kickstart the music for all mobs in hearing range of the jukebox. +/datum/jukebox/proc/start_music() + for(var/mob/nearby in hearers(sound_range, parent)) + register_listener(nearby) + startTime = world.time + for(var/song_name in songs) + var/datum/track/one_song = songs[song_name] + endTime = startTime + one_song.song_length + +/// Helper to get all mobs currently, ACTIVELY listening to the jukebox. +/datum/jukebox/proc/get_active_listeners() + var/list/all_listeners = list() + for(var/mob/listener as anything in listeners) + if(listeners[listener] & SOUND_MUTE) + continue + all_listeners += listener + return all_listeners + +/// Registers the passed mob as a new listener to the jukebox. +/datum/jukebox/proc/register_listener(mob/new_listener) + PROTECTED_PROC(TRUE) + + listeners[new_listener] = NONE + RegisterSignal(new_listener, COMSIG_PARENT_QDELETING, PROC_REF(listener_deleted)) + + if(isnull(new_listener.client)) + RegisterSignal(new_listener, COMSIG_MOB_LOGIN, PROC_REF(listener_login)) + return + + RegisterSignal(new_listener, COMSIG_MOVABLE_MOVED, PROC_REF(listener_moved)) + RegisterSignals(new_listener, list(SIGNAL_ADDTRAIT(TRAIT_DEAF), SIGNAL_REMOVETRAIT(TRAIT_DEAF)), PROC_REF(listener_deaf)) + + if(HAS_TRAIT(new_listener, TRAIT_DEAF) || IS_PREF_MUTED(new_listener)) + listeners[new_listener] |= SOUND_MUTE + + if(isnull(active_song_sound)) + var/area/juke_area = get_area(parent) + active_song_sound = sound(selection.song_path) + active_song_sound.channel = CHANNEL_JUKEBOX + active_song_sound.priority = 255 + active_song_sound.falloff = 2 + active_song_sound.volume = volume + active_song_sound.y = 1 + active_song_sound.environment = juke_area.sound_environment || SOUND_ENVIRONMENT_NONE + active_song_sound.repeat = sound_loops + + update_listener(new_listener) + // if you have a sound with status SOUND_UPDATE, + // and try to play it to a client who is not listening to the sound already, + // it will not work. + // so we only add this status AFTER the first update, which plays the first sound. + // and after that it's fine to keep it on the sound so it updates as the x/z does. + listeners[new_listener] |= SOUND_UPDATE + +/// Deregisters mobs on deletion. +/datum/jukebox/proc/listener_deleted(mob/source) + SIGNAL_HANDLER + deregister_listener(source) + +/// Updates the sound's position on mob movement. +/datum/jukebox/proc/listener_moved(mob/source) + SIGNAL_HANDLER + update_listener(source) + +/// Allows mobs who are clientless when the music starts to hear it when they log in. +/datum/jukebox/proc/listener_login(mob/source) + SIGNAL_HANDLER + deregister_listener(source) + register_listener(source) + +/// Updates the sound's mute status when the mob's deafness updates. +/datum/jukebox/proc/listener_deaf(mob/source) + SIGNAL_HANDLER + + if(HAS_TRAIT(source, TRAIT_DEAF)) + listeners[source] |= SOUND_MUTE + else if(!unmute_listener(source, MUTE_DEAF)) + return + update_listener(source) + +/** + * Unmutes the passed mob's sound from the passed reason. + * + * Arguments + * * mob/listener - The mob to unmute. + * * reason - The reason to unmute them for. Can be a combination of MUTE_DEAF, MUTE_PREF, MUTE_RANGE. + */ +/datum/jukebox/proc/unmute_listener(mob/listener, reason) + // We need to check everything BUT the reason we're unmuting for + // Because if we're muted for a different reason we don't wanna touch it + reason = ~reason + + if((reason & MUTE_DEAF) && HAS_TRAIT(listener, TRAIT_DEAF)) + return FALSE + + if((reason & MUTE_PREF) && IS_PREF_MUTED(listener)) + return FALSE + + if(reason & MUTE_RANGE) + var/turf/sound_turf = get_turf(parent) + var/turf/listener_turf = get_turf(listener) + if(isnull(sound_turf) || isnull(listener_turf)) + return FALSE + if(sound_turf.z != listener_turf.z) + return FALSE + if(abs(sound_turf.x - listener_turf.x) > x_cutoff) + return FALSE + if(abs(sound_turf.y - listener_turf.y) > z_cutoff) + return FALSE + + listeners[listener] &= ~SOUND_MUTE + return TRUE + +/// Deregisters the passed mob as a listener to the jukebox, stopping the music. +/datum/jukebox/proc/deregister_listener(mob/no_longer_listening) + PROTECTED_PROC(TRUE) + + listeners -= no_longer_listening + no_longer_listening.stop_sound_channel(CHANNEL_JUKEBOX) + UnregisterSignal(no_longer_listening, list( + COMSIG_MOB_LOGIN, + COMSIG_PARENT_QDELETING, + COMSIG_MOVABLE_MOVED, + SIGNAL_ADDTRAIT(TRAIT_DEAF), + SIGNAL_REMOVETRAIT(TRAIT_DEAF), + )) + +/// Updates the passed mob's sound in according to their position and status. +/datum/jukebox/proc/update_listener(mob/listener) + PROTECTED_PROC(TRUE) + + active_song_sound.status = listeners[listener] || NONE + + var/turf/sound_turf = get_turf(parent) + var/turf/listener_turf = get_turf(listener) + if(isnull(sound_turf) || isnull(listener_turf)) // ?? + active_song_sound.x = 0 + active_song_sound.z = 0 + + else if(sound_turf.z != listener_turf.z) // Could MAYBE model multi-z jukeboxes but that's too complex for now + listeners[listener] |= SOUND_MUTE + + else + // keep in mind sound XYZ is different to world XYZ. sound +-z = world +-y + var/new_x = sound_turf.x - listener_turf.x + var/new_z = sound_turf.y - listener_turf.y + + if((abs(new_x) > x_cutoff || abs(new_z) > z_cutoff)) + listeners[listener] |= SOUND_MUTE + + else if(listeners[listener] & SOUND_MUTE) + unmute_listener(listener, MUTE_RANGE) + + active_song_sound.x = new_x + active_song_sound.z = new_z + + SEND_SOUND(listener, active_song_sound) + +/// When the jukebox moves, we need to update all listeners. +/datum/jukebox/proc/on_moved(datum/source, ...) + SIGNAL_HANDLER + update_all() + +/// When the jukebox enters a new area entirely, we need to update the environment to the new area's. +/datum/jukebox/proc/on_enter_area(datum/source, area/area_to_register) + SIGNAL_HANDLER + set_new_environment(area_to_register.sound_environment || SOUND_ENVIRONMENT_NONE) + +/// Check for new mobs entering the jukebox's range. +/datum/jukebox/proc/check_new_listener(datum/source, atom/movable/entered) + SIGNAL_HANDLER + + if(isnull(active_song_sound)) + return + if(!ismob(entered)) + return + if(entered in listeners) + return + register_listener(entered) + +/** + * Subtype which only plays the music to the mob you pass in via start_music(). + * + * Multiple mobs can still listen at once, but you must register them all manually via start_music(). + */ +/datum/jukebox/single_mob + requires_range_check = FALSE + +/datum/jukebox/single_mob/start_music(mob/solo_listener) + register_listener(solo_listener) + +/datum/jukebox/drum + songs_path = "config/drum_music/" + +/datum/jukebox/drum/load_songs_from_config() + var/static/list/config_songs + if(isnull(config_songs)) + config_songs = fill_songs_static_list() + // returns a copy so it can mutate if desired. + return config_songs.Copy() + +#undef IS_PREF_MUTED + +#undef MUTE_DEAF +#undef MUTE_PREF +#undef MUTE_RANGE + +// Default track supplied for testing and also because it's a banger +/datum/track/default + song_path = 'sound/music/title3.ogg' + song_name = "Tintin on the Moon" + song_length = 3 MINUTES + 52 SECONDS + song_beat = 1 SECONDS diff --git a/modular_ss220/jukebox/code/jukebox_subtypes.dm b/modular_ss220/jukebox/code/jukebox_subtypes.dm new file mode 100644 index 000000000000..b1f89095a2ec --- /dev/null +++ b/modular_ss220/jukebox/code/jukebox_subtypes.dm @@ -0,0 +1,74 @@ +/obj/machinery/jukebox/bar + need_coin = TRUE + +/obj/machinery/jukebox/disco + name = "\proper танцевальный диско-шар - тип IV" + desc = "Первые три прототипа были сняты с производства после инцидентов с массовыми жертвами." + icon_state = "disco" + base_icon_state = "disco" + max_integrity = 300 + integrity_failure = 150 + var/list/rangers = list() + + /// Spotlight effects being played + VAR_PRIVATE/list/obj/item/flashlight/spotlight/spotlights = list() + /// Sparkle effects being played + VAR_PRIVATE/list/obj/effect/overlay/sparkles/sparkles = list() + +/obj/machinery/jukebox/disco/indestructible + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/machinery/jukebox/disco/activate_music() + . = ..() + if(!.) + return + dance_setup() + lights_spin() + START_PROCESSING(SSobj, src) + +/obj/machinery/jukebox/disco/stop_music() + . = ..() + if(!.) + return + QDEL_LIST_CONTENTS(spotlights) + QDEL_LIST_CONTENTS(sparkles) + STOP_PROCESSING(SSobj, src) + +/obj/machinery/jukebox/disco/process() + for(var/mob/living/dancer in music_player.get_active_listeners()) + if(!(dancer.mobility_flags & MOBILITY_MOVE)) + continue + dance(dancer) + +// Drums +/obj/machinery/jukebox/drum_red + name = "\proper красный барабан" + desc = "Крутые барабаны от какой-то группы." + icon_state = "drum_red_unanchored" + base_icon_state = "drum_red" + jukebox_type = /datum/jukebox/drum + anchored = FALSE + +/obj/machinery/jukebox/drum_red/wrench_act() + . = ..() + icon_state = "[base_icon_state][anchored ? null : "_unanchored"]" + +/obj/machinery/jukebox/drum_red/update_icon_state() + if(stat & (BROKEN)) + icon_state = "[base_icon_state]_broken" + else + icon_state = "[base_icon_state][music_player.active_song_sound ? "-active" : null]" + +/obj/machinery/jukebox/drum_red/drum_yellow + name = "\proper желтый барабан" + icon_state = "drum_yellow_unanchored" + base_icon_state = "drum_yellow" + +/obj/machinery/jukebox/drum_red/drum_blue + name = "\proper синий барабан" + icon_state = "drum_blue_unanchored" + base_icon_state = "drum_blue" + +/datum/supply_packs/misc/bigband/New() + . = ..() + contains |= /obj/machinery/jukebox/drum_red diff --git a/modular_ss220/jukebox/icons/jukebox.dmi b/modular_ss220/jukebox/icons/jukebox.dmi index c27c9c557016..46f6ff2fdb11 100644 Binary files a/modular_ss220/jukebox/icons/jukebox.dmi and b/modular_ss220/jukebox/icons/jukebox.dmi differ diff --git a/modular_ss220/keybindings/_keybindings.dme b/modular_ss220/keybindings/_keybindings.dme index 189bd64129c5..537d7ee0b346 100644 --- a/modular_ss220/keybindings/_keybindings.dme +++ b/modular_ss220/keybindings/_keybindings.dme @@ -3,6 +3,7 @@ #include "code/admin_keybinds.dm" #include "code/carbon_keybinds.dm" #include "code/client.dm" +#include "code/communication_keybinds.dm" #include "code/emote_keybinds.dm" #include "code/human_keybinds.dm" #include "code/living_keybinds.dm" diff --git a/modular_ss220/keybindings/code/admin_keybinds.dm b/modular_ss220/keybindings/code/admin_keybinds.dm index b3cf2eb7a6c2..7fa990c3477f 100644 --- a/modular_ss220/keybindings/code/admin_keybinds.dm +++ b/modular_ss220/keybindings/code/admin_keybinds.dm @@ -1,14 +1,6 @@ /datum/keybinding/admin/mc_debug keys = null -/datum/keybinding/admin/msay - name = "Msay" - keys = list("ShiftF5") - -/datum/keybinding/admin/asay - name = "Asay" - keys = list("F5") - /datum/keybinding/admin/aghost name = "Aghost" keys = list("F6") @@ -24,7 +16,3 @@ /datum/keybinding/admin/invisimin name = "Invisimin" keys = list("F9") - -/datum/keybinding/admin/dsay - name = "Dsay" - keys = list("F10") diff --git a/modular_ss220/keybindings/code/client.dm b/modular_ss220/keybindings/code/client.dm index 1cf32d8c4fb7..65d38ac2a60d 100644 --- a/modular_ss220/keybindings/code/client.dm +++ b/modular_ss220/keybindings/code/client.dm @@ -2,22 +2,6 @@ name = "Admin Help" keys = list("F1") -/datum/keybinding/client/ooc - name = "OOC" - keys = list("F2", "O") - -/datum/keybinding/client/looc - name = "Локальный OOC" - keys = list("L") - -/datum/keybinding/client/say - name = "Say" - keys = list("F3", "T") - -/datum/keybinding/client/me - name = "Me" - keys = list("F4", "M") - /datum/keybinding/client/toggle_min_hud name = "Переключить минимальный HUD" keys = list("F12") diff --git a/modular_ss220/keybindings/code/communication_keybinds.dm b/modular_ss220/keybindings/code/communication_keybinds.dm new file mode 100644 index 000000000000..b00ceb766d9d --- /dev/null +++ b/modular_ss220/keybindings/code/communication_keybinds.dm @@ -0,0 +1,26 @@ +/datum/keybinding/client/communication/ooc + keys = list("O", "F2") + +/datum/keybinding/client/communication/looc + keys = list("L") + +/datum/keybinding/client/communication/say + keys = list("T", "F3") + +/datum/keybinding/client/communication/me + keys = list("M", "F4") + +/datum/keybinding/client/communication/whisper + keys = list("ShiftT") + +/datum/keybinding/client/communication/radio + keys = list("Y") + +/datum/keybinding/client/communication/msay + keys = list("ShiftF5") + +/datum/keybinding/client/communication/asay + keys = list("F5") + +/datum/keybinding/client/communication/dsay + keys = list("F10") diff --git a/modular_ss220/keybindings/code/emote_keybinds.dm b/modular_ss220/keybindings/code/emote_keybinds.dm index 09f19a0c3adb..fb5a7d8144db 100644 --- a/modular_ss220/keybindings/code/emote_keybinds.dm +++ b/modular_ss220/keybindings/code/emote_keybinds.dm @@ -1,429 +1,461 @@ /datum/keybinding/emote/flip - name = "Кувырок" + name = EMOTE_FLIP /datum/keybinding/emote/spin - name = "Крутиться" + name = EMOTE_SPIN /datum/keybinding/emote/blush - name = "Краснеть" + name = EMOTE_BLUSH /datum/keybinding/emote/bow - name = "Поклониться" + name = EMOTE_BOW /datum/keybinding/emote/burp - name = "Рыгнуть" + name = EMOTE_BURP /datum/keybinding/emote/choke - name = "Подавиться" + name = EMOTE_CHOKE /datum/keybinding/emote/collapse - name = "Рухнуть" + name = EMOTE_COLLAPSE /datum/keybinding/emote/dance - name = "Танцевать" + name = EMOTE_DANCE /datum/keybinding/emote/jump - name = "Прыгать" + name = EMOTE_JUMP /datum/keybinding/emote/deathgasp - name = "Предсмертное дыхание" + name = EMOTE_DEATHGASP /datum/keybinding/emote/drool - name = "Нести чепуху" + name = EMOTE_DROOL /datum/keybinding/emote/quiver - name = "Трепетать" + name = EMOTE_QUIVER /datum/keybinding/emote/frown - name = "Хмуриться" + name = EMOTE_FROWN /datum/keybinding/emote/glare - name = "Недовольно смотреть" + name = EMOTE_GLARE /datum/keybinding/emote/gag - name = "Подавиться" + name = EMOTE_GAG /datum/keybinding/emote/grin - name = "Оскалиться в улыбке" + name = EMOTE_GRIN /datum/keybinding/emote/grimace - name = "Корчиться" + name = EMOTE_GRIMACE /datum/keybinding/emote/groan - name = "Болезненно вздохнуть" + name = EMOTE_GROAN /datum/keybinding/emote/look - name = "Смотреть" + name = EMOTE_LOOK /datum/keybinding/emote/bshake - name = "Трястись" + name = EMOTE_BSHAKE /datum/keybinding/emote/shudder - name = "Содрогаться" + name = EMOTE_SHUDDER /datum/keybinding/emote/point - name = "Указать пальцем" + name = EMOTE_POINT /datum/keybinding/emote/pout - name = "Надуть губы" + name = EMOTE_POUT /datum/keybinding/emote/scream - name = "Кричать" + name = EMOTE_SCREAM /datum/keybinding/emote/shake - name = "Трясти головой" + name = EMOTE_SHAKE /datum/keybinding/emote/shiver - name = "Дрожать" + name = EMOTE_SHIVER /datum/keybinding/emote/sigh - name = "Вздыхать" + name = EMOTE_SIGH /datum/keybinding/emote/happy - name = "Вздыхать (счастливо)" + name = EMOTE_SIGH_HAPPY /datum/keybinding/emote/sit - name = "Сесть" + name = EMOTE_SIT /datum/keybinding/emote/smile - name = "Улыбнуться" + name = EMOTE_SMILE /datum/keybinding/emote/smug - name = "Самодовольно" + name = EMOTE_SMUG /datum/keybinding/emote/sniff - name = "Нюхать" + name = EMOTE_SNIFF /datum/keybinding/emote/snore - name = "Храпеть" + name = EMOTE_SNORE /datum/keybinding/emote/nightmare - name = "Кошмар" + name = EMOTE_NIGHTMARE /datum/keybinding/emote/stare - name = "Пялиться" + name = EMOTE_STARE /datum/keybinding/emote/stretch - name = "Растянуться" + name = EMOTE_STRECH /datum/keybinding/emote/sulk - name = "Дуться" + name = EMOTE_SULK /datum/keybinding/emote/sway - name = "Покачиваться" + name = EMOTE_SWAY /datum/keybinding/emote/swear - name = "Ругаться" + name = EMOTE_SWEAR /datum/keybinding/emote/tilt - name = "Наклонить голову" + name = EMOTE_TILT /datum/keybinding/emote/tremble - name = "Дрожать в ужасе" + name = EMOTE_TREMBLE /datum/keybinding/emote/twitch - name = "Дёргаться (сильно)" + name = EMOTE_TWITCH /datum/keybinding/emote/twitch_s - name = "Дёргаться" + name = EMOTE_TWITCHS /datum/keybinding/emote/whimper - name = "Хныкать" + name = EMOTE_WHIMPER /datum/keybinding/emote/wsmile - name = "Улыбаться (слабо)" + name = EMOTE_WSMILE /datum/keybinding/emote/carbon/blink - name = "Моргать" + name = EMOTE_CARBON_BLINK /datum/keybinding/emote/carbon/blink_r - name = "Моргать (быстро)" + name = EMOTE_CARBON_BLINKR /datum/keybinding/emote/carbon/clap - name = "Хлопать" + name = EMOTE_CARBON_CLAP /datum/keybinding/emote/carbon/cross - name = "Скрестить руки" + name = EMOTE_CARBON_CROSS /datum/keybinding/emote/carbon/chuckle - name = "Усмехнуться" + name = EMOTE_CARBON_CHUCKLE /datum/keybinding/emote/carbon/cough - name = "Кашлять" + name = EMOTE_CARBON_COUGH /datum/keybinding/emote/carbon/moan - name = "Стонать" + name = EMOTE_CARBON_MOAN /datum/keybinding/emote/carbon/giggle - name = "Хихикать" + name = EMOTE_CARBON_GIGGLE /datum/keybinding/emote/carbon/gurgle - name = "Булькать" + name = EMOTE_CARBON_GURGLE /datum/keybinding/emote/carbon/inhale - name = "Вдохнуть" + name = EMOTE_CARBON_INHALE /datum/keybinding/emote/carbon/inhale/sharp - name = "Вдохнуть (резко)" + name = EMOTE_CARBON_INHALE_SHARP /datum/keybinding/emote/carbon/kiss - name = "Поцеловать" + name = EMOTE_CARBON_KISS /datum/keybinding/emote/carbon/wave - name = "Махать" + name = EMOTE_CARBON_WAVE /datum/keybinding/emote/carbon/yawn - name = "Зевать" + name = EMOTE_CARBON_YAWN /datum/keybinding/emote/carbon/exhale - name = "Выдохнуть" + name = EMOTE_CARBON_EXHALE /datum/keybinding/emote/carbon/laugh - name = "Смеяться" + name = EMOTE_CARBON_LAUGH /datum/keybinding/emote/carbon/scowl - name = "Хмуриться" + name = EMOTE_CARBON_SCOWL /datum/keybinding/emote/carbon/faint - name = "Потерять сознание" + name = EMOTE_CARBON_FAINT /datum/keybinding/emote/carbon/sign - name = "Знак" + name = EMOTE_CARBON_SIGN + +/datum/keybinding/emote/carbon/twirl + name = EMOTE_CARBON_TWIRL /datum/keybinding/emote/carbon/alien/humanoid/roar - name = "Рычать" + name = EMOTE_ALIEN_ROAR /datum/keybinding/emote/carbon/alien/humanoid/hiss - name = "Шипеть" + name = EMOTE_ALIEN_HISS /datum/keybinding/emote/carbon/alien/humanoid/gnarl + name = EMOTE_ALIEN_GNARL /datum/keybinding/emote/carbon/brain/alarm - name = "Тревога" + name = EMOTE_BRAIN_ALARM /datum/keybinding/emote/carbon/brain/alert - name = "Предупреждение" + name = EMOTE_BRAIN_ALERT /datum/keybinding/emote/carbon/brain/notice - name = "Оповещение" + name = EMOTE_BRAIN_NOTICE /datum/keybinding/emote/carbon/brain/flash - name = "Моргать" + name = EMOTE_BRAIN_FLASH /datum/keybinding/emote/carbon/brain/whistle - name = "Свист" + name = EMOTE_BRAIN_WHISTLE /datum/keybinding/emote/carbon/brain/beep - name = "Бип" + name = EMOTE_BRAIN_BEEP /datum/keybinding/emote/carbon/brain/boop - name = "Буп" + name = EMOTE_BRAIN_BOOP /datum/keybinding/emote/carbon/human/airguitar - name = "Запил на гитаре" + name = EMOTE_HUMAN_AIRGUITAR /datum/keybinding/emote/carbon/human/cry - name = "Плакать" + name = EMOTE_HUMAN_CRY /datum/keybinding/emote/carbon/human/dap + name = EMOTE_HUMAN_DAP /datum/keybinding/emote/carbon/human/eyebrow - name = "Приподнять бровь" + name = EMOTE_HUMAN_EYEBROW /datum/keybinding/emote/carbon/human/grumble - name = "Ворчать" + name = EMOTE_HUMAN_GRUMBLE /datum/keybinding/emote/carbon/human/hug - name = "Обнимать" + name = EMOTE_HUMAN_HUG + +/datum/keybinding/emote/carbon/human/facepalm + name = EMOTE_HUMAN_FACEPALM + +/datum/keybinding/emote/carbon/human/palm + name = EMOTE_HUMAN_PALM + +/datum/keybinding/emote/carbon/human/wince + name = EMOTE_HUMAN_WINCE /datum/keybinding/emote/carbon/human/mumble - name = "Бормотать" + name = EMOTE_HUMAN_MUMBLE /datum/keybinding/emote/carbon/human/nod - name = "Кивнуть" + name = EMOTE_HUMAN_NOD /datum/keybinding/emote/carbon/human/scream - name = "Кричать" + name = EMOTE_HUMAN_SCREAM /datum/keybinding/emote/carbon/human/gasp - name = "Задыхаться" + name = EMOTE_HUMAN_GASP /datum/keybinding/emote/carbon/human/shake - name = "Трясти головой" + name = EMOTE_HUMAN_SHAKE /datum/keybinding/emote/carbon/human/pale - name = "Бледнеть" + name = EMOTE_HUMAN_PALE /datum/keybinding/emote/carbon/human/raise - name = "Поднять руку" + name = EMOTE_HUMAN_RAISE /datum/keybinding/emote/carbon/human/salute - name = "Салютовать" + name = EMOTE_HUMAN_SALUTE /datum/keybinding/emote/carbon/human/sign/signal - name = "Сигналить" + name = EMOTE_HUMAN_SIGNAL /datum/keybinding/emote/carbon/human/shrug - name = "Пожать плечами" + name = EMOTE_HUMAN_SHRUG /datum/keybinding/emote/carbon/human/sniff - name = "Понюхать" + name = EMOTE_HUMAN_SNIFF /datum/keybinding/emote/carbon/human/johnny - name = "Джонни" + name = EMOTE_HUMAN_JOHNNY /datum/keybinding/emote/carbon/human/sneeze - name = "Чихнуть" + name = EMOTE_HUMAN_SNEEZE /datum/keybinding/emote/carbon/human/slap - name = "Шлёпнуть" + name = EMOTE_HUMAN_SLAP /datum/keybinding/emote/carbon/human/wink - name = "Подмигнуть" + name = EMOTE_HUMAN_WINK + +/datum/keybinding/emote/carbon/human/clap + name = EMOTE_HUMAN_CLAP /datum/keybinding/emote/carbon/human/highfive - name = "Дать Пять" + name = EMOTE_HUMAN_HIGHFIVE /datum/keybinding/emote/carbon/human/handshake - name = "Пожать руку" + name = EMOTE_HUMAN_HANDSHAKE /datum/keybinding/emote/carbon/human/snap - name = "Щёлкнуть пальцами" + name = EMOTE_HUMAN_SNAP /datum/keybinding/emote/carbon/human/crack - name = "Хрустеть" + name = EMOTE_HUMAN_CRACK /datum/keybinding/emote/carbon/human/fart - name = "Пёрнуть" + name = EMOTE_HUMAN_FART /datum/keybinding/emote/carbon/human/wag - name = "Махать хвостом" + name = EMOTE_HUMAN_WAG /datum/keybinding/emote/carbon/human/wag/stop - name = "Перестать махать хвостом" + name = EMOTE_HUMAN_WAG_STOP /datum/keybinding/emote/carbon/human/flap - name = "Махать крыльями" - -/datum/keybinding/emote/carbon/human/flap/angry - name = "Агрессивно махать крыльями" + name = EMOTE_HUMAN_FLAP /datum/keybinding/emote/carbon/human/flutter - name = "Трепетать" + name = EMOTE_HUMAN_FLUTTER + +/datum/keybinding/emote/carbon/human/flap/angry + name = EMOTE_HUMAN_AFLAP /datum/keybinding/emote/carbon/human/quill - name = "Шуршать перьями" + name = EMOTE_HUMAN_QUILL /datum/keybinding/emote/carbon/human/warble - name = "Трель" + name = EMOTE_HUMAN_WARBLE /datum/keybinding/emote/carbon/human/clack - name = "Трещать" + name = EMOTE_HUMAN_CLACK /datum/keybinding/emote/carbon/human/clack/click - name = "Щёлкать" + name = EMOTE_HUMAN_CLICK /datum/keybinding/emote/carbon/human/drask_talk/drone - name = "Гудеть" + name = EMOTE_HUMAN_DRONE + " (драск)" /datum/keybinding/emote/carbon/human/drask_talk/hum - name = "Жужжать" + name = EMOTE_HUMAN_HUM + " (драск)" /datum/keybinding/emote/carbon/human/drask_talk/rumble - name = "Урчать" + name = EMOTE_HUMAN_RUMBLE + " (драск)" /datum/keybinding/emote/carbon/human/hiss - name = "Шипеть" + name = EMOTE_HUMAN_HISS + +/datum/keybinding/emote/carbon/human/hiss/tajaran + name = EMOTE_HUMAN_HISS + " (таяр)" /datum/keybinding/emote/carbon/human/creak - name = "Скрипеть" + name = EMOTE_HUMAN_CREAK + +/datum/keybinding/emote/carbon/human/slime/squish + name = EMOTE_HUMAN_SQUISH + +/datum/keybinding/emote/carbon/human/squint + name = EMOTE_HUMAN_SQUINT + +/datum/keybinding/emote/carbon/human/bubble + name = EMOTE_HUMAN_BUBBLE -/datum/keybinding/emote/carbon/human/squish - name = "Хлюпать" +/datum/keybinding/emote/carbon/human/pop + name = EMOTE_HUMAN_POP /datum/keybinding/emote/carbon/human/howl - name = "Выть" + name = EMOTE_HUMAN_HOWL /datum/keybinding/emote/carbon/human/growl - name = "Рычать" + name = EMOTE_HUMAN_GROWL /datum/keybinding/emote/carbon/human/rattle - name = "Греметь" + name = EMOTE_HUMAN_RATTLE /datum/keybinding/emote/carbon/human/monkey/gnarl + name = EMOTE_HUMAN_GNARL + " (мартышка)" /datum/keybinding/emote/carbon/human/monkey/roll - name = "Крутиться (мартышка)" + name = EMOTE_HUMAN_ROLL + " (мартышка)" /datum/keybinding/emote/carbon/human/monkey/scratch - name = "Почесаться" + name = EMOTE_HUMAN_SCRATCH + " (мартышка)" /datum/keybinding/emote/carbon/human/monkey/tail - name = "Хвост (мартышка)" + name = EMOTE_HUMAN_TAIL + " (мартышка)" /datum/keybinding/emote/carbon/human/monkey/scream/screech - name = "Визжать (мартышка)" + name = EMOTE_HUMAN_SCREECH + " (мартышка)" /datum/keybinding/emote/carbon/human/monkey/scream/screech/roar - name = "Рычать (мартышка)" + name = EMOTE_HUMAN_ROAR + " (мартышка)" /datum/keybinding/emote/silicon/scream - name = "Кричать" + name = EMOTE_SILICON_SCREAM /datum/keybinding/emote/silicon/ping - name = "Звенеть" + name = EMOTE_SILICON_PING /datum/keybinding/emote/silicon/buzz - name = "Жужжать" + name = EMOTE_SILICON_BUZZ /datum/keybinding/emote/silicon/buzz2 - name = "Жужжать раздражённо" + name = EMOTE_SILICON_BUZZ2 /datum/keybinding/emote/silicon/beep - name = "Пищать" + name = EMOTE_SILICON_BEEP /datum/keybinding/emote/silicon/boop - name = "Буп" + name = EMOTE_SILICON_BOOP /datum/keybinding/emote/silicon/yes - name = "Утвердительно" + name = EMOTE_SILICON_YES /datum/keybinding/emote/silicon/no - name = "Отрицательно" + name = EMOTE_SILICON_NO /datum/keybinding/emote/silicon/law - name = "Law" + name = EMOTE_SILICON_LAW /datum/keybinding/emote/silicon/halt - name = "Halt" + name = EMOTE_SILICON_HALT /datum/keybinding/emote/simple_animal/diona_chirp + name = EMOTE_ANIMAL_CHIRP + " (нимфа)" /datum/keybinding/emote/simple_animal/gorilla_ooga + name = EMOTE_ANIMAL_OOGA + " (горилла)" /datum/keybinding/emote/simple_animal/pet/dog/bark - name = "Лаять (пёс)" + name = EMOTE_ANIMAL_BARK + " (пёс)" /datum/keybinding/emote/simple_animal/pet/dog/yelp - name = "Визг (пёс)" + name = EMOTE_ANIMAL_YELP + " (пёс)" /datum/keybinding/emote/simple_animal/pet/dog/growl - name = "Рычать (пёс)" + name = EMOTE_ANIMAL_GROWL + " (пёс)" /datum/keybinding/emote/simple_animal/mouse/squeak - name = "Пищать (мышь)" + name = EMOTE_ANIMAL_SQUEAK + " (мышь)" /datum/keybinding/emote/simple_animal/pet/cat/meow - name = "Мяукать (кот)" + name = EMOTE_ANIMAL_MEOW + " (кот)" /datum/keybinding/emote/simple_animal/pet/cat/hiss - name = "Шипеть (кот)" + name = EMOTE_ANIMAL_HISS + " (кот)" /datum/keybinding/emote/simple_animal/pet/cat/purr - name = "Мурчать (кот)" + name = EMOTE_ANIMAL_PURR + " (кот)" /datum/keybinding/emote/simple_animal/pet/cat/sit - name = "Сесть/встать (кот)" + name = EMOTE_ANIMAL_SIT + " (кот)" /datum/keybinding/custom default_emote_text = "Введите текст вашей эмоции" diff --git a/modular_ss220/keybindings/code/living_keybinds.dm b/modular_ss220/keybindings/code/living_keybinds.dm index 0536602528f1..d9ea226bf74b 100644 --- a/modular_ss220/keybindings/code/living_keybinds.dm +++ b/modular_ss220/keybindings/code/living_keybinds.dm @@ -5,7 +5,3 @@ /datum/keybinding/living/resist name = "Сопротивляться" keys = list("B") - -/datum/keybinding/living/whisper - name = "Шептать" - keys = list("ShiftT") diff --git a/modular_ss220/loadout/code/donor.dm b/modular_ss220/loadout/code/donor.dm index 970199fa3add..8483c177f01f 100644 --- a/modular_ss220/loadout/code/donor.dm +++ b/modular_ss220/loadout/code/donor.dm @@ -73,6 +73,11 @@ path = /obj/item/storage/wallet/wallet_USSP_2 cost = 12 +/datum/gear/donor/Wallet_WYCI + display_name = "Бумажник W.Y.C.I." + path = /obj/item/storage/wallet/wallet_wyci + cost = 12 + /datum/gear/donor/firefirstaid display_name = "Набор первой медицинской помощи от премиальной страховки" path = /obj/item/storage/firstaid/regular/donor @@ -130,6 +135,21 @@ donator_tier = 2 cost = 1 +/datum/gear/donor/soundhand_black_jacket + display_name = "Черная куртка с тэгом группы Саундхэнд." + path = /obj/item/clothing/suit/storage/soundhand_black_jacket/soundhand_black_jacket_tag + cost = 2 + +/datum/gear/donor/soundhand_olive_jacket + display_name = "Оливковая куртка с тэгом группы Саундхэнд." + path = /obj/item/clothing/suit/storage/soundhand_olive_jacket/soundhand_olive_jacket_tag + cost = 2 + +/datum/gear/donor/soundhand_brown_jacket + display_name = "Коричневая куртка с тэгом группы Саундхэнд." + path = /obj/item/clothing/suit/storage/soundhand_brown_jacket/soundhand_brown_jacket_tag + cost = 2 + // ID Skins /datum/gear/donor/id_decal_colored display_name = "Наклейка на карту (Голографическая)" diff --git a/modular_ss220/maps220/_maps220.dme b/modular_ss220/maps220/_maps220.dme index 070df167bf47..943f0900f154 100644 --- a/modular_ss220/maps220/_maps220.dme +++ b/modular_ss220/maps220/_maps220.dme @@ -14,7 +14,6 @@ #include "code/helpers.dm" #include "code/misc.dm" #include "code/mobs.dm" -#include "code/nanomap.dm" #include "code/spawners.dm" #include "code/walls.dm" #include "code/floors.dm" diff --git a/modular_ss220/maps220/code/Areas/away.dm b/modular_ss220/maps220/code/Areas/away.dm index 247682efe2ec..0309fb16cbff 100644 --- a/modular_ss220/maps220/code/Areas/away.dm +++ b/modular_ss220/maps220/code/Areas/away.dm @@ -50,7 +50,7 @@ icon_state = "awaycontent9" /area/ruin/space/spacehotelv1/entryhallway - name = "awaycontent17" + name = "Hotel Entry Hallway" icon_state = "awaycontent10" /area/ruin/space/spacehotelv1/restoraunt3 diff --git a/modular_ss220/maps220/code/Areas/station.dm b/modular_ss220/maps220/code/Areas/station.dm index 6e8a0b954ff8..fbe70086c984 100644 --- a/modular_ss220/maps220/code/Areas/station.dm +++ b/modular_ss220/maps220/code/Areas/station.dm @@ -15,10 +15,6 @@ /area/station/bridge/checkpoint/south name = "\improper South Command Checkpoint" -/area/station/engineering/aitransit - name = "\improper AI Satellite Transfer Point" - icon_state = "engi" - /area/station/engineering/hallway name = "\improper Engineering Hallway" icon_state = "engine_hallway" @@ -80,6 +76,27 @@ name = "\improper Abandoned Escape Shuttle Hallway" icon_state = "escape" +/area/station/public/sleep_male + name = "\improper Male Dorm" + icon_state = "Sleep" + +/area/station/public/sleep_female + name = "\improper Female Dorm" + icon_state = "Sleep" + +/area/station/public/toilet/male + name = "\improper Male Toilets" + +/area/station/public/toilet/female + name = "\improper Female Toilets" + +/area/station/security/interrogation/observation + name = "Interrogation Observation" + +/area/station/service/bar/atrium + name = "Atrium" + icon_state = "bar" + /* CentCom */ /area/centcom/ss220 name = "\improper ЦК" diff --git a/modular_ss220/maps220/code/RandomRuins/lavaland_ruins.dm b/modular_ss220/maps220/code/RandomRuins/lavaland_ruins.dm index ebb278b92c12..f87d12c36a75 100644 --- a/modular_ss220/maps220/code/RandomRuins/lavaland_ruins.dm +++ b/modular_ss220/maps220/code/RandomRuins/lavaland_ruins.dm @@ -20,3 +20,33 @@ suffix = "scp_facility.dmm" cost = 20 // Бесконечная пицца allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/cheesus_temple + name = "Церковь Чизуса" + id = "cheesus_temple" + description = "Перенесённая в результате БС аномалии церковь Чизуза." + prefix = "_maps/map_files220/RandomRuins/LavaRuins/" + suffix = "cheesus_temple.dmm" + cost = 20 // Имеется книга призыва сыра + always_place = FALSE + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/ash_old + name = "Заброшенный лагерь Эшей" + id = "ash_old" + description = "Старый, заброшенный лагерь Эшей." + prefix = "_maps/map_files220/RandomRuins/LavaRuins/" + suffix = "ash_old.dmm" + cost = 10 // В себе имеет платы консоли заключенных и хим раздратчик, так же пнв модуль + always_place = FALSE + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/old_outpost + name = "Заброшенный аванпост" + id = "old_outpost" + description = "Старый заброшенный аванпост. Его постигла участь разлома Лаваленда." + prefix = "_maps/map_files220/RandomRuins/LavaRuins/" + suffix = "old_outpost.dmm" + cost = 25 // на базе в сейфе есть ЕКА + allow_duplicates = FALSE + always_place = FALSE diff --git a/modular_ss220/maps220/code/mobs.dm b/modular_ss220/maps220/code/mobs.dm index 77a7da8613ed..dd72150d3450 100644 --- a/modular_ss220/maps220/code/mobs.dm +++ b/modular_ss220/maps220/code/mobs.dm @@ -954,7 +954,7 @@ retreat_distance = 5 minimum_distance = 5 dodging = TRUE - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 2) projectiletype = /obj/item/projectile/bullet/bullsquid projectilesound = 'modular_ss220/aesthetics_sounds/sound/mobs/bullsquid/goo_attack3.ogg' melee_damage_upper = 18 @@ -1006,7 +1006,7 @@ melee_damage_upper = 20 rapid_melee = 2 del_on_death = FALSE - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 3) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 3) attack_sound = 'sound/weapons/bite.ogg' gold_core_spawnable = HOSTILE_SPAWN minbodytemp = 0 diff --git a/modular_ss220/maps220/code/nanomap.dm b/modular_ss220/maps220/code/nanomap.dm deleted file mode 100644 index 3155115ca62a..000000000000 --- a/modular_ss220/maps220/code/nanomap.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/asset/simple/nanomaps/New() - . = ..() - assets |= list( - "Cyberiad220_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad220_nanomap_z1.png', - "Delta220_nanomap_z1.png" = 'icons/_nanomaps/Delta220_nanomap_z1.png', - "MetaStation220_nanomap_z1.png" = 'icons/_nanomaps/MetaStation220_nanomap_z1.png', - ) diff --git a/modular_ss220/maps220/code/spawners.dm b/modular_ss220/maps220/code/spawners.dm index 08c6e77375e0..505eb06200e7 100644 --- a/modular_ss220/maps220/code/spawners.dm +++ b/modular_ss220/maps220/code/spawners.dm @@ -4,34 +4,34 @@ /obj/effect/spawner/lootdrop/CCfood/desert lootcount = 5 loot = list( - /obj/item/reagent_containers/food/snacks/baguette=10, - /obj/item/reagent_containers/food/snacks/applepie=10, - /obj/item/reagent_containers/food/snacks/bananabreadslice=10, - /obj/item/reagent_containers/food/snacks/bananacakeslice=10, - /obj/item/reagent_containers/food/snacks/carrotcakeslice=10, - /obj/item/reagent_containers/food/snacks/croissant=10, - /obj/item/reagent_containers/food/drinks/cans/cola=10,""=70) + /obj/item/food/snacks/baguette=10, + /obj/item/food/snacks/applepie=10, + /obj/item/food/snacks/bananabreadslice=10, + /obj/item/food/snacks/bananacakeslice=10, + /obj/item/food/snacks/carrotcakeslice=10, + /obj/item/food/snacks/croissant=10, + /obj/item/reagent_containers/drinks/cans/cola=10,""=70) /obj/effect/spawner/lootdrop/CCfood/meat lootcount = 5 loot = list( - /obj/item/reagent_containers/food/snacks/lasagna=10, - /obj/item/reagent_containers/food/snacks/burger/bigbite=10, - /obj/item/reagent_containers/food/snacks/fishandchips=10, - /obj/item/reagent_containers/food/snacks/fishburger=10, - /obj/item/reagent_containers/food/snacks/hotdog=10, - /obj/item/reagent_containers/food/snacks/meatpie=10, - /obj/item/reagent_containers/food/drinks/cans/cola=10,""=70) + /obj/item/food/snacks/lasagna=10, + /obj/item/food/snacks/burger/bigbite=10, + /obj/item/food/snacks/fishandchips=10, + /obj/item/food/snacks/fishburger=10, + /obj/item/food/snacks/hotdog=10, + /obj/item/food/snacks/meatpie=10, + /obj/item/reagent_containers/drinks/cans/cola=10,""=70) /obj/effect/spawner/lootdrop/CCfood/alcohol lootcount = 1 loot = list( - /obj/item/reagent_containers/food/drinks/flask/detflask=10, - /obj/item/reagent_containers/food/drinks/cans/tonic=10, - /obj/item/reagent_containers/food/drinks/cans/thirteenloko=10, - /obj/item/reagent_containers/food/drinks/cans/synthanol=10, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind=10, - /obj/item/reagent_containers/food/drinks/cans/lemon_lime=10,""=70) + /obj/item/reagent_containers/drinks/flask/detflask=10, + /obj/item/reagent_containers/drinks/cans/tonic=10, + /obj/item/reagent_containers/drinks/cans/thirteenloko=10, + /obj/item/reagent_containers/drinks/cans/synthanol=10, + /obj/item/reagent_containers/drinks/cans/space_mountain_wind=10, + /obj/item/reagent_containers/drinks/cans/lemon_lime=10,""=70) /* Lootdrop */ /obj/effect/spawner/lootdrop/maintenance @@ -97,18 +97,18 @@ /obj/effect/spawner/random_spawners/syndicate/loot/stetchkin icon_state = "stetchkin" -/obj/item/reagent_containers/food/pill/random_drugs +/obj/item/reagent_containers/pill/random_drugs icon = 'modular_ss220/maps220/icons/spawner_icons.dmi' icon_state = "pills" -/obj/item/reagent_containers/food/pill/random_drugs/Initialize(mapload) +/obj/item/reagent_containers/pill/random_drugs/Initialize(mapload) icon = 'icons/obj/chemical.dmi' . = ..() -/obj/item/reagent_containers/food/drinks/bottle/random_drink +/obj/item/reagent_containers/drinks/bottle/random_drink icon = 'modular_ss220/maps220/icons/spawner_icons.dmi' icon_state = "drinks" -/obj/item/reagent_containers/food/drinks/bottle/random_drink/Initialize(mapload) +/obj/item/reagent_containers/drinks/bottle/random_drink/Initialize(mapload) icon = 'icons/obj/drinks.dmi' . = ..() diff --git a/modular_ss220/mobs/code/simple_animal/friendly/crab.dm b/modular_ss220/mobs/code/simple_animal/friendly/crab.dm index 55d032eb578c..04f3947f03ec 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/crab.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/crab.dm @@ -18,7 +18,7 @@ response_harm = "щипает" health = 50 maxHealth = 50 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) /mob/living/simple_animal/crab/royal name = "королевский краб" @@ -32,7 +32,7 @@ response_harm = "щипает без уважения" health = 50 maxHealth = 50 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 5) + butcher_results = list(/obj/item/food/snacks/meat = 5) /mob/living/simple_animal/crab/evil holder_type = /obj/item/holder/evilcrab diff --git a/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm b/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm index 5386a7a522be..e1469578c69e 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm @@ -53,7 +53,7 @@ density = 0 speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "kicks the" @@ -118,7 +118,7 @@ icon_living = "gosling" icon_dead = "gosling_dead" icon_resting = "gosling_rest" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) melee_damage_lower = 0 melee_damage_upper = 0 health = 20 diff --git a/modular_ss220/mobs/code/simple_animal/friendly/frog.dm b/modular_ss220/mobs/code/simple_animal/friendly/frog.dm index 286c17c7e631..95149a7b887b 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/frog.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/frog.dm @@ -22,7 +22,7 @@ maxHealth = 10 health = 10 blood_volume = BLOOD_VOLUME_SURVIVE - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stamps on" diff --git a/modular_ss220/mobs/code/simple_animal/friendly/moth.dm b/modular_ss220/mobs/code/simple_animal/friendly/moth.dm index eee8153c18c6..dbb76ba4bc4d 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/moth.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/moth.dm @@ -20,7 +20,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = 2 mob_size = MOB_SIZE_TINY - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 1) gold_core_spawnable = FRIENDLY_SPAWN holder_type = /obj/item/holder/moth tts_seed = "Tychus" @@ -49,6 +49,6 @@ density = 0 gold_core_spawnable = FRIENDLY_SPAWN footstep_type = FOOTSTEP_MOB_BAREFOOT - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 1) holder_type = /obj/item/holder/mothroach tts_seed = "Tychus" diff --git a/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm b/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm index 44b04fcb3975..c822538acf4e 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm @@ -5,7 +5,7 @@ talk_sound = list('modular_ss220/mobs/sound/creatures/rat_talk.ogg') damaged_sound = list('modular_ss220/mobs/sound/creatures/rat_wound.ogg') blood_volume = BLOOD_VOLUME_SURVIVE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/mouse) + butcher_results = list(/obj/item/food/snacks/meat/mouse) tts_seed = "Gyro" /mob/living/simple_animal/mouse/Initialize(mapload) diff --git a/modular_ss220/mobs/code/simple_animal/friendly/possum.dm b/modular_ss220/mobs/code/simple_animal/friendly/possum.dm index 763cdf16fad9..5e09a638a435 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/possum.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/possum.dm @@ -35,7 +35,7 @@ turns_per_move = 10 gold_core_spawnable = FRIENDLY_SPAWN footstep_type = FOOTSTEP_MOB_CLAW - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2) + butcher_results = list(/obj/item/food/snacks/meat = 2) holder_type = /obj/item/holder/possum /mob/living/simple_animal/possum/attackby(obj/item/O, mob/living/user) diff --git a/modular_ss220/mobs/code/simple_animal/friendly/rat.dm b/modular_ss220/mobs/code/simple_animal/friendly/rat.dm index 0686f46b8af3..4f6491814687 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/rat.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/rat.dm @@ -13,7 +13,7 @@ maxHealth = 15 health = 15 mob_size = MOB_SIZE_SMALL - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/mouse = 2) + butcher_results = list(/obj/item/food/snacks/meat/mouse = 2) /mob/living/simple_animal/mouse/rat/white name = "white rat" diff --git a/modular_ss220/mobs/code/simple_animal/friendly/snail.dm b/modular_ss220/mobs/code/simple_animal/friendly/snail.dm index 70188814923a..1cc0423501d1 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/snail.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/snail.dm @@ -21,7 +21,7 @@ mob_size = MOB_SIZE_SMALL gender = NEUTER can_hide = 1 - butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat/snailmeat = 1, /obj/item/stack/ore/tranquillite = 1) + butcher_results = list(/obj/item/food/snacks/salmonmeat/snailmeat = 1, /obj/item/stack/ore/tranquillite = 1) can_collar = 1 gold_core_spawnable = FRIENDLY_SPAWN stop_automated_movement_when_pulled = 0 @@ -82,6 +82,6 @@ pass_flags = PASSTABLE | PASSGRILLE status_flags = CANPARALYSE | CANPUSH mob_size = MOB_SIZE_SMALL - butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat/turtlemeat = 10, /obj/item/stack/ore/tranquillite = 5) + butcher_results = list(/obj/item/food/snacks/salmonmeat/turtlemeat = 10, /obj/item/stack/ore/tranquillite = 5) footstep_type = FOOTSTEP_MOB_SLIME holder_type = /obj/item/holder/turtle diff --git a/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm b/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm index 33dba1c9cb24..83f89d1cb4f8 100644 --- a/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm +++ b/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm @@ -13,7 +13,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 3, /obj/item/stack/sheet/animalhide/lizard = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 3, /obj/item/stack/sheet/animalhide/lizard = 1) response_help = "погладил" response_disarm = "аккуратно оттолкнул" response_harm = "ударил" @@ -43,7 +43,7 @@ icon_state = "gator" icon_living = "gator" icon_dead = "gator_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 7, /obj/item/stack/sheet/animalhide/lizard = 5) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 7, /obj/item/stack/sheet/animalhide/lizard = 5) speed = 4 maxHealth = 200 health = 200 @@ -57,7 +57,7 @@ icon_state = "steppy" icon_living = "steppy" icon_dead = "steppy_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 5, /obj/item/stack/sheet/animalhide/lizard = 3) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 5, /obj/item/stack/sheet/animalhide/lizard = 3) maxHealth = 100 health = 100 obj_damage = 80 diff --git a/modular_ss220/mobs/code/simple_animal/items.dm b/modular_ss220/mobs/code/simple_animal/items.dm index dfb46832a8f6..fa678a20f164 100644 --- a/modular_ss220/mobs/code/simple_animal/items.dm +++ b/modular_ss220/mobs/code/simple_animal/items.dm @@ -1,38 +1,38 @@ // Meat -/obj/item/reagent_containers/food/snacks/meat/dog +/obj/item/food/snacks/meat/dog name = "dog meat" desc = "Не слишком питательно. Но говорят деликатес космокорейцев." list_reagents = list("protein" = 2, "epinephrine" = 2) -/obj/item/reagent_containers/food/snacks/meat/security +/obj/item/food/snacks/meat/security name = "security meat" desc = "Мясо наполненное чувством мужества и долга." list_reagents = list("protein" = 3, "epinephrine" = 5) -/obj/item/reagent_containers/food/snacks/meat/pug +/obj/item/food/snacks/meat/pug name = "pug meat" desc = "Чуть менее очарователен в нарезке." list_reagents = list("protein" = 2, "epinephrine" = 2) -/obj/item/reagent_containers/food/snacks/meat/ham/old +/obj/item/food/snacks/meat/ham/old name = "жесткая ветчина" desc = "Мясо почтенного хряка." list_reagents = list("protein" = 2, "porktonium" = 10) -/obj/item/reagent_containers/food/snacks/meat/mouse +/obj/item/food/snacks/meat/mouse name = "мышатина" desc = "На безрыбье и мышь мясо. Кто знает чем питался этот грызун до его подачи к столу." icon = 'modular_ss220/mobs/icons/items.dmi' icon_state = "meat_clear" list_reagents = list("nutriment" = 2, "blood" = 3, "toxin" = 1) -/obj/item/reagent_containers/food/snacks/salmonmeat/snailmeat +/obj/item/food/snacks/salmonmeat/snailmeat name = "snail meat" desc = "Сырая космо-улитка в собственном соку." filling_color = "#6bb4a8" list_reagents = list("protein" = 5, "vitamin" = 5) -/obj/item/reagent_containers/food/snacks/salmonmeat/turtlemeat +/obj/item/food/snacks/salmonmeat/turtlemeat name = "snail meat" desc = "Сырая космо-улитка в собственном соку." filling_color = "#2fa24c" diff --git a/modular_ss220/mobs/code/simple_animal/named_animals.dm b/modular_ss220/mobs/code/simple_animal/named_animals.dm index a1b25d209a49..f8e5d7e3a406 100644 --- a/modular_ss220/mobs/code/simple_animal/named_animals.dm +++ b/modular_ss220/mobs/code/simple_animal/named_animals.dm @@ -5,7 +5,7 @@ icon_state = "pig_old" icon_living = "pig_old" icon_dead = "pig_old_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/ham/old = 10) + butcher_results = list(/obj/item/food/snacks/meat/ham/old = 10) unique_pet = TRUE gold_core_spawnable = NO_SPAWN maxHealth = 80 diff --git a/modular_ss220/mobs/code/simple_animal/pets/cat.dm b/modular_ss220/mobs/code/simple_animal/pets/cat.dm index 9f314db19422..d7d3bb8f1e7a 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/cat.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/cat.dm @@ -19,7 +19,7 @@ gender = FEMALE mob_size = MOB_SIZE_LARGE // THICK!!! //canmove = FALSE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 8) + butcher_results = list(/obj/item/food/snacks/meat = 8) tts_seed = "Huntress" maxHealth = 40 // Sooooo faaaat... health = 40 diff --git a/modular_ss220/mobs/code/simple_animal/pets/dog.dm b/modular_ss220/mobs/code/simple_animal/pets/dog.dm index 259600f7b1ff..65b2f896ad91 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/dog.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/dog.dm @@ -9,7 +9,7 @@ attacktext = "кусает" var/growl_sound = list('modular_ss220/mobs/sound/creatures/dog_grawl1.ogg','modular_ss220/mobs/sound/creatures/dog_grawl2.ogg') //Used in emote. - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/dog = 4) + butcher_results = list(/obj/item/food/snacks/meat/dog = 4) collar_type = "dog" /mob/living/simple_animal/pet/dog/wuv(change, mob/M) @@ -67,7 +67,7 @@ /mob/living/simple_animal/pet/dog/corgi/puppy maxHealth = 20 health = 20 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 1) + butcher_results = list(/obj/item/food/snacks/meat/corgi = 1) tts_seed = "Jaina" /mob/living/simple_animal/pet/dog/corgi/puppy/void diff --git a/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm b/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm index a7ad0195f406..90ef548ce114 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm @@ -16,7 +16,7 @@ var/obj/item/inventory_head var/obj/item/inventory_mask footstep_type = FOOTSTEP_MOB_CLAW - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/security = 3) + butcher_results = list(/obj/item/food/snacks/meat/security = 3) tts_seed = "Furion" /mob/living/simple_animal/pet/dog/security/ranger diff --git a/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm b/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm index 2b90b8940b1e..6e9292450a6a 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm @@ -21,7 +21,7 @@ pass_flags = PASSTABLE ventcrawler = VENTCRAWLER_ALWAYS can_collar = 1 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 5) + butcher_results = list(/obj/item/food/snacks/meat = 5) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/modular_ss220/modular_ss220.dme b/modular_ss220/modular_ss220.dme index 53a170e02283..8eaac064718b 100644 --- a/modular_ss220/modular_ss220.dme +++ b/modular_ss220/modular_ss220.dme @@ -4,6 +4,7 @@ // #include "example/_example.dme" // --- MAINTENANCE --- // +#include "_components/_components.dme" #include "_defines220/_defines220.dme" #include "_signals220/_signals220.dme" #include "_misc/_misc.dme" @@ -77,6 +78,7 @@ #include "phrases/_phrases.dme" #include "species_whitelist/_species_whitelist.dme" #include "antagonists/_antagonists.dme" +#include "uplink_items/_uplink_items.dme" // --- PRIME --- // // #define MODPACK_MAIN_ONLY diff --git a/modular_ss220/objects/_objects.dme b/modular_ss220/objects/_objects.dme index f3b44f04ec3a..542f5e2442f7 100644 --- a/modular_ss220/objects/_objects.dme +++ b/modular_ss220/objects/_objects.dme @@ -1,11 +1,16 @@ #include "_objects.dm" +// Mechs +#include "code/mecha/lockermech.dm" + +// Miscellaneous #include "code/beach_umbrella.dm" #include "code/beretta.dm" #include "code/big_bed.dm" #include "code/billboard.dm" #include "code/card_skins.dm" #include "code/closets.dm" +#include "code/coffin.dm" #include "code/hampters.dm" #include "code/mattress.dm" #include "code/miscellaneous.dm" @@ -19,3 +24,6 @@ #include "code/key.dm" #include "code/musician.dm" #include "code/flag.dm" +#include "code/wallets.dm" +#include "code/flashlight.dm" +#include "code/electrostaff.dm" \ No newline at end of file diff --git a/modular_ss220/objects/code/closets.dm b/modular_ss220/objects/code/closets.dm index 12c36417138c..afaa0de02099 100644 --- a/modular_ss220/objects/code/closets.dm +++ b/modular_ss220/objects/code/closets.dm @@ -10,3 +10,8 @@ new /obj/item/gun/energy/laser/awaymission_aeg/rnd(src) new /obj/item/storage/firstaid/regular(src) new /obj/item/paper/pamphlet/gateway(src) + +/obj/structure/closet/secure_closet/blueshield/populate_contents() + . = ..() + new /obj/item/melee/baton/electrostaff/loaded(src) + new /obj/item/screwdriver(src) diff --git a/modular_ss220/objects/code/coffin.dm b/modular_ss220/objects/code/coffin.dm new file mode 100644 index 000000000000..4826211fb3d1 --- /dev/null +++ b/modular_ss220/objects/code/coffin.dm @@ -0,0 +1,25 @@ +/obj/structure/closet/coffin/corn + name = "cornffin" + desc = "Мы потеряли его. Он скукурузился." + icon = 'modular_ss220/objects/icons/closets.dmi' + icon_state = "coffin_corn" + icon_opened = "coffin_corn_open" + open_door_sprite = null + resistance_flags = FLAMMABLE + max_integrity = 300 + material_drop = /obj/item/food/snacks/grown/corn + material_drop_amount = 10 + +// Выращивание кукурузогроба +/obj/item/seeds/corn/cornffin + name = "pack of cornffin seeds" + desc = "Эти семена вырастут и скукурузятся.." + icon_state = "seed-corn" + species = "corn" + plantname = "Cornffin Stalks" + product = /obj/structure/closet/coffin/corn + + +/obj/item/seeds/corn/Initialize(mapload) + . = ..() + mutatelist |= list(/obj/item/seeds/corn/cornffin) diff --git a/modular_ss220/objects/code/electrostaff.dm b/modular_ss220/objects/code/electrostaff.dm new file mode 100644 index 000000000000..4b558f040358 --- /dev/null +++ b/modular_ss220/objects/code/electrostaff.dm @@ -0,0 +1,161 @@ +/obj/item/melee/baton/electrostaff + name = "электропосох" + desc = "Шоковая палка, только более мощная, двуручная и доступная наиболее авторитетным членам силовых структур Nanotrasen. А еще у неё нет тупого конца." + lefthand_file = 'modular_ss220/objects/icons/inhands/melee_lefthand.dmi' + righthand_file = 'modular_ss220/objects/icons/inhands/melee_righthand.dmi' + icon = 'modular_ss220/objects/icons/melee.dmi' + base_icon = "electrostaff" + icon_state = "electrostaff_orange" + slot_flags = SLOT_FLAG_BELT + w_class = WEIGHT_CLASS_HUGE + force = 10 + throwforce = 7 + origin_tech = "combat=5" + attack_verb = list("attacked", "beaten") + /// What sound plays when its opening + var/sound_on = 'modular_ss220/objects/sound/weapons/melee/electrostaff/on.ogg' + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, RAD = 0, FIRE = 80, ACID = 80) + + stam_damage = 80 + /// How much burn damage it does when turned on + var/burn_damage = 5 + + turned_on = FALSE + knockdown_duration = 15 SECONDS + hitcost = 1600 // 6 hits to 0 power + cooldown = 3.5 SECONDS + knockdown_delay = 2.5 SECONDS + + /// allows one-time reskinning + var/unique_reskin = TRUE + /// the skin choice + var/current_skin = null + var/list/options = list() + +/obj/item/melee/baton/electrostaff/Initialize(mapload) + current_skin = "_orange" + AddComponent(/datum/component/two_handed, force_unwielded = force / 2, force_wielded = force, wield_callback = CALLBACK(src, PROC_REF(on_wield)), unwield_callback = CALLBACK(src, PROC_REF(on_unwield))) + options["Оранжевое свечение"] = "_orange" + options["Красное свечение"] = "_red" + options["Фиолетовое свечение"] = "_purple" + options["Синее свечение"] = "_blue" + . = ..() + +/obj/item/melee/baton/electrostaff/loaded/Initialize(mapload) //this one starts with a cell pre-installed. + link_new_cell() + . = ..() + +/obj/item/melee/baton/electrostaff/update_icon_state() + if(HAS_TRAIT(src, TRAIT_WIELDED)) + if(cell?.charge >= hitcost) + icon_state = "[base_icon][current_skin]_active" + else + if(cell != null) + icon_state = "[base_icon][current_skin]_wield" + else + icon_state = "[base_icon][current_skin]_nocell_wield" + else + if(cell != null) + icon_state = "[base_icon][current_skin]" + else + icon_state = "[base_icon][current_skin]_nocell" + +/obj/item/melee/baton/electrostaff/examine(mob/user) + . = ..() + . -= "This item can be recharged in a recharger. Using a screwdriver on this item will allow you to access its power cell, which can be replaced." + . += "Данный предмет не имеет внешних разъемов для зарядки. Используйте отвертку для доступа к внутренней батарее, чтобы заменить или зарядить её." + if(unique_reskin) + . += "Alt-клик, чтобы изменить свечение." + +/obj/item/melee/baton/electrostaff/attack_self(mob/user) + var/signal_ret = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) + if(signal_ret & COMPONENT_NO_INTERACT) + return + if(signal_ret & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + +/obj/item/melee/baton/electrostaff/proc/on_wield(obj/item/source, mob/living/carbon/user) + after_turn(TRUE, user) + +/obj/item/melee/baton/electrostaff/proc/on_unwield(obj/item/source, mob/living/carbon/user) + turned_on = FALSE + after_turn(FALSE, user) + +/obj/item/melee/baton/electrostaff/proc/after_turn(to_turn_on, mob/living/carbon/user) + if(cell?.charge >= hitcost) + if(to_turn_on) + turned_on = TRUE + to_chat(user, "[src] [turned_on ? "включен" : "выключен"].") + playsound(src, turned_on ? sound_on : "sparks", 75, TRUE, -1) + else + if(!cell) + to_chat(user, "[src] не имеет источников питания!") + else + to_chat(user, "[src] обесточен.") + update_icon() + add_fingerprint(user) + +/// returning false results in no baton attack animation, returning true results in an animation. +/obj/item/melee/baton/electrostaff/baton_stun(mob/living/L, mob/user, skip_cooldown = FALSE) + . = ..(L, user, skip_cooldown) + if(. == TRUE) + if(user.a_intent == INTENT_HARM) + L.apply_damage(burn_damage, BURN) + +/obj/item/melee/baton/electrostaff/AltClick(mob/user) + . = ..() + if(user.incapacitated()) + to_chat(user, "Вы не можете этого сделать прямо сейчас!") + return + if(unique_reskin && loc == user) + reskin_staff(user) + +/obj/item/melee/baton/electrostaff/proc/reskin_staff(mob/M) + var/list/skins = list() + for(var/I in options) + skins[I] = image(icon, icon_state = "[base_icon][options[I]]") + var/choice = show_radial_menu(M, src, skins, radius = 40, custom_check = CALLBACK(src, PROC_REF(reskin_radial_check), M), require_near = TRUE) + + if(choice && reskin_radial_check(M)) + current_skin = options[choice] + to_chat(M, "[choice] идеально подходит вашему посоху.") + unique_reskin = FALSE + update_icon() + M.update_inv_r_hand() + M.update_inv_l_hand() + +/obj/item/melee/baton/electrostaff/proc/reskin_radial_check(mob/user) + if(!ishuman(user)) + return FALSE + var/mob/living/carbon/human/H = user + if(!src || !H.is_in_hands(src) || HAS_TRAIT(H, TRAIT_HANDS_BLOCKED)) + return FALSE + return TRUE + +/obj/item/weaponcrafting/gunkit/electrostaff + name = "\improper electrostaff parts kit" + desc = "Возьмите 2 оглушающие дубинки. Соедините их вместе, поместив внутрь батарею. Используйте остальные инструменты (лишних винтиков быть не должно)." + origin_tech = "combat=6;materials=4" + outcome = /obj/item/melee/baton/electrostaff/loaded + +/datum/design/electrostaff + name = "Electrostaff Parts Kit" + desc = "Оперативный ответ." + id = "electrostaff" + req_tech = list("combat" = 7, "magnets" = 5, "powerstorage" = 5) + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000, MAT_GLASS = 1000, MAT_GOLD = 3000, MAT_SILVER = 1500) + build_path = /obj/item/weaponcrafting/gunkit/electrostaff + category = list("Weapons") + +/datum/crafting_recipe/electrostaff + name = "Electrostaff" + tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + result = list(/obj/item/melee/baton/electrostaff/loaded) + reqs = list(/obj/item/melee/baton = 2, + /obj/item/stock_parts/cell/high = 1, + /obj/item/stack/cable_coil = 5, + /obj/item/weaponcrafting/gunkit/electrostaff = 1) + time = 10 SECONDS + category = CAT_WEAPONRY + subcategory = CAT_WEAPON diff --git a/modular_ss220/objects/code/flashlight.dm b/modular_ss220/objects/code/flashlight.dm new file mode 100644 index 000000000000..1a1b220037ee --- /dev/null +++ b/modular_ss220/objects/code/flashlight.dm @@ -0,0 +1,6 @@ +/obj/item/flashlight/shadowlight + icon = 'modular_ss220/objects/icons/lighting.dmi' + icon_state = "shadowlight" + brightness_on = 3 // A little better than the standard flashlight. + light_power = -2 + hitsound = 'sound/weapons/genhit1.ogg' diff --git a/modular_ss220/objects/code/mecha/lockermech.dm b/modular_ss220/objects/code/mecha/lockermech.dm new file mode 100644 index 000000000000..0f4dfe8be19e --- /dev/null +++ b/modular_ss220/objects/code/mecha/lockermech.dm @@ -0,0 +1,176 @@ +// Makeshift (Lockermech) +/obj/mecha/lockermech + name = "Шкафомех" + desc = "Шкафчик с украденными проводами, стойками, электроникой и шлюзовыми сервоприводами, грубо собранными в нечто, напоминающее мех." + icon = 'modular_ss220/objects/icons/mech.dmi' + icon_state = "lockermech" + initial_icon = "lockermech" + // It's made of scraps + max_integrity = 100 + lights_power = 5 + // Same speed as Ripley + step_in = 4 + armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, rad = 0, fire = 70, acid = 60) + internal_damage_threshold = 30 + max_equip = 2 + wreckage = /obj/structure/mecha_wreckage/lockermech + /// step_in while in normal pressure conditions + var/fast_pressure_step_in = 2 + /// step_in while in better pressure conditions + var/slow_pressure_step_in = 4 + var/list/cargo + /// You can fit a few things in this locker but not much. + var/cargo_capacity = 5 + +/obj/mecha/lockermech/go_out() + ..() + update_icon(UPDATE_OVERLAYS) + +/obj/mecha/lockermech/moved_inside(mob/living/carbon/human/H) + ..() + update_icon(UPDATE_OVERLAYS) + +/obj/mecha/lockermech/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) + ..() + update_icon(UPDATE_OVERLAYS) + +/obj/mecha/lockermech/Move() + . = ..() + update_pressure() + +/obj/mecha/lockermech/proc/update_pressure() + if(thrusters_active) + return // Don't calculate this if they have thrusters on, this is calculated right after domove because of course it is + + var/turf/target_turf = get_turf(loc) + + if(lavaland_equipment_pressure_check(target_turf)) + step_in = fast_pressure_step_in + for(var/obj/item/mecha_parts/mecha_equipment/drill/lockermech/drill in equipment) + drill.equip_cooldown = initial(drill.equip_cooldown)/2 + else + step_in = slow_pressure_step_in + for(var/obj/item/mecha_parts/mecha_equipment/drill/lockermech/drill in equipment) + drill.equip_cooldown = initial(drill.equip_cooldown) + +/obj/mecha/lockermech/Exit(atom/movable/object) + LAZYINITLIST(cargo) + if(object in cargo) + return FALSE + return ..() + +/obj/mecha/lockermech/get_stats_part() + LAZYINITLIST(cargo) + var/output = ..() + output += "Cargo Compartment Contents:
        " + if(length(cargo)) + for(var/obj/cargo_item as anything in cargo) + output += "Unload : [cargo_item]
        " + else + output += "Nothing" + output += "
        " + return output + +/obj/mecha/lockermech/Topic(href, href_list) + . = ..() + LAZYINITLIST(cargo) + if(!href_list["drop_from_cargo"]) + return + + var/obj/cargo_to_unload = locateUID(href_list["drop_from_cargo"]) + if(!cargo_to_unload || !(cargo_to_unload in cargo)) + return + + occupant_message("You unload [cargo_to_unload].") + cargo_to_unload.forceMove(get_turf(src)) + cargo -= cargo_to_unload + log_message("Unloaded [cargo_to_unload]. Cargo compartment capacity: [cargo_capacity - length(cargo)]") + +/obj/mecha/lockermech/Destroy() + LAZYINITLIST(cargo) + for(var/atom/movable/thing in cargo) + thing.forceMove(loc) + step_rand(thing) + cargo.Cut() + return ..() + +/obj/mecha/lockermech/ex_act(severity) + . = ..() + LAZYINITLIST(cargo) + for(var/thing in cargo) + var/obj/object = thing + if(prob(30 / severity)) + cargo -= object + object.forceMove(drop_location()) + +/obj/mecha/lockermech/emag_act(mob/user) + if(!emagged) + emagged = TRUE + desc += "
        The mech's equipment slots spark dangerously!" + return ..() + +// Crafting +/datum/crafting_recipe/lockermech + name = "Locker Mech" + result = list(/obj/mecha/lockermech) + reqs = list(/obj/item/stack/cable_coil = 20, + /obj/item/stack/sheet/metal = 10, + /obj/item/storage/toolbox = 2, // For feet + /obj/item/tank/internals/oxygen = 1, // For air + /obj/item/airlock_electronics = 1, // You are stealing the motors from airlocks + /obj/item/extinguisher = 1, // For bastard pnumatics + /obj/item/c_tube = 1, // To make it airtight + /obj/item/flashlight = 1, // For the mech light + /obj/item/stack/tape_roll = 25, // ¯\_(ツ)_/¯ + /obj/item/stock_parts/cell/high = 1, + /obj/item/stack/rods = 4) // To mount the equipment + tools = list(TOOL_WELDER, TOOL_SCREWDRIVER) + time = 200 + category = CAT_ROBOT + +/datum/crafting_recipe/lockermech_drill + name = "Locker Mech Exosuit Drill" + result = list(/obj/item/mecha_parts/mecha_equipment/drill/lockermech) + reqs = list(/obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/metal = 2, + /obj/item/surgicaldrill = 1) + tools = list(TOOL_SCREWDRIVER) + time = 50 + category = CAT_ROBOT + +/datum/crafting_recipe/lockermech_clamp + name = "Locker Mech Exosuit Clamp" + result = list(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech) + reqs = list(/obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/metal = 2, + /obj/item/wirecutters = 1) // Don't ask, its just for the grabby grabby thing + tools = list(TOOL_SCREWDRIVER) + time = 50 + category = CAT_ROBOT + +// Wreckage +/obj/structure/mecha_wreckage/lockermech + name = "\improper Обломки Шкафомеха" + desc = "Владелец данного изделия, на что он надеялся?..." + icon = 'modular_ss220/objects/icons/mech.dmi' + icon_state = "lockermech-broken" + +// Equipment +/obj/item/mecha_parts/mecha_equipment/drill/lockermech + name = "locker mech exosuit drill" + desc = "Собранная из, скорее всего, краденых деталей, эта дрель не сравнится по эффективности с настоящей." + equip_cooldown = 60 // Its slow as shit + force = 10 // Its not very strong + drill_delay = 15 + +/obj/item/mecha_parts/mecha_equipment/drill/lockermech/can_attach(obj/mecha/M) + return istype(M, /obj/mecha/lockermech) && M.equipment.len < M.max_equip + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech + name = "locker mech clamp" + desc = "Беспорядочное расположение собранных вместе деталей, напоминающее зажим." + equip_cooldown = 25 + dam_force = 10 + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech/can_attach(obj/mecha/M) + return istype(M, /obj/mecha/lockermech) && M.equipment.len < M.max_equip diff --git a/modular_ss220/objects/code/miscellaneous.dm b/modular_ss220/objects/code/miscellaneous.dm index 438b14427c45..286f1ea0cae5 100644 --- a/modular_ss220/objects/code/miscellaneous.dm +++ b/modular_ss220/objects/code/miscellaneous.dm @@ -140,5 +140,5 @@ // Display Cases /obj/structure/displaycase/hos alert = TRUE - start_showpiece_type = /obj/item/reagent_containers/food/snacks/donut/sprinkles + start_showpiece_type = /obj/item/food/snacks/donut/sprinkles req_access = list(ACCESS_HOS) diff --git a/modular_ss220/clothing/code/wallets.dm b/modular_ss220/objects/code/wallets.dm similarity index 61% rename from modular_ss220/clothing/code/wallets.dm rename to modular_ss220/objects/code/wallets.dm index 446912d266f0..aab0dc25f601 100644 --- a/modular_ss220/clothing/code/wallets.dm +++ b/modular_ss220/objects/code/wallets.dm @@ -4,14 +4,14 @@ /obj/item/storage/wallet/wallet_NT name = "leather wallet NT" desc = "Ваш кошелек настолько шикарен, что с ним вы выглядите просто потрясающе." - icon = 'modular_ss220/clothing/icons/object/wallets.dmi' + icon = 'modular_ss220/objects/icons/wallets.dmi' icon_state = "wallet_NT" photo_overlay = "photo_NT" /obj/item/storage/wallet/wallet_USSP_1 name = "leather wallet USSP" desc = "Говорят, такие кошельки в СССП носят исключительно для зажигалок." - icon = 'modular_ss220/clothing/icons/object/wallets.dmi' + icon = 'modular_ss220/objects/icons/wallets.dmi' icon_state = "wallet_USSP_1" photo_overlay = "photo_USSP" storage_slots = 5 @@ -25,6 +25,15 @@ /obj/item/storage/wallet/wallet_USSP_2 name = "leather wallet USSP" desc = "Говорят, такие кошельки в СССП носят исключительно для зажигалок." - icon = 'modular_ss220/clothing/icons/object/wallets.dmi' + icon = 'modular_ss220/objects/icons/wallets.dmi' icon_state = "wallet_USSP_2" photo_overlay = "photo_USSP" + +/obj/item/storage/wallet/wallet_wyci + name = "Кошелек W.Y.C.I." + desc = "Кошелек, законодателя моды WYCI,\ + украшен золотой пуговицей cшит позолочеными и платиновыми нитями, сверх прочный.\ + И сверх модный. И сверх дорогой. И сшит по принципу WYCI." + icon = 'modular_ss220/objects/icons/wallets.dmi' + icon_state = "wallet_wyci" + photo_overlay = "photo_wyci_overlay" diff --git a/modular_ss220/objects/code/weapons.dm b/modular_ss220/objects/code/weapons.dm index 5a00055c983f..79d084a75b21 100644 --- a/modular_ss220/objects/code/weapons.dm +++ b/modular_ss220/objects/code/weapons.dm @@ -234,3 +234,110 @@ if(on) homerun_ready = TRUE . = ..() + +//Pneumagun +/obj/item/gun/projectile/automatic/pneumaticgun + name = "Пневморужье" + desc = "Стандартное пневморужье" + lefthand_file = 'modular_ss220/objects/icons/inhands/guns_lefthand.dmi' + righthand_file = 'modular_ss220/objects/icons/inhands/guns_righthand.dmi' + icon = 'modular_ss220/objects/icons/guns.dmi' + icon_state = "pneumagun" + w_class = WEIGHT_CLASS_NORMAL + mag_type = /obj/item/ammo_box/magazine/pneuma + magazine = new /obj/item/ammo_box/magazine/pneuma/pepper + fire_sound = 'modular_ss220/objects/sound/weapons/gunshots/gunshot_pneumatic.ogg' + magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg' + magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg' + fire_delay = 2 + can_suppress = FALSE + burst_size = 1 + actions_types = list() + + +/obj/item/gun/projectile/automatic/pneumaticgun/process_chamber(eject_casing = 0, empty_chamber = 1) + ..(eject_casing, empty_chamber) + +/obj/item/gun/projectile/automatic/pneumaticgun/update_icon_state() + var/obj/item/ammo_box/magazine/pneuma/M = magazine + icon_state = "pneumagun[M ? "[M.col]" : ""]" + item_state = icon_state + +// Базовые боеприпасы для пневморужья +/obj/item/ammo_box/magazine/pneuma + name = "магазин пневморужья" + desc = "Наполняется шариками с реагентом." + caliber = "pneumatic" + var/col = "_g" // Цвет магазина (необходим для выбора скина) + icon = 'modular_ss220/objects/icons/ammo.dmi' + icon_state = "pneumamag_g" + ammo_type = /obj/item/ammo_casing/pneuma + max_ammo = 12 + multiload = 0 + +/obj/item/ammo_casing/pneuma + name = "пневматический шарик" + desc = "Пустой пневматический шарик." + icon = 'modular_ss220/objects/icons/ammo.dmi' + icon_state = "pneumaball_g" + caliber = "pneumatic" + casing_drop_sound = null + projectile_type = /obj/item/projectile/bullet/pneumaball + muzzle_flash_strength = null + harmful = FALSE + +/obj/item/projectile/bullet/pneumaball + name = "пневматический шарик" + icon = 'modular_ss220/objects/icons/ammo.dmi' + icon_state = "pneumaball_g" + stamina = 7 + damage = 1 + +/obj/item/projectile/bullet/pneumaball/New() + ..() + create_reagents(15) + reagents.set_reacting(FALSE) + +/obj/item/projectile/bullet/pneumaball/on_hit(atom/target, blocked = 0) + ..(target, blocked) + if(!iscarbon(target)) + return + var/mob/living/carbon/H = target + reagents.reaction(H) + reagents.set_reacting(TRUE) + reagents.handle_reactions() + +// Боеприпасы для перцового типа пневморужья +/obj/item/ammo_box/magazine/pneuma/pepper + ammo_type = /obj/item/ammo_casing/pneuma/pepper + col = "_r" + icon_state = "pneumamag_r" + +/obj/item/ammo_casing/pneuma/pepper + desc = "Шарик с капсаицином. Эффективно подходит для задержания преступников, не носящих очки." + projectile_type = /obj/item/projectile/bullet/pneumaball/pepper + icon_state = "pneumaball_r" + +/obj/item/projectile/bullet/pneumaball/pepper + icon_state = "pneumaball_r" + +/obj/item/projectile/bullet/pneumaball/pepper/New() + ..() + reagents.add_reagent("condensedcapsaicin", 15) + +/datum/supply_packs/security/armory/pneumagun + name = "Pneumatic Pepper Rifles Crate" + contains = list(/obj/item/gun/projectile/automatic/pneumaticgun, + /obj/item/gun/projectile/automatic/pneumaticgun, + /obj/item/ammo_box/magazine/pneuma/pepper, + /obj/item/ammo_box/magazine/pneuma/pepper) + cost = 500 + containername = "pneumatic pepper rifles pack" + +/datum/supply_packs/security/armory/pneumapepperballs + name = "Pneumatic Pepper Rifle Ammunition Crate" + contains = list(/obj/item/ammo_box/magazine/pneuma/pepper, + /obj/item/ammo_box/magazine/pneuma/pepper, + /obj/item/ammo_box/magazine/pneuma/pepper) + cost = 250 + containername = "pneumatic pepper ammunition pack" diff --git a/modular_ss220/objects/icons/ammo.dmi b/modular_ss220/objects/icons/ammo.dmi index 839280e75739..751a9340a211 100644 Binary files a/modular_ss220/objects/icons/ammo.dmi and b/modular_ss220/objects/icons/ammo.dmi differ diff --git a/modular_ss220/objects/icons/closets.dmi b/modular_ss220/objects/icons/closets.dmi index 3b5f00bfba2f..1ae76ae5bb9f 100644 Binary files a/modular_ss220/objects/icons/closets.dmi and b/modular_ss220/objects/icons/closets.dmi differ diff --git a/modular_ss220/objects/icons/guns.dmi b/modular_ss220/objects/icons/guns.dmi index bbcd23cbe675..ccd227999ec1 100644 Binary files a/modular_ss220/objects/icons/guns.dmi and b/modular_ss220/objects/icons/guns.dmi differ diff --git a/modular_ss220/objects/icons/inhands/guns_lefthand.dmi b/modular_ss220/objects/icons/inhands/guns_lefthand.dmi index 547e1eed398c..7845b5d5b34a 100644 Binary files a/modular_ss220/objects/icons/inhands/guns_lefthand.dmi and b/modular_ss220/objects/icons/inhands/guns_lefthand.dmi differ diff --git a/modular_ss220/objects/icons/inhands/guns_righthand.dmi b/modular_ss220/objects/icons/inhands/guns_righthand.dmi index 94a6c51310ff..2ba24b202370 100644 Binary files a/modular_ss220/objects/icons/inhands/guns_righthand.dmi and b/modular_ss220/objects/icons/inhands/guns_righthand.dmi differ diff --git a/modular_ss220/objects/icons/inhands/melee_lefthand.dmi b/modular_ss220/objects/icons/inhands/melee_lefthand.dmi index 03a217d2e15c..f9d19b626d97 100644 Binary files a/modular_ss220/objects/icons/inhands/melee_lefthand.dmi and b/modular_ss220/objects/icons/inhands/melee_lefthand.dmi differ diff --git a/modular_ss220/objects/icons/inhands/melee_righthand.dmi b/modular_ss220/objects/icons/inhands/melee_righthand.dmi index 802a7b7052ea..d2ba51f47eb5 100644 Binary files a/modular_ss220/objects/icons/inhands/melee_righthand.dmi and b/modular_ss220/objects/icons/inhands/melee_righthand.dmi differ diff --git a/modular_ss220/objects/icons/lighting.dmi b/modular_ss220/objects/icons/lighting.dmi new file mode 100644 index 000000000000..681726d0fedb Binary files /dev/null and b/modular_ss220/objects/icons/lighting.dmi differ diff --git a/modular_ss220/objects/icons/mech.dmi b/modular_ss220/objects/icons/mech.dmi new file mode 100644 index 000000000000..0bf1578d0628 Binary files /dev/null and b/modular_ss220/objects/icons/mech.dmi differ diff --git a/modular_ss220/objects/icons/melee.dmi b/modular_ss220/objects/icons/melee.dmi index 481ce4d8edff..7efffec19efc 100644 Binary files a/modular_ss220/objects/icons/melee.dmi and b/modular_ss220/objects/icons/melee.dmi differ diff --git a/modular_ss220/objects/icons/wallets.dmi b/modular_ss220/objects/icons/wallets.dmi new file mode 100644 index 000000000000..6671ebef4606 Binary files /dev/null and b/modular_ss220/objects/icons/wallets.dmi differ diff --git a/modular_ss220/objects/sound/weapons/gunshots/gunshot_pneumatic.ogg b/modular_ss220/objects/sound/weapons/gunshots/gunshot_pneumatic.ogg new file mode 100644 index 000000000000..69607153d610 Binary files /dev/null and b/modular_ss220/objects/sound/weapons/gunshots/gunshot_pneumatic.ogg differ diff --git a/modular_ss220/objects/sound/weapons/melee/electrostaff/on.ogg b/modular_ss220/objects/sound/weapons/melee/electrostaff/on.ogg new file mode 100644 index 000000000000..4a3e0f0abb07 Binary files /dev/null and b/modular_ss220/objects/sound/weapons/melee/electrostaff/on.ogg differ diff --git a/modular_ss220/silicons/code/items/gripper.dm b/modular_ss220/silicons/code/items/gripper.dm index c1ea891b30c4..7c7697e028e9 100644 --- a/modular_ss220/silicons/code/items/gripper.dm +++ b/modular_ss220/silicons/code/items/gripper.dm @@ -53,8 +53,8 @@ /obj/item/robot_parts, /obj/item/stack/sheet/mineral/plasma, // for repair plasmamans /obj/item/mmi, - /obj/item/reagent_containers/food/pill, - /obj/item/reagent_containers/food/drinks, + /obj/item/reagent_containers/pill, + /obj/item/reagent_containers/drinks, /obj/item/reagent_containers/glass, /obj/item/reagent_containers/syringe, ) diff --git a/modular_ss220/silicons/code/items/rlf.dm b/modular_ss220/silicons/code/items/rlf.dm index 4125e871fee6..1bb4b71c29e5 100644 --- a/modular_ss220/silicons/code/items/rlf.dm +++ b/modular_ss220/silicons/code/items/rlf.dm @@ -21,7 +21,7 @@ if(!receiver.client) to_chat(user, span_warning("You offer lollipop to [receiver], but they don't seem to respond...")) return - var/obj/item/I = new /obj/item/reagent_containers/food/snacks/candy/sucker/lollipop + var/obj/item/I = new /obj/item/food/snacks/candy/sucker/lollipop receiver.throw_alert("take item [I.UID()]", /obj/screen/alert/take_item/RLF, alert_args = list(user, receiver, I)) to_chat(user, span_info("You offer lollipop to [receiver].")) @@ -29,7 +29,7 @@ var/mob/living/receiver = locateUID(receiver_UID) if(receiver.stat != CONSCIOUS) return - var/obj/item/reagent_containers/food/snacks/candy/sucker/I = locateUID(item_UID) + var/obj/item/food/snacks/candy/sucker/I = locateUID(item_UID) if(receiver.r_hand && receiver.l_hand) to_chat(receiver, span_warning("You need to have your hands free to accept [I]!")) return @@ -49,13 +49,13 @@ receiver.visible_message(span_notice("[giver] handed [I] to [receiver].")) receiver.clear_alert("take item [item_UID]") -/obj/item/reagent_containers/food/snacks/candy/sucker/lollipop +/obj/item/food/snacks/candy/sucker/lollipop name = "lollipop" desc = "For being such a courage patient!" icon_state = "sucker" filling_color = "#60A584" list_reagents = list("sugar" = 4) -/obj/item/reagent_containers/food/snacks/candy/sucker/lollipop/New() +/obj/item/food/snacks/candy/sucker/lollipop/New() . = ..() icon_state = pick("sucker_blue", "sucker_green", "sucker_orange", "sucker_purple", "sucker_red", "sucker_yellow") diff --git a/modular_ss220/silicons/code/robot_modules.dm b/modular_ss220/silicons/code/robot_modules.dm index 3f88ceb9c217..679c19ca6c95 100644 --- a/modular_ss220/silicons/code/robot_modules.dm +++ b/modular_ss220/silicons/code/robot_modules.dm @@ -24,7 +24,6 @@ . = ..() basic_modules.Remove(/obj/item/gripper_medical, /obj/item/reagent_containers/borghypo) basic_modules |= list( - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, /obj/item/rlf, /obj/item/gripper/medical, @@ -34,7 +33,6 @@ /obj/item/robot_module/butler/Initialize(mapload) . = ..() basic_modules |= list( - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, /obj/item/gripper/service, /obj/item/eftpos/cyborg, @@ -43,20 +41,12 @@ /obj/item/robot_module/janitor/Initialize(mapload) . = ..() basic_modules |= list( - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, ) -/obj/item/robot_module/miner/Initialize(mapload) - . = ..() - basic_modules |= list( - /obj/item/crowbar/cyborg, - ) - /obj/item/robot_module/security/Initialize(mapload) . = ..() basic_modules |= list( - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, ) @@ -72,7 +62,6 @@ . = ..() basic_modules.Remove(/obj/item/gripper_medical) basic_modules |= list( - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, /obj/item/rlf, /obj/item/gripper/medical, @@ -103,7 +92,6 @@ . = ..() basic_modules |= list( /obj/item/gripper/nuclear, - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, /obj/item/pinpointer, /obj/item/pinpointer/operative/nad, @@ -113,7 +101,6 @@ . = ..() basic_modules |= list( /obj/item/gripper/nuclear, - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, /obj/item/pinpointer/operative/nad, ) @@ -122,7 +109,6 @@ /obj/item/robot_module/alien/hunter/Initialize(mapload) . = ..() basic_modules |= list( - /obj/item/crowbar/cyborg, /obj/item/gps/cyborg, /obj/item/pinpointer/operative/nad, ) diff --git a/modular_ss220/text_to_speech/_tts.dme b/modular_ss220/text_to_speech/_tts.dme index 4facec666490..15376354e8cd 100644 --- a/modular_ss220/text_to_speech/_tts.dme +++ b/modular_ss220/text_to_speech/_tts.dme @@ -13,6 +13,7 @@ #include "code/tts_provider.dm" #include "code/tts_seed.dm" #include "code/tts_subsystem.dm" +#include "code/tts_megaphone.dm" #include "code/base_seeds/mobs/_base.dm" #include "code/base_seeds/mobs/alien.dm" diff --git a/modular_ss220/text_to_speech/code/base_seeds/objs/objs.dm b/modular_ss220/text_to_speech/code/base_seeds/objs/objs.dm index 493e43abc5a1..718ef7974651 100644 --- a/modular_ss220/text_to_speech/code/base_seeds/objs/objs.dm +++ b/modular_ss220/text_to_speech/code/base_seeds/objs/objs.dm @@ -22,4 +22,4 @@ /obj/structure/mirror/magic/proc/tts_choose(choice, mob/living/carbon/human/human_to_update) if(choice == "Voice TTS") - human_to_update.change_voice(human_to_update, TRUE) + human_to_update.change_voice(human_to_update, TRUE, TRUE) diff --git a/modular_ss220/text_to_speech/code/hear.dm b/modular_ss220/text_to_speech/code/hear.dm index bea4f3ab0fe5..0bbf59db9be8 100644 --- a/modular_ss220/text_to_speech/code/hear.dm +++ b/modular_ss220/text_to_speech/code/hear.dm @@ -30,6 +30,10 @@ return trim(msg) +/mob/combine_message(list/message_pieces, verb, mob/speaker, always_stars) + . = ..() + return replace_characters(., list("+")) + /mob/hear_say(list/message_pieces, verb, italics, mob/speaker, sound/speech_sound, sound_vol, sound_frequency, use_voice) . = ..() if(!can_hear()) diff --git a/modular_ss220/text_to_speech/code/seeds/silero.dm b/modular_ss220/text_to_speech/code/seeds/silero.dm index 9be2ce57b433..d85746ec8fa6 100644 --- a/modular_ss220/text_to_speech/code/seeds/silero.dm +++ b/modular_ss220/text_to_speech/code/seeds/silero.dm @@ -4389,7 +4389,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/emperor_bg3 - name = "Mind Flayer Emperor" + name = "Mind_Flayer_Emperor" value = "en_Emperor" category = TTS_CATEGORY_BALDURS_GATE_3 gender = TTS_GENDER_MALE @@ -4407,7 +4407,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/cave_johnson - name = "Cave johnson" + name = "Cave_Johnson" value = "portal_cave_johnson" category = TTS_CATEGORY_PORTAL gender = TTS_GENDER_MALE @@ -4419,19 +4419,19 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/han_solo - name = "Han Solo" + name = "Han_Solo" value = "Star_Wars_Han_Solo" category = TTS_CATEGORY_STAR_WARS gender = TTS_GENDER_MALE /datum/tts_seed/silero/darth_sidious - name = "Darth Sidious" + name = "Darth_Sidious" value = "Star_Wars_Darth_Sidious" category = TTS_CATEGORY_STAR_WARS gender = TTS_GENDER_MALE /datum/tts_seed/silero/luke_skywalker - name = "Luke Skywalker" + name = "Luke_Skywalker" value = "Star_Wars_Luke_Skywalker" category = TTS_CATEGORY_STAR_WARS gender = TTS_GENDER_MALE @@ -4443,25 +4443,25 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/darth_vader - name = "Darth Vader" + name = "Darth_Vader" value = "Star_Wars_Darth_Vader" category = TTS_CATEGORY_STAR_WARS gender = TTS_GENDER_MALE /datum/tts_seed/silero/obiwan_kenobi - name = "Obi-wan Kenobi" + name = "Obi-wan_Kenobi" value = "Star_Wars_Obi-Wan_Kenobi" category = TTS_CATEGORY_STAR_WARS gender = TTS_GENDER_MALE /datum/tts_seed/silero/anakin_skywalker - name = "Anakin Skywalker" + name = "Anakin_Skywalker" value = "Star_Wars_Anakin_Skywalker" category = TTS_CATEGORY_STAR_WARS gender = TTS_GENDER_MALE /datum/tts_seed/silero/optimus_prime - name = "Optimus Prime" + name = "Optimus_Prime" value = "Transformers_War_of_Cybertron_optimusprime" category = TTS_CATEGORY_TRANSFORMERS gender = TTS_GENDER_MALE @@ -4514,9 +4514,8 @@ category = TTS_CATEGORY_LOTR gender = TTS_GENDER_MALE - /datum/tts_seed/silero/gingerbread_man - name = "Gingerbread Man" + name = "Gingerbread_Man" value = "Srek_Gingerbread_Man" category = TTS_CATEGORY_SHREK gender = TTS_GENDER_MALE @@ -4534,7 +4533,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/fairy_godmother - name = "Fairy Godmother" + name = "Fairy_Godmother" value = "Srek_Fairy_Godmother" category = TTS_CATEGORY_SHREK gender = TTS_GENDER_FEMALE @@ -4546,13 +4545,13 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/srek_narrator - name = "Shrek Narrator" + name = "Shrek_Narrator" value = "Srek_Narrator" category = TTS_CATEGORY_SHREK gender = TTS_GENDER_MALE /datum/tts_seed/silero/puss_in_boots - name = "Puss in Boots" + name = "Puss_in_Boots" value = "Srek_Puss_in_Boots" category = TTS_CATEGORY_SHREK gender = TTS_GENDER_MALE @@ -4564,7 +4563,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/jack_sparrow - name = "Jack Sparrow" + name = "Jack_Sparrow" value = "Pirats_of_the_caribbean_Jack_Sparrow" category = TTS_CATEGORY_POTC gender = TTS_GENDER_MALE @@ -4582,13 +4581,13 @@ gender = TTS_GENDER_FEMALE /datum/tts_seed/silero/davy_jones - name = "Davy Jones" + name = "Davy_Jones" value = "Pirats_of_the_caribbean_Davy_Jones" category = TTS_CATEGORY_POTC gender = TTS_GENDER_MALE /datum/tts_seed/silero/sirius_black - name = "Sirius Black" + name = "Sirius_Black" value = "Harry_Potter_Sirius_Black" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE @@ -4606,13 +4605,13 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/harry_potter - name = "Harry Potter" + name = "Harry_Potter" value = "Harry_Potter_Harry_Potter" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE /datum/tts_seed/silero/dumbledore - name = "Albus Dumbledore" + name = "Albus_Dumbledore" value = "Harry_Potter_Albus_Dumbledore" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE @@ -4624,25 +4623,25 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/severus_snape - name = "Злодеус Злей" + name = "Severus_Snape" value = "Harry_Potter_Severus_Snape" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE /datum/tts_seed/silero/flitwick - name = "Filius Flitwick" + name = "Filius_Flitwick" value = "Harry_Potter_Filius_Flitwick" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE /datum/tts_seed/silero/minerva_mcgonagall - name = "Minnerva McGonagall" + name = "Minnerva_McGonagall" value = "Harry_Potter_Minerva_McGonagall" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_FEMALE /datum/tts_seed/silero/horace_slughorn - name = "Horace Slughorn" + name = "Horace_Slughorn" value = "Harry_Potter_Horace_Slughorn" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE @@ -4654,7 +4653,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/alastor - name = "Alastor Mad-eye Moody" + name = "Alastor_Mad-eye_Moody" value = "Harry_Potter_Alastor_Mad-Eye_Moody" category = TTS_CATEGORY_HARRY_POTTER gender = TTS_GENDER_MALE @@ -4672,7 +4671,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/tony_stark - name = "Tony Stark" + name = "Tony_Stark" value = "Marvel_Tony_Stark" category = TTS_CATEGORY_MARVEL gender = TTS_GENDER_MALE @@ -4810,7 +4809,7 @@ gender = TTS_GENDER_MALE /datum/tts_seed/silero/wrathion_deathwing - name = "Wration Deathwing" + name = "Wration_Deathwing" value = "Dragons2_Wrathion_Deathwing" category = TTS_CATEGORY_WOW gender = TTS_GENDER_MALE @@ -4862,4 +4861,3 @@ value = "slovo_patsana_main" category = TTS_CATEGORY_BOYS_WORD gender = TTS_GENDER_MALE - diff --git a/modular_ss220/text_to_speech/code/tts_megaphone.dm b/modular_ss220/text_to_speech/code/tts_megaphone.dm new file mode 100644 index 000000000000..f714b9643f06 --- /dev/null +++ b/modular_ss220/text_to_speech/code/tts_megaphone.dm @@ -0,0 +1,7 @@ +/obj/item/megaphone/say_msg(mob/living/user, message) + . = ..() + for(var/mob/M in get_mobs_in_view(14, src)) + var/effect = SOUND_EFFECT_MEGAPHONE + if(isrobot(user)) + effect = SOUND_EFFECT_MEGAPHONE_ROBOT + INVOKE_ASYNC(GLOBAL_PROC, /proc/tts_cast, user, M, message, user.tts_seed, FALSE, effect) diff --git a/modular_ss220/text_to_speech/code/tts_preferences.dm b/modular_ss220/text_to_speech/code/tts_preferences.dm index b7ec9b44557b..02a1335defb3 100644 --- a/modular_ss220/text_to_speech/code/tts_preferences.dm +++ b/modular_ss220/text_to_speech/code/tts_preferences.dm @@ -21,19 +21,21 @@ name = "Эксплорер TTS голосов" var/phrases = TTS_PHRASES -/datum/ui_module/tts_seeds_explorer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/tts_seeds_explorer/ui_state(mob/user) + return GLOB.always_state + +/datum/ui_module/tts_seeds_explorer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TTSSeedsExplorer", name, 550, 800, master_ui, state) + ui = new(user, src, "TTSSeedsExplorer", name) ui.set_autoupdate(FALSE) ui.open() /datum/ui_module/tts_seeds_explorer/ui_data(mob/user) var/list/data = list() - data["selected_seed"] = user.client.prefs.active_character.tts_seed - data["donator_level"] = user.client.donator_level + data["character_gender"] = user.client.prefs.active_character.gender return data @@ -61,7 +63,6 @@ "required_donator_level" = seed.required_donator_level, )) data["seeds"] = seeds - data["phrases"] = phrases return data @@ -102,6 +103,10 @@ client.prefs.ShowChoices(src) return FALSE var/datum/tts_seed/seed = SStts220.tts_seeds[client.prefs.active_character.tts_seed] + if(!seed) + to_chat(usr, span_danger("Выбранный голос персонажа недоступен!")) + client.prefs.ShowChoices(src) + return FALSE switch(client.donator_level) if(LITTLE_WORKER_TIER) diff --git a/modular_ss220/text_to_speech/code/tts_seed.dm b/modular_ss220/text_to_speech/code/tts_seed.dm index a4acad6e7a29..9ede1650c136 100644 --- a/modular_ss220/text_to_speech/code/tts_seed.dm +++ b/modular_ss220/text_to_speech/code/tts_seed.dm @@ -10,38 +10,49 @@ new_dna.tts_seed_dna = tts_seed_dna return new_dna -/atom/proc/select_voice(mob/user, silent_target = FALSE, override = FALSE) - if(!ismob(src) && !user) - return null +/atom/proc/select_voice(mob/user, silent_target = FALSE, override = FALSE, fancy_voice_input_tgui = FALSE) + if(!user) + if(!ismob(src)) + return null + else + user = src + var/static/tts_test_str = "Так звучит мой голос." var/tts_seeds - var/tts_gender = get_converted_tts_seed_gender(user.gender) - var/list/list_genders = SStts220.tts_list_names_gender[tts_gender] + var/tts_gender = get_converted_tts_seed_gender(gender) + var/list/tts_seeds_by_gender = SStts220.tts_seeds_by_gender[tts_gender] if(user && (check_rights(R_ADMIN, FALSE, user) || override)) - tts_seeds = list_genders + tts_seeds = tts_seeds_by_gender else - var/list/not_available_tts_seeds = list_genders - SStts220.get_available_seeds(src) - tts_seeds = list_genders - not_available_tts_seeds + tts_seeds = tts_seeds_by_gender && SStts220.get_available_seeds(src) // && for lists means intersection - var/datum/character_save/active_character = user?.client?.prefs.active_character + var/datum/character_save/active_character = user.client?.prefs.active_character var/new_tts_seed - if(active_character.tts_seed && (user.gender == active_character.gender)) + if(active_character?.tts_seed && (user.gender == active_character.gender)) if(alert(user || src, "Оставляем голос вашего персонажа [active_character.real_name]?", "Выбор голоса", "Нет", "Да") == "Да") new_tts_seed = active_character.tts_seed + if(!new_tts_seed) - new_tts_seed = input(user, "Выберите голос вашего персонажа", "Преобразуем голос") as null|anything in tts_seeds + if(fancy_voice_input_tgui) + new_tts_seed = tgui_input_list(user, "Выберите голос вашего персонажа", "Преобразуем голос", tts_seeds) + else + new_tts_seed = input(user, "Выберите голос вашего персонажа", "Преобразуем голос") as null|anything in tts_seeds + if(!new_tts_seed) return null - if(!silent_target && ismob(src) && src != user) + + if(!silent_target && src != user && ismob(src)) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(tts_cast), null, src, tts_test_str, new_tts_seed, FALSE) + if(user) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(tts_cast), null, user, tts_test_str, new_tts_seed, FALSE) + return new_tts_seed -/atom/proc/change_voice(mob/user, override = FALSE) +/atom/proc/change_voice(mob/user, override = FALSE, fancy_voice_input_tgui = FALSE) set waitfor = FALSE - var/new_tts_seed = select_voice(user, override = override) + var/new_tts_seed = select_voice(user = user, override = override, fancy_voice_input_tgui = fancy_voice_input_tgui) if(!new_tts_seed) return null return update_tts_seed(new_tts_seed) @@ -60,13 +71,13 @@ ert_member.change_voice(src.mob) /mob/living/silicon/verb/synth_change_voice() - set name = "Change Voice" + set name = "Смена голоса" set desc = "Express yourself!" - set category = "Subsystems" - change_voice() + set category = "Подсистемы" + change_voice(fancy_voice_input_tgui = TRUE) -/atom/proc/get_converted_tts_seed_gender() - switch(gender) +/atom/proc/get_converted_tts_seed_gender(gender_to_convert = gender) + switch(gender_to_convert) if(MALE) return TTS_GENDER_MALE if(FEMALE) @@ -76,7 +87,7 @@ /atom/proc/pick_tts_seed_gender() var/tts_gender = get_converted_tts_seed_gender() - return pick(SStts220.tts_list_names_gender[tts_gender]) + return pick(SStts220.tts_seeds_by_gender[tts_gender]) /atom/proc/get_random_tts_seed_gender() var/tts_choice = pick_tts_seed_gender(gender) @@ -120,7 +131,7 @@ ..() /datum/surgery_step/tune_vocal_cords/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - target.change_voice(user, TRUE) + target.change_voice(user, TRUE, TRUE) user.visible_message("[user] tunes [target]'s vocals completely!", span_notice("You tune [target]'s vocals completely.")) return TRUE diff --git a/modular_ss220/text_to_speech/code/tts_subsystem.dm b/modular_ss220/text_to_speech/code/tts_subsystem.dm index 6dd04fba02e8..935e695a8954 100644 --- a/modular_ss220/text_to_speech/code/tts_subsystem.dm +++ b/modular_ss220/text_to_speech/code/tts_subsystem.dm @@ -34,7 +34,7 @@ SUBSYSTEM_DEF(tts220) var/list/tts_seeds_names_by_donator_levels = list() var/list/datum/tts_provider/tts_providers = list() - var/list/tts_list_names_gender = list(TTS_GENDER_ANY = list(), TTS_GENDER_MALE = list(), TTS_GENDER_FEMALE = list()) + var/list/tts_seeds_by_gender = list(TTS_GENDER_ANY = list(), TTS_GENDER_MALE = list(), TTS_GENDER_FEMALE = list()) var/list/tts_local_channels_by_owner = list() @@ -52,6 +52,75 @@ SUBSYSTEM_DEF(tts220) var/debug_mode_enabled = FALSE + var/static/tts_acronym_replacements = list( + "нт" = "Эн Тэ", + "смо" = "Эс Мэ О", + "гп" = "Гэ Пэ", + "рд" = "Эр Дэ", + "гсб" = "Гэ Эс Бэ", + "срп" = "Эс Эр Пэ", + "цк" = "Цэ Каа", + "рнд" = "Эр Эн Дэ", + "сб" = "Эс Бэ", + "рцд" = "Эр Цэ Дэ", + "брпд" = "Бэ Эр Пэ Дэ", + "рпд" = "Эр Пэ Дэ", + "рпед" = "Эр Пед", + "тсф" = "Тэ Эс Эф", + "срт" = "Эс Эр Тэ", + "обр" = "О Бэ Эр", + "кпк" = "Кэ Пэ Каа", + "пда" = "Пэ Дэ А", + "id" = "Ай Ди", + "мщ" = "Эм Ще", + "вт" = "Вэ Тэ", + "ерп" = "Йе Эр Пэ", + "се" = "Эс Йе", + "апц" = "А Пэ Цэ", + "лкп" = "Эл Ка Пэ", + "см" = "Эс Эм", + "ека" = "Йе Ка", + "ка" = "Кэ А", + "бса" = "Бэ Эс Аа", + "днк" = "Дэ Эн Ка", + "тк" = "Тэ Ка", + "бфл" = "Бэ Эф Эл", + "бщ" = "Бэ Щэ", + "кк" = "Кэ Ка", + "ск" = "Эс Ка", + "зк" = "Зэ Ка", + "ерт" = "Йе Эр Тэ", + "вкд" = "Вэ Ка Дэ", + "нтр" = "Эн Тэ Эр", + "пнт" = "Пэ Эн Тэ", + "авд" = "А Вэ Дэ", + "пнв" = "Пэ Эн Вэ", + "ссд" = "Эс Эс Дэ", + "кпб" = "Кэ Пэ Бэ", + "сссп" = "Эс Эс Эс Пэ", + "крб" = "Ка Эр Бэ", + "бд" = "Бэ Дэ", + "сст" = "Эс Эс Тэ", + "скс" = "Эс Ка Эс", + "икн" = "И Ка Эн", + "нсс" = "Эн Эс Эс", + "емп" = "Йе Эм Пэ", + "бс" = "Бэ Эс", + "цкс" = "Цэ Ка Эс", + "срд" = "Эс Эр Дэ", + "жпс" = "Джи Пи Эс", + "gps" = "Джи Пи Эс", + "ннксс" = "Эн Эн Ка Эс Эс", + "ss" = "Эс Эс", + "сс" = "Эс Эс", + "тесла" = "тэсла", + "трейзен" = "трэйзэн", + "нанотрейзен" = "нанотрэйзэн", + "мед" = "м ед", + "меде" = "м еде", + "кз" = "Кэ Зэ", + ) + var/static/list/tts_job_replacements = list( "nanotrasen navy field officer" = "Полевой офицер флота Нанотрэйзен", "nanotrasen navy officer" = "Офицер флота nanotrasen", @@ -115,18 +184,18 @@ SUBSYSTEM_DEF(tts220) "warden" = "Смотритель", "detective" = "Детектив", "forensic technician" = "Криминалист", + "junior security officer" = "Младший офицер службы безопасности", "security officer" = "Офицер службы безопасности", "security trainer" = "Тренер службы безопасности", - "junior security officer" = "Младший офицер службы безопасности", "security cadet" = "Кадет службы безопасности", "Security Assistant" = "Ассистент службы безопасности", "Security Graduate" = "Выпускник кадетской академии", "brig physician" = "Врач брига", "security pod pilot" = "Пилот пода службы безопасности", + "captain" = "Капитан", "ai" = "И И", "cyborg" = "Киборг", "robot" = "Робот", - "captain" = "Капитан", "head of personnel" = "Глава персонала", "nanotrasen representative" = "Представитель Нанотрэйзен", "blueshield" = "Блюшилд", @@ -184,7 +253,7 @@ SUBSYSTEM_DEF(tts220) tts_seeds[seed.name] = seed tts_seeds_names += seed.name tts_seeds_names_by_donator_levels["[seed.required_donator_level]"] += list(seed.name) - tts_list_names_gender[seed.gender] += seed.name + tts_seeds_by_gender[seed.gender] += seed.name tts_seeds_names = sortTim(tts_seeds_names, /proc/cmp_text_asc) /datum/controller/subsystem/tts220/Initialize(start_timeofday) @@ -471,106 +540,33 @@ SUBSYSTEM_DEF(tts220) sanitized_messages_cache_miss++ . = message . = trim(.) - var/static/regex/punctuation_check = new(@"[.,?!]\Z") if(!punctuation_check.Find(.)) . += "." - var/static/regex/html_tags = new(@"<[^>]*>", "g") . = html_tags.Replace(., "") . = html_decode(.) - var/static/regex/forbidden_symbols = new(@"[^a-zA-Z0-9а-яА-ЯёЁ,!?+./ \r\n\t:—()-]", "g") . = forbidden_symbols.Replace(., "") - - var/static/regex/words = new(@"(? diff --git a/modular_ss220/title_screen/code/asset_lobby.dm b/modular_ss220/title_screen/code/asset_lobby.dm new file mode 100644 index 000000000000..8475ba529038 --- /dev/null +++ b/modular_ss220/title_screen/code/asset_lobby.dm @@ -0,0 +1,4 @@ +/datum/asset/simple/lobby_fonts + assets = list( + "FixedsysExcelsior3.01Regular.ttf" = 'modular_ss220/title_screen/html/browser/FixedsysExcelsior3.01Regular.ttf', + ) diff --git a/modular_ss220/title_screen/code/dead.dm b/modular_ss220/title_screen/code/dead.dm index ab33d670ae81..fcf61c94c3ab 100644 --- a/modular_ss220/title_screen/code/dead.dm +++ b/modular_ss220/title_screen/code/dead.dm @@ -1,3 +1,3 @@ /mob/dead/Login() . = ..() - hide_title_screen() + SStitle.hide_title_screen_from(client) diff --git a/modular_ss220/title_screen/code/living.dm b/modular_ss220/title_screen/code/living.dm index 9b96cbd348d0..4383fe0e3a02 100644 --- a/modular_ss220/title_screen/code/living.dm +++ b/modular_ss220/title_screen/code/living.dm @@ -1,3 +1,3 @@ /mob/living/Login() . = ..() - hide_title_screen() + SStitle.hide_title_screen_from(client) diff --git a/modular_ss220/title_screen/code/mob.dm b/modular_ss220/title_screen/code/mob.dm deleted file mode 100644 index 316772269203..000000000000 --- a/modular_ss220/title_screen/code/mob.dm +++ /dev/null @@ -1,57 +0,0 @@ -#define TITLE_SCREEN_BG_FILE_NAME "bg_file_name" - -/** - * Shows the titlescreen to a new player. - */ -/mob/proc/show_title_screen() - if(!client) - return - winset(src, "title_browser", "is-disabled=true;is-visible=true") - winset(src, "status_bar", "is-visible=false") - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/lobby) //Sending pictures to the client - assets.send(src) - - update_title_screen() - -/** - * Get the HTML of title screen. - */ -/mob/proc/get_title_html() - var/dat = SStitle.title_html - dat += {""} - - if(SStitle.current_notice) - dat += {" -
        - -
        - "} - - dat += "" - - return dat - -/** - * Hard updates the title screen HTML, it causes visual glitches if used. - */ -/mob/proc/update_title_screen() - var/dat = get_title_html() - - src << browse(SStitle.current_title_screen, "file=[TITLE_SCREEN_BG_FILE_NAME];display=0") - src << browse(dat, "window=title_browser") - -/datum/asset/simple/lobby - assets = list( - "FixedsysExcelsior3.01Regular.ttf" = 'modular_ss220/title_screen/html/browser/FixedsysExcelsior3.01Regular.ttf', - ) - -/** - * Removes the titlescreen entirely from a mob. - */ -/mob/proc/hide_title_screen() - if(client?.mob) - winset(client, "title_browser", "is-disabled=true;is-visible=false") - winset(client, "status_bar", "is-visible=true") - -#undef TITLE_SCREEN_BG_FILE_NAME diff --git a/modular_ss220/title_screen/code/new_player.dm b/modular_ss220/title_screen/code/new_player.dm index 8dc07b7195a0..4b32f04fd989 100644 --- a/modular_ss220/title_screen/code/new_player.dm +++ b/modular_ss220/title_screen/code/new_player.dm @@ -1,3 +1,3 @@ /mob/new_player/Login() . = ..() - show_title_screen() + SStitle.show_title_screen_to(client) diff --git a/modular_ss220/title_screen/code/title_screen_controls.dm b/modular_ss220/title_screen/code/title_screen_controls.dm index 579cba432ff5..7f923533e2e3 100644 --- a/modular_ss220/title_screen/code/title_screen_controls.dm +++ b/modular_ss220/title_screen/code/title_screen_controls.dm @@ -16,9 +16,10 @@ var/file = input(usr) as icon|null if(!file) return - SStitle.change_title_screen(file) + + SStitle.set_title_image(file) if("Reset") - SStitle.change_title_screen() + SStitle.set_title_image() if("Cancel") return @@ -49,12 +50,12 @@ /client/verb/fix_title_screen() set name = "Fix Lobby Screen" set desc = "Lobbyscreen broke? Press this." - set category = "OOC" + set category = "Special Verbs" if(istype(mob, /mob/new_player)) - mob.show_title_screen() + SStitle.show_title_screen_to(src) else - mob.hide_title_screen() + SStitle.hide_title_screen_from(src) /** * An admin debug command that enables you to change the HTML on the go. @@ -74,7 +75,6 @@ if(!new_html) return - SStitle.title_html = new_html - SStitle.show_title_screen() + SStitle.set_title_html(new_html) message_admins("[key_name_admin(usr)] has changed the title screen HTML.") diff --git a/modular_ss220/title_screen/code/title_screen_datum.dm b/modular_ss220/title_screen/code/title_screen_datum.dm new file mode 100644 index 000000000000..675c28b3ced3 --- /dev/null +++ b/modular_ss220/title_screen/code/title_screen_datum.dm @@ -0,0 +1,61 @@ +/datum/title_screen + /// The preamble html that includes all styling and layout. + var/title_html = DEFAULT_TITLE_HTML + /// The current notice text, or null. + var/notice + /// The current title screen being displayed, as `/datum/asset_cache_item` + var/datum/asset_cache_item/screen_image + +/datum/title_screen/New(title_html = DEFAULT_TITLE_HTML, notice, screen_image_file) + src.title_html = title_html + src.notice = notice + set_screen_image(screen_image_file) + +/datum/title_screen/proc/set_screen_image(screen_image_file) + if(!screen_image_file) + return + + if(!isfile(screen_image_file)) + screen_image_file = fcopy_rsc(screen_image_file) + + screen_image = SSassets.transport.register_asset("[screen_image_file]", screen_image_file) + +/datum/title_screen/proc/show_to(client/viewer) + if(!viewer) + return + + winset(viewer, "title_browser", "is-disabled=true;is-visible=true") + winset(viewer, "status_bar", "is-visible=false") + + var/datum/asset/lobby_asset = get_asset_datum(/datum/asset/simple/lobby_fonts) + lobby_asset.send(viewer) + + SSassets.transport.send_assets(viewer, screen_image.name) + + viewer << browse(get_title_html(), "window=title_browser") + +/datum/title_screen/proc/hide_from(client/viewer) + if(viewer?.mob) + winset(viewer, "title_browser", "is-disabled=true;is-visible=false") + winset(viewer, "status_bar", "is-visible=true") + +/** + * Get the HTML of title screen. + */ +/datum/title_screen/proc/get_title_html() + var/list/html = list(title_html) + + var/screen_image_url = SSassets.transport.get_asset_url(asset_cache_item = screen_image) + if(screen_image_url) + html += {""} + + if(notice) + html += {" +
        + +
        + "} + + html += "" + + return html.Join() diff --git a/modular_ss220/title_screen/code/title_screen_subsystem.dm b/modular_ss220/title_screen/code/title_screen_subsystem.dm index bf3288137af6..6879ab130661 100644 --- a/modular_ss220/title_screen/code/title_screen_subsystem.dm +++ b/modular_ss220/title_screen/code/title_screen_subsystem.dm @@ -3,67 +3,136 @@ /datum/controller/subsystem/title flags = SS_NO_FIRE init_order = INIT_ORDER_TITLE - /// The current title screen being displayed, as a file path text. - var/current_title_screen - /// The current notice text, or null. - var/current_notice - /// The preamble html that includes all styling and layout. - var/title_html - /// The list of possible title screens to rotate through, as file path texts. - var/title_screens = list() + /// Currently set title screen + var/datum/title_screen/current_title_screen + /// The list of image files available to be picked for title screen + var/list/title_images_pool = list() /datum/controller/subsystem/title/Initialize() - if(!fexists("config/title_html.txt")) - error(span_boldwarning("Unable to read title_html.txt, reverting to backup title html, please check your server config and ensure this file exists.")) - title_html = DEFAULT_TITLE_HTML - else - title_html = file2text("config/title_html.txt") + fill_title_images_pool() + current_title_screen = new(title_html = get_title_html(), screen_image_file = pick_title_image()) + show_title_screen_to_all_new_players() - var/list/local_title_screens = list() - for(var/screen in flist(TITLE_SCREENS_LOCATION)) - var/list/screen_name_parts = splittext(screen, "+") - if((LAZYLEN(screen_name_parts) == 1 && (screen_name_parts[1] != "exclude" && screen_name_parts[1] != "blank.png"))) - local_title_screens += screen +/datum/controller/subsystem/title/Recover() + current_title_screen = SStitle.current_title_screen + title_images_pool = SStitle.title_images_pool - for(var/title_screen in local_title_screens) - var/file_path = "[TITLE_SCREENS_LOCATION][title_screen]" - ASSERT(fexists(file_path)) - title_screens += fcopy_rsc(file_path) +/** + * Iterates over all files in `TITLE_SCREENS_LOCATION` and loads all valid title screens to `title_screens` var. + */ +/datum/controller/subsystem/title/proc/fill_title_images_pool() + for(var/file_name in flist(TITLE_SCREENS_LOCATION)) + if(validate_filename(file_name)) + var/file_path = "[TITLE_SCREENS_LOCATION][file_name]" + title_images_pool += fcopy_rsc(file_path) - change_title_screen() +/** + * Checks wheter passed title is valid + * Currently validates extension and checks whether it's special image like default title screen etc. + */ +/datum/controller/subsystem/title/proc/validate_filename(filename) + var/static/list/title_screens_to_ignore = list("blank.png") + if(filename in title_screens_to_ignore) + return FALSE -/datum/controller/subsystem/title/Recover() - current_title_screen = SStitle.current_title_screen - current_notice = SStitle.current_notice - title_html = SStitle.title_html - title_screens = SStitle.title_screens + var/static/list/supported_extensions = list("gif", "jpg", "jpeg", "png", "svg") + var/extstart = findlasttext(filename, ".") + if(!extstart) + return FALSE + + var/extension = copytext(filename, extstart + 1) + return (extension in supported_extensions) /** * Show the title screen to all new players. */ -/datum/controller/subsystem/title/proc/show_title_screen() - for(var/mob/new_player/new_player in GLOB.player_list) - INVOKE_ASYNC(new_player, TYPE_PROC_REF(/mob/new_player, show_title_screen)) +/datum/controller/subsystem/title/proc/show_title_screen_to_all_new_players() + if(!current_title_screen) + return + + for(var/mob/new_player/viewer in GLOB.player_list) + show_title_screen_to(viewer.client) + +/** + * Show the title screen to specific client. + */ +/datum/controller/subsystem/title/proc/show_title_screen_to(client/viewer) + if(!viewer || !current_title_screen) + return + + INVOKE_ASYNC(current_title_screen, TYPE_PROC_REF(/datum/title_screen, show_to), viewer) + +/** + * Hide the title screen from specific client. + */ +/datum/controller/subsystem/title/proc/hide_title_screen_from(client/viewer) + if(!viewer || !current_title_screen) + return + + INVOKE_ASYNC(current_title_screen, TYPE_PROC_REF(/datum/title_screen, hide_from), viewer) /** * Adds a notice to the main title screen in the form of big red text! */ -/datum/controller/subsystem/title/proc/set_notice(new_title) - current_notice = new_title ? sanitize_text(new_title) : null - show_title_screen() +/datum/controller/subsystem/title/proc/set_notice(new_notice) + new_notice = new_notice ? sanitize_text(new_notice) : null + + if(!current_title_screen) + if(!new_notice) + return + + current_title_screen = new(notice = new_notice) + else + current_title_screen.notice = new_notice + + show_title_screen_to_all_new_players() /** - * Changes the title screen to a new image. + * Replaces html of title screen */ -/datum/controller/subsystem/title/proc/change_title_screen(new_screen) - if(new_screen) - current_title_screen = new_screen +/datum/controller/subsystem/title/proc/set_title_html(new_html) + if(!new_html) + return + + if(!current_title_screen) + current_title_screen = new(title_html = new_html) + else + current_title_screen.title_html = new_html + + show_title_screen_to_all_new_players() + +/** + * Changes title image to desired + */ +/datum/controller/subsystem/title/proc/set_title_image(desired_image_file) + if(desired_image_file) + if(!isfile(desired_image_file)) + CRASH("Not a file passed to `/datum/controller/subsystem/title/proc/set_title_image`") + else + desired_image_file = pick_title_image() + + if(!current_title_screen) + current_title_screen = new(screen_image_file = desired_image_file) else - if(LAZYLEN(title_screens)) - current_title_screen = pick(title_screens) - else - current_title_screen = DEFAULT_TITLE_SCREEN_IMAGE + current_title_screen.set_screen_image(desired_image_file) - show_title_screen() + show_title_screen_to_all_new_players() + +/** + * Picks title image from `title_images_pool` list. If the list is empty, `DEFAULT_TITLE_HTML` is returned + */ +/datum/controller/subsystem/title/proc/pick_title_image() + return length(title_images_pool) ? pick(title_images_pool) : DEFAULT_TITLE_SCREEN_IMAGE_PATH + + +/** + * Tries to read title html from config, if none found - backups to `DEFAULT_TITLE_HTML` + */ +/datum/controller/subsystem/title/proc/get_title_html() + if(!fexists("config/title_html.txt")) + error(span_boldwarning("Unable to read title_html.txt, reverting to backup title html, please check your server config and ensure this file exists.")) + return DEFAULT_TITLE_HTML + else + return file2text("config/title_html.txt") #undef TITLE_SCREENS_LOCATION diff --git a/modular_ss220/title_screen/icons/default.dmi b/modular_ss220/title_screen/icons/default.dmi deleted file mode 100644 index e8ede9793036..000000000000 Binary files a/modular_ss220/title_screen/icons/default.dmi and /dev/null differ diff --git a/modular_ss220/title_screen/icons/default.gif b/modular_ss220/title_screen/icons/default.gif new file mode 100644 index 000000000000..6b7519f1b5a9 Binary files /dev/null and b/modular_ss220/title_screen/icons/default.gif differ diff --git a/modular_ss220/unique_objects/code/cheese_statue.dm b/modular_ss220/unique_objects/code/cheese_statue.dm index e54c7df45bd0..bb5b0f3e6ffa 100644 --- a/modular_ss220/unique_objects/code/cheese_statue.dm +++ b/modular_ss220/unique_objects/code/cheese_statue.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(cheese_recipes, list( /datum/recipe/oven/reinforcedcheese reagents = list("sodiumchloride" = 10) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel, - /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel + /obj/item/food/snacks/sliceable/cheesewheel, + /obj/item/food/snacks/sliceable/cheesewheel ) result = /obj/item/stack/sheet/cheese diff --git a/modular_ss220/uplink_items/_uplink_items.dm b/modular_ss220/uplink_items/_uplink_items.dm new file mode 100644 index 000000000000..5551bdb68981 --- /dev/null +++ b/modular_ss220/uplink_items/_uplink_items.dm @@ -0,0 +1,5 @@ +/datum/modpack/uplink_items + name = "Uplink items" + desc = "Модуль предметов для аплинка" + author = "HardexZ/TheReal" + diff --git a/modular_ss220/uplink_items/_uplink_items.dme b/modular_ss220/uplink_items/_uplink_items.dme new file mode 100644 index 000000000000..f05f83044c41 --- /dev/null +++ b/modular_ss220/uplink_items/_uplink_items.dme @@ -0,0 +1,2 @@ +#include "_uplink_items.dm" +#include "code/uplink_general.dm" diff --git a/modular_ss220/uplink_items/code/uplink_general.dm b/modular_ss220/uplink_items/code/uplink_general.dm new file mode 100644 index 000000000000..bc261396a728 --- /dev/null +++ b/modular_ss220/uplink_items/code/uplink_general.dm @@ -0,0 +1,8 @@ +/datum/uplink_item/device_tools/shadowlight + name = "Shadowlight" + desc = "Устройство, замаскированное под обычный фонарик, но создающее тьму в определенном радиусе. \ + Окутайте себя тьмой и спрячьтесь от посторонних глаз. \ + Практически не работает на ярком свету " + reference = "SHAD" + item = /obj/item/flashlight/shadowlight + cost = 20 diff --git a/modular_ss220/verbs/code/verbs.dm b/modular_ss220/verbs/code/verbs.dm index c68b15645012..d0f963b146c9 100644 --- a/modular_ss220/verbs/code/verbs.dm +++ b/modular_ss220/verbs/code/verbs.dm @@ -1,22 +1,60 @@ /* - Respawn to OOC + Respawn May be returned in the future by offs (because it's commented in code\modules\mob) */ +/datum/configuration_section/ss220_misc_configuration + /// Respawn delay in minutes before one may respawn as a crew member + var/respawn_delay = 20 + +/datum/configuration_section/ss220_misc_configuration/load_data(list/data) + . = ..() + CONFIG_LOAD_NUM(respawn_delay, data["respawn_delay"]) + +/// Respawn verb /mob/verb/abandon_mob() set name = "Respawn" set category = "OOC" - if(!GLOB.configuration.general.respawn_enabled) - to_chat(usr, "Respawning is disabled.") + if(!GLOB.configuration.general.respawn_enabled && !check_rights(R_ADMIN)) + to_chat(usr, span_warning("Возрождение отключено.")) + return + + if(stat != DEAD) + to_chat(usr, span_boldnotice("Вы должны быть мертвы чтобы возродиться!")) + return + + if(!SSticker || SSticker.current_state < GAME_STATE_PLAYING) + to_chat(src, span_warning("Вы не можете возродиться до начала игры!")) + return + + var/deathtime = world.time - timeofdeath + if(isobserver(src)) + var/mob/dead/observer/G = src + if(!HAS_TRAIT(G, TRAIT_RESPAWNABLE) && !check_rights(R_ADMIN)) + to_chat(usr, span_warning("У Вас сейчас нет возможности возрождения!")) + return + + var/deathtimeminutes = round(deathtime / 600) + var/pluralcheck = "минут" + if(deathtimeminutes == 0) + pluralcheck = "" + else if(deathtimeminutes == 1) + pluralcheck = " [deathtimeminutes] минуту и" + else if(deathtimeminutes > 1) + pluralcheck = " [deathtimeminutes] минут(-ы) и" + var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) + + if(deathtimeminutes < GLOB.configuration.ss220_misc.respawn_delay && !check_rights(R_ADMIN)) + to_chat(usr, span_notice("Вы мертвы[pluralcheck] [deathtimeseconds] секунд(-ы).")) + to_chat(usr, span_warning("Вы должны подождать ещё [GLOB.configuration.ss220_misc.respawn_delay] минут чтобы возродиться!")) return - if(stat != DEAD || !SSticker) - to_chat(usr, "You must be dead to use this!") + if(alert("Вы уверен что хотите возродиться?", "Возрождение", "Да", "Нет") != "Да") return log_game("[key_name(usr)] has respawned.") - to_chat(usr, "Make sure to play a different character, and please roleplay correctly!") + to_chat(usr, span_boldnotice("Убедитесь, что Вы играете другим персонажем, и пожалуйста, отыгрывайте корректно!")) if(!client) log_game("[key_name(usr)] respawn failed due to disconnect.") @@ -37,7 +75,7 @@ M.key = key return -// Pick darkness list +/// Pick darkness list /mob/dead/observer/pick_darkness() set name = "Pick Darkness" set desc = "Choose how much darkness you want to see." diff --git a/modular_ss220/wire_splicing/wiresplicing.dm b/modular_ss220/wire_splicing/code/wiresplicing.dm similarity index 70% rename from modular_ss220/wire_splicing/wiresplicing.dm rename to modular_ss220/wire_splicing/code/wiresplicing.dm index eef354881688..dcd4a39c469b 100644 --- a/modular_ss220/wire_splicing/wiresplicing.dm +++ b/modular_ss220/wire_splicing/code/wiresplicing.dm @@ -3,7 +3,7 @@ /obj/effect/spawner/wire_splicing name = "wiring splicing spawner" - icon = 'modular_ss220/wire_splicing/structures_spawners.dmi' + icon = 'modular_ss220/wire_splicing/icons/structures_spawners.dmi' icon_state = "wire_splicing" /obj/effect/spawner/wire_splicing/Initialize() @@ -11,7 +11,8 @@ new /obj/structure/wire_splicing(get_turf(src)) return INITIALIZE_HINT_QDEL -/obj/effect/spawner/wire_splicing/thirty //70% chance to be nothing +// 70% chance to be nothing +/obj/effect/spawner/wire_splicing/thirty name = "wiring splicing spawner 30%" /obj/effect/spawner/wire_splicing/thirty/Initialize(mapload) @@ -22,13 +23,14 @@ /obj/structure/wire_splicing name = "wire splicing" desc = "Looks like someone was very drunk when doing this, or just didn't care. This can be removed by wirecutters." - icon = 'modular_ss220/wire_splicing/traps.dmi' + icon = 'modular_ss220/wire_splicing/icons/traps.dmi' icon_state = "wire_splicing1" density = FALSE anchored = TRUE flags = CONDUCT layer = WIRE_TERMINAL_LAYER - var/messiness = 0 // How bad the splicing was, determines the chance of shock + /// How bad the splicing was, determines the chance of shock + var/messiness = 0 var/shock_chance_per_messiness = 10 /obj/structure/wire_splicing/Initialize(mapload) @@ -36,57 +38,57 @@ messiness = rand(1, MAX_MESSINESS) update_icon(UPDATE_ICON_STATE) - //At messiness of 2 or below, triggering when walking on a catwalk is impossible - //Above that it becomes possible, so we will change the layer to make it poke through catwalks + // At messiness of 2 or below, triggering when walking on a catwalk is impossible + // Above that it becomes possible, so we will change the layer to make it poke through catwalks if(messiness > 2) layer = LOW_OBJ_LAYER // I wont do such stuff on splicing "reinforcement". Take it as nasty feature - //Wire splice can only exist on a cable. Lets try to place it in a good location - if(locate(/obj/structure/cable) in get_turf(src)) //if we're already in a good location, no problem! + // Wire splice can only exist on a cable. Lets try to place it in a good location + if(locate(/obj/structure/cable) in get_turf(src)) // If we're already in a good location, no problem! return - //Make a list of turfs with cables in them + // Make a list of turfs with cables in them var/list/candidates = list() - //We will give each turf a score to determine its suitability + // We will give each turf a score to determine its suitability var/best_score = -INFINITY for(var/obj/structure/cable/C in range(3, get_turf(src))) var/turf/simulated/floor/T = get_turf(C) - //Wire inside a wall? can't splice there + // Wire inside a wall? can't splice there if(!istype(T)) continue - //We already checked this one + // We already checked this one if(T in candidates) continue var/turf_score = 0 - //Nobody walks on underplating so we don't want to place traps there + // Nobody walks on underplating so we don't want to place traps there var/turf/space/W = get_turf(C) if(!istype(W)) continue //No traps in space /* - //Catwalks are made for walking on, we definitely want traps there + // Catwalks are made for walking on, we definitely want traps there if(locate(/obj/structure/catwalk) in T) turf_score += 2 */ - //If its below the threshold ignore it + // If its below the threshold ignore it if(turf_score < best_score) continue - //If it sets a new threshold, discard everything before + // If it sets a new threshold, discard everything before else if(turf_score > best_score) best_score = turf_score candidates.Cut() candidates.Add(T) - //No nearby cables? Cancel + // No nearby cables? Cancel if(!length(candidates)) return INITIALIZE_HINT_QDEL @@ -112,9 +114,14 @@ /obj/structure/wire_splicing/proc/shock(mob/living/user, prb, siemens_coeff = 1) . = FALSE - if(!in_range(src, user)) //To prevent TK and mech users from getting shocked + // To prevent TK and mech users from getting shocked + if(!in_range(src, user)) return - if(user.m_intent == MOVE_INTENT_WALK) // Walk slowly to try to step over + // To prevent simple mobs to be shocked + if(!ishuman(user)) + return + // Walk slowly to try to step over + if(user.m_intent == MOVE_INTENT_WALK) prb = max(prb - WALKING_REDUCE_PROBABILITY, 0) if(!prob(prb)) return @@ -133,7 +140,7 @@ if(shock(user, 50)) return user.visible_message(span_notice("[user] cuts the splicing."), span_notice("You cut the splicing.")) - investigate_log(" was cut by [key_name(usr)] in [AREACOORD(src)]") + investigate_log("was cut by [key_name(usr)] in [AREACOORD(src)]", "wires") qdel(src) /obj/structure/wire_splicing/attackby(obj/item/I, mob/user, params) @@ -154,7 +161,7 @@ messiness = min(messiness + 1, MAX_MESSINESS) coil.use(1) update_icon(UPDATE_ICON_STATE) - investigate_log("wire splicing was reinforced to [messiness] by [key_name(usr)] in [AREACOORD(src)]") + investigate_log("was reinforced to [messiness] by [key_name(usr)] in [AREACOORD(src)]", "wires") #undef MAX_MESSINESS #undef WALKING_REDUCE_PROBABILITY diff --git a/modular_ss220/wire_splicing/icons/structures_spawners.dmi b/modular_ss220/wire_splicing/icons/structures_spawners.dmi new file mode 100644 index 000000000000..806d79db9d6a Binary files /dev/null and b/modular_ss220/wire_splicing/icons/structures_spawners.dmi differ diff --git a/modular_ss220/wire_splicing/traps.dmi b/modular_ss220/wire_splicing/icons/traps.dmi similarity index 100% rename from modular_ss220/wire_splicing/traps.dmi rename to modular_ss220/wire_splicing/icons/traps.dmi diff --git a/modular_ss220/wire_splicing/structures_spawners.dmi b/modular_ss220/wire_splicing/structures_spawners.dmi deleted file mode 100644 index fc1e588f1141..000000000000 Binary files a/modular_ss220/wire_splicing/structures_spawners.dmi and /dev/null differ diff --git a/modular_ss220/wire_splicing/wiresplicing.dme b/modular_ss220/wire_splicing/wiresplicing.dme index 99885b02f32f..ac3421ac66ec 100644 --- a/modular_ss220/wire_splicing/wiresplicing.dme +++ b/modular_ss220/wire_splicing/wiresplicing.dme @@ -1 +1 @@ -#include "wiresplicing.dm" +#include "code/wiresplicing.dm" diff --git a/paradise.dme b/paradise.dme index c881ce63915b..300e339ded67 100644 --- a/paradise.dme +++ b/paradise.dme @@ -33,12 +33,13 @@ #include "code\__DEFINES\access_defines.dm" #include "code\__DEFINES\admin_defines.dm" #include "code\__DEFINES\announce_defines.dm" -#include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\armour.dm" +#include "code\__DEFINES\asset_defines.dm" #include "code\__DEFINES\atmospherics_defines.dm" #include "code\__DEFINES\bitfields_defines.dm" #include "code\__DEFINES\bots.dm" #include "code\__DEFINES\callbacks.dm" +#include "code\__DEFINES\chat.dm" #include "code\__DEFINES\chat_box_defines.dm" #include "code\__DEFINES\clothing_defines.dm" #include "code\__DEFINES\color_defines.dm" @@ -75,6 +76,7 @@ #include "code\__DEFINES\lighting_defines.dm" #include "code\__DEFINES\logs.dm" #include "code\__DEFINES\machines.dm" +#include "code\__DEFINES\mappers.dm" #include "code\__DEFINES\martial_arts.dm" #include "code\__DEFINES\MC.dm" #include "code\__DEFINES\mecha_defines.dm" @@ -99,6 +101,7 @@ #include "code\__DEFINES\shuttle_defines.dm" #include "code\__DEFINES\sight.dm" #include "code\__DEFINES\sound_defines.dm" +#include "code\__DEFINES\speech_channels.dm" #include "code\__DEFINES\spell_defines.dm" #include "code\__DEFINES\stat.dm" #include "code\__DEFINES\station_defines.dm" @@ -230,6 +233,7 @@ #include "code\controllers\configuration\configuration_core.dm" #include "code\controllers\configuration\sections\admin_configuration.dm" #include "code\controllers\configuration\sections\afk_configuration.dm" +#include "code\controllers\configuration\sections\asset_cache_configuration.dm" #include "code\controllers\configuration\sections\custom_sprites_configuration.dm" #include "code\controllers\configuration\sections\database_configuration.dm" #include "code\controllers\configuration\sections\discord_configuration.dm" @@ -254,7 +258,7 @@ #include "code\controllers\subsystem\SSambience.dm" #include "code\controllers\subsystem\SSblackbox.dm" #include "code\controllers\subsystem\SScamera.dm" -#include "code\controllers\subsystem\SSchat_pings.dm" +#include "code\controllers\subsystem\SSchat.dm" #include "code\controllers\subsystem\SScleanup.dm" #include "code\controllers\subsystem\SSdbcore.dm" #include "code\controllers\subsystem\SSdebugview.dm" @@ -279,6 +283,7 @@ #include "code\controllers\subsystem\SSnpcpool.dm" #include "code\controllers\subsystem\SSoverlays.dm" #include "code\controllers\subsystem\SSparallax.dm" +#include "code\controllers\subsystem\SSping.dm" #include "code\controllers\subsystem\SSprofiler.dm" #include "code\controllers\subsystem\SSradiation.dm" #include "code\controllers\subsystem\SSredis.dm" @@ -328,6 +333,7 @@ #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\chatmessage.dm" #include "code\datums\click_intercept.dm" #include "code\datums\custom_user_item.dm" @@ -348,6 +354,7 @@ #include "code\datums\mixed.dm" #include "code\datums\movement_detector.dm" #include "code\datums\mutable_appearance.dm" +#include "code\datums\pathfinding_mover.dm" #include "code\datums\periodic_news.dm" #include "code\datums\pipe_datums.dm" #include "code\datums\position_point_vector.dm" @@ -374,6 +381,7 @@ #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" #include "code\datums\components\caltrop.dm" +#include "code\datums\components\codeword_hearing.dm" #include "code\datums\components\corpse_description.dm" #include "code\datums\components\deadchat_control.dm" #include "code\datums\components\decal.dm" @@ -391,6 +399,7 @@ #include "code\datums\components\persistent_overlay.dm" #include "code\datums\components\proximity_monitor.dm" #include "code\datums\components\radioactive.dm" +#include "code\datums\components\shielded.dm" #include "code\datums\components\slippery.dm" #include "code\datums\components\spawner.dm" #include "code\datums\components\spooky.dm" @@ -473,7 +482,9 @@ #include "code\datums\keybindings\admin_keybinds.dm" #include "code\datums\keybindings\ai_keybinds.dm" #include "code\datums\keybindings\carbon_keybinds.dm" +#include "code\datums\keybindings\click_keybindings.dm" #include "code\datums\keybindings\client.dm" +#include "code\datums\keybindings\communication_keybinds.dm" #include "code\datums\keybindings\emote_keybinds.dm" #include "code\datums\keybindings\human_keybinds.dm" #include "code\datums\keybindings\living_keybinds.dm" @@ -522,6 +533,7 @@ #include "code\datums\spells\conjure.dm" #include "code\datums\spells\conjure_item.dm" #include "code\datums\spells\construct_spells.dm" +#include "code\datums\spells\disguise_self.dm" #include "code\datums\spells\emplosion.dm" #include "code\datums\spells\ethereal_jaunt.dm" #include "code\datums\spells\fake_gib.dm" @@ -560,6 +572,7 @@ #include "code\datums\spells\alien_spells\plasma_weeds.dm" #include "code\datums\spells\alien_spells\queen_evolve.dm" #include "code\datums\spells\alien_spells\regurgitate.dm" +#include "code\datums\spells\alien_spells\tail_lash.dm" #include "code\datums\spells\alien_spells\transfer_plasma.dm" #include "code\datums\spells\alien_spells\whisper.dm" #include "code\datums\station_traits\_station_trait.dm" @@ -571,6 +584,7 @@ #include "code\datums\status_effects\buffs.dm" #include "code\datums\status_effects\debuffs.dm" #include "code\datums\status_effects\gas.dm" +#include "code\datums\status_effects\magic_disguise.dm" #include "code\datums\status_effects\neutral.dm" #include "code\datums\status_effects\status_effect.dm" #include "code\datums\uplink_items\uplink_general.dm" @@ -976,6 +990,7 @@ #include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\mixing_bowl.dm" #include "code\game\objects\items\random_items.dm" +#include "code\game\objects\items\roulette.dm" #include "code\game\objects\items\scratch_card.dm" #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\sport.dm" @@ -1084,6 +1099,7 @@ #include "code\game\objects\items\weapons\holosign_projector.dm" #include "code\game\objects\items\weapons\holy_weapons.dm" #include "code\game\objects\items\weapons\kitchen.dm" +#include "code\game\objects\items\weapons\knuckledusters.dm" #include "code\game\objects\items\weapons\legcuffs.dm" #include "code\game\objects\items\weapons\lighters.dm" #include "code\game\objects\items\weapons\manuals.dm" @@ -1132,6 +1148,7 @@ #include "code\game\objects\items\weapons\bio_chips\bio_chip_pad.dm" #include "code\game\objects\items\weapons\bio_chips\bio_chip_prescan.dm" #include "code\game\objects\items\weapons\bio_chips\bio_chip_sad_trombone.dm" +#include "code\game\objects\items\weapons\bio_chips\bio_chip_shock.dm" #include "code\game\objects\items\weapons\bio_chips\bio_chip_stealth.dm" #include "code\game\objects\items\weapons\bio_chips\bio_chip_storage.dm" #include "code\game\objects\items\weapons\bio_chips\bio_chip_supercharge.dm" @@ -1169,6 +1186,7 @@ #include "code\game\objects\items\weapons\storage\lockbox.dm" #include "code\game\objects\items\weapons\storage\secure.dm" #include "code\game\objects\items\weapons\storage\storage_base.dm" +#include "code\game\objects\items\weapons\storage\surgical_tray.dm" #include "code\game\objects\items\weapons\storage\toolbox.dm" #include "code\game\objects\items\weapons\storage\uplink_kits.dm" #include "code\game\objects\items\weapons\storage\wallets.dm" @@ -1203,7 +1221,6 @@ #include "code\game\objects\structures\inflatable.dm" #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" -#include "code\game\objects\structures\ladders.dm" #include "code\game\objects\structures\lattice.dm" #include "code\game\objects\structures\loom.dm" #include "code\game\objects\structures\mineral_doors.dm" @@ -1215,6 +1232,7 @@ #include "code\game\objects\structures\nest.dm" #include "code\game\objects\structures\noticeboard.dm" #include "code\game\objects\structures\plasticflaps.dm" +#include "code\game\objects\structures\pondering_orb.dm" #include "code\game\objects\structures\railings.dm" #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" @@ -1261,6 +1279,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security_lockers.dm" #include "code\game\objects\structures\decor\decor.dm" +#include "code\game\objects\structures\lavaland\ladder.dm" #include "code\game\objects\structures\lavaland\necropolis_tendril.dm" #include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" @@ -1455,6 +1474,26 @@ #include "code\modules\assembly\signaler.dm" #include "code\modules\assembly\timer.dm" #include "code\modules\assembly\voice.dm" +#include "code\modules\asset_cache\asset_cache_client.dm" +#include "code\modules\asset_cache\asset_cache_item.dm" +#include "code\modules\asset_cache\asset_list.dm" +#include "code\modules\asset_cache\assets\asset_alloys.dm" +#include "code\modules\asset_cache\assets\asset_chem_master.dm" +#include "code\modules\asset_cache\assets\asset_chess.dm" +#include "code\modules\asset_cache\assets\asset_claw_game.dm" +#include "code\modules\asset_cache\assets\asset_cloning.dm" +#include "code\modules\asset_cache\assets\asset_common.dm" +#include "code\modules\asset_cache\assets\asset_jquery.dm" +#include "code\modules\asset_cache\assets\asset_materials.dm" +#include "code\modules\asset_cache\assets\asset_mob_hunt.dm" +#include "code\modules\asset_cache\assets\asset_nanomap.dm" +#include "code\modules\asset_cache\assets\asset_panels.dm" +#include "code\modules\asset_cache\assets\asset_paper.dm" +#include "code\modules\asset_cache\assets\asset_rpd.dm" +#include "code\modules\asset_cache\assets\asset_safe.dm" +#include "code\modules\asset_cache\assets\asset_tgui.dm" +#include "code\modules\asset_cache\transports\asset_transport.dm" +#include "code\modules\asset_cache\transports\webroot_transport.dm" #include "code\modules\atmospherics\environmental\LINDA_fire.dm" #include "code\modules\atmospherics\environmental\LINDA_system.dm" #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm" @@ -1495,7 +1534,6 @@ #include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple.dm" #include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_he.dm" #include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_hidden.dm" -#include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_insulated.dm" #include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_visible.dm" #include "code\modules\atmospherics\machinery\portable\canister.dm" #include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm" @@ -1540,7 +1578,6 @@ #include "code\modules\buildmode\submodes\tilt.dm" #include "code\modules\buildmode\submodes\variable_edit.dm" #include "code\modules\client\2fa.dm" -#include "code\modules\client\asset_cache.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_procs.dm" #include "code\modules\client\jobban_holder.dm" @@ -1882,6 +1919,7 @@ #include "code\modules\instruments\songs\_song_ui.dm" #include "code\modules\instruments\songs\play_legacy.dm" #include "code\modules\instruments\songs\play_synthesized.dm" +#include "code\modules\lavaland\lavaland_theme.dm" #include "code\modules\library\book.dm" #include "code\modules\library\library_admin.dm" #include "code\modules\library\library_catalog.dm" @@ -1908,8 +1946,10 @@ #include "code\modules\mapping\metastation.dm" #include "code\modules\mapping\test_tiny.dm" #include "code\modules\mapping\windoor_access_helpers.dm" +#include "code\modules\maptext_alerts\location_blurbs.dm" #include "code\modules\maptext_alerts\text_blurbs.dm" #include "code\modules\martial_arts\adminfu.dm" +#include "code\modules\martial_arts\bearserk.dm" #include "code\modules\martial_arts\brawling.dm" #include "code\modules\martial_arts\cqc.dm" #include "code\modules\martial_arts\grav_stomp.dm" @@ -1923,6 +1963,9 @@ #include "code\modules\martial_arts\wrestling.dm" #include "code\modules\martial_arts\combos\martial_combo.dm" #include "code\modules\martial_arts\combos\adminfu\healing_palm.dm" +#include "code\modules\martial_arts\combos\bearserk\bear_jaws.dm" +#include "code\modules\martial_arts\combos\bearserk\paw_slam.dm" +#include "code\modules\martial_arts\combos\bearserk\smokey.dm" #include "code\modules\martial_arts\combos\cqc\consecutive.dm" #include "code\modules\martial_arts\combos\cqc\kick.dm" #include "code\modules\martial_arts\combos\cqc\pressure.dm" @@ -2479,6 +2522,7 @@ #include "code\modules\projectiles\ammunition\energy_lens.dm" #include "code\modules\projectiles\ammunition\magazines.dm" #include "code\modules\projectiles\ammunition\special_ammo.dm" +#include "code\modules\projectiles\guns\chaos_bolt.dm" #include "code\modules\projectiles\guns\energy_guns.dm" #include "code\modules\projectiles\guns\grenade_launcher.dm" #include "code\modules\projectiles\guns\magic.dm" @@ -2707,6 +2751,9 @@ #include "code\modules\surgery\organs\robolimbs.dm" #include "code\modules\surgery\organs\skeleton_organs.dm" #include "code\modules\surgery\organs\vocal_cords.dm" +#include "code\modules\surgery\organs\organ_datums\heart_datum.dm" +#include "code\modules\surgery\organs\organ_datums\lung_datum.dm" +#include "code\modules\surgery\organs\organ_datums\organ_datum.dm" #include "code\modules\surgery\organs\subtypes\abductor_organs.dm" #include "code\modules\surgery\organs\subtypes\diona_organs.dm" #include "code\modules\surgery\organs\subtypes\drask_organs.dm" @@ -2716,7 +2763,6 @@ #include "code\modules\surgery\organs\subtypes\moth_organs.dm" #include "code\modules\surgery\organs\subtypes\plasmaman_organs.dm" #include "code\modules\surgery\organs\subtypes\skrell_organs.dm" -#include "code\modules\surgery\organs\subtypes\slime_organs.dm" #include "code\modules\surgery\organs\subtypes\standard_organs.dm" #include "code\modules\surgery\organs\subtypes\tajaran_organs.dm" #include "code\modules\surgery\organs\subtypes\unathi_organs.dm" @@ -2732,6 +2778,7 @@ #include "code\modules\tgui\external.dm" #include "code\modules\tgui\states.dm" #include "code\modules\tgui\tgui_datum.dm" +#include "code\modules\tgui\tgui_window.dm" #include "code\modules\tgui\modules\appearance_changer.dm" #include "code\modules\tgui\modules\atmos_control.dm" #include "code\modules\tgui\modules\colour_matrix_tester.dm" @@ -2744,7 +2791,6 @@ #include "code\modules\tgui\modules\module_base.dm" #include "code\modules\tgui\modules\power_monitor.dm" #include "code\modules\tgui\modules\robot_self_diagnosis.dm" -#include "code\modules\tgui\modules\tgui_input_list.dm" #include "code\modules\tgui\modules\volume_mixer.dm" #include "code\modules\tgui\plugins\modal.dm" #include "code\modules\tgui\plugins\tgui_login.dm" @@ -2763,7 +2809,19 @@ #include "code\modules\tgui\states\physical.dm" #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\viewer_state.dm" -#include "code\modules\tgui\states\zlevel_state.dm" +#include "code\modules\tgui\tgui_input\alert_input.dm" +#include "code\modules\tgui\tgui_input\list_input.dm" +#include "code\modules\tgui\tgui_input\number_input.dm" +#include "code\modules\tgui\tgui_input\text_input.dm" +#include "code\modules\tgui\tgui_panel\audio.dm" +#include "code\modules\tgui\tgui_panel\telemetry.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel_external.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel_message.dm" +#include "code\modules\tgui\tgui_panel\to_chat.dm" +#include "code\modules\tgui_input\say_modal\tgui_say_modal.dm" +#include "code\modules\tgui_input\say_modal\tgui_say_speech.dm" +#include "code\modules\tgui_input\say_modal\tgui_say_typing.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\unit_tests\_unit_tests.dm" #include "code\modules\vehicle\ambulance.dm" @@ -2789,7 +2847,6 @@ #include "code\modules\world_topic\pr_announce_topic.dm" #include "code\modules\world_topic\queue_status.dm" #include "code\modules\world_topic\status.dm" -#include "goon\code\datums\browserOutput.dm" #include "interface\interface.dm" #include "interface\skin.dmf" // END_INCLUDE diff --git a/sound/items/roulette_spin.ogg b/sound/items/roulette_spin.ogg new file mode 100644 index 000000000000..ef8e37fd2020 Binary files /dev/null and b/sound/items/roulette_spin.ogg differ diff --git a/sound/machines/ai_start.ogg b/sound/machines/ai_start.ogg new file mode 100644 index 000000000000..e28202cff9fa Binary files /dev/null and b/sound/machines/ai_start.ogg differ diff --git a/sound/machines/typewriter.ogg b/sound/machines/typewriter.ogg new file mode 100644 index 000000000000..5a93033fae37 Binary files /dev/null and b/sound/machines/typewriter.ogg differ diff --git a/tgui/.eslintignore b/tgui/.eslintignore index 010416b9e88a..a59187b933ae 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -1,6 +1,6 @@ +/.yarn/** /**/node_modules /**/*.bundle.* /**/*.chunk.* /**/*.hot-update.* /packages/inferno/** -/packages/tgui/public/shim-*.js diff --git a/tgui/.eslintrc-harder.yml b/tgui/.eslintrc-harder.yml deleted file mode 100644 index 75399d2677f0..000000000000 --- a/tgui/.eslintrc-harder.yml +++ /dev/null @@ -1,9 +0,0 @@ -rules: - ## Enforce a maximum cyclomatic complexity allowed in a program - complexity: [error, { max: 25 }] - ## Enforce consistent brace style for blocks - brace-style: [error, stroustrup, { allowSingleLine: false }] - ## Enforce the consistent use of either backticks, double, or single quotes - quotes: [error, single, { avoidEscape: true, allowTemplateLiterals: true }] - react/jsx-closing-bracket-location: - [error, { selfClosing: after-props, nonEmpty: after-props }] diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index 34a47789fba3..f6b81acf36b6 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -1,6 +1,7 @@ -parser: '@babel/eslint-parser' +root: true +parser: '@typescript-eslint/parser' parserOptions: - ecmaVersion: 2019 + ecmaVersion: 2020 sourceType: module ecmaFeatures: jsx: true @@ -8,14 +9,19 @@ env: es6: true browser: true node: true +globals: + Byond: readonly plugins: - - react -extends: - prettier + - react settings: + import/resolver: + node: + extensions: ['.js','.jsx','.ts','.tsx'] react: version: '16.10' rules: + ## Possible Errors ## ---------------------------------------- @@ -113,7 +119,7 @@ rules: ## Require return statements to either always or never specify values # consistent-return: error ## Enforce consistent brace style for all control statements - curly: [error, all] + curly: [error, multi-line] ## Require default cases in switch statements # default-case: error ## Enforce default parameters to be last @@ -282,6 +288,7 @@ rules: ## Disallow initializing variables to undefined no-undef-init: error ## Disallow the use of undefined as an identifier + ## This can't be enabled because of https://github.com/facebook/regenerator/blob/cb755fd82c648cbc5307a5a2d61cdd598e698fc4/packages/runtime/runtime.js#L14 # no-undefined: error ## Disallow unused variables # no-unused-vars: error @@ -373,6 +380,7 @@ rules: #ignorePattern: '^(import\s.+\sfrom\s|.*require\()', #ignoreUrls: true, #ignoreRegExpLiterals: true, + #ignoreStrings: true, #}] ## Enforce a maximum number of lines per file # max-lines: error @@ -644,7 +652,7 @@ rules: ## Enforce ES5 or ES6 class for React Components react/prefer-es6-class: error ## Enforce that props are read-only - react/prefer-read-only-props: error + # react/prefer-read-only-props: error ## Enforce stateless React Components to be written as a pure function react/prefer-stateless-function: error ## Prevent missing props validation in a React component definition @@ -754,3 +762,10 @@ rules: react/jsx-uses-vars: error ## Prevent missing parentheses around multilines JSX (fixable) # react/jsx-wrap-multilines: error + +overrides: + - files: [ "*.ts", "*.mts", "*.cts", "*.tsx" ] + rules: + # https://typescript-eslint.io/linting/troubleshooting/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + no-undef: off + react/jsx-no-undef: off diff --git a/tgui/.gitattributes b/tgui/.gitattributes index 0016cc3bf678..6f5199e98099 100644 --- a/tgui/.gitattributes +++ b/tgui/.gitattributes @@ -2,9 +2,22 @@ ## Enforce text mode and LF line breaks *.js text eol=lf +*.jsx text eol=lf +*.ts text eol=lf +*.tsx text eol=lf *.css text eol=lf +*.scss text eol=lf *.html text eol=lf *.json text eol=lf +*.yml text eol=lf +*.md text eol=lf +*.bat text eol=lf +*.svg text eol=lf +yarn.lock text eol=lf +bin/tgui text eol=lf ## Treat bundles as binary and ignore them during conflicts *.bundle.* binary merge=tgui-merge-bundle +*.chunk.* binary merge=tgui-merge-bundle +.yarn/releases/**/* binary +.yarn/plugins/**/* binary diff --git a/tgui/.gitignore b/tgui/.gitignore index 416ca3768da0..1dd9fadd08f3 100644 --- a/tgui/.gitignore +++ b/tgui/.gitignore @@ -1,7 +1,21 @@ +## NPM garbage node_modules *.log package-lock.json -/packages/tgui/public/.tmp/**/* -/packages/tgui/public/**/*.hot-update.* -/packages/tgui/public/**/*.map +## Yarn stuff +/.pnp.* +/.yarn/* +!/.yarn/releases +!/.yarn/plugins +!/.yarn/sdks +!/.yarn/versions +!/.yarn/lock.yml + +## Build artifacts +/public/.tmp/**/* +/coverage + +## Previously ignored locations that are kept to avoid confusing git +## while transitioning to a new project structure. +/packages/tgui/public/** diff --git a/tgui/.prettierignore b/tgui/.prettierignore index 25e1493851a8..026715d1bc0a 100644 --- a/tgui/.prettierignore +++ b/tgui/.prettierignore @@ -1,3 +1,4 @@ -# Ignore built packages and styles: -packages/tgui/public -packages/tgui/styles +# Ignore built packages: +public +**.cjs +packages/tgui-dev-server diff --git a/tgui/.yarn/releases/yarn-4.0.2.cjs b/tgui/.yarn/releases/yarn-4.0.2.cjs new file mode 100644 index 000000000000..f12c120ed139 --- /dev/null +++ b/tgui/.yarn/releases/yarn-4.0.2.cjs @@ -0,0 +1,893 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var n_e=Object.create;var MT=Object.defineProperty;var i_e=Object.getOwnPropertyDescriptor;var s_e=Object.getOwnPropertyNames;var o_e=Object.getPrototypeOf,a_e=Object.prototype.hasOwnProperty;var Be=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Kt=(t,e)=>{for(var r in e)MT(t,r,{get:e[r],enumerable:!0})},l_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of s_e(e))!a_e.call(t,a)&&a!==r&&MT(t,a,{get:()=>e[a],enumerable:!(o=i_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?n_e(o_e(t)):{},l_e(e||!t||!t.__esModule?MT(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Kt(vi,{SAFE_TIME:()=>F7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Mu,S_IFREG:()=>Hw});var Mu,wD,Hw,ID,F7,T7=Et(()=>{Mu=61440,wD=16384,Hw=32768,ID=40960,F7=456789e3});var ar={};Kt(ar,{EBADF:()=>Io,EBUSY:()=>c_e,EEXIST:()=>g_e,EINVAL:()=>A_e,EISDIR:()=>h_e,ENOENT:()=>f_e,ENOSYS:()=>u_e,ENOTDIR:()=>p_e,ENOTEMPTY:()=>m_e,EOPNOTSUPP:()=>y_e,EROFS:()=>d_e,ERR_DIR_CLOSED:()=>OT});function Rl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function c_e(t){return Rl("EBUSY",t)}function u_e(t,e){return Rl("ENOSYS",`${t}, ${e}`)}function A_e(t){return Rl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Rl("EBADF",`bad file descriptor, ${t}`)}function f_e(t){return Rl("ENOENT",`no such file or directory, ${t}`)}function p_e(t){return Rl("ENOTDIR",`not a directory, ${t}`)}function h_e(t){return Rl("EISDIR",`illegal operation on a directory, ${t}`)}function g_e(t){return Rl("EEXIST",`file already exists, ${t}`)}function d_e(t){return Rl("EROFS",`read-only filesystem, ${t}`)}function m_e(t){return Rl("ENOTEMPTY",`directory not empty, ${t}`)}function y_e(t){return Rl("EOPNOTSUPP",`operation not supported, ${t}`)}function OT(){return Rl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Kt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>HT,DirEntry:()=>UT,StatEntry:()=>$m,areStatsEqual:()=>jT,clearStats:()=>vD,convertToBigIntStats:()=>C_e,makeDefaultStats:()=>R7,makeEmptyStats:()=>E_e});function R7(){return new $m}function E_e(){return vD(R7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):_T.types.isDate(r)&&(t[e]=new Date(0))}return t}function C_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):_T.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function jT(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var _T,HT,UT,$m,ey,qT=Et(()=>{_T=$e(Be("util")),HT=33188,UT=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=HT;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(HT);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function D_e(t){let e,r;if(e=t.match(B_e))t=e[1];else if(r=t.match(v_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function P_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(w_e))?t=`/${e[1]}`:(r=t.match(I_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?L7(e):GT(e)}var jw,Bt,dr,ue,K,N7,w_e,I_e,B_e,v_e,GT,L7,Ca=Et(()=>{jw=$e(Be("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),K=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();K.cwd=process.platform==="win32"?()=>GT(process.cwd()):process.cwd;process.platform==="win32"&&(K.resolve=(...t)=>t.length>0&&K.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(K.cwd(),...t));N7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>N7(ue,t,e);K.contains=(t,e)=>N7(K,t,e);w_e=/^([a-zA-Z]:.*)$/,I_e=/^\/\/(\.\/)?(.*)$/,B_e=/^\/([a-zA-Z]:.*)$/,v_e=/^\/unc\/(\.dot\/)?(.*)$/;GT=process.platform==="win32"?P_e:t=>t,L7=process.platform==="win32"?D_e:t=>t;ue.fromPortablePath=L7;ue.toPortablePath=GT});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function M7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Lg,mtime:Lg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await YT(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function YT(t,e,r,o,a,n,u){let A=u.didParentExist?await O7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Lg,mtime:Lg}:p,I;switch(!0){case p.isDirectory():I=await x_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await Q_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await F_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function O7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function x_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await YT(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async b=>{await YT(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),I)}))).some(b=>b)&&(h=!0);return h}async function b_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${E}.dat`),v;(te=>(te[te.Lock=0]="Lock",te[te.Rename=1]="Rename"))(v||={});let b=1,C=await O7(r,I);if(a){let U=C&&a.dev===C.dev&&a.ino===C.ino,J=C?.mtimeMs!==S_e;if(U&&J&&h.autoRepair&&(b=0,C=null),!U)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let T=!C&&b===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,L=!1;return t.push(async()=>{if(!C&&(b===0&&await r.lockPromise(I,async()=>{let U=await n.readFilePromise(u);await r.writeFilePromise(I,U)}),b===1&&T)){let U=await n.readFilePromise(u);await r.writeFilePromise(T,U);try{await r.linkPromise(T,I)}catch(J){if(J.code==="EEXIST")L=!0,await r.unlinkPromise(T);else throw J}}a||await r.linkPromise(I,o)}),e.push(async()=>{C||await r.lutimesPromise(I,Lg,Lg),T&&!L&&await r.unlinkPromise(T)}),!1}async function k_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function Q_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?b_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):k_e(t,e,r,o,a,n,u,A,p)}async function F_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Lg,S_e,WT=Et(()=>{Ca();Lg=new Date(456789e3*1e3),S_e=Lg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,U7=Et(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw OT()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function _7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var H7,ty,j7=Et(()=>{H7=Be("events");qT();ty=class extends H7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){_7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){_7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ey:new $m;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;jT(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xD.get(t);typeof p>"u"&&xD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=xD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Og(t){let e=xD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var xD,VT=Et(()=>{j7();xD=new WeakMap});function T_e(t){let e=t.match(/\r?\n/g);if(e===null)return G7.EOL;let r=e.filter(a=>a===`\r +`).length,o=e.length-r;return r>o?`\r +`:` +`}function Ug(t,e){return e.replace(/\r?\n/g,T_e(t))}var q7,G7,hf,Ou,_g=Et(()=>{q7=Be("crypto"),G7=Be("os");WT();Ca();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,q7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await M7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Ou=class extends hf{constructor(){super(K)}}});var Ps,gf=Et(()=>{_g();Ps=class extends hf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,Y7=Et(()=>{gf();Uu=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function W7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var V7,Rn,Hg=Et(()=>{V7=$e(Be("fs"));_g();Ca();Rn=class extends Ou{constructor(r=V7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return K.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(W7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(W7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,K7=Et(()=>{Hg();gf();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?K.normalize(r):this.baseFs.resolve(K.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var J7,_u,z7=Et(()=>{Hg();gf();Ca();J7=Bt.root,_u=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(J7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(J7,this.pathUtils.relative(this.target,r))}}});var ny,X7=Et(()=>{gf();ny=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,_p,Z7=Et(()=>{jg=Be("fs");_g();Hg();VT();BD();Ca();wa=4278190080,_p=class extends Ou{constructor({baseFs:r=new Rn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,KT,Gw,$7=Et(()=>{_g();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),KT=class extends hf{constructor(){super(K)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=KT;Gw.instance=new KT});var Hp,eY=Et(()=>{gf();Ca();Hp=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var R_e,JT,N_e,mi,tY=Et(()=>{Hg();gf();Ca();R_e=/^[0-9]+$/,JT=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,N_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Rn}={}){super(K);this.baseFs=r}static makeVirtualPath(r,o,a){if(K.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!K.basename(o).match(N_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=K.relative(K.dirname(r),a).split("/"),A=0;for(;A{zT=$e(Be("buffer")),kD=Be("url"),rY=Be("util");gf();Ca();bD=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof kD.URL)return(0,kD.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!L_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,rY.inspect)(r)}`)}}});var iY,Bo,df,jp,QD,FD,iy,Rc,Nc,M_e,O_e,U_e,__e,Yw,sY=Et(()=>{iY=Be("readline"),Bo=Symbol("kBaseFs"),df=Symbol("kFd"),jp=Symbol("kClosePromise"),QD=Symbol("kCloseResolve"),FD=Symbol("kCloseReject"),iy=Symbol("kRefs"),Rc=Symbol("kRef"),Nc=Symbol("kUnref"),Yw=class{constructor(e,r){this[M_e]=1;this[O_e]=void 0;this[U_e]=void 0;this[__e]=void 0;this[Bo]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[Rc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Rc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Rc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Rc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Rc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,iY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Rc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Rc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Rc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Rc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Rc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[QD]=e,this[FD]=r}).finally(()=>{this[jp]=void 0,this[FD]=void 0,this[QD]=void 0});return this[jp]}[(Bo,df,M_e=iy,O_e=jp,U_e=QD,__e=FD,Rc)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Nc](){if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Bo].closePromise(e).then(this[QD],this[FD])}}}});function Ww(t,e){e=new bD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of oY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of H_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of oY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Yw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Yw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function TD(t,e){let r=Object.create(t);return Ww(r,e),r}var sy,H_e,oY,aY=Et(()=>{sy=Be("util");nY();sY();H_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),oY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function lY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function cY(){if(XT)return XT;let t=ue.toPortablePath(uY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),XT={tmpdir:t,realTmpdir:e}}var uY,Lc,XT,oe,AY=Et(()=>{uY=$e(Be("os"));Hg();Ca();Lc=new Set,XT=null;oe=Object.assign(new Rn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{this.mkdirSync(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{await this.mkdirPromise(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Kt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Ou,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>hf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>ny,MountFS:()=>_p,NoFS:()=>Gw,NodeFS:()=>Rn,PortablePath:()=>Bt,PosixFS:()=>Hp,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>TD,normalizeLineEndings:()=>Ug,npath:()=>ue,opendir:()=>SD,patchFs:()=>Ww,ppath:()=>K,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>Og,unwatchFile:()=>Mg,watchFile:()=>ry,xfs:()=>oe});var Pt=Et(()=>{T7();BD();qT();WT();U7();VT();_g();Ca();Ca();Y7();_g();K7();z7();X7();Z7();$7();Hg();eY();gf();tY();aY();AY()});var dY=_((axt,gY)=>{gY.exports=hY;hY.sync=q_e;var fY=Be("fs");function j_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{CY.exports=yY;yY.sync=G_e;var mY=Be("fs");function yY(t,e,r){mY.stat(t,function(o,a){r(o,o?!1:EY(a,e))})}function G_e(t,e){return EY(mY.statSync(t),e)}function EY(t,e){return t.isFile()&&Y_e(t,e)}function Y_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var BY=_((uxt,IY)=>{var cxt=Be("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=dY():RD=wY();IY.exports=ZT;ZT.sync=W_e;function ZT(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){ZT(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function W_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var kY=_((Axt,bY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",vY=Be("path"),V_e=oy?";":":",DY=BY(),PY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),SY=(t,e)=>{let r=e.colon||V_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},xY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=SY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(PY(t));let v=o[h],b=/^".*"$/.test(v)?v.slice(1,-1):v,C=vY.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(T,h,0))}),p=(h,E,I)=>new Promise((v,b)=>{if(I===a.length)return v(A(E+1));let C=a[I];DY(h+C,{pathExt:n},(T,L)=>{if(!T&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},K_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=SY(t,e),n=[];for(let u=0;u{"use strict";var QY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};$T.exports=QY;$T.exports.default=QY});var LY=_((pxt,NY)=>{"use strict";var TY=Be("path"),J_e=kY(),z_e=FY();function RY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=J_e.sync(t.command,{path:r[z_e({env:r})],pathExt:e?TY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=TY.resolve(a?t.options.cwd:"",u)),u}function X_e(t){return RY(t)||RY(t,!0)}NY.exports=X_e});var MY=_((hxt,tR)=>{"use strict";var eR=/([()\][%!^"`<>&|;, *?])/g;function Z_e(t){return t=t.replace(eR,"^$1"),t}function $_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(eR,"^$1"),e&&(t=t.replace(eR,"^$1")),t}tR.exports.command=Z_e;tR.exports.argument=$_e});var UY=_((gxt,OY)=>{"use strict";OY.exports=/^#!(.*)/});var HY=_((dxt,_Y)=>{"use strict";var e8e=UY();_Y.exports=(t="")=>{let e=t.match(e8e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var qY=_((mxt,jY)=>{"use strict";var rR=Be("fs"),t8e=HY();function r8e(t){let r=Buffer.alloc(150),o;try{o=rR.openSync(t,"r"),rR.readSync(o,r,0,150,0),rR.closeSync(o)}catch{}return t8e(r.toString())}jY.exports=r8e});var VY=_((yxt,WY)=>{"use strict";var n8e=Be("path"),GY=LY(),YY=MY(),i8e=qY(),s8e=process.platform==="win32",o8e=/\.(?:com|exe)$/i,a8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l8e(t){t.file=GY(t);let e=t.file&&i8e(t.file);return e?(t.args.unshift(t.file),t.command=e,GY(t)):t.file}function c8e(t){if(!s8e)return t;let e=l8e(t),r=!o8e.test(e);if(t.options.forceShell||r){let o=a8e.test(e);t.command=n8e.normalize(t.command),t.command=YY.command(t.command),t.args=t.args.map(n=>YY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function u8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:c8e(o)}WY.exports=u8e});var zY=_((Ext,JY)=>{"use strict";var nR=process.platform==="win32";function iR(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function A8e(t,e){if(!nR)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=KY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function KY(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawn"):null}function f8e(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawnSync"):null}JY.exports={hookChildProcess:A8e,verifyENOENT:KY,verifyENOENTSync:f8e,notFoundError:iR}});var aR=_((Cxt,ay)=>{"use strict";var XY=Be("child_process"),sR=VY(),oR=zY();function ZY(t,e,r){let o=sR(t,e,r),a=XY.spawn(o.command,o.args,o.options);return oR.hookChildProcess(a,o),a}function p8e(t,e,r){let o=sR(t,e,r),a=XY.spawnSync(o.command,o.args,o.options);return a.error=a.error||oR.verifyENOENTSync(a.status,o),a}ay.exports=ZY;ay.exports.spawn=ZY;ay.exports.sync=p8e;ay.exports._parse=sR;ay.exports._enoent=oR});var eW=_((wxt,$Y)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function qg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,qg)}h8e(qg,Error);qg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Se="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},xt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),xr=function(N){return[{type:"text",text:N}]},Wr='""',Vn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ri='"',ps=Br('"',!1),io=function(N){return N},Si=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},ap=function(N){return{type:"shell",shell:N,quoted:!1}},lp=function(N){return{type:"variable",...N,quoted:!1}},Ms=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Os=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ +`,Kn=Br(`\\ +`,!1),Mn=function(){return""},Ni="\\",On=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Me=function(N){return N},ii="\\a",Oa=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,vA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Tt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` +`},Cl="\\r",DA=Br("\\r",!1),cp=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),SA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=cg(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,V,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(V.join("")+"."+re.join(""))}},ms=function(N,V){return{type:"number",value:(N==="-"?-1:1)*parseInt(V.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Pn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,V,re){return{type:V==="*"?"multiplication":"division",right:re}},$=function(N,V){return V.reduce((re,he)=>({left:re,...he}),N)},me=function(N,V,re){return{type:V==="+"?"addition":"subtraction",right:re}},Le="$((",ft=Br("$((",!1),pt="))",Rt=Br("))",!1),er=function(N){return N},Zr="$(",qi=Br("$(",!1),es=function(N){return N},xi="${",jo=Br("${",!1),bA=":-",kA=Br(":-",!1),up=function(N,V){return{name:N,defaultValue:V}},ng=":-}",gu=Br(":-}",!1),ig=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),QA=function(N,V){return{name:N,alternativeValue:V}},mc=":+}",ca=Br(":+}",!1),sg=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",og=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},Ap=function(N){return N},ag=/^[a-zA-Z0-9_]/,FA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return lg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],bi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function lg(){return t.substring(Dt,G)}function mw(){return Ic(Dt,G)}function TA(N,V){throw V=V!==void 0?V:Ic(Dt,G),fg([Ag(N)],t.substring(Dt,G),V)}function fp(N,V){throw V=V!==void 0?V:Ic(Dt,G),Sm(N,V)}function Br(N,V){return{type:"literal",text:N,ignoreCase:V}}function Cs(N,V,re){return{type:"class",parts:N,inverted:V,ignoreCase:re}}function cg(){return{type:"any"}}function ug(){return{type:"end"}}function Ag(N){return{type:"other",description:N}}function pp(N){var V=wl[N],re;if(V)return V;for(re=N-1;!wl[re];)re--;for(V=wl[re],V={line:V.line,column:V.column};rebi&&(bi=G,wc=[]),wc.push(N))}function Sm(N,V){return new qg(N,null,null,V)}function fg(N,V,re){return new qg(qg.buildMessage(N,V),N,V,re)}function pg(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,V=n(re),N=V):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,V,re,he,ze;if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,V=u(V,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he===r&&(he=null),he!==r?(Dt=N,V=A(V,he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Cu(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=p(re),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function hg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,V,re;return N=G,V=Aa(),V!==r?(re=yw(),re===r&&(re=null),re!==r?(Dt=N,V=b(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function yw(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=bm(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=C(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function bm(){var N;return t.substr(G,2)===T?(N=T,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,V,re;return N=G,V=gg(),V!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,V=te(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Il(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=le(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===pe?(N=pe,G+=2):(N=r,ct===0&&Ct(Ae)),N===r&&(t.charCodeAt(G)===124?(N=ye,G++):(N=r,ct===0&&Ct(ae))),N}function Iu(){var N,V,re,he,ze,mt;if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r)if(he=qo(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,V=g(V,he),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=Ee(V),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===40?(re=De,G++):(re=r,ct===0&&Ct(ce)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Ie(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===123?(re=ke,G++):(re=r,ct===0&&Ct(ht)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(lt)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Re(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){for(re=[],he=Iu();he!==r;)re.push(he),he=Iu();if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r){if(ze=[],mt=hp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=hp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=Qe(re,ze),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=Iu(),he!==r)for(;he!==r;)re.push(he),he=Iu();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=be(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function RA(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=gp(),he!==r)for(;he!==r;)re.push(he),he=gp();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=_e(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function hp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r?(re=ja(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();V!==r?(re=gp(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r)}return N}function ja(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(He)),re===r&&(re=null),re!==r?(he=dg(),he!==r?(ze=gp(),ze!==r?(Dt=N,V=x(re,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function dg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(S)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Se?(N=Se,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function gp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=qo(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N}function qo(){var N,V,re;if(N=G,V=[],re=ws(),re!==r)for(;re!==r;)V.push(re),re=ws();else V=r;return V!==r&&(Dt=N,V=jt(V)),N=V,N}function ws(){var N,V;return N=G,V=Ii(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=km(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Qm(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Go(),V!==r&&(Dt=N,V=$t(V)),N=V))),N}function Ii(){var N,V,re,he;return N=G,t.substr(G,2)===xt?(V=xt,G+=2):(V=r,ct===0&&Ct(an)),V!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function km(){var N,V,re,he;return N=G,t.charCodeAt(G)===39?(V=Qr,G++):(V=r,ct===0&&Ct(mr)),V!==r?(re=mp(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,V,re,he;if(N=G,t.substr(G,2)===Wr?(V=Wr,G+=2):(V=r,ct===0&&Ct(Vn)),V!==r&&(Dt=N,V=Ns()),N=V,N===r)if(N=G,t.charCodeAt(G)===34?(V=Ri,G++):(V=r,ct===0&&Ct(ps)),V!==r){for(re=[],he=NA();he!==r;)re.push(he),he=NA();re!==r?(t.charCodeAt(G)===34?(he=Ri,G++):(he=r,ct===0&&Ct(ps)),he!==r?(Dt=N,V=io(re),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,V,re;if(N=G,V=[],re=dp(),re!==r)for(;re!==r;)V.push(re),re=dp();else V=r;return V!==r&&(Dt=N,V=io(V)),N=V,N}function NA(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=Si(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=Ls(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=so(V)),N=V,N===r&&(N=G,V=mg(),V!==r&&(Dt=N,V=cc(V)),N=V))),N}function dp(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=cu(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=ap(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=lp(V)),N=V,N===r&&(N=G,V=Ew(),V!==r&&(Dt=N,V=Ms(V)),N=V,N===r&&(N=G,V=pa(),V!==r&&(Dt=N,V=cc(V)),N=V)))),N}function mp(){var N,V,re;for(N=G,V=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)V.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function mg(){var N,V,re;if(N=G,V=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)V.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function fa(){var N,V,re;return N=G,t.substr(G,2)===ao?(V=ao,G+=2):(V=r,ct===0&&Ct(Kn)),V!==r&&(Dt=N,V=Mn()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,V,re;for(N=G,V=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)V.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Ao(){var N,V,re;return N=G,t.substr(G,2)===ii?(V=ii,G+=2):(V=r,ct===0&&Ct(Oa)),V!==r&&(Dt=N,V=hr()),N=V,N===r&&(N=G,t.substr(G,2)===uc?(V=uc,G+=2):(V=r,ct===0&&Ct(uu)),V!==r&&(Dt=N,V=Ac()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(vA)),re!==r?(Dt=N,V=Au(),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(V=Ce,G+=2):(V=r,ct===0&&Ct(Tt)),V!==r&&(Dt=N,V=fc()),N=V,N===r&&(N=G,t.substr(G,2)===Hi?(V=Hi,G+=2):(V=r,ct===0&&Ct(fu)),V!==r&&(Dt=N,V=Yt()),N=V,N===r&&(N=G,t.substr(G,2)===Cl?(V=Cl,G+=2):(V=r,ct===0&&Ct(DA)),V!==r&&(Dt=N,V=cp()),N=V,N===r&&(N=G,t.substr(G,2)===pc?(V=pc,G+=2):(V=r,ct===0&&Ct(PA)),V!==r&&(Dt=N,V=Qn()),N=V,N===r&&(N=G,t.substr(G,2)===hi?(V=hi,G+=2):(V=r,ct===0&&Ct(hc)),V!==r&&(Dt=N,V=SA()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=LA()))))))))),N}function LA(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi,wg;return N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(re=qa(),re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(V=Ze,G+=2):(V=r,ct===0&&Ct(lo)),V!==r?(re=G,he=G,ze=qa(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],he=ze):(G=he,he=r)):(G=he,he=r),he===r&&(he=qa()),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(V=gc,G+=2):(V=r,ct===0&&Ct(pu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===ji?(V=ji,G+=2):(V=r,ct===0&&Ct(hu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Mi=si(),Mi!==r?(wg=si(),wg!==r?(ze=[ze,mt,fr,Cr,yn,oi,Mi,wg],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=xA(re),N=V):(G=N,N=r)):(G=N,N=r)))),N}function qa(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,V,re,he,ze;if(N=G,V=[],re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)V.push(re),re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function vc(){var N,V,re,he,ze,mt;if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(he=wi,G++):(he=r,ct===0&&Ct(gs)),he!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He));else ze=r;ze!==r?(Dt=N,V=ds(V,re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;re!==r?(Dt=N,V=ms(V,re),N=V):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=_s(V)),N=V,N===r&&(N=G,V=Ga(),V!==r&&(Dt=N,V=Un(V)),N=V,N===r)))if(N=G,t.charCodeAt(G)===40?(V=De,G++):(V=r,ct===0&&Ct(ce)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,V=Pn(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=vc(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=Bl(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,V,re,he,ze,mt;if(N=G,t.substr(G,3)===Le?(V=Le,G+=3):(V=r,ct===0&&Ct(ft)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===pt?(mt=pt,G+=2):(mt=r,ct===0&&Ct(Rt)),mt!==r?(Dt=N,V=er(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function yp(){var N,V,re,he;return N=G,t.substr(G,2)===Zr?(V=Zr,G+=2):(V=r,ct===0&&Ct(qi)),V!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(he=ne,G++):(he=r,ct===0&&Ct(ee)),he!==r?(Dt=N,V=es(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,V,re,he,ze,mt;return N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===bA?(he=bA,G+=2):(he=r,ct===0&&Ct(kA)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=up(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===ng?(he=ng,G+=3):(he=r,ct===0&&Ct(gu)),he!==r?(Dt=N,V=ig(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(he=du,G+=2):(he=r,ct===0&&Ct(uo)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=QA(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(he=mc,G+=3):(he=r,ct===0&&Ct(ca)),he!==r?(Dt=N,V=sg(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(he=H,G++):(he=r,ct===0&&Ct(lt)),he!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(V=Pm,G++):(V=r,ct===0&&Ct(og)),V!==r?(re=Ga(),re!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)))))),N}function Ew(){var N,V,re;return N=G,V=yg(),V!==r?(Dt=G,re=$n(V),re?re=void 0:re=r,re!==r?(Dt=N,V=Ap(V),N=V):(G=N,N=r)):(G=N,N=r),N}function yg(){var N,V,re,he,ze;if(N=G,V=[],re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)V.push(re),re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r);else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Eg(){var N,V,re;if(N=G,V=[],ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)V.push(re),ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Ga(){var N,V,re;if(N=G,V=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)V.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Fm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function Cg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,V;if(N=[],Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc)),V!==r)for(;V!==r;)N.push(V),Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,tW.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${MD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function MD(t){return`${cy(t.chain)}${t.then?` ${lR(t.then)}`:""}`}function lR(t){return`${t.type} ${MD(t.line)}`}function cy(t){return`${uR(t)}${t.then?` ${cR(t.then)}`:""}`}function cR(t){return`${t.type} ${cy(t.chain)}`}function uR(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>ND(e)).join(" ")} `:""}${t.args.map(e=>AR(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>ND(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function ND(t){return`${t.name}=${t.args[0]?Gg(t.args[0]):""}`}function AR(t){switch(t.type){case"redirection":return Kw(t);case"argument":return Gg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kw(t){return`${t.subtype} ${t.args.map(e=>Gg(e)).join(" ")}`}function Gg(t){return t.segments.map(e=>fR(e)).join("")}function fR(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,m8e)}"`:`$'${o.replace(/[\t\p{C}]/u,nW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${ly(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Gg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Gg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var tW,rW,d8e,nW,m8e,iW=Et(()=>{tW=$e(eW());rW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),d8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(rW,([t,e])=>[t,`"$'${e}'"`])]),nW=t=>rW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,m8e=t=>d8e.get(t)??`"$'${nW(t)}'"`});var oW=_((Nxt,sW)=>{"use strict";function y8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}y8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ipe&&(pe=J,Ae=[]),Ae.push(He))}function lt(He,x){return new Yg(He,null,null,x)}function Re(He,x,w){return new Yg(Yg.buildMessage(He,x),He,x,w)}function Qe(){var He,x,w,S;return He=J,x=be(),x!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,ye===0&&H(u)),w!==r?(S=be(),S!==r?(te=He,x=A(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=be(),x!==r&&(te=He,x=p(x)),He=x),He}function be(){var He,x,w,S;return He=J,x=_e(),x!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,ye===0&&H(E)),w!==r?(S=Je(),S!==r?(te=He,x=I(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=_e(),x!==r&&(te=He,x=v(x)),He=x),He}function _e(){var He,x,w,S,y;return He=J,t.charCodeAt(J)===64?(x=h,J++):(x=r,ye===0&&H(E)),x!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(S=n,J++):(S=r,ye===0&&H(u)),S!==r?(y=Te(),y!==r?(te=He,x=b(),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=Te(),x!==r&&(te=He,x=b()),He=x),He}function Te(){var He,x,w;if(He=J,x=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T)),w!==r)for(;w!==r;)x.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T));else x=r;return x!==r&&(te=He,x=b()),He=x,He}function Je(){var He,x,w;if(He=J,x=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U)),w!==r)for(;w!==r;)x.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U));else x=r;return x!==r&&(te=He,x=b()),He=x,He}if(ae=a(),ae!==r&&J===t.length)return ae;throw ae!==r&&J{aW=$e(oW())});var Vg=_((Mxt,Wg)=>{"use strict";function cW(t){return typeof t>"u"||t===null}function C8e(t){return typeof t=="object"&&t!==null}function w8e(t){return Array.isArray(t)?t:cW(t)?[]:[t]}function I8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function Jw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Jw.prototype=Object.create(Error.prototype);Jw.prototype.constructor=Jw;Jw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};uW.exports=Jw});var pW=_((Uxt,fW)=>{"use strict";var AW=Vg();function pR(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}pR.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),AW.repeat(" ",e)+o+A+n+` +`+AW.repeat(" ",e+this.position-a+o.length)+"^"};pR.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};fW.exports=pR});var os=_((_xt,gW)=>{"use strict";var hW=uy(),D8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],P8e=["scalar","sequence","mapping"];function S8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function x8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(D8e.indexOf(r)===-1)throw new hW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=S8e(e.styleAliases||null),P8e.indexOf(this.kind)===-1)throw new hW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}gW.exports=x8e});var Kg=_((Hxt,mW)=>{"use strict";var dW=Vg(),HD=uy(),b8e=os();function hR(t,e,r){var o=[];return t.include.forEach(function(a){r=hR(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function k8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var Q8e=os();yW.exports=new Q8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var wW=_((qxt,CW)=>{"use strict";var F8e=os();CW.exports=new F8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var BW=_((Gxt,IW)=>{"use strict";var T8e=os();IW.exports=new T8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var jD=_((Yxt,vW)=>{"use strict";var R8e=Kg();vW.exports=new R8e({explicit:[EW(),wW(),BW()]})});var PW=_((Wxt,DW)=>{"use strict";var N8e=os();function L8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function M8e(){return null}function O8e(t){return t===null}DW.exports=new N8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:L8e,construct:M8e,predicate:O8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var xW=_((Vxt,SW)=>{"use strict";var U8e=os();function _8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function H8e(t){return t==="true"||t==="True"||t==="TRUE"}function j8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}SW.exports=new U8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:_8e,construct:H8e,predicate:j8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var kW=_((Kxt,bW)=>{"use strict";var q8e=Vg(),G8e=os();function Y8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function W8e(t){return 48<=t&&t<=55}function V8e(t){return 48<=t&&t<=57}function K8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var TW=_((Jxt,FW)=>{"use strict";var QW=Vg(),X8e=os(),Z8e=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))$");function $8e(t){return!(t===null||!Z8e.test(t)||t[t.length-1]==="_")}function eHe(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var tHe=/^[-+]?[0-9]+e/;function rHe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(QW.isNegativeZero(t))return"-0.0";return r=t.toString(10),tHe.test(r)?r.replace("e",".e"):r}function nHe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||QW.isNegativeZero(t))}FW.exports=new X8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:$8e,construct:eHe,predicate:nHe,represent:rHe,defaultStyle:"lowercase"})});var gR=_((zxt,RW)=>{"use strict";var iHe=Kg();RW.exports=new iHe({include:[jD()],implicit:[PW(),xW(),kW(),TW()]})});var dR=_((Xxt,NW)=>{"use strict";var sHe=Kg();NW.exports=new sHe({include:[gR()]})});var UW=_((Zxt,OW)=>{"use strict";var oHe=os(),LW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),MW=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]))?))?$");function aHe(t){return t===null?!1:LW.exec(t)!==null||MW.exec(t)!==null}function lHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=LW.exec(t),e===null&&(e=MW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function cHe(t){return t.toISOString()}OW.exports=new oHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:aHe,construct:lHe,instanceOf:Date,represent:cHe})});var HW=_(($xt,_W)=>{"use strict";var uHe=os();function AHe(t){return t==="<<"||t===null}_W.exports=new uHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:AHe})});var GW=_((ebt,qW)=>{"use strict";var Jg;try{jW=Be,Jg=jW("buffer").Buffer}catch{}var jW,fHe=os(),mR=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function pHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=mR;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function hHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=mR,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Jg?Jg.from?Jg.from(A):new Jg(A):A}function gHe(t){var e="",r=0,o,a,n=t.length,u=mR;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function dHe(t){return Jg&&Jg.isBuffer(t)}qW.exports=new fHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pHe,construct:hHe,predicate:dHe,represent:gHe})});var WW=_((rbt,YW)=>{"use strict";var mHe=os(),yHe=Object.prototype.hasOwnProperty,EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var IHe=os(),BHe=Object.prototype.toString;function vHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var PHe=os(),SHe=Object.prototype.hasOwnProperty;function xHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(SHe.call(r,e)&&r[e]!==null)return!1;return!0}function bHe(t){return t!==null?t:{}}JW.exports=new PHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:xHe,construct:bHe})});var fy=_((sbt,XW)=>{"use strict";var kHe=Kg();XW.exports=new kHe({include:[dR()],implicit:[UW(),HW()],explicit:[GW(),WW(),KW(),zW()]})});var $W=_((obt,ZW)=>{"use strict";var QHe=os();function FHe(){return!0}function THe(){}function RHe(){return""}function NHe(t){return typeof t>"u"}ZW.exports=new QHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:FHe,construct:THe,predicate:NHe,represent:RHe})});var tV=_((abt,eV)=>{"use strict";var LHe=os();function MHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function OHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function UHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function _He(t){return Object.prototype.toString.call(t)==="[object RegExp]"}eV.exports=new LHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:MHe,construct:OHe,predicate:_He,represent:UHe})});var iV=_((lbt,nV)=>{"use strict";var qD;try{rV=Be,qD=rV("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var rV,HHe=os();function jHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function qHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function GHe(t){return t.toString()}function YHe(t){return Object.prototype.toString.call(t)==="[object Function]"}nV.exports=new HHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:jHe,construct:qHe,predicate:YHe,represent:GHe})});var zw=_((ubt,oV)=>{"use strict";var sV=Kg();oV.exports=sV.DEFAULT=new sV({include:[fy()],explicit:[$W(),tV(),iV()]})});var DV=_((Abt,Xw)=>{"use strict";var mf=Vg(),pV=uy(),WHe=pW(),hV=fy(),VHe=zw(),Gp=Object.prototype.hasOwnProperty,GD=1,gV=2,dV=3,YD=4,yR=1,KHe=2,aV=3,JHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,zHe=/[\x85\u2028\u2029]/,XHe=/[,\[\]\{\}]/,mV=/^(?:!|!!|![a-z\-]+!)$/i,yV=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function lV(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Xg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function ZHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function $He(t){return t===120?2:t===117?4:t===85?8:0}function e6e(t){return 48<=t&&t<=57?t-48:-1}function cV(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function t6e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var EV=new Array(256),CV=new Array(256);for(zg=0;zg<256;zg++)EV[zg]=cV(zg)?1:0,CV[zg]=cV(zg);var zg;function r6e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||VHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function wV(t,e){return new pV(e,new WHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw wV(t,e)}function WD(t,e){t.onWarning&&t.onWarning.call(null,wV(t,e))}var uV={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],mV.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Gp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),yV.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function qp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` +`,e-1))}function n6e(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,b;if(b=t.input.charCodeAt(t.position),Ia(b)||py(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&VD(t)||r&&py(b))break;if(Hu(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(qp(t,n,u,!1),CR(t,t.line-p),n=u=t.position,A=!1),Xg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return qp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function i6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(qp(t,o,a,!0),CR(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function s6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return qp(t,r,t.position,!0),t.position++,!0;if(A===92){if(qp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&EV[A])t.result+=CV[A],t.position++;else if((u=$He(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=ZHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=t6e(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(qp(t,r,o,!0),CR(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function o6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},b,C,T,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=b=T=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,GD,!1,!0),C=t.tag,b=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,GD,!1,!0),T=t.result),I?hy(t,n,v,C,b,T):h?n.push(hy(t,null,v,C,b,T)):n.push(b),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function a6e(t,e){var r,o,a=yR,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)yR===a?a=I===43?aV:KHe:Sr(t,"repeat of a chomping mode identifier");else if((E=e6e(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Xg(I)){do I=t.input.charCodeAt(++t.position);while(Xg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(ER(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YD,!0,a)&&(C?v=t.result:b=t.result),C||(hy(t,h,E,I,v,b,n,u),I=v=b=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Sr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function f6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;Xg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&ER(t),Gp.call(uV,o)?uV[o](t,o,a):WD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&zHe.test(t.input.slice(e,t.position))&&WD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&VD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=IV(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),BV(t,e,mf.extend({schema:hV},r))}function h6e(t,e){return vV(t,mf.extend({schema:hV},e))}Xw.exports.loadAll=BV;Xw.exports.load=vV;Xw.exports.safeLoadAll=p6e;Xw.exports.safeLoad=h6e});var KV=_((fbt,vR)=>{"use strict";var $w=Vg(),eI=uy(),g6e=zw(),d6e=fy(),TV=Object.prototype.toString,RV=Object.prototype.hasOwnProperty,m6e=9,Zw=10,y6e=13,E6e=32,C6e=33,w6e=34,NV=35,I6e=37,B6e=38,v6e=39,D6e=42,LV=44,P6e=45,MV=58,S6e=61,x6e=62,b6e=63,k6e=64,OV=91,UV=93,Q6e=96,_V=123,F6e=124,HV=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var T6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function R6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?qV:GV:r>9&&jV(t)?KD:h?WV:YV}function _6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&T6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return L6e(t,p)}switch(U6e(e,u,t.indent,n,A)){case qV:return e;case GV:return"'"+e.replace(/'/g,"''")+"'";case YV:return"|"+bV(e,t.indent)+kV(SV(e,a));case WV:return">"+bV(e,t.indent)+kV(SV(H6e(e,n),a));case KD:return'"'+j6e(e,n)+'"';default:throw new eI("impossible error: invalid scalar style")}}()}function bV(t,e){var r=jV(t)?String(e):"",o=t[t.length-1]===` +`,a=o&&(t[t.length-2]===` +`||t===` +`),n=a?"+":o?"":"-";return r+n+` +`}function kV(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function H6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,QV(t.slice(0,h),e)}(),a=t[0]===` +`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` +`:"")+QV(p,e),a=n}return o}function QV(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`+t.slice(a,n),a=n+1),u=A;return p+=` +`,t.length-a>e&&u>a?p+=t.slice(a,u)+` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function j6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=PV((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&dy(r)?t[n]:a||PV(r)}return e}function q6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Zg(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function W6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new eI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=wR(t,e)),Zg(t,e+1,E,!0,I)&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function FV(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function Zg(t,e,r,o,a,n){t.tag=null,t.dump=r,FV(t,r,!1)||FV(t,r,!0);var u=TV.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(W6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(Y6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(G6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(q6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&_6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new eI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function V6e(t,e){var r=[],o=[],a,n;for(IR(t,r,o),a=0,n=o.length;a{"use strict";var JD=DV(),JV=KV();function zD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Kg();ki.exports.FAILSAFE_SCHEMA=jD();ki.exports.JSON_SCHEMA=gR();ki.exports.CORE_SCHEMA=dR();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=zw();ki.exports.load=JD.load;ki.exports.loadAll=JD.loadAll;ki.exports.safeLoad=JD.safeLoad;ki.exports.safeLoadAll=JD.safeLoadAll;ki.exports.dump=JV.dump;ki.exports.safeDump=JV.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=jD();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=zw();ki.exports.scan=zD("scan");ki.exports.parse=zD("parse");ki.exports.compose=zD("compose");ki.exports.addConstructor=zD("addConstructor")});var ZV=_((hbt,XV)=>{"use strict";var J6e=zV();XV.exports=J6e});var eK=_((gbt,$V)=>{"use strict";function z6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function $g(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,$g)}z6e($g,Error);$g.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Le})))},pe=function($){return $},Ae=function($){return $},ye=sa("correct indentation"),ae=" ",we=Qn(" ",!1),Pe=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},De=function(){return nr--,!0},ce=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),ke=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},lt="--",Re=Qn("--",!1),Qe=/^[a-zA-Z\/0-9]/,be=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),_e=/^[^\r\n\t :,]/,Te=hi(["\r",` +`," "," ",":",","],!0,!1),Je="null",He=Qn("null",!1),x=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Se=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),xt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",xr=Qn("\\\\",!1),Wr=function(){return"\\"},Vn="\\/",Ns=Qn("\\/",!1),Ri=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",ap=Qn("\\n",!1),lp=function(){return` +`},Ms="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Os="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Kn=Qn("\\u",!1),Mn=function($,me,Le,ft){return String.fromCharCode(parseInt(`0x${$}${me}${Le}${ft}`))},Ni=/^[0-9a-fA-F]/,On=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Me=hi([" "," "],!1,!1),ii=sa("white space"),Oa=/^[ \t\n\r]/,hr=hi([" "," ",` +`,"\r"],!1,!1),uc=`\r +`,uu=Qn(`\r +`,!1),Ac=` +`,El=Qn(` +`,!1),vA="\r",Au=Qn("\r",!1),Ce=0,Tt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Tt,Ce)}function cp(){return _o(Tt,Ce)}function pc($,me){throw me=me!==void 0?me:_o(Tt,Ce),gc([sa($)],t.substring(Tt,Ce),me)}function PA($,me){throw me=me!==void 0?me:_o(Tt,Ce),lo($,me)}function Qn($,me){return{type:"literal",text:$,ignoreCase:me}}function hi($,me,Le){return{type:"class",parts:$,inverted:me,ignoreCase:Le}}function hc(){return{type:"any"}}function SA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var me=fc[$],Le;if(me)return me;for(Le=$-1;!fc[Le];)Le--;for(me=fc[Le],me={line:me.line,column:me.column};Le<$;)t.charCodeAt(Le)===10?(me.line++,me.column=1):me.column++,Le++;return fc[$]=me,me}function _o($,me){var Le=Li($),ft=Li(me);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:me,line:ft.line,column:ft.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,me){return new $g($,null,null,me)}function gc($,me,Le){return new $g($g.buildMessage($,me),$,me,Le)}function pu(){var $;return $=xA(),$}function ji(){var $,me,Le;for($=Ce,me=[],Le=hu();Le!==r;)me.push(Le),Le=hu();return me!==r&&(Tt=$,me=n(me)),$=me,$}function hu(){var $,me,Le,ft,pt;return $=Ce,me=hs(),me!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(ft=Pn(),ft!==r?(pt=dc(),pt!==r?(Tt=$,me=p(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,me,Le;for($=Ce,me=[],Le=Ua();Le!==r;)me.push(Le),Le=Ua();return me!==r&&(Tt=$,me=h(me)),$=me,$}function Ua(){var $,me,Le,ft,pt,Rt,er,Zr,qi;if($=Ce,me=Pn(),me===r&&(me=null),me!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(ft=E,Ce++):(ft=r,Yt===0&&Ze(I)),ft!==r){if(pt=[],Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r),Rt!==r)for(;Rt!==r;)pt.push(Rt),Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r);else pt=r;pt!==r?(ft=[ft,pt],Le=ft):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Tt=$,me=b(),$=me):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,me=hs(),me!==r?(Le=oa(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=hs(),me!==r?(Le=co(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r)if(ft=Pn(),ft!==r)if(pt=aa(),pt!==r){if(Rt=[],er=We(),er!==r)for(;er!==r;)Rt.push(er),er=We();else Rt=r;Rt!==r?(Tt=$,me=L(Le,pt),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r){if(ft=[],pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r);else ft=r;ft!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(Rt=C,Ce++):(Rt=r,Yt===0&&Ze(T)),Rt!==r?(er=Pn(),er===r&&(er=null),er!==r?(Zr=dc(),Zr!==r?(Tt=$,me=le(Le,ft,Zr),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,me,Le,ft,pt,Rt,er;if($=Ce,me=Ce,Yt++,Le=Ce,ft=tt(),ft!==r?(pt=_t(),pt!==r?(t.charCodeAt(Ce)===45?(Rt=u,Ce++):(Rt=r,Yt===0&&Ze(A)),Rt!==r?(er=Pn(),er!==r?(ft=[ft,pt,Rt,er],Le=ft):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=me,me=void 0):me=r,me!==r?(Le=We(),Le!==r?(ft=Fn(),ft!==r?(pt=ji(),pt!==r?(Rt=Ci(),Rt!==r?(Tt=$,me=pe(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=tt(),me!==r?(Le=Fn(),Le!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Tt=$,me=pe(ft),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,me=Us(),me!==r){if(Le=[],ft=We(),ft!==r)for(;ft!==r;)Le.push(ft),ft=We();else Le=r;Le!==r?(Tt=$,me=Ae(me),$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,me,Le;for(Yt++,$=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=Pe(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(me=r,Yt===0&&Ze(ye)),$}function _t(){var $,me,Le;for($=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=g(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Tt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Tt=Ce,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,me,Le;if($=ds(),$===r){if($=Ce,me=[],Le=Ho(),Le!==r)for(;Le!==r;)me.push(Le),Le=Ho();else me=r;me!==r&&(Tt=$,me=ce()),$=me}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,me,Le,ft,pt,Rt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Ie)),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ne)),$}function Ho(){var $,me,Le,ft,pt;if($=Ce,t.substr(Ce,2)===lt?(me=lt,Ce+=2):(me=r,Yt===0&&Ze(Re)),me===r&&(me=null),me!==r)if(Qe.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(be)),Le!==r){for(ft=[],_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));pt!==r;)ft.push(pt),_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));ft!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,me;return $=Ce,t.substr(Ce,4)===Je?(me=Je,Ce+=4):(me=r,Yt===0&&Ze(He)),me!==r&&(Tt=$,me=x()),$=me,$}function gs(){var $,me;return $=Ce,t.substr(Ce,4)===w?(me=w,Ce+=4):(me=r,Yt===0&&Ze(S)),me!==r&&(Tt=$,me=y()),$=me,$===r&&($=Ce,t.substr(Ce,5)===F?(me=F,Ce+=5):(me=r,Yt===0&&Ze(z)),me!==r&&(Tt=$,me=X()),$=me),$}function ds(){var $,me,Le,ft;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Se)),Le!==r?(Tt=$,me=Ne(),$=me):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(ft=ie,Ce++):(ft=r,Yt===0&&Ze(Se)),ft!==r?(Tt=$,me=ot(Le),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(me=r,Yt===0&&Ze(Z)),$}function ms(){var $,me,Le;if($=Ce,me=[],Le=_s(),Le!==r)for(;Le!==r;)me.push(Le),Le=_s();else me=r;return me!==r&&(Tt=$,me=dt(me)),$=me,$}function _s(){var $,me,Le,ft,pt,Rt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===xt?(me=xt,Ce+=2):(me=r,Yt===0&&Ze(an)),me!==r&&(Tt=$,me=Qr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===mr?(me=mr,Ce+=2):(me=r,Yt===0&&Ze(xr)),me!==r&&(Tt=$,me=Wr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Vn?(me=Vn,Ce+=2):(me=r,Yt===0&&Ze(Ns)),me!==r&&(Tt=$,me=Ri()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ps?(me=ps,Ce+=2):(me=r,Yt===0&&Ze(io)),me!==r&&(Tt=$,me=Si()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ls?(me=Ls,Ce+=2):(me=r,Yt===0&&Ze(so)),me!==r&&(Tt=$,me=cc()),$=me,$===r&&($=Ce,t.substr(Ce,2)===cu?(me=cu,Ce+=2):(me=r,Yt===0&&Ze(ap)),me!==r&&(Tt=$,me=lp()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ms?(me=Ms,Ce+=2):(me=r,Yt===0&&Ze(Dn)),me!==r&&(Tt=$,me=oo()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Os?(me=Os,Ce+=2):(me=r,Yt===0&&Ze(ml)),me!==r&&(Tt=$,me=yl()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ao?(me=ao,Ce+=2):(me=r,Yt===0&&Ze(Kn)),me!==r?(Le=Un(),Le!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Rt=Un(),Rt!==r?(Tt=$,me=Mn(Le,ft,pt,Rt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(On)),$}function Pn(){var $,me;if(Yt++,$=[],tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me)),me!==r)for(;me!==r;)$.push(me),tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(_i)),$}function ys(){var $,me;if(Yt++,$=[],Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr)),me!==r)for(;me!==r;)$.push(me),Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ii)),$}function We(){var $,me,Le,ft,pt,Rt;if($=Ce,me=tt(),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=vA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>iK(t[e])):!1}function DR(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${rK(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let o=" ".repeat(e);return` +${t.map(n=>`${o}- ${DR(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=tK.indexOf(p),I=tK.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!iK(o[p])).map((p,h)=>{let E=o[p],I=rK(p),v=DR(E,e+1,!0),b=h>0||r?n:"",C=I.length>1024?`? ${I} +${b}:`:`${I}:`,T=v.startsWith(` +`)?v:` ${v}`;return`${b}${C}${T}`}).join(e===0?` +`:"")||` +`;return r?` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=DR(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function $6e(t){return t.endsWith(` +`)||(t+=` +`),(0,nK.parse)(t)}function tje(t){if(eje.test(t))return $6e(t);let e=(0,ZD.safeLoad)(t,{schema:ZD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Vi(t){return tje(t)}var ZD,nK,Z6e,tK,XD,eje,sK=Et(()=>{ZD=$e(ZV()),nK=$e(eK()),Z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,tK=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XD;eje=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var tI={};Kt(tI,{parseResolution:()=>UD,parseShell:()=>LD,parseSyml:()=>Vi,stringifyArgument:()=>AR,stringifyArgumentSegment:()=>fR,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>uR,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>cR,stringifyCommandLine:()=>MD,stringifyCommandLineThen:()=>lR,stringifyEnvSegment:()=>ND,stringifyRedirectArgument:()=>Kw,stringifyResolution:()=>_D,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>Gg});var Nl=Et(()=>{iW();lW();sK()});var aK=_((Cbt,PR)=>{"use strict";var rje=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=rje(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};PR.exports=oK;PR.exports.default=oK});var lK=_((wbt,nje)=>{nje.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var ed=_(Xa=>{"use strict";var uK=lK(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:uK.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;uK.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return cK(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=cK(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function cK(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,td,SR,$D,AK,xR,bR,eP=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));td=-1,SR=/^(-h|--help)(?:=([0-9]+))?$/,$D=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,AK=/^-[a-zA-Z]{2,}$/,xR=/^([^=]+)=([\s\S]*)$/,bR=process.env.DEBUG_CLI==="1"});var it,my,tP,kR,rP=Et(()=>{eP();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} + +${this.candidates.map(({usage:a})=>`$ ${a}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${o} +${kR(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${kR(e)}`}},tP=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${kR(e)}`}},kR=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function ije(t){let e=t.split(` +`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` +`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=ije(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` +`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} +`:""}var QR,fK,pK,FR=Et(()=>{QR=Array(80).fill("\u2501");for(let t=0;t<=24;++t)QR[QR.length-t]=`\x1B[38;5;${232+t}m\u2501`;fK={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${QR.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},pK={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Vo(t){return{...t,[rI]:!0}}function qu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function nI(t,e){return e.length===1?new it(`${t}${nP(e[0],{mergeName:!0})}`):new it(`${t}: +${e.map(r=>` +- ${nP(r)}`).join("")}`)}function rd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw nI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var rI,yf=Et(()=>{rP();rI=Symbol("clipanion/isOption")});var Ko={};Kt(Ko,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Wp,applyCascade:()=>oI,as:()=>Bje,assert:()=>Cje,assertWithErrors:()=>wje,cascade:()=>aP,fn:()=>vje,hasAtLeastOneKey:()=>UR,hasExactLength:()=>yK,hasForbiddenKeys:()=>qje,hasKeyRelationship:()=>lI,hasMaxLength:()=>Pje,hasMinLength:()=>Dje,hasMutuallyExclusiveKeys:()=>Gje,hasRequiredKeys:()=>jje,hasUniqueItems:()=>Sje,isArray:()=>iP,isAtLeast:()=>MR,isAtMost:()=>kje,isBase64:()=>Oje,isBoolean:()=>fje,isDate:()=>hje,isDict:()=>mje,isEnum:()=>Vs,isHexColor:()=>Mje,isISO8601:()=>Lje,isInExclusiveRange:()=>Fje,isInInclusiveRange:()=>Qje,isInstanceOf:()=>Eje,isInteger:()=>OR,isJSON:()=>Uje,isLiteral:()=>gK,isLowerCase:()=>Tje,isMap:()=>dje,isNegative:()=>xje,isNullable:()=>Hje,isNumber:()=>NR,isObject:()=>dK,isOneOf:()=>LR,isOptional:()=>_je,isPartial:()=>yje,isPayload:()=>pje,isPositive:()=>bje,isRecord:()=>oP,isSet:()=>gje,isString:()=>Ey,isTuple:()=>sP,isUUID4:()=>Nje,isUnknown:()=>RR,isUpperCase:()=>Rje,makeTrait:()=>mK,makeValidator:()=>Hr,matchesRegExp:()=>sI,softAssert:()=>Ije});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Yp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:sje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function TR(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function uje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function iI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function RR(){return Hr({test:(t,e)=>!0})}function gK(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?gK([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function fje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=Aje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function NR(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function pje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function hje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&hK.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function iP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",iI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",iI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function dje(t,e){let r=iP(sP([t,e])),o=oP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,b)=>v[0]!==h[b][0]||v[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",iI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Yp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",iI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",iI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function sP(t,{delimiter:e}={}){let r=yK(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Yp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:uje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function yje(t){return dK(t,{extra:oP(RR())})}function mK(t){return()=>t}function Hr({test:t}){return mK(t)()}function Cje(t,e){if(!e(t))throw new Wp}function wje(t,e){let r=[];if(!e(t,{errors:r}))throw new Wp({errors:r})}function Ije(t,e){}function Bje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function vje(t,e){let r=sP(t);return(...o)=>{if(!r(o))throw new Wp;return e(...o)}}function Dje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Pje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function yK(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Sje({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function bje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function MR(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function kje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Qje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Fje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function sI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function Tje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function Rje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Nje(){return Hr({test:(t,e)=>cje.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Lje(){return Hr({test:(t,e)=>hK.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Mje({alpha:t=!1}){return Hr({test:(e,r)=>(t?oje.test(e):aje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Oje(){return Hr({test:(t,e)=>lje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Uje(t=RR()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function aP(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function oI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return aP(t,r)}function _je(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Hje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function jje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function UR(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function qje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function Gje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function lI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=aI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Yje[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let b=new Set(Object.keys(I));if(!A(b,t,I)||u.has(I[t]))return!0;let C=[];for(let T of p)(A(b,T,I)&&!u.has(I[T]))!==h.expect&&C.push(T);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${TR(C.length,"property","properties")} ${yy(C,E)}`):!0}})}var sje,oje,aje,lje,cje,hK,Aje,Eje,LR,Wp,aI,Gu,Yje,Za=Et(()=>{sje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;oje=/^#[0-9a-f]{6}$/i,aje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,lje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,cje=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,hK=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;Aje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);Eje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),LR=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Wp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +`;for(let o of e)r+=` +- ${o}`}super(r)}};aI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));Yje={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{yf();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Ko)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw nI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=rI;nt.Default=[]});function va(t){bR&&console.log(t)}function CK(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Kje(t,{prefix:e=""}={}){if(bR){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new my(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Xje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function zje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Jje(t,[...e,r]);return Zje(e,o.map(({state:a})=>a))}function Xje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Zje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===td||v.requiredOptions.every(b=>b.some(C=>v.options.find(T=>T.name===C))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:b})=>!b).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=$je(E);if(I.length>1)throw new tP(t,I.map(v=>v.candidateUsage));return I[0]}function $je(t){let e=[],r=[];for(let o of t)o.selectedIndex===td?r.push(o):e.push(o);return r.length>0&&e.push({...EK,path:wK(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function wK(t,e,...r){return e===void 0?Array.from(t):wK(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function IK(t){return t===cn.SuccessNode||t===cn.ErrorNode}function _R(t,e=0){return{to:IK(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function eqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,_R(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(_R(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>_R(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function lP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var EK,tqe,HR,el,jR,wy,cP=Et(()=>{eP();rP();EK={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:td,partial:!1,tokens:[]};tqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&AK.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(xR);return!t.ignoreOptions&&!!n&&$D.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&SR.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$D.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$D.test(e)},HR={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(xR),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(SR);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),jR=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=CK(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,$a());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,$a());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",td]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,b,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,b,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Mc(e,$a());if(Cy(e,h,v),this.arity.extra===el){let b=Mc(e,$a());this.arity.proxy||this.registerOptions(e,b),Ss(e,h,n,b,"pushExtraNoLimits"),Ss(e,b,n,b,"pushExtraNoLimits"),Cy(e,b,v)}else for(let b=0;b0)&&this.registerOptions(e,C),Ss(e,E,n,C,"pushExtra"),Cy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return zje(o,a,{endToken:u})}}}}});function vK(){return uP.default&&"getColorDepth"in uP.default.WriteStream.prototype?uP.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function DK(t){let e=BK;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Be("async_hooks");e=BK=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var uP,BK,PK=Et(()=>{uP=$e(Be("tty"),1)});var Iy,SK=Et(()=>{Vp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}}});async function kK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).runExit(o,a)}async function QK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).run(o,a)}function FK(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function bK(t){return t()}var xK,as,TK=Et(()=>{eP();cP();FR();PK();Vp();SK();xK=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case td:{let E=Iy.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[b,{transformer:C}]of I.specs.entries())v[b]=C(I.builder,b,p,h);return v}catch(b){throw b[xK]=v,b}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=DK(u))!==null&&a!==void 0?a:bK,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` +`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} +`,A+=` +`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} +`,v.length>0){A+=` +`,A+=`${this.format(r).header("Options")} +`;let b=v.reduce((C,T)=>Math.max(C,T.definition.length),0);A+=` +`;for(let{definition:C,description:T}of v)A+=` ${this.format(r).bold(C.padEnd(b))} ${Do(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`,A+=`${this.format(r).header("Details")} +`,A+=` +`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=`${this.format(r).header("Examples")} +`;for(let[b,C]of E)A+=` +`,A+=Do(b,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} +`}else{let p=new Map;for(let[v,{index:b}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(C);typeof T>"u"&&p.set(C,T=[]);let{usage:L}=this.getUsageByIndex(b);T.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,b)=>v===null?-1:b===null?1:v.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} +`:A+=`${this.format(r).header(`${this.binaryVersion}`)} +`,A+=` ${this.format(r).bold(a)}${this.binaryName} +`):A+=`${this.format(r).bold(a)}${this.binaryName} +`;for(let v of h){let b=p.get(v).slice().sort((T,L)=>T.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`,A+=`${this.format(r).header(`${C}`)} +`;for(let{commandClass:T,usage:L}of b){let U=T.usage.description||"undocumented";A+=` +`,A+=` ${this.format(r).bold(L)} +`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[xK])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` +`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?fK:pK}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:vK()}});var cI,RK=Et(()=>{Vp();cI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};cI.paths=[["--clipanion=definitions"]]});var uI,NK=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};uI.paths=[["-h"],["--help"]]});function AP(t={}){return Vo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var qR=Et(()=>{yf()});var AI,LK=Et(()=>{Vp();qR();AI=class extends nt{constructor(){super(...arguments),this.args=AP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};AI.paths=[["--clipanion=tokens"]]});var fI,MK=Et(()=>{Vp();fI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};fI.paths=[["-v"],["--version"]]});var GR={};Kt(GR,{DefinitionsCommand:()=>cI,HelpCommand:()=>uI,TokensCommand:()=>AI,VersionCommand:()=>fI});var OK=Et(()=>{RK();NK();LK();MK()});function UK(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:b,value:C}of E.options)!A.has(b)||(I=b,v=v??[],v.push(C));return typeof v<"u"?rd(I??h,v,a.validator):v}})}var _K=Et(()=>{yf()});function HK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var jK=Et(()=>{yf()});function qK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var GK=Et(()=>{yf()});function YK(t={}){return Vo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var WK=Et(()=>{cP();yf()});function rqe(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,b=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,b=I.env[a.env]);for(let{name:C,value:T}of E.options)!A.has(C)||(v=C,b=T);return typeof b=="string"?rd(v??h,b,a.validator):b}})}function nqe(t={}){let{required:e=!0}=t;return Vo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{cP();yf()});var ge={};Kt(ge,{Array:()=>UK,Boolean:()=>HK,Counter:()=>qK,Proxy:()=>AP,Rest:()=>YK,String:()=>VK,applyValidator:()=>rd,cleanValidationError:()=>nP,formatError:()=>nI,isOptionSymbol:()=>rI,makeCommandOption:()=>Vo,rerouteArguments:()=>qu});var JK=Et(()=>{yf();qR();_K();jK();GK();WK();KK()});var pI={};Kt(pI,{Builtins:()=>GR,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>QK,runExit:()=>kK});var qt=Et(()=>{rP();FR();Vp();TK();OK();JK()});var zK=_((xkt,iqe)=>{iqe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var eJ=_((bkt,Ef)=>{var XK=Be("fs"),WR=Be("path"),sqe=Be("os"),oqe=Be("crypto"),aqe=zK(),VR=aqe.version,lqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function cqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=lqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function uqe(t){let e=$K(t),r=xs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=ZK(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return xs.parse(n)}function Aqe(t){console.log(`[dotenv@${VR}][INFO] ${t}`)}function fqe(t){console.log(`[dotenv@${VR}][WARN] ${t}`)}function YR(t){console.log(`[dotenv@${VR}][DEBUG] ${t}`)}function ZK(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function pqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function $K(t){let e=WR.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function hqe(t){return t[0]==="~"?WR.join(sqe.homedir(),t.slice(1)):t}function gqe(t){Aqe("Loading env from encrypted .env.vault");let e=xs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),xs.populate(r,e,t),{parsed:e}}function dqe(t){let e=WR.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=hqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=xs.parse(XK.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),xs.populate(n,a,t),{parsed:a}}catch(a){return o&&YR(`Failed to load ${e} ${a.message}`),{error:a}}}function mqe(t){let e=$K(t);return ZK(t).length===0?xs.configDotenv(t):XK.existsSync(e)?xs._configVault(t):(fqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),xs.configDotenv(t))}function yqe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=oqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function Eqe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&YR(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var xs={configDotenv:dqe,_configVault:gqe,_parseVault:uqe,config:mqe,decrypt:yqe,parse:cqe,populate:Eqe};Ef.exports.configDotenv=xs.configDotenv;Ef.exports._configVault=xs._configVault;Ef.exports._parseVault=xs._parseVault;Ef.exports.config=xs.config;Ef.exports.decrypt=xs.decrypt;Ef.exports.parse=xs.parse;Ef.exports.populate=xs.populate;Ef.exports=xs});var rJ=_((kkt,tJ)=>{"use strict";tJ.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var nd=_((Qkt,KR)=>{"use strict";var Cqe=rJ(),nJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=Cqe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};KR.exports=nJ;KR.exports.default=nJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function fP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,pP=Et(()=>{wr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me))(wr||{})});var hI=_((Tkt,iJ)=>{var wqe="2.0.0",Iqe=Number.MAX_SAFE_INTEGER||9007199254740991,Bqe=16,vqe=256-6,Dqe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];iJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Bqe,MAX_SAFE_BUILD_LENGTH:vqe,MAX_SAFE_INTEGER:Iqe,RELEASE_TYPES:Dqe,SEMVER_SPEC_VERSION:wqe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var gI=_((Rkt,sJ)=>{var Pqe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};sJ.exports=Pqe});var By=_((Cf,oJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:JR,MAX_SAFE_BUILD_LENGTH:Sqe,MAX_LENGTH:xqe}=hI(),bqe=gI();Cf=oJ.exports={};var kqe=Cf.re=[],Qqe=Cf.safeRe=[],lr=Cf.src=[],cr=Cf.t={},Fqe=0,zR="[a-zA-Z0-9-]",Tqe=[["\\s",1],["\\d",xqe],[zR,Sqe]],Rqe=t=>{for(let[e,r]of Tqe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=Rqe(e),a=Fqe++;bqe(t,a,e),cr[t]=a,lr[a]=e,kqe[a]=new RegExp(e,r?"g":void 0),Qqe[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${zR}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${zR}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${JR}})(?:\\.(\\d{1,${JR}}))?(?:\\.(\\d{1,${JR}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var hP=_((Nkt,aJ)=>{var Nqe=Object.freeze({loose:!0}),Lqe=Object.freeze({}),Mqe=t=>t?typeof t!="object"?Nqe:t:Lqe;aJ.exports=Mqe});var XR=_((Lkt,uJ)=>{var lJ=/^[0-9]+$/,cJ=(t,e)=>{let r=lJ.test(t),o=lJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tcJ(e,t);uJ.exports={compareIdentifiers:cJ,rcompareIdentifiers:Oqe}});var Po=_((Mkt,hJ)=>{var gP=gI(),{MAX_LENGTH:AJ,MAX_SAFE_INTEGER:dP}=hI(),{safeRe:fJ,t:pJ}=By(),Uqe=hP(),{compareIdentifiers:vy}=XR(),tl=class{constructor(e,r){if(r=Uqe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>AJ)throw new TypeError(`version is longer than ${AJ} characters`);gP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?fJ[pJ.LOOSE]:fJ[pJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>dP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};hJ.exports=tl});var id=_((Okt,dJ)=>{var gJ=Po(),_qe=(t,e,r=!1)=>{if(t instanceof gJ)return t;try{return new gJ(t,e)}catch(o){if(!r)return null;throw o}};dJ.exports=_qe});var yJ=_((Ukt,mJ)=>{var Hqe=id(),jqe=(t,e)=>{let r=Hqe(t,e);return r?r.version:null};mJ.exports=jqe});var CJ=_((_kt,EJ)=>{var qqe=id(),Gqe=(t,e)=>{let r=qqe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};EJ.exports=Gqe});var BJ=_((Hkt,IJ)=>{var wJ=Po(),Yqe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new wJ(t instanceof wJ?t.version:t,r).inc(e,o,a).version}catch{return null}};IJ.exports=Yqe});var PJ=_((jkt,DJ)=>{var vJ=id(),Wqe=(t,e)=>{let r=vJ(t,null,!0),o=vJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};DJ.exports=Wqe});var xJ=_((qkt,SJ)=>{var Vqe=Po(),Kqe=(t,e)=>new Vqe(t,e).major;SJ.exports=Kqe});var kJ=_((Gkt,bJ)=>{var Jqe=Po(),zqe=(t,e)=>new Jqe(t,e).minor;bJ.exports=zqe});var FJ=_((Ykt,QJ)=>{var Xqe=Po(),Zqe=(t,e)=>new Xqe(t,e).patch;QJ.exports=Zqe});var RJ=_((Wkt,TJ)=>{var $qe=id(),eGe=(t,e)=>{let r=$qe(t,e);return r&&r.prerelease.length?r.prerelease:null};TJ.exports=eGe});var Ll=_((Vkt,LJ)=>{var NJ=Po(),tGe=(t,e,r)=>new NJ(t,r).compare(new NJ(e,r));LJ.exports=tGe});var OJ=_((Kkt,MJ)=>{var rGe=Ll(),nGe=(t,e,r)=>rGe(e,t,r);MJ.exports=nGe});var _J=_((Jkt,UJ)=>{var iGe=Ll(),sGe=(t,e)=>iGe(t,e,!0);UJ.exports=sGe});var mP=_((zkt,jJ)=>{var HJ=Po(),oGe=(t,e,r)=>{let o=new HJ(t,r),a=new HJ(e,r);return o.compare(a)||o.compareBuild(a)};jJ.exports=oGe});var GJ=_((Xkt,qJ)=>{var aGe=mP(),lGe=(t,e)=>t.sort((r,o)=>aGe(r,o,e));qJ.exports=lGe});var WJ=_((Zkt,YJ)=>{var cGe=mP(),uGe=(t,e)=>t.sort((r,o)=>cGe(o,r,e));YJ.exports=uGe});var dI=_(($kt,VJ)=>{var AGe=Ll(),fGe=(t,e,r)=>AGe(t,e,r)>0;VJ.exports=fGe});var yP=_((eQt,KJ)=>{var pGe=Ll(),hGe=(t,e,r)=>pGe(t,e,r)<0;KJ.exports=hGe});var ZR=_((tQt,JJ)=>{var gGe=Ll(),dGe=(t,e,r)=>gGe(t,e,r)===0;JJ.exports=dGe});var $R=_((rQt,zJ)=>{var mGe=Ll(),yGe=(t,e,r)=>mGe(t,e,r)!==0;zJ.exports=yGe});var EP=_((nQt,XJ)=>{var EGe=Ll(),CGe=(t,e,r)=>EGe(t,e,r)>=0;XJ.exports=CGe});var CP=_((iQt,ZJ)=>{var wGe=Ll(),IGe=(t,e,r)=>wGe(t,e,r)<=0;ZJ.exports=IGe});var eN=_((sQt,$J)=>{var BGe=ZR(),vGe=$R(),DGe=dI(),PGe=EP(),SGe=yP(),xGe=CP(),bGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return BGe(t,r,o);case"!=":return vGe(t,r,o);case">":return DGe(t,r,o);case">=":return PGe(t,r,o);case"<":return SGe(t,r,o);case"<=":return xGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};$J.exports=bGe});var tz=_((oQt,ez)=>{var kGe=Po(),QGe=id(),{safeRe:wP,t:IP}=By(),FGe=(t,e)=>{if(t instanceof kGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(wP[IP.COERCE]);else{let o;for(;(o=wP[IP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),wP[IP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;wP[IP.COERCERTL].lastIndex=-1}return r===null?null:QGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ez.exports=FGe});var nz=_((aQt,rz)=>{"use strict";rz.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var BP=_((lQt,iz)=>{"use strict";iz.exports=Cn;Cn.Node=sd;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var LGe=BP(),od=Symbol("max"),If=Symbol("length"),Dy=Symbol("lengthCalculator"),yI=Symbol("allowStale"),ad=Symbol("maxAge"),wf=Symbol("dispose"),sz=Symbol("noDisposeOnSet"),bs=Symbol("lruList"),Oc=Symbol("cache"),az=Symbol("updateAgeOnGet"),tN=()=>1,nN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[od]=e.max||1/0,o=e.length||tN;if(this[Dy]=typeof o!="function"?tN:o,this[yI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ad]=e.maxAge||0,this[wf]=e.dispose,this[sz]=e.noDisposeOnSet||!1,this[az]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[od]=e||1/0,mI(this)}get max(){return this[od]}set allowStale(e){this[yI]=!!e}get allowStale(){return this[yI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ad]=e,mI(this)}get maxAge(){return this[ad]}set lengthCalculator(e){typeof e!="function"&&(e=tN),e!==this[Dy]&&(this[Dy]=e,this[If]=0,this[bs].forEach(r=>{r.length=this[Dy](r.value,r.key),this[If]+=r.length})),mI(this)}get lengthCalculator(){return this[Dy]}get length(){return this[If]}get itemCount(){return this[bs].length}rforEach(e,r){r=r||this;for(let o=this[bs].tail;o!==null;){let a=o.prev;oz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[bs].head;o!==null;){let a=o.next;oz(this,e,o,r),o=a}}keys(){return this[bs].toArray().map(e=>e.key)}values(){return this[bs].toArray().map(e=>e.value)}reset(){this[wf]&&this[bs]&&this[bs].length&&this[bs].forEach(e=>this[wf](e.key,e.value)),this[Oc]=new Map,this[bs]=new LGe,this[If]=0}dump(){return this[bs].map(e=>vP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[bs]}set(e,r,o){if(o=o||this[ad],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Dy](r,e);if(this[Oc].has(e)){if(n>this[od])return Py(this,this[Oc].get(e)),!1;let p=this[Oc].get(e).value;return this[wf]&&(this[sz]||this[wf](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[If]+=n-p.length,p.length=n,this.get(e),mI(this),!0}let u=new iN(e,r,n,a,o);return u.length>this[od]?(this[wf]&&this[wf](e,r),!1):(this[If]+=u.length,this[bs].unshift(u),this[Oc].set(e,this[bs].head),mI(this),!0)}has(e){if(!this[Oc].has(e))return!1;let r=this[Oc].get(e).value;return!vP(this,r)}get(e){return rN(this,e,!0)}peek(e){return rN(this,e,!1)}pop(){let e=this[bs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Oc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Oc].forEach((e,r)=>rN(this,r,!1))}},rN=(t,e,r)=>{let o=t[Oc].get(e);if(o){let a=o.value;if(vP(t,a)){if(Py(t,o),!t[yI])return}else r&&(t[az]&&(o.value.now=Date.now()),t[bs].unshiftNode(o));return a.value}},vP=(t,e)=>{if(!e||!e.maxAge&&!t[ad])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ad]&&r>t[ad]},mI=t=>{if(t[If]>t[od])for(let e=t[bs].tail;t[If]>t[od]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[wf]&&t[wf](r.key,r.value),t[If]-=r.length,t[Oc].delete(r.key),t[bs].removeNode(e)}},iN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},oz=(t,e,r,o)=>{let a=r.value;vP(t,a)&&(Py(t,r),t[yI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};lz.exports=nN});var Ml=_((uQt,pz)=>{var ld=class{constructor(e,r){if(r=OGe(r),e instanceof ld)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ld(e.raw,r);if(e instanceof sN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!Az(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&YGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&qGe)|(this.options.loose&&GGe))+":"+e,a=uz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,t5e(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],_Ge),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],HGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],jGe),ci("caret trim",e);let A=e.split(" ").map(I=>WGe(I,this.options)).join(" ").split(/\s+/).map(I=>e5e(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new sN(I,this.options));for(let I of h){if(Az(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return uz.set(o,E),E}intersects(e,r){if(!(e instanceof ld))throw new TypeError("a Range is required");return this.set.some(o=>fz(o,r)&&e.set.some(a=>fz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new UGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",YGe=t=>t.value==="",fz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},WGe=(t,e)=>(ci("comp",t,e),t=JGe(t,e),ci("caret",t),t=VGe(t,e),ci("tildes",t),t=XGe(t,e),ci("xrange",t),t=$Ge(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",VGe=(t,e)=>t.trim().split(/\s+/).map(r=>KGe(r,e)).join(" "),KGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},JGe=(t,e)=>t.trim().split(/\s+/).map(r=>zGe(r,e)).join(" "),zGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},XGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>ZGe(r,e)).join(" ")),ZGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},$Ge=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),e5e=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),t5e=t=>(e,r,o,a,n,u,A,p,h,E,I,v,b)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),r5e=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var EI=_((AQt,Ez)=>{var CI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return CI}constructor(e,r){if(r=hz(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),aN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===CI?this.value="":this.value=this.operator+this.semver.version,aN("comp",this)}parse(e){let r=this.options.loose?gz[dz.COMPARATORLOOSE]:gz[dz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new mz(o[2],this.options.loose):this.semver=CI}toString(){return this.value}test(e){if(aN("Comparator.test",e,this.options.loose),this.semver===CI||e===CI)return!0;if(typeof e=="string")try{e=new mz(e,this.options)}catch{return!1}return oN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new yz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new yz(this.value,r).test(e.semver):(r=hz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||oN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||oN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Ez.exports=Sy;var hz=hP(),{safeRe:gz,t:dz}=By(),oN=eN(),aN=gI(),mz=Po(),yz=Ml()});var wI=_((fQt,Cz)=>{var n5e=Ml(),i5e=(t,e,r)=>{try{e=new n5e(e,r)}catch{return!1}return e.test(t)};Cz.exports=i5e});var Iz=_((pQt,wz)=>{var s5e=Ml(),o5e=(t,e)=>new s5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));wz.exports=o5e});var vz=_((hQt,Bz)=>{var a5e=Po(),l5e=Ml(),c5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new l5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new a5e(o,r))}),o};Bz.exports=c5e});var Pz=_((gQt,Dz)=>{var u5e=Po(),A5e=Ml(),f5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new A5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new u5e(o,r))}),o};Dz.exports=f5e});var bz=_((dQt,xz)=>{var lN=Po(),p5e=Ml(),Sz=dI(),h5e=(t,e)=>{t=new p5e(t,e);let r=new lN("0.0.0");if(t.test(r)||(r=new lN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new lN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Sz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Sz(r,n))&&(r=n)}return r&&t.test(r)?r:null};xz.exports=h5e});var Qz=_((mQt,kz)=>{var g5e=Ml(),d5e=(t,e)=>{try{return new g5e(t,e).range||"*"}catch{return null}};kz.exports=d5e});var DP=_((yQt,Nz)=>{var m5e=Po(),Rz=EI(),{ANY:y5e}=Rz,E5e=Ml(),C5e=wI(),Fz=dI(),Tz=yP(),w5e=CP(),I5e=EP(),B5e=(t,e,r,o)=>{t=new m5e(t,o),e=new E5e(e,o);let a,n,u,A,p;switch(r){case">":a=Fz,n=w5e,u=Tz,A=">",p=">=";break;case"<":a=Tz,n=I5e,u=Fz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(C5e(t,e,o))return!1;for(let h=0;h{b.semver===y5e&&(b=new Rz(">=0.0.0")),I=I||b,v=v||b,a(b.semver,I.semver,o)?I=b:u(b.semver,v.semver,o)&&(v=b)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Nz.exports=B5e});var Mz=_((EQt,Lz)=>{var v5e=DP(),D5e=(t,e,r)=>v5e(t,e,">",r);Lz.exports=D5e});var Uz=_((CQt,Oz)=>{var P5e=DP(),S5e=(t,e,r)=>P5e(t,e,"<",r);Oz.exports=S5e});var jz=_((wQt,Hz)=>{var _z=Ml(),x5e=(t,e,r)=>(t=new _z(t,r),e=new _z(e,r),t.intersects(e,r));Hz.exports=x5e});var Gz=_((IQt,qz)=>{var b5e=wI(),k5e=Ll();qz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>k5e(E,I,r));for(let E of u)b5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Yz=Ml(),uN=EI(),{ANY:cN}=uN,II=wI(),AN=Ll(),Q5e=(t,e,r={})=>{if(t===e)return!0;t=new Yz(t,r),e=new Yz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=T5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},F5e=[new uN(">=0.0.0-0")],Wz=[new uN(">=0.0.0")],T5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===cN){if(e.length===1&&e[0].semver===cN)return!0;r.includePrerelease?t=F5e:t=Wz}if(e.length===1&&e[0].semver===cN){if(r.includePrerelease)return!0;e=Wz}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=Vz(a,b,r):b.operator==="<"||b.operator==="<="?n=Kz(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=AN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!II(b,String(a),r)||n&&!II(b,String(n),r))return null;for(let C of e)if(!II(b,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(v&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===v.major&&b.semver.minor===v.minor&&b.semver.patch===v.patch&&(v=!1),b.operator===">"||b.operator===">="){if(A=Vz(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!II(a.semver,String(b),r))return!1}if(n){if(I&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===I.major&&b.semver.minor===I.minor&&b.semver.patch===I.patch&&(I=!1),b.operator==="<"||b.operator==="<="){if(p=Kz(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!II(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Vz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Kz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Jz.exports=Q5e});var zn=_((vQt,$z)=>{var fN=By(),Xz=hI(),R5e=Po(),Zz=XR(),N5e=id(),L5e=yJ(),M5e=CJ(),O5e=BJ(),U5e=PJ(),_5e=xJ(),H5e=kJ(),j5e=FJ(),q5e=RJ(),G5e=Ll(),Y5e=OJ(),W5e=_J(),V5e=mP(),K5e=GJ(),J5e=WJ(),z5e=dI(),X5e=yP(),Z5e=ZR(),$5e=$R(),e9e=EP(),t9e=CP(),r9e=eN(),n9e=tz(),i9e=EI(),s9e=Ml(),o9e=wI(),a9e=Iz(),l9e=vz(),c9e=Pz(),u9e=bz(),A9e=Qz(),f9e=DP(),p9e=Mz(),h9e=Uz(),g9e=jz(),d9e=Gz(),m9e=zz();$z.exports={parse:N5e,valid:L5e,clean:M5e,inc:O5e,diff:U5e,major:_5e,minor:H5e,patch:j5e,prerelease:q5e,compare:G5e,rcompare:Y5e,compareLoose:W5e,compareBuild:V5e,sort:K5e,rsort:J5e,gt:z5e,lt:X5e,eq:Z5e,neq:$5e,gte:e9e,lte:t9e,cmp:r9e,coerce:n9e,Comparator:i9e,Range:s9e,satisfies:o9e,toComparators:a9e,maxSatisfying:l9e,minSatisfying:c9e,minVersion:u9e,validRange:A9e,outside:f9e,gtr:p9e,ltr:h9e,intersects:g9e,simplifyRange:d9e,subset:m9e,SemVer:R5e,re:fN.re,src:fN.src,tokens:fN.t,SEMVER_SPEC_VERSION:Xz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Xz.RELEASE_TYPES,compareIdentifiers:Zz.compareIdentifiers,rcompareIdentifiers:Zz.rcompareIdentifiers}});var tX=_((DQt,eX)=>{"use strict";function y9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function cd(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,cd)}y9e(cd,Error);cd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Se|Ne[3];case"&":return Se&Ne[3];case"^":return Se^Ne[3]}},Z)},v="!",b=Re("!",!1),C=function(Z){return!Z},T="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,pe=Qe([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),Ae=function(Z){return e.queryPattern.test(Z)},ye=function(Z){return e.checkFn(Z)},ae=Te("whitespace"),we=/^[ \t\n\r]/,Pe=Qe([" "," ",` +`,"\r"],!1,!1),g=0,Ee=0,De=[{line:1,column:1}],ce=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ke(){return t.substring(Ee,g)}function ht(){return He(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),S([Te(Z)],t.substring(Ee,g),ie)}function lt(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function Qe(Z,ie,Se){return{type:"class",parts:Z,inverted:ie,ignoreCase:Se}}function be(){return{type:"any"}}function _e(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=De[Z],Se;if(ie)return ie;for(Se=Z-1;!De[Se];)Se--;for(ie=De[Se],ie={line:ie.line,column:ie.column};Sece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new cd(Z,null,null,ie)}function S(Z,ie,Se){return new cd(cd.buildMessage(Z,ie),Z,ie,Se)}function y(){var Z,ie,Se,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Se=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Se.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Se!==r?(Ee=Z,ie=I(ie,Se),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Se,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&x(b)),ie!==r?(Se=F(),Se!==r?(Ee=Z,ie=C(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=T,g++):(ie=r,ee===0&&x(L)),ie!==r?(Se=X(),Se!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&x(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Se,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Se=g,Ne=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe)),ot!==r)for(;ot!==r;)Ne.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe));else Ne=r;Ne!==r?Se=t.substring(Se,g):Se=Ne,Se!==r?(Ee=g,Ne=Ae(Se),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=ye(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));ie!==r;)Z.push(ie),we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));return ee--,Z===r&&(ie=r,ee===0&&x(ae)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:C9e}=tX();PP.makeParser=(t=/[a-z]+/)=>(e,r)=>C9e(e,{queryPattern:t,checkFn:r});PP.parse=PP.makeParser()});var iX=_((SQt,nX)=>{"use strict";nX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var pN=_((xQt,oX)=>{var BI=iX(),sX={};for(let t of Object.keys(BI))sX[BI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};oX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function w9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=sX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(BI)){let n=BI[a],u=w9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var lX=_((bQt,aX)=>{var SP=pN();function I9e(){let t={},e=Object.keys(SP);for(let r=e.length,o=0;o{var hN=pN(),P9e=lX(),xy={},S9e=Object.keys(hN);function x9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function b9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:hN[t].channels}),Object.defineProperty(xy[t],"labels",{value:hN[t].labels});let e=P9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=b9e(a),xy[t][o].raw=x9e(a)})});cX.exports=xy});var vI=_((QQt,gX)=>{"use strict";var AX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,fX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},pX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},xP=t=>t,hX=(t,e,r)=>[t,e,r],by=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},gN,ky=(t,e,r,o)=>{gN===void 0&&(gN=uX());let a=o?10:0,n={};for(let[u,A]of Object.entries(gN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function k9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",by(e.color,"ansi",()=>ky(AX,"ansi16",xP,!1)),by(e.color,"ansi256",()=>ky(fX,"ansi256",xP,!1)),by(e.color,"ansi16m",()=>ky(pX,"rgb",hX,!1)),by(e.bgColor,"ansi",()=>ky(AX,"ansi16",xP,!0)),by(e.bgColor,"ansi256",()=>ky(fX,"ansi256",xP,!0)),by(e.bgColor,"ansi16m",()=>ky(pX,"rgb",hX,!0)),e}Object.defineProperty(gX,"exports",{enumerable:!0,get:k9e})});var mX=_((FQt,dX)=>{"use strict";dX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var Q9e=Be("os"),yX=Be("tty"),Ol=mX(),{env:ls}=process,Kp;Ol("no-color")||Ol("no-colors")||Ol("color=false")||Ol("color=never")?Kp=0:(Ol("color")||Ol("colors")||Ol("color=true")||Ol("color=always"))&&(Kp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Kp=1:ls.FORCE_COLOR==="false"?Kp=0:Kp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function dN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mN(t,e){if(Kp===0)return 0;if(Ol("color=16m")||Ol("color=full")||Ol("color=truecolor"))return 3;if(Ol("color=256"))return 2;if(t&&!e&&Kp===void 0)return 0;let r=Kp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=Q9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function F9e(t){let e=mN(t,t&&t.isTTY);return dN(e)}EX.exports={supportsColor:F9e,stdout:dN(mN(!0,yX.isatty(1))),stderr:dN(mN(!0,yX.isatty(2)))}});var wX=_((RQt,CX)=>{"use strict";var T9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},R9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};CX.exports={stringReplaceAll:T9e,stringEncaseCRLFWithFirstIndex:R9e}});var PX=_((NQt,DX)=>{"use strict";var N9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,IX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,L9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,M9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,O9e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function vX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):O9e.get(t)||t}function U9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(L9e))r.push(a[2].replace(M9e,(A,p,h)=>p?vX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function _9e(t){IX.lastIndex=0;let e=[],r;for(;(r=IX.exec(t))!==null;){let o=r[1];if(r[2]){let a=U9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function BX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}DX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(N9e,(n,u,A,p,h,E)=>{if(u)a.push(vX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:BX(t,r)(I)),r.push({inverse:A,styles:_9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(BX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var vN=_((LQt,kX)=>{"use strict";var DI=vI(),{stdout:CN,stderr:wN}=yN(),{stringReplaceAll:H9e,stringEncaseCRLFWithFirstIndex:j9e}=wX(),SX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),q9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=CN?CN.level:0;t.level=e.level===void 0?r:e.level},IN=class{constructor(e){return xX(e)}},xX=t=>{let e={};return q9e(e,t),e.template=(...r)=>W9e(e.template,...r),Object.setPrototypeOf(e,bP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=IN,e.template};function bP(t){return xX(t)}for(let[t,e]of Object.entries(DI))Qy[t]={get(){let r=kP(this,BN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=kP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=BN(DI.color[SX[e]][t](...r),DI.color.close,this._styler);return kP(this,o,this._isEmpty)}}};for(let t of bX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=BN(DI.bgColor[SX[r]][t](...o),DI.bgColor.close,this._styler);return kP(this,a,this._isEmpty)}}}}var G9e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),BN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kP=(t,e,r)=>{let o=(...a)=>Y9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=G9e,o._generator=t,o._styler=e,o._isEmpty=r,o},Y9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=H9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=j9e(e,a,o,n)),o+e+a},EN,W9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var QX=QP();FX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&QX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&QX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((UQt,TX)=>{"use strict";TX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var qX=_((_Qt,jX)=>{"use strict";var NX=RX(),ud=(t,e,r)=>{if(NX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(NX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(ud.cache.hasOwnProperty(p))return ud.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let T=t+"|"+e;return o.capture?`(${T})`:o.wrap===!1?T:`(?:${T})`}let I=HX(t)||HX(e),v={min:t,max:e,a:h,b:E},b=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let T=E<0?Math.abs(E):1;C=LX(T,Math.abs(h),v,o),h=v.a=0}return E>=0&&(b=LX(h,E,v,o)),v.negatives=C,v.positives=b,v.result=V9e(C,b,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&b.length+C.length>1&&(v.result=`(?:${v.result})`),ud.cache[p]=v,v.result};function V9e(t,e,r){let o=DN(t,e,"-",!1,r)||[],a=DN(e,t,"",!1,r)||[],n=DN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function K9e(t,e){let r=1,o=1,a=OX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=OX(t,r);for(a=UX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+_X(A.count),u=h+1;continue}r.isPadded&&(I=$9e(h,r,o)),E.string=I+E.pattern+_X(E.count),n.push(E),u=h+1,A=E}return n}function DN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!MX(e,"string",A)&&n.push(r+A),o&&MX(e,"string",A)&&n.push(r+A)}return n}function z9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function MX(t,e,r){return t.some(o=>o[e]===r)}function OX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function UX(t,e){return t-t%Math.pow(10,e)}function _X(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Z9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function HX(t){return/^-?(0+)\d/.test(t)}function $9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}ud.cache={};ud.clearCache=()=>ud.cache={};jX.exports=ud});var xN=_((HQt,XX)=>{"use strict";var e7e=Be("util"),WX=qX(),GX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),t7e=t=>e=>t===!0?Number(e):String(e),PN=t=>typeof t=="number"||typeof t=="string"&&t!=="",SI=t=>Number.isInteger(+t),SN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},r7e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,n7e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},YX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},VX=(t,e,r,o)=>{if(r)return WX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},KX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return WX(t,e,r)},JX=(...t)=>new RangeError("Invalid range arguments: "+e7e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw JX([t,e]);return[]},s7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},o7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw JX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=SN(A)||SN(p)||SN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&r7e(t,e,o)===!1,b=o.transform||t7e(v);if(o.toRegex&&r===1)return VX(YX(t,I),YX(e,I),!0,o);let C={negatives:[],positives:[]},T=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?T(a):L.push(n7e(b(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?i7e(C,o):KX(L,null,{wrap:!1,...o}):L},a7e=(t,e,r=1,o={})=>{if(!SI(t)&&t.length>1||!SI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return VX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?KX(E,null,{wrap:!1,options:o}):E},TP=(t,e,r,o={})=>{if(e==null&&PN(t))return[t];if(!PN(t)||!PN(e))return zX(t,e,o);if(typeof r=="function")return TP(t,e,1,{transform:r});if(GX(r))return TP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,SI(r)?SI(t)&&SI(e)?o7e(t,e,r,a):a7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!GX(r)?s7e(r,a):TP(t,e,1,r)};XX.exports=TP});var eZ=_((jQt,$X)=>{"use strict";var l7e=xN(),ZX=QP(),c7e=(t,e={})=>{let r=(o,a={})=>{let n=ZX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=ZX.reduce(o.nodes),I=l7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};$X.exports=c7e});var nZ=_((qQt,rZ)=>{"use strict";var u7e=xN(),tZ=FP(),Fy=QP(),Ad=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Fy.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(Ad(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?Ad(a,n,r):a+n);return Fy.flatten(o)},A7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(Ad(A.pop(),tZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(Ad(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Fy.reduce(a.nodes);if(Fy.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=u7e(...I,e);v.length===0&&(v=tZ(a,e)),A.push(Ad(A.pop(),v)),a.nodes=[];return}let p=Fy.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";iZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` +`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var uZ=_((YQt,cZ)=>{"use strict";var f7e=FP(),{MAX_LENGTH:oZ,CHAR_BACKSLASH:bN,CHAR_BACKTICK:p7e,CHAR_COMMA:h7e,CHAR_DOT:g7e,CHAR_LEFT_PARENTHESES:d7e,CHAR_RIGHT_PARENTHESES:m7e,CHAR_LEFT_CURLY_BRACE:y7e,CHAR_RIGHT_CURLY_BRACE:E7e,CHAR_LEFT_SQUARE_BRACKET:aZ,CHAR_RIGHT_SQUARE_BRACKET:lZ,CHAR_DOUBLE_QUOTE:C7e,CHAR_SINGLE_QUOTE:w7e,CHAR_NO_BREAK_SPACE:I7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:B7e}=sZ(),v7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(oZ,r.maxLength):oZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,b={},C=()=>t[E++],T=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(T({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:f7e(u)}]}T({type:"comma",value:v}),u.commas++;continue}if(v===g7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){T({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}T({type:"dot",value:v});continue}T({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return T({type:"eos"}),a};cZ.exports=v7e});var pZ=_((WQt,fZ)=>{"use strict";var AZ=FP(),D7e=eZ(),P7e=nZ(),S7e=uZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>S7e(t,e);rl.stringify=(t,e={})=>AZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),D7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=P7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);fZ.exports=rl});var xI=_((VQt,yZ)=>{"use strict";var x7e=Be("path"),Vu="\\\\/",hZ=`[^${Vu}]`,Bf="\\.",b7e="\\+",k7e="\\?",RP="\\/",Q7e="(?=.)",gZ="[^/]",kN=`(?:${RP}|$)`,dZ=`(?:^|${RP})`,QN=`${Bf}{1,2}${kN}`,F7e=`(?!${Bf})`,T7e=`(?!${dZ}${QN})`,R7e=`(?!${Bf}{0,1}${kN})`,N7e=`(?!${QN})`,L7e=`[^.${RP}]`,M7e=`${gZ}*?`,mZ={DOT_LITERAL:Bf,PLUS_LITERAL:b7e,QMARK_LITERAL:k7e,SLASH_LITERAL:RP,ONE_CHAR:Q7e,QMARK:gZ,END_ANCHOR:kN,DOTS_SLASH:QN,NO_DOT:F7e,NO_DOTS:T7e,NO_DOT_SLASH:R7e,NO_DOTS_SLASH:N7e,QMARK_NO_DOT:L7e,STAR:M7e,START_ANCHOR:dZ},O7e={...mZ,SLASH_LITERAL:`[${Vu}]`,QMARK:hZ,STAR:`${hZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${Vu}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${Vu}])${Bf}{1,2}(?:[${Vu}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${Vu}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${Vu}]|$))`,QMARK_NO_DOT:`[^.${Vu}]`,START_ANCHOR:`(?:^|[${Vu}])`,END_ANCHOR:`(?:[${Vu}]|$)`},U7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};yZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:U7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:x7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?O7e:mZ}}});var bI=_(Pa=>{"use strict";var _7e=Be("path"),H7e=process.platform==="win32",{REGEX_BACKSLASH:j7e,REGEX_REMOVE_BACKSLASH:q7e,REGEX_SPECIAL_CHARS:G7e,REGEX_SPECIAL_CHARS_GLOBAL:Y7e}=xI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>G7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(Y7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(j7e,"/");Pa.removeBackslashes=t=>t.replace(q7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:H7e===!0||_7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var PZ=_((JQt,DZ)=>{"use strict";var EZ=bI(),{CHAR_ASTERISK:FN,CHAR_AT:W7e,CHAR_BACKWARD_SLASH:kI,CHAR_COMMA:V7e,CHAR_DOT:TN,CHAR_EXCLAMATION_MARK:RN,CHAR_FORWARD_SLASH:vZ,CHAR_LEFT_CURLY_BRACE:NN,CHAR_LEFT_PARENTHESES:LN,CHAR_LEFT_SQUARE_BRACKET:K7e,CHAR_PLUS:J7e,CHAR_QUESTION_MARK:CZ,CHAR_RIGHT_CURLY_BRACE:z7e,CHAR_RIGHT_PARENTHESES:wZ,CHAR_RIGHT_SQUARE_BRACKET:X7e}=xI(),IZ=t=>t===vZ||t===kI,BZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},Z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,b=!1,C=!1,T=!1,L=!1,U=!1,J=!1,te=!1,le=!1,pe=!1,Ae=0,ye,ae,we={value:"",depth:0,isGlob:!1},Pe=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(ye=ae,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,E),p=p.slice(E),I-=E),De&&C===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):C===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&IZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=EZ.removeBackslashes(ne)),De&&J===!0&&(De=EZ.removeBackslashes(De)));let ee={prefix:ce,input:t,start:E,base:De,glob:ne,isBrace:v,isBracket:b,isGlob:C,isExtglob:T,isGlobstar:L,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,IZ(ae)||u.push(we),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let ke=0;ke{"use strict";var NP=xI(),nl=bI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:$7e,REGEX_NON_SPECIAL_CHARS:eYe,REGEX_SPECIAL_CHARS_BACKREF:tYe,REPLACEMENTS:SZ}=NP,rYe=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,MN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=SZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NP.globChars(p),E=NP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:T,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:le,STAR:pe,START_ANCHOR:Ae}=h,ye=x=>`(${A}(?:(?!${Ae}${x.dot?T:I}).)*?)`,ae=r.dot?"":L,we=r.dot?te:le,Pe=r.bash===!0?ye(r):pe;r.capture&&(Pe=`(${Pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],De=[],ce=[],ne=n,ee,Ie=()=>g.index===a-1,ke=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),lt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Re=x=>{g.output+=x.output!=null?x.output:x.value,lt(x.value)},Qe=()=>{let x=1;for(;ke()==="!"&&(ke(2)!=="("||ke(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},be=x=>{g[x]++,ce.push(x)},_e=x=>{g[x]--,ce.pop()},Te=x=>{if(ne.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),S=x.extglob===!0||Ee.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Pe,g.output+=ne.output)}if(Ee.length&&x.type!=="paren"&&(Ee[Ee.length-1].inner+=x.value),(x.value||x.output)&&Re(x),ne&&ne.type==="text"&&x.type==="text"){ne.value+=x.value,ne.output=(ne.output||"")+x.value;return}x.prev=ne,u.push(x),ne=x},Je=(x,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;be("parens"),Te({type:x,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:ht(),output:y}),Ee.push(S)},He=x=>{let w=x.close+(r.capture?")":""),S;if(x.type==="negate"){let y=Pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=ye(r)),(y!==Pe||Ie()||/^\)+$/.test(H()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let F=MN(S,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),_e("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(tYe,(S,y,F,z,X,Z)=>z==="\\"?(x=!0,S):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?we+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?Pe:""):Pe:y?S:`\\${S}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=ke();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=$7e[z];if(X){ne.value=F+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&ke()!==":"||ee==="-"&&ke()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){be("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){He(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),_e("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else be("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}_e("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(S))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){be("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),Te(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){Te({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=rYe(z,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let F=g.output.slice(0,S.outputIndex),z=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),_e("braces"),De.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Te({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:b});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=ke(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:le});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&ke()==="("&&(ke(2)!=="?"||!/[!=<:]/.test(ke(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){Qe();continue}}if(ee==="+"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=eYe.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Pe,g.backtrack=!0,g.globstar=!0,lt(ee);continue}let x=H();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){lt(ee);continue}let S=ne.prev,y=S.prev,F=S.type==="slash"||S.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!F&&S.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;x.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;x=x.slice(3),lt("/**",3)}if(S.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=ye(r),g.output=ne.output,g.globstar=!0,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=ye(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&x[0]==="/"){let ie=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${ye(r)}${b}|${b}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&x[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${b}|${ye(r)}${b})`,g.output=ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=ye(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,lt(ee);continue}let w={type:"star",value:ee,output:Pe};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=ae+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=ae,ne.output+=ae),ke()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),_e("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),_e("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),_e("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};MN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=SZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:b,START_ANCHOR:C}=NP.globChars(n),T=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=ae=>ae.noglobstar===!0?te:`(${U}(?:(?!${C}${ae.dot?h:u}).)*?)`,pe=ae=>{switch(ae){case"*":return`${T}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${T}${te}${u}${p}${te}`;case"*/*":return`${T}${te}${A}${p}${L}${te}`;case"**":return T+le(r);case"**/*":return`(?:${T}${le(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${T}${le(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${T}${le(r)}${A})?${u}${p}${te}`;default:{let we=/^(.*?)\.(\w+)$/.exec(ae);if(!we)return;let Pe=pe(we[1]);return Pe?Pe+u+we[2]:void 0}}},Ae=nl.removePrefix(t,J),ye=pe(Ae);return ye&&r.strictSlashes!==!0&&(ye+=`${A}?`),ye};xZ.exports=MN});var QZ=_((XQt,kZ)=>{"use strict";var nYe=Be("path"),iYe=PZ(),ON=bZ(),UN=bI(),sYe=xI(),oYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Oi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Oi(v,e,r));return v=>{for(let b of E){let C=b(v);if(C)return C}return!1}}let o=oYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=UN.isWindows(e),u=o?Oi.compileRe(t,e):Oi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Oi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:b,output:C}=Oi.test(E,u,e,{glob:t,posix:n}),T={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:b,isMatch:v};return typeof a.onResult=="function"&&a.onResult(T),v===!1?(T.isMatch=!1,I?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,I?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),I?T:!0)};return r&&(h.state=A),h};Oi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?UN.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Oi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Oi.matchBase=(t,e,r,o=UN.isWindows(r))=>(e instanceof RegExp?e:Oi.makeRe(e,r)).test(nYe.basename(t));Oi.isMatch=(t,e,r)=>Oi(e,r)(t);Oi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Oi.parse(r,e)):ON(t,{...e,fastpaths:!1});Oi.scan=(t,e)=>iYe(t,e);Oi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Oi.toRegex(A,e);return o===!0&&(p.state=t),p};Oi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=ON.fastpaths(t,e)),a.output||(a=ON(t,e)),Oi.compileRe(a,e,r,o)};Oi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Oi.constants=sYe;kZ.exports=Oi});var TZ=_((ZQt,FZ)=>{"use strict";FZ.exports=QZ()});var Zo=_(($Qt,MZ)=>{"use strict";var NZ=Be("util"),LZ=pZ(),Ku=TZ(),_N=bI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Ku(t,e);yi.isMatch=(t,e,r)=>Ku(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!_N.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);return[].concat(e).every(o=>Ku(o,r)(t))};yi.capture=(t,e,r)=>{let o=_N.isWindows(r),n=Ku.makeRe(String(t),{...r,capture:!0}).exec(o?_N.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Ku.makeRe(...t);yi.scan=(...t)=>Ku.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of LZ(String(o),e))r.push(Ku.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:LZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};MZ.exports=yi});var UZ=_((eFt,OZ)=>{"use strict";OZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var MP=_((tFt,_Z)=>{"use strict";var aYe=UZ();_Z.exports=t=>typeof t=="string"?t.replace(aYe(),""):t});var jZ=_((rFt,HZ)=>{function lYe(){this.__data__=[],this.size=0}HZ.exports=lYe});var Ry=_((nFt,qZ)=>{function cYe(t,e){return t===e||t!==t&&e!==e}qZ.exports=cYe});var QI=_((iFt,GZ)=>{var uYe=Ry();function AYe(t,e){for(var r=t.length;r--;)if(uYe(t[r][0],e))return r;return-1}GZ.exports=AYe});var WZ=_((sFt,YZ)=>{var fYe=QI(),pYe=Array.prototype,hYe=pYe.splice;function gYe(t){var e=this.__data__,r=fYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():hYe.call(e,r,1),--this.size,!0}YZ.exports=gYe});var KZ=_((oFt,VZ)=>{var dYe=QI();function mYe(t){var e=this.__data__,r=dYe(e,t);return r<0?void 0:e[r][1]}VZ.exports=mYe});var zZ=_((aFt,JZ)=>{var yYe=QI();function EYe(t){return yYe(this.__data__,t)>-1}JZ.exports=EYe});var ZZ=_((lFt,XZ)=>{var CYe=QI();function wYe(t,e){var r=this.__data__,o=CYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}XZ.exports=wYe});var FI=_((cFt,$Z)=>{var IYe=jZ(),BYe=WZ(),vYe=KZ(),DYe=zZ(),PYe=ZZ();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var SYe=FI();function xYe(){this.__data__=new SYe,this.size=0}e$.exports=xYe});var n$=_((AFt,r$)=>{function bYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}r$.exports=bYe});var s$=_((fFt,i$)=>{function kYe(t){return this.__data__.get(t)}i$.exports=kYe});var a$=_((pFt,o$)=>{function QYe(t){return this.__data__.has(t)}o$.exports=QYe});var HN=_((hFt,l$)=>{var FYe=typeof global=="object"&&global&&global.Object===Object&&global;l$.exports=FYe});var _l=_((gFt,c$)=>{var TYe=HN(),RYe=typeof self=="object"&&self&&self.Object===Object&&self,NYe=TYe||RYe||Function("return this")();c$.exports=NYe});var fd=_((dFt,u$)=>{var LYe=_l(),MYe=LYe.Symbol;u$.exports=MYe});var h$=_((mFt,p$)=>{var A$=fd(),f$=Object.prototype,OYe=f$.hasOwnProperty,UYe=f$.toString,TI=A$?A$.toStringTag:void 0;function _Ye(t){var e=OYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=UYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}p$.exports=_Ye});var d$=_((yFt,g$)=>{var HYe=Object.prototype,jYe=HYe.toString;function qYe(t){return jYe.call(t)}g$.exports=qYe});var pd=_((EFt,E$)=>{var m$=fd(),GYe=h$(),YYe=d$(),WYe="[object Null]",VYe="[object Undefined]",y$=m$?m$.toStringTag:void 0;function KYe(t){return t==null?t===void 0?VYe:WYe:y$&&y$ in Object(t)?GYe(t):YYe(t)}E$.exports=KYe});var il=_((CFt,C$)=>{function JYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}C$.exports=JYe});var OP=_((wFt,w$)=>{var zYe=pd(),XYe=il(),ZYe="[object AsyncFunction]",$Ye="[object Function]",eWe="[object GeneratorFunction]",tWe="[object Proxy]";function rWe(t){if(!XYe(t))return!1;var e=zYe(t);return e==$Ye||e==eWe||e==ZYe||e==tWe}w$.exports=rWe});var B$=_((IFt,I$)=>{var nWe=_l(),iWe=nWe["__core-js_shared__"];I$.exports=iWe});var P$=_((BFt,D$)=>{var jN=B$(),v$=function(){var t=/[^.]+$/.exec(jN&&jN.keys&&jN.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function sWe(t){return!!v$&&v$ in t}D$.exports=sWe});var qN=_((vFt,S$)=>{var oWe=Function.prototype,aWe=oWe.toString;function lWe(t){if(t!=null){try{return aWe.call(t)}catch{}try{return t+""}catch{}}return""}S$.exports=lWe});var b$=_((DFt,x$)=>{var cWe=OP(),uWe=P$(),AWe=il(),fWe=qN(),pWe=/[\\^$.*+?()[\]{}|]/g,hWe=/^\[object .+?Constructor\]$/,gWe=Function.prototype,dWe=Object.prototype,mWe=gWe.toString,yWe=dWe.hasOwnProperty,EWe=RegExp("^"+mWe.call(yWe).replace(pWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function CWe(t){if(!AWe(t)||uWe(t))return!1;var e=cWe(t)?EWe:hWe;return e.test(fWe(t))}x$.exports=CWe});var Q$=_((PFt,k$)=>{function wWe(t,e){return t?.[e]}k$.exports=wWe});var Jp=_((SFt,F$)=>{var IWe=b$(),BWe=Q$();function vWe(t,e){var r=BWe(t,e);return IWe(r)?r:void 0}F$.exports=vWe});var UP=_((xFt,T$)=>{var DWe=Jp(),PWe=_l(),SWe=DWe(PWe,"Map");T$.exports=SWe});var RI=_((bFt,R$)=>{var xWe=Jp(),bWe=xWe(Object,"create");R$.exports=bWe});var M$=_((kFt,L$)=>{var N$=RI();function kWe(){this.__data__=N$?N$(null):{},this.size=0}L$.exports=kWe});var U$=_((QFt,O$)=>{function QWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}O$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=RI(),TWe="__lodash_hash_undefined__",RWe=Object.prototype,NWe=RWe.hasOwnProperty;function LWe(t){var e=this.__data__;if(FWe){var r=e[t];return r===TWe?void 0:r}return NWe.call(e,t)?e[t]:void 0}_$.exports=LWe});var q$=_((TFt,j$)=>{var MWe=RI(),OWe=Object.prototype,UWe=OWe.hasOwnProperty;function _We(t){var e=this.__data__;return MWe?e[t]!==void 0:UWe.call(e,t)}j$.exports=_We});var Y$=_((RFt,G$)=>{var HWe=RI(),jWe="__lodash_hash_undefined__";function qWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=HWe&&e===void 0?jWe:e,this}G$.exports=qWe});var V$=_((NFt,W$)=>{var GWe=M$(),YWe=U$(),WWe=H$(),VWe=q$(),KWe=Y$();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var K$=V$(),JWe=FI(),zWe=UP();function XWe(){this.size=0,this.__data__={hash:new K$,map:new(zWe||JWe),string:new K$}}J$.exports=XWe});var Z$=_((MFt,X$)=>{function ZWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}X$.exports=ZWe});var NI=_((OFt,$$)=>{var $We=Z$();function eVe(t,e){var r=t.__data__;return $We(e)?r[typeof e=="string"?"string":"hash"]:r.map}$$.exports=eVe});var tee=_((UFt,eee)=>{var tVe=NI();function rVe(t){var e=tVe(this,t).delete(t);return this.size-=e?1:0,e}eee.exports=rVe});var nee=_((_Ft,ree)=>{var nVe=NI();function iVe(t){return nVe(this,t).get(t)}ree.exports=iVe});var see=_((HFt,iee)=>{var sVe=NI();function oVe(t){return sVe(this,t).has(t)}iee.exports=oVe});var aee=_((jFt,oee)=>{var aVe=NI();function lVe(t,e){var r=aVe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}oee.exports=lVe});var _P=_((qFt,lee)=>{var cVe=z$(),uVe=tee(),AVe=nee(),fVe=see(),pVe=aee();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var hVe=FI(),gVe=UP(),dVe=_P(),mVe=200;function yVe(t,e){var r=this.__data__;if(r instanceof hVe){var o=r.__data__;if(!gVe||o.length{var EVe=FI(),CVe=t$(),wVe=n$(),IVe=s$(),BVe=a$(),vVe=uee();function Oy(t){var e=this.__data__=new EVe(t);this.size=e.size}Oy.prototype.clear=CVe;Oy.prototype.delete=wVe;Oy.prototype.get=IVe;Oy.prototype.has=BVe;Oy.prototype.set=vVe;Aee.exports=Oy});var pee=_((WFt,fee)=>{var DVe="__lodash_hash_undefined__";function PVe(t){return this.__data__.set(t,DVe),this}fee.exports=PVe});var gee=_((VFt,hee)=>{function SVe(t){return this.__data__.has(t)}hee.exports=SVe});var mee=_((KFt,dee)=>{var xVe=_P(),bVe=pee(),kVe=gee();function jP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new xVe;++e{function QVe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function FVe(t,e){return t.has(e)}Cee.exports=FVe});var GN=_((XFt,Iee)=>{var TVe=mee(),RVe=Eee(),NVe=wee(),LVe=1,MVe=2;function OVe(t,e,r,o,a,n){var u=r&LVe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,b=r&MVe?new TVe:void 0;for(n.set(t,e),n.set(e,t);++I{var UVe=_l(),_Ve=UVe.Uint8Array;Bee.exports=_Ve});var Dee=_(($Ft,vee)=>{function HVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}vee.exports=HVe});var See=_((eTt,Pee)=>{function jVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}Pee.exports=jVe});var Fee=_((tTt,Qee)=>{var xee=fd(),bee=YN(),qVe=Ry(),GVe=GN(),YVe=Dee(),WVe=See(),VVe=1,KVe=2,JVe="[object Boolean]",zVe="[object Date]",XVe="[object Error]",ZVe="[object Map]",$Ve="[object Number]",eKe="[object RegExp]",tKe="[object Set]",rKe="[object String]",nKe="[object Symbol]",iKe="[object ArrayBuffer]",sKe="[object DataView]",kee=xee?xee.prototype:void 0,WN=kee?kee.valueOf:void 0;function oKe(t,e,r,o,a,n,u){switch(r){case sKe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case iKe:return!(t.byteLength!=e.byteLength||!n(new bee(t),new bee(e)));case JVe:case zVe:case $Ve:return qVe(+t,+e);case XVe:return t.name==e.name&&t.message==e.message;case eKe:case rKe:return t==e+"";case ZVe:var A=YVe;case tKe:var p=o&VVe;if(A||(A=WVe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=KVe,u.set(t,e);var E=GVe(A(t),A(e),o,a,n,u);return u.delete(t),E;case nKe:if(WN)return WN.call(t)==WN.call(e)}return!1}Qee.exports=oKe});var qP=_((rTt,Tee)=>{function aKe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var lKe=Array.isArray;Ree.exports=lKe});var VN=_((iTt,Nee)=>{var cKe=qP(),uKe=Hl();function AKe(t,e,r){var o=e(t);return uKe(t)?o:cKe(o,r(t))}Nee.exports=AKe});var Mee=_((sTt,Lee)=>{function fKe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function pKe(){return[]}Oee.exports=pKe});var GP=_((aTt,_ee)=>{var hKe=Mee(),gKe=KN(),dKe=Object.prototype,mKe=dKe.propertyIsEnumerable,Uee=Object.getOwnPropertySymbols,yKe=Uee?function(t){return t==null?[]:(t=Object(t),hKe(Uee(t),function(e){return mKe.call(t,e)}))}:gKe;_ee.exports=yKe});var jee=_((lTt,Hee)=>{function EKe(t,e){for(var r=-1,o=Array(t);++r{function CKe(t){return t!=null&&typeof t=="object"}qee.exports=CKe});var Yee=_((uTt,Gee)=>{var wKe=pd(),IKe=Ju(),BKe="[object Arguments]";function vKe(t){return IKe(t)&&wKe(t)==BKe}Gee.exports=vKe});var LI=_((ATt,Kee)=>{var Wee=Yee(),DKe=Ju(),Vee=Object.prototype,PKe=Vee.hasOwnProperty,SKe=Vee.propertyIsEnumerable,xKe=Wee(function(){return arguments}())?Wee:function(t){return DKe(t)&&PKe.call(t,"callee")&&!SKe.call(t,"callee")};Kee.exports=xKe});var zee=_((fTt,Jee)=>{function bKe(){return!1}Jee.exports=bKe});var OI=_((MI,Uy)=>{var kKe=_l(),QKe=zee(),$ee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Xee=$ee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,FKe=Xee&&Xee.exports===$ee,Zee=FKe?kKe.Buffer:void 0,TKe=Zee?Zee.isBuffer:void 0,RKe=TKe||QKe;Uy.exports=RKe});var UI=_((pTt,ete)=>{var NKe=9007199254740991,LKe=/^(?:0|[1-9]\d*)$/;function MKe(t,e){var r=typeof t;return e=e??NKe,!!e&&(r=="number"||r!="symbol"&&LKe.test(t))&&t>-1&&t%1==0&&t{var OKe=9007199254740991;function UKe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=OKe}tte.exports=UKe});var nte=_((gTt,rte)=>{var _Ke=pd(),HKe=YP(),jKe=Ju(),qKe="[object Arguments]",GKe="[object Array]",YKe="[object Boolean]",WKe="[object Date]",VKe="[object Error]",KKe="[object Function]",JKe="[object Map]",zKe="[object Number]",XKe="[object Object]",ZKe="[object RegExp]",$Ke="[object Set]",eJe="[object String]",tJe="[object WeakMap]",rJe="[object ArrayBuffer]",nJe="[object DataView]",iJe="[object Float32Array]",sJe="[object Float64Array]",oJe="[object Int8Array]",aJe="[object Int16Array]",lJe="[object Int32Array]",cJe="[object Uint8Array]",uJe="[object Uint8ClampedArray]",AJe="[object Uint16Array]",fJe="[object Uint32Array]",ui={};ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=ui[lJe]=ui[cJe]=ui[uJe]=ui[AJe]=ui[fJe]=!0;ui[qKe]=ui[GKe]=ui[rJe]=ui[YKe]=ui[nJe]=ui[WKe]=ui[VKe]=ui[KKe]=ui[JKe]=ui[zKe]=ui[XKe]=ui[ZKe]=ui[$Ke]=ui[eJe]=ui[tJe]=!1;function pJe(t){return jKe(t)&&HKe(t.length)&&!!ui[_Ke(t)]}rte.exports=pJe});var WP=_((dTt,ite)=>{function hJe(t){return function(e){return t(e)}}ite.exports=hJe});var VP=_((_I,_y)=>{var gJe=HN(),ste=typeof _I=="object"&&_I&&!_I.nodeType&&_I,HI=ste&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,dJe=HI&&HI.exports===ste,JN=dJe&&gJe.process,mJe=function(){try{var t=HI&&HI.require&&HI.require("util").types;return t||JN&&JN.binding&&JN.binding("util")}catch{}}();_y.exports=mJe});var KP=_((mTt,lte)=>{var yJe=nte(),EJe=WP(),ote=VP(),ate=ote&&ote.isTypedArray,CJe=ate?EJe(ate):yJe;lte.exports=CJe});var zN=_((yTt,cte)=>{var wJe=jee(),IJe=LI(),BJe=Hl(),vJe=OI(),DJe=UI(),PJe=KP(),SJe=Object.prototype,xJe=SJe.hasOwnProperty;function bJe(t,e){var r=BJe(t),o=!r&&IJe(t),a=!r&&!o&&vJe(t),n=!r&&!o&&!a&&PJe(t),u=r||o||a||n,A=u?wJe(t.length,String):[],p=A.length;for(var h in t)(e||xJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||DJe(h,p)))&&A.push(h);return A}cte.exports=bJe});var JP=_((ETt,ute)=>{var kJe=Object.prototype;function QJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||kJe;return t===r}ute.exports=QJe});var XN=_((CTt,Ate)=>{function FJe(t,e){return function(r){return t(e(r))}}Ate.exports=FJe});var pte=_((wTt,fte)=>{var TJe=XN(),RJe=TJe(Object.keys,Object);fte.exports=RJe});var gte=_((ITt,hte)=>{var NJe=JP(),LJe=pte(),MJe=Object.prototype,OJe=MJe.hasOwnProperty;function UJe(t){if(!NJe(t))return LJe(t);var e=[];for(var r in Object(t))OJe.call(t,r)&&r!="constructor"&&e.push(r);return e}hte.exports=UJe});var jI=_((BTt,dte)=>{var _Je=OP(),HJe=YP();function jJe(t){return t!=null&&HJe(t.length)&&!_Je(t)}dte.exports=jJe});var zP=_((vTt,mte)=>{var qJe=zN(),GJe=gte(),YJe=jI();function WJe(t){return YJe(t)?qJe(t):GJe(t)}mte.exports=WJe});var ZN=_((DTt,yte)=>{var VJe=VN(),KJe=GP(),JJe=zP();function zJe(t){return VJe(t,JJe,KJe)}yte.exports=zJe});var wte=_((PTt,Cte)=>{var Ete=ZN(),XJe=1,ZJe=Object.prototype,$Je=ZJe.hasOwnProperty;function eze(t,e,r,o,a,n){var u=r&XJe,A=Ete(t),p=A.length,h=Ete(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:$Je.call(e,v)))return!1}var b=n.get(t),C=n.get(e);if(b&&C)return b==e&&C==t;var T=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var tze=Jp(),rze=_l(),nze=tze(rze,"DataView");Ite.exports=nze});var Dte=_((xTt,vte)=>{var ize=Jp(),sze=_l(),oze=ize(sze,"Promise");vte.exports=oze});var Ste=_((bTt,Pte)=>{var aze=Jp(),lze=_l(),cze=aze(lze,"Set");Pte.exports=cze});var bte=_((kTt,xte)=>{var uze=Jp(),Aze=_l(),fze=uze(Aze,"WeakMap");xte.exports=fze});var qI=_((QTt,Lte)=>{var $N=Bte(),eL=UP(),tL=Dte(),rL=Ste(),nL=bte(),Nte=pd(),Hy=qN(),kte="[object Map]",pze="[object Object]",Qte="[object Promise]",Fte="[object Set]",Tte="[object WeakMap]",Rte="[object DataView]",hze=Hy($N),gze=Hy(eL),dze=Hy(tL),mze=Hy(rL),yze=Hy(nL),hd=Nte;($N&&hd(new $N(new ArrayBuffer(1)))!=Rte||eL&&hd(new eL)!=kte||tL&&hd(tL.resolve())!=Qte||rL&&hd(new rL)!=Fte||nL&&hd(new nL)!=Tte)&&(hd=function(t){var e=Nte(t),r=e==pze?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case hze:return Rte;case gze:return kte;case dze:return Qte;case mze:return Fte;case yze:return Tte}return e});Lte.exports=hd});var Gte=_((FTt,qte)=>{var iL=HP(),Eze=GN(),Cze=Fee(),wze=wte(),Mte=qI(),Ote=Hl(),Ute=OI(),Ize=KP(),Bze=1,_te="[object Arguments]",Hte="[object Array]",XP="[object Object]",vze=Object.prototype,jte=vze.hasOwnProperty;function Dze(t,e,r,o,a,n){var u=Ote(t),A=Ote(e),p=u?Hte:Mte(t),h=A?Hte:Mte(e);p=p==_te?XP:p,h=h==_te?XP:h;var E=p==XP,I=h==XP,v=p==h;if(v&&Ute(t)){if(!Ute(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iL),u||Ize(t)?Eze(t,e,r,o,a,n):Cze(t,e,p,r,o,a,n);if(!(r&Bze)){var b=E&&jte.call(t,"__wrapped__"),C=I&&jte.call(e,"__wrapped__");if(b||C){var T=b?t.value():t,L=C?e.value():e;return n||(n=new iL),a(T,L,r,o,n)}}return v?(n||(n=new iL),wze(t,e,r,o,a,n)):!1}qte.exports=Dze});var Kte=_((TTt,Vte)=>{var Pze=Gte(),Yte=Ju();function Wte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Yte(t)&&!Yte(e)?t!==t&&e!==e:Pze(t,e,r,o,Wte,a)}Vte.exports=Wte});var zte=_((RTt,Jte)=>{var Sze=Kte();function xze(t,e){return Sze(t,e)}Jte.exports=xze});var sL=_((NTt,Xte)=>{var bze=Jp(),kze=function(){try{var t=bze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Xte.exports=kze});var ZP=_((LTt,$te)=>{var Zte=sL();function Qze(t,e,r){e=="__proto__"&&Zte?Zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}$te.exports=Qze});var oL=_((MTt,ere)=>{var Fze=ZP(),Tze=Ry();function Rze(t,e,r){(r!==void 0&&!Tze(t[e],r)||r===void 0&&!(e in t))&&Fze(t,e,r)}ere.exports=Rze});var rre=_((OTt,tre)=>{function Nze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}tre.exports=Nze});var ire=_((UTt,nre)=>{var Lze=rre(),Mze=Lze();nre.exports=Mze});var aL=_((GI,jy)=>{var Oze=_l(),lre=typeof GI=="object"&&GI&&!GI.nodeType&&GI,sre=lre&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Uze=sre&&sre.exports===lre,ore=Uze?Oze.Buffer:void 0,are=ore?ore.allocUnsafe:void 0;function _ze(t,e){if(e)return t.slice();var r=t.length,o=are?are(r):new t.constructor(r);return t.copy(o),o}jy.exports=_ze});var $P=_((_Tt,ure)=>{var cre=YN();function Hze(t){var e=new t.constructor(t.byteLength);return new cre(e).set(new cre(t)),e}ure.exports=Hze});var lL=_((HTt,Are)=>{var jze=$P();function qze(t,e){var r=e?jze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Are.exports=qze});var eS=_((jTt,fre)=>{function Gze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var Yze=il(),pre=Object.create,Wze=function(){function t(){}return function(e){if(!Yze(e))return{};if(pre)return pre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();hre.exports=Wze});var tS=_((GTt,dre)=>{var Vze=XN(),Kze=Vze(Object.getPrototypeOf,Object);dre.exports=Kze});var cL=_((YTt,mre)=>{var Jze=gre(),zze=tS(),Xze=JP();function Zze(t){return typeof t.constructor=="function"&&!Xze(t)?Jze(zze(t)):{}}mre.exports=Zze});var Ere=_((WTt,yre)=>{var $ze=jI(),eXe=Ju();function tXe(t){return eXe(t)&&$ze(t)}yre.exports=tXe});var uL=_((VTt,wre)=>{var rXe=pd(),nXe=tS(),iXe=Ju(),sXe="[object Object]",oXe=Function.prototype,aXe=Object.prototype,Cre=oXe.toString,lXe=aXe.hasOwnProperty,cXe=Cre.call(Object);function uXe(t){if(!iXe(t)||rXe(t)!=sXe)return!1;var e=nXe(t);if(e===null)return!0;var r=lXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Cre.call(r)==cXe}wre.exports=uXe});var AL=_((KTt,Ire)=>{function AXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Ire.exports=AXe});var rS=_((JTt,Bre)=>{var fXe=ZP(),pXe=Ry(),hXe=Object.prototype,gXe=hXe.hasOwnProperty;function dXe(t,e,r){var o=t[e];(!(gXe.call(t,e)&&pXe(o,r))||r===void 0&&!(e in t))&&fXe(t,e,r)}Bre.exports=dXe});var gd=_((zTt,vre)=>{var mXe=rS(),yXe=ZP();function EXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function CXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Dre.exports=CXe});var xre=_((ZTt,Sre)=>{var wXe=il(),IXe=JP(),BXe=Pre(),vXe=Object.prototype,DXe=vXe.hasOwnProperty;function PXe(t){if(!wXe(t))return BXe(t);var e=IXe(t),r=[];for(var o in t)o=="constructor"&&(e||!DXe.call(t,o))||r.push(o);return r}Sre.exports=PXe});var qy=_(($Tt,bre)=>{var SXe=zN(),xXe=xre(),bXe=jI();function kXe(t){return bXe(t)?SXe(t,!0):xXe(t)}bre.exports=kXe});var Qre=_((eRt,kre)=>{var QXe=gd(),FXe=qy();function TXe(t){return QXe(t,FXe(t))}kre.exports=TXe});var Mre=_((tRt,Lre)=>{var Fre=oL(),RXe=aL(),NXe=lL(),LXe=eS(),MXe=cL(),Tre=LI(),Rre=Hl(),OXe=Ere(),UXe=OI(),_Xe=OP(),HXe=il(),jXe=uL(),qXe=KP(),Nre=AL(),GXe=Qre();function YXe(t,e,r,o,a,n,u){var A=Nre(t,r),p=Nre(e,r),h=u.get(p);if(h){Fre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Rre(p),b=!v&&UXe(p),C=!v&&!b&&qXe(p);E=p,v||b||C?Rre(A)?E=A:OXe(A)?E=LXe(A):b?(I=!1,E=RXe(p,!0)):C?(I=!1,E=NXe(p,!0)):E=[]:jXe(p)||Tre(p)?(E=A,Tre(A)?E=GXe(A):(!HXe(A)||_Xe(A))&&(E=MXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),Fre(t,r,E)}Lre.exports=YXe});var _re=_((rRt,Ure)=>{var WXe=HP(),VXe=oL(),KXe=ire(),JXe=Mre(),zXe=il(),XXe=qy(),ZXe=AL();function Ore(t,e,r,o,a){t!==e&&KXe(e,function(n,u){if(a||(a=new WXe),zXe(n))JXe(t,e,u,r,Ore,o,a);else{var A=o?o(ZXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),VXe(t,u,A)}},XXe)}Ure.exports=Ore});var fL=_((nRt,Hre)=>{function $Xe(t){return t}Hre.exports=$Xe});var qre=_((iRt,jre)=>{function eZe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}jre.exports=eZe});var pL=_((sRt,Yre)=>{var tZe=qre(),Gre=Math.max;function rZe(t,e,r){return e=Gre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=Gre(o.length-e,0),u=Array(n);++a{function nZe(t){return function(){return t}}Wre.exports=nZe});var zre=_((aRt,Jre)=>{var iZe=Vre(),Kre=sL(),sZe=fL(),oZe=Kre?function(t,e){return Kre(t,"toString",{configurable:!0,enumerable:!1,value:iZe(e),writable:!0})}:sZe;Jre.exports=oZe});var Zre=_((lRt,Xre)=>{var aZe=800,lZe=16,cZe=Date.now;function uZe(t){var e=0,r=0;return function(){var o=cZe(),a=lZe-(o-r);if(r=o,a>0){if(++e>=aZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Xre.exports=uZe});var hL=_((cRt,$re)=>{var AZe=zre(),fZe=Zre(),pZe=fZe(AZe);$re.exports=pZe});var tne=_((uRt,ene)=>{var hZe=fL(),gZe=pL(),dZe=hL();function mZe(t,e){return dZe(gZe(t,e,hZe),t+"")}ene.exports=mZe});var nne=_((ARt,rne)=>{var yZe=Ry(),EZe=jI(),CZe=UI(),wZe=il();function IZe(t,e,r){if(!wZe(r))return!1;var o=typeof e;return(o=="number"?EZe(r)&&CZe(e,r.length):o=="string"&&e in r)?yZe(r[e],t):!1}rne.exports=IZe});var sne=_((fRt,ine)=>{var BZe=tne(),vZe=nne();function DZe(t){return BZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&vZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var PZe=_re(),SZe=sne(),xZe=SZe(function(t,e,r,o){PZe(t,e,r,o)});one.exports=xZe});var je={};Kt(je,{AsyncActions:()=>mL,BufferStream:()=>dL,CachingStrategy:()=>Ene,DefaultStream:()=>yL,allSettledSafe:()=>Uc,assertNever:()=>CL,bufferStream:()=>Vy,buildIgnorePattern:()=>NZe,convertMapsToIndexableObjects:()=>iS,dynamicRequire:()=>vf,escapeRegExp:()=>kZe,getArrayWithDefault:()=>Gy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Yy,getSetWithDefault:()=>dd,groupBy:()=>BL,isIndexableObject:()=>gL,isPathLike:()=>LZe,isTaggedYarnVersion:()=>bZe,makeDeferred:()=>dne,mapAndFilter:()=>sl,mapAndFind:()=>WI,mergeIntoTarget:()=>wne,overrideType:()=>QZe,parseBoolean:()=>VI,parseInt:()=>Ky,parseOptionalBoolean:()=>Cne,plural:()=>nS,prettifyAsyncErrors:()=>Wy,prettifySyncErrors:()=>wL,releaseAfterUseAsync:()=>TZe,replaceEnvVariables:()=>sS,sortMap:()=>ks,toMerged:()=>MZe,tryParseOptionalBoolean:()=>IL,validateEnum:()=>FZe});function bZe(t){return!!(pne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function kZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function QZe(t){}function CL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function FZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==hne&&r.push(a)}return r}function WI(t,e){for(let r of t){let o=e(r);if(o!==gne)return o}}function gL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),gL(t))for(let e of Object.keys(t)){let r=t[e];gL(r)&&(t[e]=iS(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Gy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function dd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function TZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Wy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function wL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function dne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function mne(t){return YI(ue.fromPortablePath(t))}function yne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=YI.cache[physicalPath];delete YI.cache[physicalPath];let result;try{result=mne(physicalPath);let freshCacheEntry=YI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{YI.cache[physicalPath]=currentCacheEntry}return result}function RZe(t){let e=lne.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=yne(t);return lne.set(t,{mtime:r.mtimeMs,instance:o}),o}function vf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return yne(t);case 1:return RZe(t);case 2:return mne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function NZe(t){return t.length===0?null:t.map(e=>`(${Ane.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function Cne(t){return typeof t>"u"?t:VI(t)}function IL(t){try{return Cne(t)}catch{return null}}function LZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function wne(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,une.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,cne.default)(h,p))||u.push(p);return u}});return n}function MZe(...t){return wne({},...t)}function BL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Ky(t){return typeof t=="string"?Number.parseInt(t,10):t}var cne,une,Ane,fne,pne,EL,hne,gne,dL,mL,yL,YI,lne,Ene,jl=Et(()=>{Pt();qt();cne=$e(zte()),une=$e(ane()),Ane=$e(Zo()),fne=$e(nd()),pne=$e(zn()),EL=Be("stream");hne=Symbol();sl.skip=hne;gne=Symbol();WI.skip=gne;dL=class extends EL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};mL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,fne.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=dne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},yL=class extends EL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},YI=eval("require");lne=new Map;Ene=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(Ene||{})});var Jy,vL,DL,Ine=Et(()=>{Jy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(Jy||{}),vL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(vL||{}),DL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(DL||{})});var de={};Kt(de,{LogLevel:()=>uS,Style:()=>aS,Type:()=>yt,addLogFilterSupport:()=>zI,applyColor:()=>Ks,applyHyperlink:()=>Xy,applyStyle:()=>md,json:()=>yd,jsonOrPretty:()=>_Ze,mark:()=>kL,pretty:()=>Ot,prettyField:()=>zu,prettyList:()=>bL,prettyTruncatedLocatorList:()=>cS,stripAnsi:()=>zy.default,supportsColor:()=>lS,supportsHyperlinks:()=>xL,tuple:()=>_c});function Bne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function md(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function Ks(t,e,r){if(!t.get("enableColors"))return e;let o=OZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:SL.level>=3?o[0]:o[1],n=typeof a=="number"?PL.ansi256(a):a.startsWith("#")?PL.hex(a):PL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Xy(t,e,r){return t.get("enableHyperlinks")?UZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ot(t,e,r){if(e===null)return Ks(t,"null",yt.NULL);if(Object.hasOwn(oS,r))return oS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Ks(t,e,r)}function bL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ot(t,a,r)).join(o)}function yd(t,e){if(t===null)return null;if(Object.hasOwn(oS,e))return oS[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function _Ze(t,e,[r,o]){return t?yd(r,o):Ot(e,r,o)}function kL(t){return{Check:Ks(t,"\u2713","green"),Cross:Ks(t,"\u2718","red"),Question:Ks(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Ot(t,e,yt.CODE)}: ${Ot(t,r,o)}`}function cS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,I=QL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ot(t,p,yt.NUMBER))].join("")}function zI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let b=I.get("code");typeof b<"u"&&o.set(b,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let T=I.get("pattern");typeof T<"u"&&n.push([vne.default.matcher(T,{contains:!0}),v])}n.reverse();let u=(I,v,b)=>{if(I===null||I===0)return b;let C=a.size>0||n.length>0?(0,zy.default)(v):v;if(a.size>0){let T=a.get(C);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,L]of n)if(T(C))return L??b}if(o.size>0){let T=o.get(Wu(I));if(typeof T<"u")return T??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,b,C){switch(u(v,b,C)){case"info":A.call(I,v,b);break;case"warning":p.call(I,v??0,b);break;case"error":h.call(I,v??0,b);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,KI,vne,zy,Dne,yt,aS,SL,lS,xL,PL,OZe,So,oS,UZe,uS,ql=Et(()=>{Pt();JI=$e(vN()),KI=$e(ed());qt();vne=$e(Zo()),zy=$e(MP()),Dne=Be("util");pP();xo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aS=(e=>(e[e.BOLD=2]="BOLD",e))(aS||{}),SL=KI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},lS=SL.level!==0,xL=lS&&!KI.default.GITHUB_ACTIONS&&!KI.default.CIRCLE&&!KI.default.GITLAB,PL=new JI.default.Instance(SL),OZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),So=t=>t;oS={[yt.ID]:So({pretty:(t,e)=>typeof e=="number"?Ks(t,`${e}`,yt.NUMBER):Ks(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:So({pretty:(t,e)=>(0,Dne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:So({pretty:(t,e)=>Ks(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:So({pretty:(t,e)=>jr(t,e),json:t=>xa(t)}),[yt.DESCRIPTOR]:So({pretty:(t,e)=>qn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>XI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?xa(e):null})}),[yt.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>FL(t,e,r),json:({locator:t,descriptor:e})=>({locator:xa(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Ks(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:So({pretty:(t,e)=>(t.get(e),Xy(t,Ks(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:So({pretty:(t,e)=>Ks(t,Bne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Ks(t,`${r} ${Bne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:So({pretty:(t,e)=>Ks(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ot(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>md(t,a,2)),e),json:t=>t})};UZe=!!process.env.KONSOLE_VERSION;uS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uS||{})});var Pne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.splitWhen=Zy.flatten=void 0;function HZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Zy.flatten=HZe;function jZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Zy.splitWhen=jZe});var Sne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.isEnoentCodeError=void 0;function qZe(t){return t.code==="ENOENT"}AS.isEnoentCodeError=qZe});var xne=_(fS=>{"use strict";Object.defineProperty(fS,"__esModule",{value:!0});fS.createDirentFromStats=void 0;var TL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function GZe(t,e){return new TL(t,e)}fS.createDirentFromStats=GZe});var bne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var YZe=Be("path"),WZe=2,VZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function KZe(t){return t.replace(/\\/g,"/")}Xu.unixify=KZe;function JZe(t,e){return YZe.resolve(t,e)}Xu.makeAbsolute=JZe;function zZe(t){return t.replace(VZe,"\\$2")}Xu.escape=zZe;function XZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(WZe)}return t}Xu.removeLeadingDotSegment=XZe});var Qne=_((xRt,kne)=>{kne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Rne=_((bRt,Tne)=>{var ZZe=Qne(),Fne={"{":"}","(":")","[":"]"},$Ze=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=Fne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},e$e=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var t$e=Rne(),r$e=Be("path").posix.dirname,n$e=Be("os").platform()==="win32",RL="/",i$e=/\\/g,s$e=/[\{\[].*[\}\]]$/,o$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,a$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Nne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&n$e&&e.indexOf(RL)<0&&(e=e.replace(i$e,RL)),s$e.test(e)&&(e+=RL),e+="a";do e=r$e(e);while(t$e(e)||o$e.test(e));return e.replace(a$e,"$1")}});var Gne=_(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.matchAny=qr.convertPatternsToRe=qr.makeRe=qr.getPatternParts=qr.expandBraceExpansion=qr.expandPatternsWithBraceExpansion=qr.isAffectDepthOfReadingPattern=qr.endsWithSlashGlobStar=qr.hasGlobStar=qr.getBaseDirectory=qr.isPatternRelatedToParentDirectory=qr.getPatternsOutsideCurrentDirectory=qr.getPatternsInsideCurrentDirectory=qr.getPositivePatterns=qr.getNegativePatterns=qr.isPositivePattern=qr.isNegativePattern=qr.convertToNegativePattern=qr.convertToPositivePattern=qr.isDynamicPattern=qr.isStaticPattern=void 0;var l$e=Be("path"),c$e=Lne(),NL=Zo(),Mne="**",u$e="\\",A$e=/[*?]|^!/,f$e=/\[[^[]*]/,p$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,h$e=/[!*+?@]\([^(]*\)/,g$e=/,|\.\./;function One(t,e={}){return!Une(t,e)}qr.isStaticPattern=One;function Une(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(u$e)||A$e.test(t)||f$e.test(t)||p$e.test(t)||e.extglob!==!1&&h$e.test(t)||e.braceExpansion!==!1&&d$e(t))}qr.isDynamicPattern=Une;function d$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return g$e.test(o)}function m$e(t){return pS(t)?t.slice(1):t}qr.convertToPositivePattern=m$e;function y$e(t){return"!"+t}qr.convertToNegativePattern=y$e;function pS(t){return t.startsWith("!")&&t[1]!=="("}qr.isNegativePattern=pS;function _ne(t){return!pS(t)}qr.isPositivePattern=_ne;function E$e(t){return t.filter(pS)}qr.getNegativePatterns=E$e;function C$e(t){return t.filter(_ne)}qr.getPositivePatterns=C$e;function w$e(t){return t.filter(e=>!LL(e))}qr.getPatternsInsideCurrentDirectory=w$e;function I$e(t){return t.filter(LL)}qr.getPatternsOutsideCurrentDirectory=I$e;function LL(t){return t.startsWith("..")||t.startsWith("./..")}qr.isPatternRelatedToParentDirectory=LL;function B$e(t){return c$e(t,{flipBackslashes:!1})}qr.getBaseDirectory=B$e;function v$e(t){return t.includes(Mne)}qr.hasGlobStar=v$e;function Hne(t){return t.endsWith("/"+Mne)}qr.endsWithSlashGlobStar=Hne;function D$e(t){let e=l$e.basename(t);return Hne(t)||One(e)}qr.isAffectDepthOfReadingPattern=D$e;function P$e(t){return t.reduce((e,r)=>e.concat(jne(r)),[])}qr.expandPatternsWithBraceExpansion=P$e;function jne(t){return NL.braces(t,{expand:!0,nodupes:!0})}qr.expandBraceExpansion=jne;function S$e(t,e){let{parts:r}=NL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}qr.getPatternParts=S$e;function qne(t,e){return NL.makeRe(t,e)}qr.makeRe=qne;function x$e(t,e){return t.map(r=>qne(r,e))}qr.convertPatternsToRe=x$e;function b$e(t,e){return e.some(r=>r.test(t))}qr.matchAny=b$e});var Kne=_((FRt,Vne)=>{"use strict";var k$e=Be("stream"),Yne=k$e.PassThrough,Q$e=Array.prototype.slice;Vne.exports=F$e;function F$e(){let t=[],e=Q$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Yne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function b(C){function T(){C.removeListener("merge2UnpipeEnd",T),C.removeListener("end",T),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",T),C.on("end",T),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.merge=void 0;var T$e=Kne();function R$e(t){let e=T$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Jne(t)),e.once("end",()=>Jne(t)),e}hS.merge=R$e;function Jne(t){t.forEach(e=>e.emit("close"))}});var Xne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.isEmpty=$y.isString=void 0;function N$e(t){return typeof t=="string"}$y.isString=N$e;function L$e(t){return t===""}$y.isEmpty=L$e});var Df=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var M$e=Pne();bo.array=M$e;var O$e=Sne();bo.errno=O$e;var U$e=xne();bo.fs=U$e;var _$e=bne();bo.path=_$e;var H$e=Gne();bo.pattern=H$e;var j$e=zne();bo.stream=j$e;var q$e=Xne();bo.string=q$e});var eie=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Df();function G$e(t,e){let r=Zne(t),o=$ne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=ML(a,o,!1),A=ML(n,o,!0);return u.concat(A)}ko.generate=G$e;function ML(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=OL(a),A=OL(n);return o.push(...UL(u,e,r)),"."in A?o.push(_L(".",n,e,r)):o.push(...UL(A,e,r)),o}ko.convertPatternsToTasks=ML;function Zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Zne;function $ne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=$ne;function OL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=OL;function UL(t,e,r){return Object.keys(t).map(o=>_L(o,t[o],e,r))}ko.convertPatternGroupsToTasks=UL;function _L(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=_L});var rie=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.removeDuplicateSlashes=eE.transform=void 0;var Y$e=/(?!^)\/{2,}/g;function W$e(t){return t.map(e=>tie(e))}eE.transform=W$e;function tie(t){return t.replace(Y$e,"/")}eE.removeDuplicateSlashes=tie});var iie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function V$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){nie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){HL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){nie(r,n);return}HL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),HL(r,u)})})}gS.read=V$e;function nie(t,e){t(e)}function HL(t,e){t(null,e)}});var sie=_(dS=>{"use strict";Object.defineProperty(dS,"__esModule",{value:!0});dS.read=void 0;function K$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dS.read=K$e});var oie=_(zp=>{"use strict";Object.defineProperty(zp,"__esModule",{value:!0});zp.createFileSystemAdapter=zp.FILE_SYSTEM_ADAPTER=void 0;var mS=Be("fs");zp.FILE_SYSTEM_ADAPTER={lstat:mS.lstat,stat:mS.stat,lstatSync:mS.lstatSync,statSync:mS.statSync};function J$e(t){return t===void 0?zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},zp.FILE_SYSTEM_ADAPTER),t)}zp.createFileSystemAdapter=J$e});var aie=_(qL=>{"use strict";Object.defineProperty(qL,"__esModule",{value:!0});var z$e=oie(),jL=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=z$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qL.default=jL});var Ed=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.statSync=Xp.stat=Xp.Settings=void 0;var lie=iie(),X$e=sie(),YL=aie();Xp.Settings=YL.default;function Z$e(t,e,r){if(typeof e=="function"){lie.read(t,WL(),e);return}lie.read(t,WL(e),r)}Xp.stat=Z$e;function $$e(t,e){let r=WL(e);return X$e.read(t,r)}Xp.statSync=$$e;function WL(t={}){return t instanceof YL.default?t:new YL.default(t)}});var uie=_((qRt,cie)=>{cie.exports=eet;function eet(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var VL=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yS=process.versions.node.split(".");if(yS[0]===void 0||yS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Aie=Number.parseInt(yS[0],10),tet=Number.parseInt(yS[1],10),fie=10,ret=10,net=Aie>fie,iet=Aie===fie&&tet>=ret;ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=net||iet});var pie=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.createDirentFromStats=void 0;var KL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function set(t,e){return new KL(t,e)}CS.createDirentFromStats=set});var JL=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.fs=void 0;var oet=pie();wS.fs=oet});var zL=_(IS=>{"use strict";Object.defineProperty(IS,"__esModule",{value:!0});IS.joinPathSegments=void 0;function aet(t,e,r){return t.endsWith(r)?t+e:t+r+e}IS.joinPathSegments=aet});var Eie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.readdir=Zp.readdirWithFileTypes=Zp.read=void 0;var cet=Ed(),hie=uie(),uet=VL(),gie=JL(),die=zL();function Aet(t,e,r){if(!e.stats&&uet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){mie(t,e,r);return}yie(t,e,r)}Zp.read=Aet;function mie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:die.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){XL(r,n);return}let u=n.map(A=>fet(A,e));hie(u,(A,p)=>{if(A!==null){BS(r,A);return}XL(r,p)})})}Zp.readdirWithFileTypes=mie;function fet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=gie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function yie(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(u=>{let A=die.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{cet.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:gie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});hie(n,(u,A)=>{if(u!==null){BS(r,u);return}XL(r,A)})})}Zp.readdir=yie;function BS(t,e){t(e)}function XL(t,e){t(null,e)}});var vie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var pet=Ed(),het=VL(),Cie=JL(),wie=zL();function get(t,e){return!e.stats&&het.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Iie(t,e):Bie(t,e)}$p.read=get;function Iie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:wie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Cie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}$p.readdirWithFileTypes=Iie;function Bie(t,e){return e.fs.readdirSync(t).map(o=>{let a=wie.joinPathSegments(t,o,e.pathSegmentSeparator),n=pet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:Cie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}$p.readdir=Bie});var Die=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.createFileSystemAdapter=eh.FILE_SYSTEM_ADAPTER=void 0;var tE=Be("fs");eh.FILE_SYSTEM_ADAPTER={lstat:tE.lstat,stat:tE.stat,lstatSync:tE.lstatSync,statSync:tE.statSync,readdir:tE.readdir,readdirSync:tE.readdirSync};function det(t){return t===void 0?eh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},eh.FILE_SYSTEM_ADAPTER),t)}eh.createFileSystemAdapter=det});var Pie=_($L=>{"use strict";Object.defineProperty($L,"__esModule",{value:!0});var met=Be("path"),yet=Ed(),Eet=Die(),ZL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Eet.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,met.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new yet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};$L.default=ZL});var vS=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.Settings=th.scandirSync=th.scandir=void 0;var Sie=Eie(),Cet=vie(),eM=Pie();th.Settings=eM.default;function wet(t,e,r){if(typeof e=="function"){Sie.read(t,tM(),e);return}Sie.read(t,tM(e),r)}th.scandir=wet;function Iet(t,e){let r=tM(e);return Cet.read(t,r)}th.scandirSync=Iet;function tM(t={}){return t instanceof eM.default?t:new eM.default(t)}});var bie=_(($Rt,xie)=>{"use strict";function Bet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}xie.exports=Bet});var Qie=_((eNt,rM)=>{"use strict";var vet=bie();function kie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=vet(Det),a=null,n=null,u=0,A=null,p={push:T,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:b,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:le};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var pe=a,Ae=0;pe;)pe=pe.next,Ae++;return Ae}function v(){for(var pe=a,Ae=[];pe;)Ae.push(pe.value),pe=pe.next;return Ae}function b(){if(!!p.paused){p.paused=!1;for(var pe=0;pe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function xet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=xet;function bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=bet;function ket(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=ket;function Qet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Qet});var sM=_(iM=>{"use strict";Object.defineProperty(iM,"__esModule",{value:!0});var Fet=DS(),nM=class{constructor(e,r){this._root=e,this._settings=r,this._root=Fet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};iM.default=nM});var lM=_(aM=>{"use strict";Object.defineProperty(aM,"__esModule",{value:!0});var Tet=Be("events"),Ret=vS(),Net=Qie(),PS=DS(),Let=sM(),oM=class extends Let.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Ret.scandir,this._emitter=new Tet.EventEmitter,this._queue=Net(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!PS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};aM.default=oM});var Fie=_(uM=>{"use strict";Object.defineProperty(uM,"__esModule",{value:!0});var Met=lM(),cM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Met.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Oet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Uet(e,this._storage)}),this._reader.read()}};uM.default=cM;function Oet(t,e){t(e)}function Uet(t,e){t(null,e)}});var Tie=_(fM=>{"use strict";Object.defineProperty(fM,"__esModule",{value:!0});var _et=Be("stream"),Het=lM(),AM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Het.default(this._root,this._settings),this._stream=new _et.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};fM.default=AM});var Rie=_(hM=>{"use strict";Object.defineProperty(hM,"__esModule",{value:!0});var jet=vS(),SS=DS(),qet=sM(),pM=class extends qet.default{constructor(){super(...arguments),this._scandir=jet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!SS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=SS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&SS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};hM.default=pM});var Nie=_(dM=>{"use strict";Object.defineProperty(dM,"__esModule",{value:!0});var Get=Rie(),gM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Get.default(this._root,this._settings)}read(){return this._reader.read()}};dM.default=gM});var Lie=_(yM=>{"use strict";Object.defineProperty(yM,"__esModule",{value:!0});var Yet=Be("path"),Wet=vS(),mM=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Yet.sep),this.fsScandirSettings=new Wet.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};yM.default=mM});var bS=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Mie=Fie(),Vet=Tie(),Ket=Nie(),EM=Lie();$u.Settings=EM.default;function Jet(t,e,r){if(typeof e=="function"){new Mie.default(t,xS()).read(e);return}new Mie.default(t,xS(e)).read(r)}$u.walk=Jet;function zet(t,e){let r=xS(e);return new Ket.default(t,r).read()}$u.walkSync=zet;function Xet(t,e){let r=xS(e);return new Vet.default(t,r).read()}$u.walkStream=Xet;function xS(t={}){return t instanceof EM.default?t:new EM.default(t)}});var kS=_(wM=>{"use strict";Object.defineProperty(wM,"__esModule",{value:!0});var Zet=Be("path"),$et=Ed(),Oie=Df(),CM=class{constructor(e){this._settings=e,this._fsStatSettings=new $et.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Zet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Oie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Oie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};wM.default=CM});var vM=_(BM=>{"use strict";Object.defineProperty(BM,"__esModule",{value:!0});var ett=Be("stream"),ttt=Ed(),rtt=bS(),ntt=kS(),IM=class extends ntt.default{constructor(){super(...arguments),this._walkStream=rtt.walkStream,this._stat=ttt.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new ett.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};BM.default=IM});var Uie=_(PM=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});var itt=bS(),stt=kS(),ott=vM(),DM=class extends stt.default{constructor(){super(...arguments),this._walkAsync=itt.walk,this._readerStream=new ott.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};PM.default=DM});var _ie=_(xM=>{"use strict";Object.defineProperty(xM,"__esModule",{value:!0});var rE=Df(),SM=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=rE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return rE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>rE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:rE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return rE.array.splitWhen(e,r=>r.dynamic&&rE.pattern.hasGlobStar(r.pattern))}};xM.default=SM});var Hie=_(kM=>{"use strict";Object.defineProperty(kM,"__esModule",{value:!0});var att=_ie(),bM=class extends att.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};kM.default=bM});var jie=_(FM=>{"use strict";Object.defineProperty(FM,"__esModule",{value:!0});var QS=Df(),ltt=Hie(),QM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ltt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QS.pattern.isAffectDepthOfReadingPattern);return QS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QS.pattern.matchAny(e,r)}};FM.default=QM});var qie=_(RM=>{"use strict";Object.defineProperty(RM,"__esModule",{value:!0});var Cd=Df(),TM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Cd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Cd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Cd.path.makeAbsolute(this._settings.cwd,e);return Cd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Cd.path.removeLeadingDotSegment(e),n=Cd.pattern.matchAny(a,r);return!n&&o?Cd.pattern.matchAny(a+"/",r):n}};RM.default=TM});var Gie=_(LM=>{"use strict";Object.defineProperty(LM,"__esModule",{value:!0});var ctt=Df(),NM=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return ctt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};LM.default=NM});var Wie=_(OM=>{"use strict";Object.defineProperty(OM,"__esModule",{value:!0});var Yie=Df(),MM=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Yie.path.makeAbsolute(this._settings.cwd,r),r=Yie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};OM.default=MM});var TS=_(_M=>{"use strict";Object.defineProperty(_M,"__esModule",{value:!0});var utt=Be("path"),Att=jie(),ftt=qie(),ptt=Gie(),htt=Wie(),UM=class{constructor(e){this._settings=e,this.errorFilter=new ptt.default(this._settings),this.entryFilter=new ftt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Att.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new htt.default(this._settings)}_getRootDirectory(e){return utt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};_M.default=UM});var Vie=_(jM=>{"use strict";Object.defineProperty(jM,"__esModule",{value:!0});var gtt=Uie(),dtt=TS(),HM=class extends dtt.default{constructor(){super(...arguments),this._reader=new gtt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jM.default=HM});var Kie=_(GM=>{"use strict";Object.defineProperty(GM,"__esModule",{value:!0});var mtt=Be("stream"),ytt=vM(),Ett=TS(),qM=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new mtt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};GM.default=qM});var Jie=_(WM=>{"use strict";Object.defineProperty(WM,"__esModule",{value:!0});var Ctt=Ed(),wtt=bS(),Itt=kS(),YM=class extends Itt.default{constructor(){super(...arguments),this._walkSync=wtt.walkSync,this._statSync=Ctt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};WM.default=YM});var zie=_(KM=>{"use strict";Object.defineProperty(KM,"__esModule",{value:!0});var Btt=Jie(),vtt=TS(),VM=class extends vtt.default{constructor(){super(...arguments),this._reader=new Btt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};KM.default=VM});var Xie=_(iE=>{"use strict";Object.defineProperty(iE,"__esModule",{value:!0});iE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var nE=Be("fs"),Dtt=Be("os"),Ptt=Math.max(Dtt.cpus().length,1);iE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:nE.lstat,lstatSync:nE.lstatSync,stat:nE.stat,statSync:nE.statSync,readdir:nE.readdir,readdirSync:nE.readdirSync};var JM=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,Ptt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},iE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};iE.default=JM});var RS=_((DNt,ese)=>{"use strict";var Zie=eie(),$ie=rie(),Stt=Vie(),xtt=Kie(),btt=zie(),zM=Xie(),wd=Df();async function XM(t,e){sE(t);let r=ZM(t,Stt.default,e),o=await Promise.all(r);return wd.array.flatten(o)}(function(t){function e(u,A){sE(u);let p=ZM(u,btt.default,A);return wd.array.flatten(p)}t.sync=e;function r(u,A){sE(u);let p=ZM(u,xtt.default,A);return wd.stream.merge(p)}t.stream=r;function o(u,A){sE(u);let p=$ie.transform([].concat(u)),h=new zM.default(A);return Zie.generate(p,h)}t.generateTasks=o;function a(u,A){sE(u);let p=new zM.default(A);return wd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return sE(u),wd.path.escape(u)}t.escapePath=n})(XM||(XM={}));function ZM(t,e,r){let o=$ie.transform([].concat(t)),a=new zM.default(r),n=Zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function sE(t){if(![].concat(t).every(o=>wd.string.isString(o)&&!wd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}ese.exports=XM});var wn={};Kt(wn,{checksumFile:()=>LS,checksumPattern:()=>MS,makeHash:()=>zs});function zs(...t){let e=(0,NS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,NS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function MS(t,{cwd:e}){let o=(await(0,$M.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,$M.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,NS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var NS,$M,rh=Et(()=>{Pt();NS=Be("crypto"),$M=$e(RS())});var W={};Kt(W,{areDescriptorsEqual:()=>sse,areIdentsEqual:()=>r1,areLocatorsEqual:()=>n1,areVirtualPackagesEquivalent:()=>Ott,bindDescriptor:()=>Ltt,bindLocator:()=>Mtt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>tO,convertPackageToLocator:()=>Ttt,convertToIdent:()=>Ftt,convertToManifestRange:()=>Ktt,copyPackage:()=>$I,devirtualizeDescriptor:()=>e1,devirtualizeLocator:()=>t1,ensureDevirtualizedDescriptor:()=>Rtt,ensureDevirtualizedLocator:()=>Ntt,getIdentVendorPath:()=>sO,isPackageCompatible:()=>qS,isVirtualDescriptor:()=>Sf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>HS,parseDescriptor:()=>nh,parseFileStyleRange:()=>Wtt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Id,prettyDependent:()=>FL,prettyDescriptor:()=>qn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>QL,prettyRange:()=>lE,prettyReference:()=>s1,prettyResolution:()=>XI,prettyWorkspace:()=>o1,renamePackage:()=>rO,slugifyIdent:()=>eO,slugifyLocator:()=>aE,sortDescriptors:()=>cE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>xa,tryParseDescriptor:()=>i1,tryParseIdent:()=>ose,tryParseLocator:()=>_S,tryParseRange:()=>Ytt,virtualizeDescriptor:()=>nO,virtualizePackage:()=>iO});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ftt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function tO(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Ttt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function rO(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function $I(t){return rO(t,t)}function nO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function iO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return rO(t,Qs(t,`virtual:${e}#${t.reference}`))}function Sf(t){return t.range.startsWith(ZI)}function Hc(t){return t.reference.startsWith(ZI)}function e1(t){if(!Sf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(US,""))}function t1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(US,""))}function Rtt(t){return Sf(t)?In(t,t.range.replace(US,"")):t}function Ntt(t){return Hc(t)?Qs(t,t.reference.replace(US,"")):t}function Ltt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${oE.default.stringify(e)}`)}function Mtt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${oE.default.stringify(e)}`)}function r1(t,e){return t.identHash===e.identHash}function sse(t,e){return t.descriptorHash===e.descriptorHash}function n1(t,e){return t.locatorHash===e.locatorHash}function Ott(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!r1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!sse(r,o))return!1}return!0}function Js(t){let e=ose(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ose(t){let e=t.match(Utt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function nh(t,e=!1){let r=i1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function i1(t,e=!1){let r=e?t.match(_tt):t.match(Htt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=_S(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function _S(t,e=!1){let r=e?t.match(jtt):t.match(qtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Id(t,e){let r=t.match(Gtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?oE.default.parse(n):n,A=typeof r[4]<"u"?oE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Ytt(t,e){try{return Id(t,e)}catch{return null}}function Wtt(t,{protocol:e}){let{selector:r,params:o}=Id(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function tse(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Vtt(t){return t===null?!1:Object.entries(t).length>0}function HS({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${tse(e)}#`),a+=tse(r),Vtt(o)&&(a+=`::${oE.default.stringify(o)}`),a}function Ktt(t){let{params:e,protocol:r,source:o,selector:a}=Id(t);for(let n in e)n.startsWith("__")&&delete e[n];return HS({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function xa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function eO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function aE(t){let{protocol:e,selector:r}=Id(t.reference),o=e!==null?e.replace(Jtt,""):"exotic",a=rse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Ot(t,`@${e.scope}/`,yt.SCOPE)}${Ot(t,e.name,yt.NAME)}`:`${Ot(t,e.name,yt.NAME)}`}function jS(t){if(t.startsWith(ZI)){let e=jS(t.substring(t.indexOf("#")+1)),r=t.substring(ZI.length,ZI.length+ktt);return`${e} [${r}]`}else return t.replace(ztt,"?[...]")}function lE(t,e){return`${Ot(t,jS(e),yt.RANGE)}`}function qn(t,e){return`${cs(t,e)}${Ot(t,"@",yt.RANGE)}${lE(t,e.range)}`}function s1(t,e){return`${Ot(t,jS(e),yt.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${Ot(t,"@",yt.REFERENCE)}${s1(t,e.reference)}`}function QL(t){return`${fn(t)}@${jS(t.reference)}`}function cE(t){return ks(t,[e=>fn(e),e=>e.range])}function o1(t,e){return cs(t,e.anchoredLocator)}function XI(t,e,r){let o=Sf(e)?e1(e):e;return r===null?`${qn(t,o)} \u2192 ${kL(t).Cross}`:o.identHash===r.identHash?`${qn(t,o)} \u2192 ${s1(t,r.reference)}`:`${qn(t,o)} \u2192 ${jr(t,r)}`}function FL(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${lE(t,r.range)})`}function sO(t){return`node_modules/${fn(t)}`}function qS(t,e){return t.conditions?Qtt(t.conditions,r=>{let[,o,a]=r.match(ise),n=e[o];return n?n.includes(a):!0}):!0}var oE,rse,nse,ZI,ktt,ise,Qtt,US,Utt,_tt,Htt,jtt,qtt,Gtt,Jtt,ztt,xo=Et(()=>{oE=$e(Be("querystring")),rse=$e(zn()),nse=$e(rX());ql();rh();jl();xo();ZI="virtual:",ktt=5,ise=/(os|cpu|libc)=([a-z0-9_-]+)/,Qtt=(0,nse.makeParser)(ise);US=/^[^#]*#/;Utt=/^(?:@([^/]+?)\/)?([^@/]+)$/;_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Htt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;jtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,qtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Gtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Jtt=/:$/;ztt=/\?.*/});var ase,lse=Et(()=>{xo();ase={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=o1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var a1,Xn,Bd=Et(()=>{a1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(a1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(a1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(a1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=a1;Xn.protocol="workspace:"});var kr={};Kt(kr,{SemVer:()=>pse.SemVer,clean:()=>Ztt,getComparator:()=>Ase,mergeComparators:()=>oO,satisfiesWithPrereleases:()=>bf,simplifyRanges:()=>aO,stringifyComparator:()=>fse,validRange:()=>ba});function bf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=cse.get(o);if(typeof a>"u")try{a=new ih.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{cse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new ih.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function ba(t){if(t.indexOf(":")!==-1)return null;let e=use.get(t);if(typeof e<"u")return e;try{e=new ih.default.Range(t)}catch{e=null}return use.set(t,e),e}function Ztt(t){let e=Xtt.exec(t);return e?e[1]:null}function Ase(t){if(t.semver===ih.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function oO(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?ih.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?ih.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=ih.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function fse(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function aO(t){let e=t.map(o=>ba(o).set.map(a=>a.map(n=>Ase(n)))),r=e.shift().map(o=>oO(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=oO([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>fse(o)).join(" || ")}var ih,pse,cse,use,Xtt,kf=Et(()=>{ih=$e(zn()),pse=$e(zn()),cse=new Map;use=new Map;Xtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function hse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function gse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GS(t,{yamlCompatibilityMode:e}){return e?IL(t):typeof t>"u"||typeof t=="boolean"?t:null}function dse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function lO(t,e){return e.length===1?dse(t,e[0]):`(${e.map(r=>dse(t,r)).join(" | ")})`}var mse,uE,Mt,AE=Et(()=>{Pt();Nl();mse=$e(zn());Bd();jl();kf();xo();uE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Rn}={}){let o=K.join(e,"package.json");try{return await uE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await uE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Rn}={}){let o=new uE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new uE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(gse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=hse(e)}async loadFile(e,{baseFs:r=new Rn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(gse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=hse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!ba(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=nh(n),p=this.ensureDependencyMeta(A),h=GS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=nh(n),p=this.ensurePeerDependencyMeta(A),h=GS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(lO("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(lO("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(lO("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!mse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...cE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...cE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...cE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...cE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_D(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Mt=uE;Mt.fileName="package.json",Mt.allDependencies=["dependencies","devDependencies","peerDependencies"],Mt.hardDependencies=["dependencies","devDependencies"]});var Ese=_((_Nt,yse)=>{var $tt=_l(),ert=function(){return $tt.Date.now()};yse.exports=ert});var wse=_((HNt,Cse)=>{var trt=/\s/;function rrt(t){for(var e=t.length;e--&&trt.test(t.charAt(e)););return e}Cse.exports=rrt});var Bse=_((jNt,Ise)=>{var nrt=wse(),irt=/^\s+/;function srt(t){return t&&t.slice(0,nrt(t)+1).replace(irt,"")}Ise.exports=srt});var fE=_((qNt,vse)=>{var ort=pd(),art=Ju(),lrt="[object Symbol]";function crt(t){return typeof t=="symbol"||art(t)&&ort(t)==lrt}vse.exports=crt});var xse=_((GNt,Sse)=>{var urt=Bse(),Dse=il(),Art=fE(),Pse=0/0,frt=/^[-+]0x[0-9a-f]+$/i,prt=/^0b[01]+$/i,hrt=/^0o[0-7]+$/i,grt=parseInt;function drt(t){if(typeof t=="number")return t;if(Art(t))return Pse;if(Dse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Dse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=urt(t);var r=prt.test(t);return r||hrt.test(t)?grt(t.slice(2),r?2:8):frt.test(t)?Pse:+t}Sse.exports=drt});var Qse=_((YNt,kse)=>{var mrt=il(),cO=Ese(),bse=xse(),yrt="Expected a function",Ert=Math.max,Crt=Math.min;function wrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(yrt);e=bse(e)||0,mrt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?Ert(bse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function b(Ae){var ye=o,ae=a;return o=a=void 0,h=Ae,u=t.apply(ae,ye),u}function C(Ae){return h=Ae,A=setTimeout(U,e),E?b(Ae):u}function T(Ae){var ye=Ae-p,ae=Ae-h,we=e-ye;return I?Crt(we,n-ae):we}function L(Ae){var ye=Ae-p,ae=Ae-h;return p===void 0||ye>=e||ye<0||I&&ae>=n}function U(){var Ae=cO();if(L(Ae))return J(Ae);A=setTimeout(U,T(Ae))}function J(Ae){return A=void 0,v&&o?b(Ae):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:J(cO())}function pe(){var Ae=cO(),ye=L(Ae);if(o=arguments,a=this,p=Ae,ye){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return pe.cancel=te,pe.flush=le,pe}kse.exports=wrt});var uO=_((WNt,Fse)=>{var Irt=Qse(),Brt=il(),vrt="Expected a function";function Drt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(vrt);return Brt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Irt(t,e,{leading:o,maxWait:e,trailing:a})}Fse.exports=Drt});function Srt(t){return typeof t.reportCode<"u"}var Tse,Rse,Nse,Prt,zt,Xs,Yl=Et(()=>{Tse=$e(uO()),Rse=Be("stream"),Nse=Be("string_decoder"),Prt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Tse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Prt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Srt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Rse.PassThrough,o=new Nse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var pE,AO=Et(()=>{Yl();xo();pE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var vd,fO=Et(()=>{xo();vd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${qn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hE,pO=Et(()=>{Pt();xo();hE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return aE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:K});return{...r,packageFs:p}}}});var gE,l1,Lse=Et(()=>{gE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(gE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(gE.protocol)}supportsDescriptor(e,r){return gE.isVirtualDescriptor(e)}supportsLocator(e,r){return gE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},l1=gE;l1.protocol="virtual:"});var dE,hO=Et(()=>{Pt();Bd();dE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function c1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mse(t){return typeof t>"u"?3:c1(t)?0:Array.isArray(t)?1:2}function mO(t,e){return Object.hasOwn(t,e)}function brt(t){return c1(t)&&mO(t,"onConflict")&&typeof t.onConflict=="string"}function krt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!brt(t))return{onConflict:"default",value:t};if(mO(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Ose(t,e){let r=c1(t)&&mO(t,e)?t[e]:void 0;return krt(r)}function mE(t,e){return[t,e,Use]}function yO(t){return Array.isArray(t)?t[2]===Use:!1}function gO(t,e){if(c1(t)){let r={};for(let o of Object.keys(t))r[o]=gO(t[o],e);return mE(e,r)}return Array.isArray(t)?mE(e,t.map(r=>gO(r,e))):mE(e,t)}function dO(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:b,value:C}=Ose(v,r),T=Mse(C);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=A;break}if(T===2)return mE(I,C);if(u.unshift([I,C]),b==="reset"){p=E;break}b==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return mE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>gO(v,E)))));case 0:{let E=Object.assign({},...u.map(([,T])=>T)),I=Object.keys(E),v={},b=t.map(([T,L])=>[T,Ose(L,r).value]),C=xrt(b,([T,L])=>{let U=Mse(L);return U!==0&&U!==3});if(C!==-1){let T=b.slice(C+1);for(let L of I)v[L]=dO(T,e,L,0,T.length)}else for(let T of I)v[T]=dO(b,e,T,p,b.length);return mE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function _se(t){return dO(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function u1(t){return yO(t)?t[1]:t}function YS(t){let e=yO(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>YS(r));if(c1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=YS(a);return r}return e}function EO(t){return yO(t)?t[0]:null}var xrt,Use,Hse=Et(()=>{xrt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Use=Symbol()});var WS={};Kt(WS,{getDefaultGlobalFolder:()=>wO,getHomeFolder:()=>yE,isFolderInside:()=>IO});function wO(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,CO.homedir)(),"AppData","Local"));return K.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return K.resolve(t,"yarn/berry")}return K.resolve(yE(),".yarn/berry")}function yE(){return ue.toPortablePath((0,CO.homedir)()||"/usr/local/share")}function IO(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K.isAbsolute(r)}var CO,VS=Et(()=>{Pt();CO=Be("os")});var Yse=_(EE=>{"use strict";var sLt=Be("net"),Frt=Be("tls"),BO=Be("http"),jse=Be("https"),Trt=Be("events"),oLt=Be("assert"),Rrt=Be("util");EE.httpOverHttp=Nrt;EE.httpsOverHttp=Lrt;EE.httpOverHttps=Mrt;EE.httpsOverHttps=Ort;function Nrt(t){var e=new Qf(t);return e.request=BO.request,e}function Lrt(t){var e=new Qf(t);return e.request=BO.request,e.createSocket=qse,e.defaultPort=443,e}function Mrt(t){var e=new Qf(t);return e.request=jse.request,e}function Ort(t){var e=new Qf(t);return e.request=jse.request,e.createSocket=qse,e.defaultPort=443,e}function Qf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||BO.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=Gse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Qf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=vO({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),sh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,b){process.nextTick(function(){h(I,v,b)})}function h(I,v,b){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){sh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(b.length>0){sh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return sh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),sh(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Qf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function qse(t,e){var r=this;Qf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=vO({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Frt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function Gse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function vO(t){for(var e=1,r=arguments.length;e{Wse.exports=Yse()});var Tf=_((Ff,KS)=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});var Kse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Urt(t){return Kse.includes(t)}var _rt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Kse];function Hrt(t){return _rt.includes(t)}var jrt=["null","undefined","string","number","bigint","boolean","symbol"];function qrt(t){return jrt.includes(t)}function CE(t){return e=>typeof e===t}var{toString:Jse}=Object.prototype,A1=t=>{let e=Jse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&xe.domElement(t))return"HTMLElement";if(Hrt(e))return e},ei=t=>e=>A1(e)===t;function xe(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(xe.observable(t))return"Observable";if(xe.array(t))return"Array";if(xe.buffer(t))return"Buffer";let e=A1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}xe.undefined=CE("undefined");xe.string=CE("string");var Grt=CE("number");xe.number=t=>Grt(t)&&!xe.nan(t);xe.bigint=CE("bigint");xe.function_=CE("function");xe.null_=t=>t===null;xe.class_=t=>xe.function_(t)&&t.toString().startsWith("class ");xe.boolean=t=>t===!0||t===!1;xe.symbol=CE("symbol");xe.numericString=t=>xe.string(t)&&!xe.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));xe.array=(t,e)=>Array.isArray(t)?xe.function_(e)?t.every(e):!0:!1;xe.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};xe.nullOrUndefined=t=>xe.null_(t)||xe.undefined(t);xe.object=t=>!xe.null_(t)&&(typeof t=="object"||xe.function_(t));xe.iterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};xe.asyncIterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};xe.generator=t=>xe.iterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.asyncGenerator=t=>xe.asyncIterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.nativePromise=t=>ei("Promise")(t);var Yrt=t=>{var e,r;return xe.function_((e=t)===null||e===void 0?void 0:e.then)&&xe.function_((r=t)===null||r===void 0?void 0:r.catch)};xe.promise=t=>xe.nativePromise(t)||Yrt(t);xe.generatorFunction=ei("GeneratorFunction");xe.asyncGeneratorFunction=t=>A1(t)==="AsyncGeneratorFunction";xe.asyncFunction=t=>A1(t)==="AsyncFunction";xe.boundFunction=t=>xe.function_(t)&&!t.hasOwnProperty("prototype");xe.regExp=ei("RegExp");xe.date=ei("Date");xe.error=ei("Error");xe.map=t=>ei("Map")(t);xe.set=t=>ei("Set")(t);xe.weakMap=t=>ei("WeakMap")(t);xe.weakSet=t=>ei("WeakSet")(t);xe.int8Array=ei("Int8Array");xe.uint8Array=ei("Uint8Array");xe.uint8ClampedArray=ei("Uint8ClampedArray");xe.int16Array=ei("Int16Array");xe.uint16Array=ei("Uint16Array");xe.int32Array=ei("Int32Array");xe.uint32Array=ei("Uint32Array");xe.float32Array=ei("Float32Array");xe.float64Array=ei("Float64Array");xe.bigInt64Array=ei("BigInt64Array");xe.bigUint64Array=ei("BigUint64Array");xe.arrayBuffer=ei("ArrayBuffer");xe.sharedArrayBuffer=ei("SharedArrayBuffer");xe.dataView=ei("DataView");xe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;xe.urlInstance=t=>ei("URL")(t);xe.urlString=t=>{if(!xe.string(t))return!1;try{return new URL(t),!0}catch{return!1}};xe.truthy=t=>Boolean(t);xe.falsy=t=>!t;xe.nan=t=>Number.isNaN(t);xe.primitive=t=>xe.null_(t)||qrt(typeof t);xe.integer=t=>Number.isInteger(t);xe.safeInteger=t=>Number.isSafeInteger(t);xe.plainObject=t=>{if(Jse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};xe.typedArray=t=>Urt(A1(t));var Wrt=t=>xe.safeInteger(t)&&t>=0;xe.arrayLike=t=>!xe.nullOrUndefined(t)&&!xe.function_(t)&&Wrt(t.length);xe.inRange=(t,e)=>{if(xe.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(xe.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Vrt=1,Krt=["innerHTML","ownerDocument","style","attributes","nodeValue"];xe.domElement=t=>xe.object(t)&&t.nodeType===Vrt&&xe.string(t.nodeName)&&!xe.plainObject(t)&&Krt.every(e=>e in t);xe.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};xe.nodeStream=t=>xe.object(t)&&xe.function_(t.pipe)&&!xe.observable(t);xe.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>xe.integer(e)&&Math.abs(e%2)===t;xe.evenInteger=zse(0);xe.oddInteger=zse(1);xe.emptyArray=t=>xe.array(t)&&t.length===0;xe.nonEmptyArray=t=>xe.array(t)&&t.length>0;xe.emptyString=t=>xe.string(t)&&t.length===0;xe.nonEmptyString=t=>xe.string(t)&&t.length>0;var Jrt=t=>xe.string(t)&&!/\S/.test(t);xe.emptyStringOrWhitespace=t=>xe.emptyString(t)||Jrt(t);xe.emptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length===0;xe.nonEmptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length>0;xe.emptySet=t=>xe.set(t)&&t.size===0;xe.nonEmptySet=t=>xe.set(t)&&t.size>0;xe.emptyMap=t=>xe.map(t)&&t.size===0;xe.nonEmptyMap=t=>xe.map(t)&&t.size>0;xe.propertyKey=t=>xe.any([xe.string,xe.number,xe.symbol],t);xe.formData=t=>ei("FormData")(t);xe.urlSearchParams=t=>ei("URLSearchParams")(t);var Xse=(t,e,r)=>{if(!xe.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};xe.any=(t,...e)=>(xe.array(t)?t:[t]).some(o=>Xse(Array.prototype.some,o,e));xe.all=(t,...e)=>Xse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${xe(u)}\``))].join(", ")}`:`received value of type \`${xe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Ff.assert={undefined:t=>Ht(xe.undefined(t),"undefined",t),string:t=>Ht(xe.string(t),"string",t),number:t=>Ht(xe.number(t),"number",t),bigint:t=>Ht(xe.bigint(t),"bigint",t),function_:t=>Ht(xe.function_(t),"Function",t),null_:t=>Ht(xe.null_(t),"null",t),class_:t=>Ht(xe.class_(t),"Class",t),boolean:t=>Ht(xe.boolean(t),"boolean",t),symbol:t=>Ht(xe.symbol(t),"symbol",t),numericString:t=>Ht(xe.numericString(t),"string with a number",t),array:(t,e)=>{Ht(xe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(xe.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(xe.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(xe.object(t),"Object",t),iterable:t=>Ht(xe.iterable(t),"Iterable",t),asyncIterable:t=>Ht(xe.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(xe.generator(t),"Generator",t),asyncGenerator:t=>Ht(xe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(xe.nativePromise(t),"native Promise",t),promise:t=>Ht(xe.promise(t),"Promise",t),generatorFunction:t=>Ht(xe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(xe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(xe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(xe.boundFunction(t),"Function",t),regExp:t=>Ht(xe.regExp(t),"RegExp",t),date:t=>Ht(xe.date(t),"Date",t),error:t=>Ht(xe.error(t),"Error",t),map:t=>Ht(xe.map(t),"Map",t),set:t=>Ht(xe.set(t),"Set",t),weakMap:t=>Ht(xe.weakMap(t),"WeakMap",t),weakSet:t=>Ht(xe.weakSet(t),"WeakSet",t),int8Array:t=>Ht(xe.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(xe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(xe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(xe.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(xe.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(xe.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(xe.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(xe.float32Array(t),"Float32Array",t),float64Array:t=>Ht(xe.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(xe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(xe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(xe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(xe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(xe.dataView(t),"DataView",t),urlInstance:t=>Ht(xe.urlInstance(t),"URL",t),urlString:t=>Ht(xe.urlString(t),"string with a URL",t),truthy:t=>Ht(xe.truthy(t),"truthy",t),falsy:t=>Ht(xe.falsy(t),"falsy",t),nan:t=>Ht(xe.nan(t),"NaN",t),primitive:t=>Ht(xe.primitive(t),"primitive",t),integer:t=>Ht(xe.integer(t),"integer",t),safeInteger:t=>Ht(xe.safeInteger(t),"integer",t),plainObject:t=>Ht(xe.plainObject(t),"plain object",t),typedArray:t=>Ht(xe.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(xe.arrayLike(t),"array-like",t),domElement:t=>Ht(xe.domElement(t),"HTMLElement",t),observable:t=>Ht(xe.observable(t),"Observable",t),nodeStream:t=>Ht(xe.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(xe.infinite(t),"infinite number",t),emptyArray:t=>Ht(xe.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(xe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(xe.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(xe.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(xe.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(xe.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(xe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(xe.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(xe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(xe.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(xe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(xe.propertyKey(t),"PropertyKey",t),formData:t=>Ht(xe.formData(t),"FormData",t),urlSearchParams:t=>Ht(xe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(xe.evenInteger(t),"even integer",t),oddInteger:t=>Ht(xe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(xe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(xe.inRange(t,e),"in range",t),any:(t,...e)=>Ht(xe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(xe.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(xe,{class:{value:xe.class_},function:{value:xe.function_},null:{value:xe.null_}});Object.defineProperties(Ff.assert,{class:{value:Ff.assert.class_},function:{value:Ff.assert.function_},null:{value:Ff.assert.null_}});Ff.default=xe;KS.exports=xe;KS.exports.default=xe;KS.exports.assert=Ff.assert});var Zse=_((cLt,DO)=>{"use strict";var JS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},wE=class{static fn(e){return(...r)=>new wE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new JS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(wE.prototype,Promise.prototype);DO.exports=wE;DO.exports.CancelError=JS});var $se=_((SO,xO)=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var zrt=Be("tls"),PO=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof zrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};SO.default=PO;xO.exports=PO;xO.exports.default=PO});var eoe=_((kO,QO)=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var Xrt=$se(),Zrt=Number(process.versions.node.split(".")[0]),bO=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Zrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Xrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};kO.default=bO;QO.exports=bO;QO.exports.default=bO});var aoe=_((uLt,RO)=>{"use strict";var{V4MAPPED:$rt,ADDRCONFIG:ent,ALL:ooe,promises:{Resolver:toe},lookup:tnt}=Be("dns"),{promisify:FO}=Be("util"),rnt=Be("os"),IE=Symbol("cacheableLookupCreateConnection"),TO=Symbol("cacheableLookupInstance"),roe=Symbol("expires"),nnt=typeof ooe=="number",noe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},int=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},ioe=()=>{let t=!1,e=!1;for(let r of Object.values(rnt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},snt=t=>Symbol.iterator in t,soe={ttl:!0},ont={all:!0},zS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new toe,lookup:u=tnt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=FO(u),this._resolver instanceof toe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=FO(this._resolver.resolve4.bind(this._resolver)),this._resolve6=FO(this._resolver.resolve6.bind(this._resolver))),this._iface=ioe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&$rt&&(nnt&&r.hints&ooe||a.length===0)?int(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&ent){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,soe),this._resolve6(e,soe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[roe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}snt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,ont);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[roe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[IE](r,o))}uninstall(e){if(noe(e),e[IE]){if(e[TO]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[IE],delete e[IE],delete e[TO]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=ioe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};RO.exports=zS;RO.exports.default=zS});var uoe=_((ALt,NO)=>{"use strict";var ant=typeof URL>"u"?Be("url").URL:URL,lnt="text/plain",cnt="us-ascii",loe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),unt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(b=>b.trim());return I==="charset"&&(v=v.toLowerCase(),v===cnt)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==lnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},coe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return unt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new ant(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];loe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])loe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};NO.exports=coe;NO.exports.default=coe});var poe=_((fLt,foe)=>{foe.exports=Aoe;function Aoe(t,e){if(t&&e)return Aoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var hoe=poe();LO.exports=hoe(XS);LO.exports.strict=hoe(goe);XS.proto=XS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return XS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return goe(this)},configurable:!0})});function XS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function goe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var OO=_((hLt,moe)=>{var Ant=MO(),fnt=function(){},pnt=function(t){return t.setHeader&&typeof t.abort=="function"},hnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},doe=function(t,e,r){if(typeof e=="function")return doe(t,null,e);e||(e={}),r=Ant(r||fnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return pnt(t)?(t.on("complete",p),t.on("abort",v),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),hnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};moe.exports=doe});var Coe=_((gLt,Eoe)=>{var gnt=MO(),dnt=OO(),UO=Be("fs"),f1=function(){},mnt=/^v?\.0/.test(process.version),ZS=function(t){return typeof t=="function"},ynt=function(t){return!mnt||!UO?!1:(t instanceof(UO.ReadStream||f1)||t instanceof(UO.WriteStream||f1))&&ZS(t.close)},Ent=function(t){return t.setHeader&&ZS(t.abort)},Cnt=function(t,e,r,o){o=gnt(o);var a=!1;t.on("close",function(){a=!0}),dnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,ynt(t))return t.close(f1);if(Ent(t))return t.abort();if(ZS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},yoe=function(t){t()},wnt=function(t,e){return t.pipe(e)},Int=function(){var t=Array.prototype.slice.call(arguments),e=ZS(t[t.length-1]||f1)&&t.pop()||f1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return Cnt(a,u,A,function(p){r||(r=p),p&&o.forEach(yoe),!u&&(o.forEach(yoe),e(r))})});return t.reduce(wnt)};Eoe.exports=Int});var Ioe=_((dLt,woe)=>{"use strict";var{PassThrough:Bnt}=Be("stream");woe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Bnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var Boe=_((mLt,BE)=>{"use strict";var vnt=Coe(),Dnt=Ioe(),$S=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function ex(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=vnt(t,Dnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new $S)})}),o.getBufferedValue()}BE.exports=ex;BE.exports.default=ex;BE.exports.buffer=(t,e)=>ex(t,{...e,encoding:"buffer"});BE.exports.array=(t,e)=>ex(t,{...e,array:!0});BE.exports.MaxBufferError=$S});var Doe=_((ELt,voe)=>{"use strict";var Pnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Snt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),xnt=new Set([500,502,503,504]),bnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},knt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Qnt(t){return t?xnt.has(t.status):!0}function _O(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Fnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}voe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=_O(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=_O(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Fnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Snt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||Pnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=_O(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)bnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Qnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!knt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var tx=_((CLt,Poe)=>{"use strict";Poe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var xoe=_((wLt,Soe)=>{"use strict";var Tnt=Be("stream").Readable,Rnt=tx(),HO=class extends Tnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Rnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Soe.exports=HO});var koe=_((ILt,boe)=>{"use strict";var Nnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];boe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Nnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var Foe=_((BLt,Qoe)=>{"use strict";var Lnt=Be("stream").PassThrough,Mnt=koe(),Ont=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Lnt;return Mnt(t,e),t.pipe(e)};Qoe.exports=Ont});var Toe=_(jO=>{jO.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};jO.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Loe=_((DLt,Noe)=>{"use strict";var Unt=Be("events"),Roe=Toe(),_nt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(Be(e[r]))(t)}return new Map},qO=class extends Unt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=_nt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Noe.exports=qO});var Uoe=_((SLt,Ooe)=>{"use strict";var Hnt=Be("events"),rx=Be("url"),jnt=uoe(),qnt=Boe(),GO=Doe(),Moe=xoe(),Gnt=tx(),Ynt=Foe(),Wnt=Loe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Wnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=YO(rx.parse(r)),r={};else if(r instanceof rx.URL)a=YO(rx.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),b=v.length>0?`?${v.join("?")}`:"";a=YO({...r,pathname:I,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Vnt(a)},r.headers=Gnt(r.headers);let n=new Hnt,u=jnt(rx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,b,C=new Promise(L=>{b=()=>{v||(v=!0,L())}}),T=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=GO.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Moe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new GO(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=Ynt(L),(async()=>{try{let J=qnt.buffer(L);if(await Promise.race([C,new Promise(Ae=>L.once("end",Ae))]),v)return;let te=await J,le={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},pe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(pe=pe?Math.min(pe,I.maxTtl):I.maxTtl),await this.cache.set(A,le,pe)}catch(J){n.emit("error",new jc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new jc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,T);L.once("error",b),L.once("abort",b),n.emit("request",L)}catch(L){n.emit("error",new jc.RequestError(L))}};return(async()=>{let I=async b=>{await Promise.resolve();let C=b.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(b);let T=GO.fromObject(C.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let L=T.responseHeaders(),U=new Moe(C.statusCode,L,C.body,C.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,b.headers=T.revalidationHeaders(b),E(b)},v=b=>n.emit("error",new jc.CacheError(b));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new jc.CacheError(b))}})(),n}}};function Vnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function YO(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=jc});var Hoe=_((kLt,_oe)=>{"use strict";var Knt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];_oe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Knt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((QLt,joe)=>{"use strict";var{Transform:Jnt,PassThrough:znt}=Be("stream"),WO=Be("zlib"),Xnt=Hoe();joe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof WO.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Jnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new znt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?WO.createBrotliDecompress():WO.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Xnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var KO=_((FLt,Goe)=>{"use strict";var VO=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=VO});var zO=_((TLt,Koe)=>{"use strict";var Znt=Be("events"),$nt=Be("tls"),eit=Be("http2"),tit=KO(),ea=Symbol("currentStreamsCount"),Yoe=Symbol("request"),Wl=Symbol("cachedOriginSet"),vE=Symbol("gracefullyClosing"),rit=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],nit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},iit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,JO=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Voe(r)},sit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Voe(e)},Woe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[vE]=!0,t[ea]===0&&t.close()},tA=class extends Znt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new tit({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of rit)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,b;for(let C of E){let T=C.remoteSettings.maxConcurrentStreams;if(T=T||C[vE]||C.destroyed)continue;b||(I=T),L>v&&(b=C,v=L)}}if(b){if(o.length!==1){for(let{reject:C}of o){let T=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=eit.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[vE]=!1;let b=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let T=()=>{if(!(!(u in this.queue)||!b())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&b();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!b())break}}};v.on("origin",()=>{v[Wl]=v.originSet,b()&&(T(),JO(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(nit(U,v,iit),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),T(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{T(),JO(this.sessions[u],v)})}),v[Yoe]=v.request,v.request=(L,U)=>{if(v[vE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[Yoe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=b(),--v[ea],!v.destroyed&&!v.closed&&(sit(this.sessions[u],v),b()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[vE])?v.close():(JO(this.sessions[u],v),T())}}),J}}catch(v){for(let b of o)b.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),$nt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Woe({agent:this,isFree:!0})}get busySessions(){return Woe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=vE;Koe.exports={Agent:tA,globalAgent:new tA}});var ZO=_((RLt,Joe)=>{"use strict";var{Readable:oit}=Be("stream"),XO=class extends oit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Joe.exports=XO});var $O=_((NLt,zoe)=>{"use strict";zoe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var eae=_((MLt,$oe)=>{"use strict";$oe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var rae=_((ULt,tae)=>{"use strict";var DE=(t,e,r)=>{tae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};DE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});DE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);DE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);DE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);DE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);DE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var i4=_((_Lt,cae)=>{"use strict";var ait=Be("http2"),{Writable:lit}=Be("stream"),{Agent:nae,globalAgent:cit}=zO(),uit=ZO(),Ait=$O(),fit=Zoe(),pit=eae(),{ERR_INVALID_ARG_TYPE:e4,ERR_INVALID_PROTOCOL:hit,ERR_HTTP_HEADERS_SENT:iae,ERR_INVALID_HTTP_TOKEN:git,ERR_HTTP_INVALID_HEADER_VALUE:dit,ERR_INVALID_CHAR:mit}=rae(),{HTTP2_HEADER_STATUS:sae,HTTP2_HEADER_METHOD:oae,HTTP2_HEADER_PATH:aae,HTTP2_METHOD_CONNECT:yit}=ait.constants,Qo=Symbol("headers"),t4=Symbol("origin"),r4=Symbol("session"),lae=Symbol("options"),nx=Symbol("flushedHeaders"),p1=Symbol("jobs"),Eit=/^[\^`\-\w!#$%&*+.|~]+$/,Cit=/[^\t\u0020-\u007E\u0080-\u00FF]/,n4=class extends lit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=Ait(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[r4]=r.h2session;else if(r.agent===!1)this.agent=new nae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new nae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=cit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new e4("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new hit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[p1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[lae]=r,n===443?(this[t4]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[t4]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[nx]=!1}get method(){return this[Qo][oae]}set method(e){e&&(this[Qo][oae]=e.toUpperCase())}get path(){return this[Qo][aae]}set path(e){e&&(this[Qo][aae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[p1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[p1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[nx]||this.destroyed)return;this[nx]=!0;let e=this.method===yit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||fit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new uit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[sae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[sae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[p1])u();this.emit("socket",this.socket)};if(this[r4])try{r(this[r4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[t4],this[lae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new e4("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[nx]}removeHeader(e){if(typeof e!="string")throw new e4("name","string",e);if(this.headersSent)throw new iae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new iae("set");if(typeof e!="string"||!Eit.test(e)&&!pit(e))throw new git("Header name",e);if(typeof r>"u")throw new dit(r,e);if(Cit.test(r))throw new mit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[p1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};cae.exports=n4});var Aae=_((HLt,uae)=>{"use strict";var wit=Be("tls");uae.exports=(t={})=>new Promise((e,r)=>{let o=wit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var pae=_((jLt,fae)=>{"use strict";var Iit=Be("net");fae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Iit.isIP(e)?"":e}});var dae=_((qLt,o4)=>{"use strict";var hae=Be("http"),s4=Be("https"),Bit=Aae(),vit=KO(),Dit=i4(),Pit=pae(),Sit=$O(),ix=new vit({maxSize:100}),h1=new Map,gae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},xit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!ix.has(e)){if(h1.has(e))return(await h1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Bit(t);h1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(ix.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=s4,p=s4.Agent.prototype.createConnection;o?o.createConnection===p?gae(o,n,t):n.destroy():A.createConnection===p?gae(A,n,t):n.destroy()}return h1.delete(e),u}catch(n){throw h1.delete(e),n}}return ix.get(e)};o4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Sit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Pit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?s4.globalAgent:hae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await xit(e)==="h2"?(a&&(e.agent=a.http2),new Dit(e,r)):hae.request(e,r)};o4.exports.protocolCache=ix});var yae=_((GLt,mae)=>{"use strict";var bit=Be("http2"),kit=zO(),a4=i4(),Qit=ZO(),Fit=dae(),Tit=(t,e,r)=>new a4(t,e,r),Rit=(t,e,r)=>{let o=new a4(t,e,r);return o.end(),o};mae.exports={...bit,ClientRequest:a4,IncomingMessage:Qit,...kit,request:Tit,get:Rit,auto:Fit}});var c4=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=Tf();l4.default=t=>Eae.default.nodeStream(t)&&Eae.default.function_(t.getBoundary)});var Bae=_(u4=>{"use strict";Object.defineProperty(u4,"__esModule",{value:!0});var wae=Be("fs"),Iae=Be("util"),Cae=Tf(),Nit=c4(),Lit=Iae.promisify(wae.stat);u4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Cae.default.string(t))return Buffer.byteLength(t);if(Cae.default.buffer(t))return t.length;if(Nit.default(t))return Iae.promisify(t.getLength.bind(t))();if(t instanceof wae.ReadStream){let{size:r}=await Lit(t.path);return r===0?void 0:r}}});var f4=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});function Mit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}A4.default=Mit});var vae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});p4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Pae=_(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.TimeoutError=void 0;var Oit=Be("net"),Uit=vae(),Dae=Symbol("reentry"),_it=()=>{},sx=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};g1.TimeoutError=sx;g1.default=(t,e,r)=>{if(Dae in t)return _it;t[Dae]=!0;let o=[],{once:a,unhandleAll:n}=Uit.default(),u=(I,v,b)=>{var C;let T=setTimeout(v,I,I,b);(C=T.unref)===null||C===void 0||C.call(T);let L=()=>{clearTimeout(T)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new sx(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:b}=t;if(I.connecting){let C=Boolean(b??Oit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let T=u(e.lookup,h,"lookup");a(I,"lookup",T)}if(typeof e.connect<"u"){let T=()=>u(e.connect,h,"connect");C?a(I,"connect",T()):a(I,"lookup",L=>{L===null&&a(I,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let T=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",T)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var xae=_(h4=>{"use strict";Object.defineProperty(h4,"__esModule",{value:!0});var Sae=Tf();h4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Sae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Sae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var Hit=Be("url"),jit=["protocol","host","hostname","port","pathname","search"];g4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Hit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of jit)e[n]&&(a[n]=e[n].toString());return a}});var kae=_(m4=>{"use strict";Object.defineProperty(m4,"__esModule",{value:!0});var d4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};m4.default=d4});var E4=_(y4=>{"use strict";Object.defineProperty(y4,"__esModule",{value:!0});var qit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};y4.default=qit});var Fae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var Qae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in Qae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return Qae[t];throw new Error("Invalid DNS lookup IP version")}});var C4=_(ox=>{"use strict";Object.defineProperty(ox,"__esModule",{value:!0});ox.isResponseOk=void 0;ox.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(w4=>{"use strict";Object.defineProperty(w4,"__esModule",{value:!0});var Tae=new Set;w4.default=t=>{Tae.has(t)||(Tae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Nae=_(I4=>{"use strict";Object.defineProperty(I4,"__esModule",{value:!0});var Ai=Tf(),Git=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};I4.default=Git});var Lae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.retryAfterStatusCodes=void 0;d1.retryAfterStatusCodes=new Set([413,429,503]);var Yit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};d1.default=Yit});var E1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Mae=Be("util"),Oae=Be("stream"),Wit=Be("fs"),oh=Be("url"),Uae=Be("http"),B4=Be("http"),Vit=Be("https"),Kit=eoe(),Jit=aoe(),_ae=Uoe(),zit=qoe(),Xit=yae(),Zit=tx(),st=Tf(),$it=Bae(),Hae=c4(),est=f4(),jae=Pae(),tst=xae(),qae=bae(),rst=kae(),nst=E4(),Gae=Fae(),ist=C4(),ah=Rae(),sst=Nae(),ost=Lae(),v4,Zs=Symbol("request"),cx=Symbol("response"),PE=Symbol("responseSize"),SE=Symbol("downloadedSize"),xE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ax=Symbol("serverResponsesPiped"),Yae=Symbol("unproxyEvents"),Wae=Symbol("isFromCache"),D4=Symbol("cancelTimeouts"),Vae=Symbol("startedReading"),kE=Symbol("stopReading"),lx=Symbol("triggerRead"),lh=Symbol("body"),m1=Symbol("jobs"),Kae=Symbol("originalResponse"),Jae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var ast=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function lst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function cst(t){return st.default.object(t)&&!("statusCode"in t)}var P4=new rst.default,ust=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),Ast=new Set([300,301,302,303,304,307,308]),fst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of fst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Ki=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof dx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[cx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` +`)}${A.reverse().join(` +`)}`}}};Bn.RequestError=Ki;var ux=class extends Ki{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ux;var Ax=class extends Ki{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ax;var fx=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fx;var px=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=px;var hx=class extends Ki{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hx;var y1=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=y1;var gx=class extends Ki{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gx;var pst=["socket","connect","continue","information","upgrade","timeout"],dx=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[SE]=0,this[bE]=0,this.requestInitialized=!1,this[ax]=new Set,this.redirects=[],this[kE]=!1,this[lx]=!1,this[m1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof B4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Wit.ReadStream&&await ust(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[m1])I();this[m1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Ki){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new oh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Zit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let b;if(st.default.string(r.searchParams)||r.searchParams instanceof oh.URLSearchParams)b=new oh.URLSearchParams(r.searchParams);else{lst(r.searchParams),b=new oh.URLSearchParams;for(let C in r.searchParams){let T=r.searchParams[C];T===null?b.append(C,""):T!==void 0&&b.append(C,T)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,T)=>{b.has(T)||b.append(T,C)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:T=>{let L=r.url;if(!L.href.startsWith(T))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${T}: ${L.href}`);r.url=new oh.URL(T+L.href.slice(b.length)),b=T},get:()=>b});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new oh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gx(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:b,getCookieString:C}=E;st.assert.function_(b),st.assert.function_(C),b.length===4&&C.length===0&&(b=Mae.promisify(b.bind(r.cookieJar)),C=Mae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:C})}let{cache:I}=r;if(I&&(P4.has(I)||P4.set(I,new _ae((b,C)=>{let T=b[Zs](b,C);return st.default.promise(T)&&(T.once=(L,U)=>{if(L==="error")T.catch(U);else if(L==="abort")(async()=>{try{(await T).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return T}),T},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)v4||(v4=new Jit.default),r.dnsCache=v4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Bn.knownHookEvents)if(b in r.hooks)if(st.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${st.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!v)for(let b of Bn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ah.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),sst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Hae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Hae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[lh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[lh]=new oh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[lh]=e.stringifyJson(e.json));let h=await $it.default(this[lh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=zit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Uae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Wae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[cx]=e,e.once("end",()=>{this[PE]=this[SE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new y1(A,this))}),e.once("aborted",()=>{this._beforeError(new y1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&Ast.has(a)){if(e.resume(),this[Zs]&&(this[D4](),delete this[Zs],this[Yae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[lh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ux(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new oh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!ist.isResponseOk(n)){this._beforeError(new Ax(n));return}e.on("readable",()=>{this[lx]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ax])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Kit.default(e),this[D4]=jae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof jae.TimeoutError?new hx(p,this.timings,this):new Ki(p.message,p,this),this._beforeError(p)}),this[Yae]=est.default(e,this,pst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[lh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new px(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,tst.default(e)),delete r.url;let n,u=P4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=ast?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[lh]!==u.body&&(this[lh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",b;u.http2?b=Xit.auto:b=v?Vit.request:Uae.request;let C=(e=u.request)!==null&&e!==void 0?e:b,T=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await T(I,L);st.default.undefined(U)&&(U=b(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),cst(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof _ae.CacheError?new fx(U,this):new Ki(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Ki(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[kE])return;let{options:r}=this,o=this.retryCount+1;this[kE]=!0,e instanceof Ki||(e=new Ki(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await nst.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:ost.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Ki(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Ki(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Jae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[lx]=!0;let e=this[cx];if(e&&!this[kE]){e.readableLength&&(this[lx]=!1);let r;for(;(r=e.read())!==null;){this[SE]+=r.length,this[Vae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[m1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[m1].push(r)}_destroy(e,r){var o;this[kE]=!0,clearTimeout(this[Jae]),Zs in this&&(this[D4](),!((o=this[cx])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Ki)&&(e=new Ki(e.message,e,this)),r(e)}get _isAboutToError(){return this[kE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[SE]/this[PE]:this[PE]===this[SE]?e=1:e=0,{percent:e,transferred:this[SE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[bE]/this[xE]:this[xE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Wae]}pipe(e,r){if(this[Vae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof B4.ServerResponse&&this[ax].add(e),super.pipe(e,r)}unpipe(e){return e instanceof B4.ServerResponse&&this[ax].delete(e),super.unpipe(e),this}};Bn.default=dx});var C1=_(qc=>{"use strict";var hst=qc&&qc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),gst=qc&&qc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hst(e,t,r)};Object.defineProperty(qc,"__esModule",{value:!0});qc.CancelError=qc.ParseError=void 0;var zae=E1(),S4=class extends zae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};qc.ParseError=S4;var x4=class extends zae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qc.CancelError=x4;gst(E1(),qc)});var Zae=_(b4=>{"use strict";Object.defineProperty(b4,"__esModule",{value:!0});var Xae=C1(),dst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Xae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Xae.ParseError(n,t)}};b4.default=dst});var k4=_(ch=>{"use strict";var mst=ch&&ch.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),yst=ch&&ch.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&mst(e,t,r)};Object.defineProperty(ch,"__esModule",{value:!0});var Est=Be("events"),Cst=Tf(),wst=Zse(),mx=C1(),$ae=Zae(),ele=E1(),Ist=f4(),Bst=E4(),tle=C4(),vst=["request","response","redirect","uploadProgress","downloadProgress"];function rle(t){let e,r,o=new Est.EventEmitter,a=new wst((u,A,p)=>{let h=E=>{let I=new ele.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mx.CancelError(I))),e=I,I.once("response",async C=>{var T;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await Bst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((T=C.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=$ae.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=L.toString(),tle.isResponseOk(C)){I._beforeError(le);return}}try{for(let[le,pe]of te.hooks.afterResponse.entries())C=await pe(C,async Ae=>{let ye=ele.default.normalizeArguments(void 0,{...Ae,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);ye.hooks.afterResponse=ye.hooks.afterResponse.slice(0,le);for(let we of ye.hooks.beforeRetry)await we(ye);let ae=rle(ye);return p(()=>{ae.catch(()=>{}),ae.cancel()}),ae})}catch(le){I._beforeError(new mx.RequestError(le.message,le,I));return}if(!tle.isResponseOk(C)){I._beforeError(new mx.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:T}=I;if(C instanceof mx.HTTPError&&!T.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let b=I.options.body;I.once("retry",(C,T)=>{var L,U;if(b===((L=T.request)===null||L===void 0?void 0:L.options.body)&&Cst.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){v(T);return}h(C)}),Ist.default(I,o,vst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return $ae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ch.default=rle;yst(C1(),ch)});var nle=_(Q4=>{"use strict";Object.defineProperty(Q4,"__esModule",{value:!0});var Dst=C1();function Pst(t,...e){let r=(async()=>{if(t instanceof Dst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}Q4.default=Pst});var ole=_(F4=>{"use strict";Object.defineProperty(F4,"__esModule",{value:!0});var ile=Tf();function sle(t){for(let e of Object.values(t))(ile.default.plainObject(e)||ile.default.array(e))&&sle(e);return Object.freeze(t)}F4.default=sle});var lle=_(ale=>{"use strict";Object.defineProperty(ale,"__esModule",{value:!0})});var T4=_(Kl=>{"use strict";var Sst=Kl&&Kl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),xst=Kl&&Kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Sst(e,t,r)};Object.defineProperty(Kl,"__esModule",{value:!0});Kl.defaultHandler=void 0;var cle=Tf(),Vl=k4(),bst=nle(),Ex=E1(),kst=ole(),Qst={RequestError:Vl.RequestError,CacheError:Vl.CacheError,ReadError:Vl.ReadError,HTTPError:Vl.HTTPError,MaxRedirectsError:Vl.MaxRedirectsError,TimeoutError:Vl.TimeoutError,ParseError:Vl.ParseError,CancelError:Vl.CancelError,UnsupportedProtocolError:Vl.UnsupportedProtocolError,UploadError:Vl.UploadError},Fst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yx}=Ex.default,ule=(...t)=>{let e;for(let r of t)e=yx(void 0,r,e);return e},Tst=t=>t.isStream?new Ex.default(void 0,t):Vl.default(t),Rst=t=>"defaults"in t&&"options"in t.defaults,Nst=["get","post","put","patch","head","delete"];Kl.defaultHandler=(t,e)=>e(t);var Ale=(t,e)=>{if(t)for(let r of t)r(e)},fle=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?Tst:h);if(cle.default.plainObject(o)){let E={...o,...a};Ex.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{Ale(t.options.hooks.init,a),Ale((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yx(o,a,n??t.options);if(I[Ex.kIsNormalizedAlready]=!0,E)throw new Vl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return bst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Rst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Kl.defaultHandler),n.length===0&&n.push(Kl.defaultHandler),fle({options:ule(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!cle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Nst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Qst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:kst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=ule,e};Kl.default=fle;xst(lle(),Kl)});var gle=_((Rf,Cx)=>{"use strict";var Lst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ple=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Mst=Be("url"),hle=T4(),Ost={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Mst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[hle.defaultHandler],mutableDefaults:!1},R4=hle.default(Ost);Rf.default=R4;Cx.exports=R4;Cx.exports.default=R4;Cx.exports.__esModule=!0;ple(T4(),Rf);ple(k4(),Rf)});var rn={};Kt(rn,{Method:()=>Ile,del:()=>qst,get:()=>O4,getNetworkSettings:()=>wle,post:()=>U4,put:()=>jst,request:()=>w1});function yle(t){let e=new wx.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function N4(t){return ol(mle,t,()=>oe.readFilePromise(t).then(e=>(mle.set(t,e),e)))}function Hst({statusCode:t,statusMessage:e},r){let o=Ot(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Xy(r,`${o}${e?` (${e})`:""}`,a)}async function Ix(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ot(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Hst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,bL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Ot(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ot(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function wle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new wx.URL(t):t;for(let[u,A]of r)if(M4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function w1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Gst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function O4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>Ix(w1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(dle,t,()=>u().then(p=>(dle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function jst(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function U4(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function qst(t,{customErrorMessage:e,...r}){return(await Ix(w1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Gst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new wx.URL(t):t,p=wle(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!M4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?L4.default.httpOverHttp(yle(p.httpProxy)):Ust,https:p.httpsProxy?L4.default.httpsOverHttp(yle(p.httpsProxy)):_st},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),b=r.get("enableStrictSsl"),C=p.httpsCaFilePath,T=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(gle())),J=C?await N4(C):void 0,te=T?await N4(T):void 0,le=L?await N4(L):void 0,pe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:b,certificateAuthority:J,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>pe(A))}var Ele,Cle,M4,L4,wx,dle,mle,Ust,_st,Ile,Bx=Et(()=>{Pt();Ele=Be("https"),Cle=Be("http"),M4=$e(Zo()),L4=$e(Vse()),wx=Be("url");Yl();ql();jl();dle=new Map,mle=new Map,Ust=new Cle.Agent({keepAlive:!0}),_st=new Ele.Agent({keepAlive:!0});Ile=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Ile||{})});var Ji={};Kt(Ji,{availableParallelism:()=>H4,getArchitecture:()=>I1,getArchitectureName:()=>Jst,getArchitectureSet:()=>_4,getCaller:()=>$st,major:()=>Yst,openUrl:()=>Wst});function Kst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(Vst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return WI(r,a=>{let n=a.match(o);if(!n)return WI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function I1(){return vle=vle??{os:process.platform,cpu:process.arch,libc:Kst()}}function Jst(t=I1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function _4(){let t=I1();return Dle=Dle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Zst(t){let e=zst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Xst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function $st(){let e=new Error().stack.split(` +`)[3];return Zst(e)}function H4(){return typeof vx.default.availableParallelism<"u"?vx.default.availableParallelism():Math.max(1,vx.default.cpus().length)}var vx,Yst,Ble,Wst,Vst,vle,Dle,zst,Xst,Dx=Et(()=>{Pt();vx=$e(Be("os"));Px();jl();Yst=Number(process.versions.node.split(".")[0]),Ble=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Wst=typeof Ble<"u"?async t=>{try{return await j4(Ble,[t],{cwd:K.cwd()}),!0}catch{return!1}}:void 0,Vst="/usr/bin/ldd";zst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Xst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function V4(t,e,r,o,a){let n=u1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>q4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>q4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return q4(t,e,r,o,a)}function q4(t,e,r,o,a){let n=u1(r);switch(o.type){case"ANY":return YS(n);case"SHAPE":return not(t,e,r,o,a);case"MAP":return iot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=EO(r);return E&&E[0]!=="<"&&(h=K.dirname(E)),K.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function not(t,e,r,o,a){let n=u1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=K4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,V4(t,h,p,o.properties[A],a))}return u}function iot(t,e,r,o,a){let n=u1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,V4(t,E,p,I,a))}return u}function K4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,K4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>K.normalize(o)):K.isAbsolute(e.default)?K.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>K.resolve(t.projectCwd,o)):K.resolve(t.projectCwd,e.default);default:return e.default}}function xx(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return rot;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(xx(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=xx(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=xx(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function sot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bx)&&(e=(0,Sle.default)(e.slice(bx.length)),t[e]=r);return t}function Y4(){let t=`${bx}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return W4}async function Ple(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function oot(t,e){return Buffer.compare(...await Promise.all([Ple(t),Ple(e)]))===0}async function aot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function cot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await lot(r,e)?null:r}var Sle,Nf,xle,ble,kle,G4,eot,B1,tot,QE,bx,W4,rot,v1,Qle,kx,Sx,lot,rA,Ve,D1=Et(()=>{Pt();Nl();Sle=$e(aK()),Nf=$e(ed());qt();xle=$e(eJ()),ble=Be("module"),kle=$e(nd()),G4=Be("stream");lse();AE();AO();fO();pO();Lse();hO();Bd();Hse();VS();ql();rh();Bx();jl();Dx();kf();xo();eot=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),B1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),tot=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),QE=/^(?!v)[a-z0-9._-]+$/i,bx="yarn_",W4=".yarnrc.yml",rot="********",v1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(v1||{}),Qle=yt,kx=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(kx||{}),Sx={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:wO()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:Y4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:xL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:H4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uS),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Nf.isPR&&eot,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};lot=process.platform==="win32"?oot:aot;rA=class{constructor(e){this.isCI=Nf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sx);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=sot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(yE());h&&(p.find(ye=>ye.path===h.path)||p.unshift(h));let E=_se(p.map(Ae=>[Ae.path,Ae.data])),I=Bt.dot,v=new Set(Object.keys(Sx)),b=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae})=>({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae}),C=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae,...we})=>{let Pe={};for(let[g,Ee]of Object.entries(we))v.has(g)&&(Pe[g]=Ee);return Pe},T=({yarnPath:Ae,ignorePath:ye,...ae})=>{let we={};for(let[Pe,g]of Object.entries(ae))v.has(Pe)||(we[Pe]=g);return we};if(A.importSettings(b(Sx)),A.useWithSource("",b(u),e,{strict:!1}),E){let[Ae,ye]=E;A.useWithSource(Ae,b(ye),I,{strict:!1})}if(a){if(await cot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async Ae=>{let ye=Ae.endsWith("?")?await oe.readFilePromise(Ae.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(Ae,"utf8");return(0,xle.parse)(ye)}));for(let Ae of J)for(let[ye,ae]of Object.entries(Ae))A.env[ye]=sS(ae,{env:U});if(A.importSettings(C(Sx)),A.useWithSource("",C(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,C(ye),I,{strict:o})}let te=Ae=>"default"in Ae?Ae.default:Ae,le=new Map([["@@core",ase]]);if(r!==null)for(let Ae of r.plugins.keys())le.set(Ae,te(r.modules.get(Ae)));for(let[Ae,ye]of le)A.activatePlugin(Ae,ye);let pe=new Map([]);if(r!==null){let Ae=new Map;for(let we of ble.builtinModules)Ae.set(we,()=>vf(we));for(let[we,Pe]of r.modules)Ae.set(we,()=>Pe);let ye=new Set,ae=async(we,Pe)=>{let{factory:g,name:Ee}=vf(we);if(!g||ye.has(Ee))return;let De=new Map(Ae),ce=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Wy(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${Pe})`);Ae.set(Ee,()=>ne),ye.add(Ee),pe.set(Ee,ne)};if(u.plugins)for(let we of u.plugins.split(";")){let Pe=K.resolve(e,ue.toPortablePath(we));await ae(Pe,"")}for(let{path:we,cwd:Pe,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let De=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(B1.has(ce))continue;let ee=K.resolve(Pe,ue.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!ce){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,".gitignore",yt.NAME),lt=Ot(A,A.values.get("rcFilename"),yt.NAME),Re=Ot(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${lt} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await O4(ce,{configuration:A}),ke=zs(Ie);if(ne&&ne!==ke){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME),lt=Ot(A,`yarn plugin import ${ce}`,yt.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${lt} to reimport it.`)}await oe.mkdirPromise(K.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await ae(ee,we)}}for(let[Ae,ye]of pe)A.activatePlugin(Ae,ye);if(A.useWithSource("",T(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,T(ye),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=Y4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=K.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Vi(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=K.dirname(n)}return o}static async findFolderRcFile(e){let r=K.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Vi(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(K.join(a,dr.lockfile)))return a;oe.existsSync(K.join(a,dr.manifest))&&(r=a),o=K.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=Y4(),n=K.join(e,a),u=oe.existsSync(n)?Vi(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=yE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,K4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ot(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=EO(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&tot.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bx}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=yE(),v=e[0]!=="<"?K.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=V4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ot(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return xx(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ot(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ot(this,"STDERR","red")}`);n=new G4.PassThrough,n.pipe(p),n.pipe(A),u=new G4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new vd([new l1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new pE([new hE,new dE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=I1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!ba(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Mt;u.load(a,{yamlCompatibilityMode:!0});let A=Gy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,b]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(nh(o,!0),iS(a),{userProvided:!0});return e}normalizeLocator(e){return ba(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):QE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ba(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):QE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=$I(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!bf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:CL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,kle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ve=rA;Ve.deleteProperty=Symbol(),Ve.telemetry=null});var Ur={};Kt(Ur,{EndStrategy:()=>Z4,ExecError:()=>Qx,PipeError:()=>P1,execvp:()=>j4,pipevp:()=>Gc});function Sd(t){return t!==null&&typeof t.fd=="number"}function J4(){}function z4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":Sd(n)&&(h[0]=n),Sd(u)&&(h[1]=u),Sd(A)&&(h[2]=A);let E=(0,X4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",J4),process.on("SIGTERM",z4)),!Sd(n)&&n!==null&&n.pipe(E.stdin),Sd(u)||E.stdout.pipe(u,{end:!1}),Sd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))Sd(v)||v.end()};return new Promise((v,b)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),b(C)}),E.on("close",(C,T)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:$4(C,T)}):b(new P1({fileName:t,code:C,signal:T}))})})}async function j4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,X4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",b=>{let C=Ve.create(r),T=Ot(C,t,yt.PATH);v(new zt(1,`Process ${T} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,b.message)})}`)}))}),E.on("close",(b,C)=>{let T=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?I({code:$4(b,C),stdout:T,stderr:L}):v(new Qx({fileName:t,code:b,signal:C,stdout:T,stderr:L}))})})}function $4(t,e){let r=uot.get(e);return typeof r<"u"?128+r:t??1}function Aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var X4,Z4,P1,Qx,xd,uot,Px=Et(()=>{Pt();X4=$e(aR());D1();Yl();ql();Z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(Z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ve.create(K.cwd()),u=Ot(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{Aot(o,a,{configuration:n,report:A})});this.code=$4(o,a)}},Qx=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;uot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Tle(t){Fle=t}function S1(){return typeof eU>"u"&&(eU=Fle()),eU}var eU,Fle,tU=Et(()=>{Fle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Fx,nU)=>{var fot=Object.assign({},Be("fs")),rU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function b(We){return r.locateFile?r.locateFile(We,v):v+We}var C,T,L,U;I&&(E?v=Be("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=fot),U||(U=Be("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},T=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,pe=function(We){le=We},Ae;r.wasmBinary&&(Ae=r.wasmBinary);var ye=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ri("no native wasm support detected");function ae(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return _e[We>>0];case"i8":return _e[We>>0];case"i16":return lp((We>>1)*2);case"i32":return Ms((We>>2)*4);case"i64":return Ms((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return ap((We>>3)*8);default:Ri("invalid type for getValue: "+tt)}return null}var we,Pe=!1,g;function Ee(We,tt){We||Ri("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,nr,$){var me={string:function(es){var xi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;xi=Un(jo),ht(es,xi,jo)}return xi},array:function(es){var xi=Un(es.length);return Re(es,xi),xi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var ft=De(We),pt=[],Rt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function ke(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,me=It+nr-1,Le=0;Le=55296&&ft<=57343){var pt=We.charCodeAt(++Le);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=me)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=me)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=me)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=me)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return ke(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function lt(We){var tt=H(We)+1,It=Li(tt);return It&&ke(We,_e,It,tt),It}function Re(We,tt){_e.set(We,tt)}function Qe(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var be,_e,Te,Je,He,x,w,S,y,F;function z(We){be=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=_e=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=x=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=He=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Se=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)xt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Se)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function xt(We){ie.unshift(We)}function an(We){Se.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,xr=null,Wr=null;function Vn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(xr!==null&&(clearInterval(xr),xr=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ri(We){r.onAbort&&r.onAbort(We),We+="",te(We),Pe=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYgABAGIAEiAA0ACwwDCwJAAkBBEBAJIgUEQCAFIAY7AQogBSAHOwEIIAUgAjYCBCAFQQA2AgAgBkUNASAFIAggBhBjIgY2AgwgBg0CIAUQBgtBACECIAQEQCAEQQA2AgQgBEEONgIACyABEAggAEUNBANAIAAoAgAhASAAKAIMEAYgABAGIAEiAA0ACwwECyAFQQA2AgwLAkAgAEUEQCAFIQAMAQsgCSAFNgIACyAFIQkgAS0AAA0ACwsCQCABLQAABH8gASkDECABKQMIUQVBAAsNACABIAEtAAAEfiABKQMIIAEpAxB9BUIACyIKQv////8PgxATIQICQCAKpyIFQQNLDQAgAkUNACACQcEUIAUQPUUNAQtBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAQNAIAAoAgAhASAAKAIMEAYgABAGIAEiAA0ACwwBCyABEAggAwRAIAMgADYCAEEBDwtBASECIABFDQADQCAAKAIAIQEgACgCDBAGIAAQBiABIgANAAsLIAILvgEBBX8gAAR/IAAhAgNAIAIiBCgCACICDQALIAEEQANAIAEiAy8BCCEGIAMoAgAhASAAIQICQAJAA0ACQCACLwEIIAZHDQAgAi8BCiIFIAMvAQpHDQAgBUUNAiACKAIMIAMoAgwgBRA9RQ0CCyACKAIAIgINAAsgA0EANgIAIAQgAzYCACADIQQMAQsgAiACKAIEIAMoAgRBgAZxcjYCBCADQQA2AgAgAygCDBAGIAMQBgsgAQ0ACwsgAAUgAQsLVQICfgF/AkACQCAALQAARQ0AIAApAxAiAkIBfCIDIAJUDQAgAyAAKQMIWA0BCyAAQQA6AAAPCyAAKAIEIgRFBEAPCyAAIAM3AxAgBCACp2ogAToAAAt9AQN/IwBBEGsiAiQAIAIgATYCDEF/IQMCQCAALQAoDQACQCAAKAIAIgRFDQAgBCABEHFBf0oNACAAKAIAIQEgAEEMaiIABEAgACABKAIMNgIAIAAgASgCEDYCBAsMAQsgACACQQxqQgRBExAOQj+HpyEDCyACQRBqJAAgAwvdAQEDfyABIAApAzBaBEAgAEEIagRAIABBADYCDCAAQRI2AggLQX8PCyAAQQhqIQIgAC0AGEECcQRAIAIEQCACQQA2AgQgAkEZNgIAC0F/DwtBfyEDAkAgACABQQAgAhBTIgRFDQAgACgCUCAEIAIQfkUNAAJ/IAEgACkDMFoEQCAAQQhqBEAgAEEANgIMIABBEjYCCAtBfwwBCyABp0EEdCICIAAoAkBqKAIEECAgACgCQCACaiICQQA2AgQgAhBAQQALDQAgACgCQCABp0EEdGpBAToADEEAIQMLIAMLpgIBBX9BfyEFAkAgACABQQBBABAmRQ0AIAAtABhBAnEEQCAAQQhqIgAEQCAAQQA2AgQgAEEZNgIAC0F/DwsCfyAAKAJAIgQgAaciBkEEdGooAgAiBUUEQCADQYCA2I14RyEHQQMMAQsgBSgCRCADRyEHIAUtAAkLIQggBCAGQQR0aiIEIQYgBCgCBCEEQQAgAiAIRiAHG0UEQAJAIAQNACAGIAUQKyIENgIEIAQNACAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0F/DwsgBCADNgJEIAQgAjoACSAEIAQoAgBBEHI2AgBBAA8LQQAhBSAERQ0AIAQgBCgCAEFvcSIANgIAIABFBEAgBBAgIAZBADYCBEEADwsgBCADNgJEIAQgCDoACQsgBQvjCAIFfwR+IAAtABhBAnEEQCAAQQhqBEAgAEEANgIMIABBGTYCCAtCfw8LIAApAzAhCwJAIANBgMAAcQRAIAAgASADQQAQTCIJQn9SDQELAn4CQAJAIAApAzAiCUIBfCIMIAApAzgiClQEQCAAKAJAIQQMAQsgCkIBhiIJQoAIIAlCgAhUGyIJQhAgCUIQVhsgCnwiCadBBHQiBK0gCkIEhkLw////D4NUDQEgACgCQCAEEDQiBEUNASAAIAk3AzggACAENgJAIAApAzAiCUIBfCEMCyAAIAw3AzAgBCAJp0EEdGoiBEIANwIAIARCADcABSAJDAELIABBCGoEQCAAQQA2AgwgAEEONgIIC0J/CyIJQgBZDQBCfw8LAkAgAUUNAAJ/QQAhBCAJIAApAzBaBEAgAEEIagRAIABBADYCDCAAQRI2AggLQX8MAQsgAC0AGEECcQRAIABBCGoEQCAAQQA2AgwgAEEZNgIIC0F/DAELAkAgAUUNACABLQAARQ0AQX8gASABECJB//8DcSADIABBCGoQNSIERQ0BGiADQYAwcQ0AIARBABAjQQNHDQAgBEECNgIICwJAIAAgAUEAQQAQTCIKQgBTIgENACAJIApRDQAgBBAQIABBCGoEQCAAQQA2AgwgAEEKNgIIC0F/DAELAkAgAUEBIAkgClEbRQ0AAkACfwJAIAAoAkAiASAJpyIFQQR0aiIGKAIAIgMEQCADKAIwIAQQYg0BCyAEIAYoAgQNARogBiAGKAIAECsiAzYCBCAEIAMNARogAEEIagRAIABBADYCDCAAQQ42AggLDAILQQEhByAGKAIAKAIwC0EAQQAgAEEIaiIDECUiCEUNAAJAAkAgASAFQQR0aiIFKAIEIgENACAGKAIAIgENAEEAIQEMAQsgASgCMCIBRQRAQQAhAQwBCyABQQBBACADECUiAUUNAQsgACgCUCAIIAlBACADEE1FDQAgAQRAIAAoAlAgAUEAEH4aCyAFKAIEIQMgBwRAIANFDQIgAy0AAEECcUUNAiADKAIwEBAgBSgCBCIBIAEoAgBBfXEiAzYCACADRQRAIAEQICAFQQA2AgQgBBAQQQAMBAsgASAGKAIAKAIwNgIwIAQQEEEADAMLIAMoAgAiAUECcQRAIAMoAjAQECAFKAIEIgMoAgAhAQsgAyAENgIwIAMgAUECcjYCAEEADAILIAQQEEF/DAELIAQQEEEAC0UNACALIAApAzBRBEBCfw8LIAAoAkAgCadBBHRqED4gACALNwMwQn8PCyAJpyIGQQR0IgEgACgCQGoQQAJAAkAgACgCQCIEIAFqIgMoAgAiBUUNAAJAIAMoAgQiAwRAIAMoAgAiAEEBcUUNAQwCCyAFECshAyAAKAJAIgQgBkEEdGogAzYCBCADRQ0CIAMoAgAhAAsgA0F+NgIQIAMgAEEBcjYCAAsgASAEaiACNgIIIAkPCyAAQQhqBEAgAEEANgIMIABBDjYCCAtCfwteAQF/IwBBEGsiAiQAAn8gACgCJEEBRwRAIABBDGoiAARAIABBADYCBCAAQRI2AgALQX8MAQsgAkEANgIIIAIgATcDACAAIAJCEEEMEA5CP4enCyEAIAJBEGokACAAC9oDAQZ/IwBBEGsiBSQAIAUgAjYCDCMAQaABayIEJAAgBEEIakHA8ABBkAEQBxogBCAANgI0IAQgADYCHCAEQX4gAGsiA0H/////ByADQf////8HSRsiBjYCOCAEIAAgBmoiADYCJCAEIAA2AhggBEEIaiEAIwBB0AFrIgMkACADIAI2AswBIANBoAFqQQBBKBAZIAMgAygCzAE2AsgBAkBBACABIANByAFqIANB0ABqIANBoAFqEEpBAEgNACAAKAJMQQBOIQcgACgCACECIAAsAEpBAEwEQCAAIAJBX3E2AgALIAJBIHEhCAJ/IAAoAjAEQCAAIAEgA0HIAWogA0HQAGogA0GgAWoQSgwBCyAAQdAANgIwIAAgA0HQAGo2AhAgACADNgIcIAAgAzYCFCAAKAIsIQIgACADNgIsIAAgASADQcgBaiADQdAAaiADQaABahBKIAJFDQAaIABBAEEAIAAoAiQRAAAaIABBADYCMCAAIAI2AiwgAEEANgIcIABBADYCECAAKAIUGiAAQQA2AhRBAAsaIAAgACgCACAIcjYCACAHRQ0ACyADQdABaiQAIAYEQCAEKAIcIgAgACAEKAIYRmtBADoAAAsgBEGgAWokACAFQRBqJAALUwEDfwJAIAAoAgAsAABBMGtBCk8NAANAIAAoAgAiAiwAACEDIAAgAkEBajYCACABIANqQTBrIQEgAiwAAUEwa0EKTw0BIAFBCmwhAQwACwALIAELuwIAAkAgAUEUSw0AAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4KAAECAwQFBgcICQoLIAIgAigCACIBQQRqNgIAIAAgASgCADYCAA8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASsDADkDAA8LIAAgAkEAEQcACwubAgAgAEUEQEEADwsCfwJAIAAEfyABQf8ATQ0BAkBB9IIBKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDAQLIAFBgLADT0EAIAFBgEBxQYDAA0cbRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMBAsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMBAsLQYSEAUEZNgIAQX8FQQELDAELIAAgAToAAEEBCwvjAQECfyACQQBHIQMCQAJAAkAgAEEDcUUNACACRQ0AIAFB/wFxIQQDQCAALQAAIARGDQIgAkEBayICQQBHIQMgAEEBaiIAQQNxRQ0BIAINAAsLIANFDQELAkAgAC0AACABQf8BcUYNACACQQRJDQAgAUH/AXFBgYKECGwhAwNAIAAoAgAgA3MiBEF/cyAEQYGChAhrcUGAgYKEeHENASAAQQRqIQAgAkEEayICQQNLDQALCyACRQ0AIAFB/wFxIQEDQCABIAAtAABGBEAgAA8LIABBAWohACACQQFrIgINAAsLQQALeQEBfAJAIABFDQAgACsDECAAKwMgIgIgAUQAAAAAAAAAACABRAAAAAAAAAAAZBsiAUQAAAAAAADwPyABRAAAAAAAAPA/YxsgACsDKCACoaKgIgEgACsDGKFjRQ0AIAAoAgAgASAAKAIMIAAoAgQRDgAgACABOQMYCwtIAQF8AkAgAEUNACAAKwMQIAArAyAiASAAKwMoIAGhoCIBIAArAxihY0UNACAAKAIAIAEgACgCDCAAKAIEEQ4AIAAgATkDGAsLWgICfgF/An8CQAJAIAAtAABFDQAgACkDECIBQgF8IgIgAVQNACACIAApAwhYDQELIABBADoAAEEADAELQQAgACgCBCIDRQ0AGiAAIAI3AxAgAyABp2otAAALC4IEAgZ/AX4gAEEAIAEbRQRAIAIEQCACQQA2AgQgAkESNgIAC0EADwsCQAJAIAApAwhQDQAgACgCECABLQAAIgQEf0Kl6wohCSABIQMDQCAJIAStQv8Bg3whCSADLQABIgQEQCADQQFqIQMgCUL/////D4NCIX4hCQwBCwsgCacFQYUqCyIEIAAoAgBwQQJ0aiIGKAIAIgNFDQADQAJAIAMoAhwgBEcNACABIAMoAgAQOA0AAkAgAykDCEJ/UQRAIAMoAhghAQJAIAUEQCAFIAE2AhgMAQsgBiABNgIACyADEAYgACAAKQMIQgF9Igk3AwggCbogACgCACIBuER7FK5H4XqEP6JjRQ0BIAFBgQJJDQECf0EAIQMgACgCACIGIAFBAXYiBUcEQCAFEDwiB0UEQCACBEAgAkEANgIEIAJBDjYCAAtBAAwCCwJAIAApAwhCACAGG1AEQCAAKAIQIQQMAQsgACgCECEEA0AgBCADQQJ0aigCACIBBEADQCABKAIYIQIgASAHIAEoAhwgBXBBAnRqIggoAgA2AhggCCABNgIAIAIiAQ0ACwsgA0EBaiIDIAZHDQALCyAEEAYgACAFNgIAIAAgBzYCEAtBAQsNAQwFCyADQn83AxALQQEPCyADIgUoAhgiAw0ACwsgAgRAIAJBADYCBCACQQk2AgALC0EAC6UGAgl/AX4jAEHwAGsiBSQAAkACQCAARQ0AAkAgAQRAIAEpAzAgAlYNAQtBACEDIABBCGoEQCAAQQA2AgwgAEESNgIICwwCCwJAIANBCHENACABKAJAIAKnQQR0aiIGKAIIRQRAIAYtAAxFDQELQQAhAyAAQQhqBEAgAEEANgIMIABBDzYCCAsMAgsgASACIANBCHIgBUE4ahCKAUF/TARAQQAhAyAAQQhqBEAgAEEANgIMIABBFDYCCAsMAgsgA0EDdkEEcSADciIGQQRxIQcgBSkDUCEOIAUvAWghCQJAIANBIHFFIAUvAWpBAEdxIgtFDQAgBA0AIAAoAhwiBA0AQQAhAyAAQQhqBEAgAEEANgIMIABBGjYCCAsMAgsgBSkDWFAEQCAAQQBCAEEAEFIhAwwCCwJAIAdFIgwgCUEAR3EiDUEBckUEQEEAIQMgBUEAOwEwIAUgDjcDICAFIA43AxggBSAFKAJgNgIoIAVC3AA3AwAgASgCACAOIAVBACABIAIgAEEIahBeIgYNAQwDC0EAIQMgASACIAYgAEEIaiIGECYiB0UNAiABKAIAIAUpA1ggBUE4aiAHLwEMQQF2QQNxIAEgAiAGEF4iBkUNAgsCfyAGIAE2AiwCQCABKAJEIghBAWoiCiABKAJIIgdJBEAgASgCTCEHDAELIAEoAkwgB0EKaiIIQQJ0EDQiB0UEQCABQQhqBEAgAUEANgIMIAFBDjYCCAtBfwwCCyABIAc2AkwgASAINgJIIAEoAkQiCEEBaiEKCyABIAo2AkQgByAIQQJ0aiAGNgIAQQALQX9MBEAgBhALDAELAkAgC0UEQCAGIQEMAQtBJkEAIAUvAWpBAUYbIgFFBEAgAEEIagRAIABBADYCDCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=b(Si));function Ls(We){try{if(We==Si&&Ae)return new Uint8Array(Ae);var tt=ii(We);if(tt)return tt;if(T)return T(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ri(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var me=Le.toString();throw te("failed to compile wasm module: "+me),(me.includes("imported Memory")||me.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Oa};function tt($,me){var Le=$.exports;r.asm=Le,we=r.asm.g,z(we.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Vn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Si,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function ap(We){return F.getFloat64(We,!0)}function lp(We){return F.getInt16(We,!0)}function Ms(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Os(We,tt){var It=new Date(Ms((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Os.GMTString||(Os.GMTString=lt("GMT")),Dn((tt+40>>2)*4,Os.GMTString),tt}function ml(We,tt){return Os(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return we.grow(We-be.byteLength+65535>>>16),z(we.buffer),1}catch{}}function Kn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var me=Math.min(It,Qe(Math.max(We,$),65536)),Le=ao(me);if(Le)return!0}return!1}function Mn(We){pe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function On(){if(On.called)return;On.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),me=Math.max(nr,$);Dn((ds()>>2)*4,me*60),Dn((gs()>>2)*4,Number(nr!=$));function Le(Zr){var qi=Zr.toTimeString().match(/\(([A-Za-z ]+)\)$/);return qi?qi[1]:"GMT"}var ft=Le(tt),pt=Le(It),Rt=lt(ft),er=lt(pt);$>2)*4,Rt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Rt))}function _i(We){On();var tt=Date.UTC(Ms((We+20>>2)*4)+1900,Ms((We+16>>2)*4),Ms((We+12>>2)*4),Ms((We+8>>2)*4),Ms((We+4>>2)*4),Ms((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,me,Le,ft,pt,Rt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),ft=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),Rt=tt.indexOf(We.charAt(er++)),nr=Le<<2|ft>>4,$=(ft&15)<<4|pt>>2,me=(pt&3)<<6|Rt,It=It+String.fromCharCode(nr),pt!==64&&(It=It+String.fromCharCode($)),Rt!==64&&(It=It+String.fromCharCode(me));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!Pe&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Fx=="object"&&typeof nU=="object"?nU.exports=rU:typeof define=="function"&&define.amd?define([],function(){return rU}):typeof Fx=="object"&&(Fx.createModule=rU)});var Lf,Nle,Lle,Mle=Et(()=>{Lf=["number","number"],Nle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Nle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Nle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Lf,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function iU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==K.sep);){if(t[r-1]===K.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==K.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Pt();Pt();nA();Jl=class extends _p{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>iU(A,".zip"):A=>{for(let p of r){let h=iU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function pot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ule.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Tx(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,sU,Ule,oU,_le,Rx,zi,aU=Et(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=Be("fs"),sU=Be("stream"),Ule=Be("util"),oU=$e(Be("zlib"));tU();_le="mixed";Rx=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Ou{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:_le,r??=Tx(),typeof r=="string"){let{baseFs:A=new Rn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=S1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Tx():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(o,o+r);return Buffer.from(n)}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return K.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new sU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new sU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=K.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=b,T=b,L=b,U=new Date(C),J=new Date(T),te=new Date(L),le=new Date(b),pe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,Ae=pe===ta.constants.S_IFDIR?493:420,ye=pe|this.getUnixMode(n,Ae)&511,ae=this.libzip.struct.statCrc(u),we=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:le,atimeMs:C,birthtimeMs:T,ctimeMs:L,mtimeMs:b,mode:ye,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(we):we}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,b=this.stats.mtimeMs,C=this.stats.mtimeMs,T=new Date(I),L=new Date(v),U=new Date(b),J=new Date(C),te=ta.constants.S_IFDIR|493,le=0,pe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:T,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:b,mtimeMs:C,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(pe):pe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(K.dirname(r)).add(K.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(K.dirname(r)).add(K.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname(r))?.delete(K.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=K.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,K.resolve(K.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,K.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=K.resolve(p,K.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=K.resolve(K.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=K.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(v);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((C,T)=>{oU.default.inflateRaw(b,(L,U)=>{L?T(L):(this.fileSources.set(r,U),C(U))})});{let C=oU.default.inflateRawSync(b);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,pot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,K.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",K.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=K.join(A.path,A.name),h=this.listings.get(K.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",K.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(K.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(K.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",K.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=K.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=K.resolve(Bt.root,r);return Mg(this,a,o)}}});function jle(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Rn(p),E=new _p({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Ww(Hle.default,new Hp(E)),a}var Hle,qle=Et(()=>{Pt();Hle=$e(Be("fs"));aU()});var Gle=Et(()=>{Ole();aU();qle()});var x1={};Kt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>_le,LibzipError:()=>Rx,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>iU,getLibzipPromise:()=>got,getLibzipSync:()=>hot,makeEmptyArchive:()=>Tx,mountMemoryDrive:()=>jle});function hot(){return S1()}async function got(){return S1()}var Yle,nA=Et(()=>{tU();Yle=$e(Rle());Mle();Gle();Tle(()=>{let t=(0,Yle.default)();return Lle(t)})});var FE,Wle=Et(()=>{Pt();qt();b1();FE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};FE.usage={description:"run a command using yarn's portable shell",details:` + This command will run a command using Yarn's portable shell. + + Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. + + Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. + + Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. + + For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Vle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Mx={};Kt(Mx,{fastGlobOptions:()=>zle,isBraceExpansion:()=>lU,isGlobPattern:()=>dot,match:()=>mot,micromatchOptions:()=>Lx});function dot(t){if(!Nx.default.scan(t,Lx).isGlob)return!1;try{Nx.default.parse(t,Lx)}catch{return!1}return!0}function mot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...zle,cwd:ue.fromPortablePath(e),fs:TD(Jle.default,new Hp(r))})}function lU(t){return Nx.default.scan(t,Lx).isBrace}var Kle,Jle,Nx,Lx,zle,Xle=Et(()=>{Pt();Kle=$e(RS()),Jle=$e(Be("fs")),Nx=$e(Zo()),Lx={strictBrackets:!0},zle={onlyDirectories:!1,onlyFiles:!1}});function cU(){}function uU(){for(let t of bd)t.kill()}function tce(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,$le.default)(t,e,{...o,stdio:[n,u,A]});return bd.add(p),bd.size===1&&(process.on("SIGINT",cU),process.on("SIGTERM",uU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} +`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} +`),h(128);break;default:a[2].write(`uncaught error: ${E.message} +`),h(1);break}}),p.on("close",E=>{bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),h(E!==null?E:129)})})}}}function rce(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ox(t,e){return RE.start(t,e)}function Zle(t,e=null){let r=new iA.PassThrough,o=new ece.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function nce(t,{prefix:e}){return{stdout:Zle(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:Zle(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var $le,iA,ece,bd,zl,AU,RE,fU=Et(()=>{$le=$e(aR()),iA=Be("stream"),ece=Be("string_decoder"),bd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},AU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},RE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new RE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new RE(this,e),a=new AU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Kt(T1,{EntryCommand:()=>FE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Mx});function ice(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function _x(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Eot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await Hx(t,e,_x(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function sce(t,e,r){let o=t.map(async n=>{let u=await kd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Ux(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Ace(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Ux(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await kd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Ux(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?k1({type:"variable",name:o.join(" ")},e,r):k1({type:"number",value:a},e,r)}else return Cot[t.type](await k1(t.left,e,r),await k1(t.right,e,r))}async function kd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let b=JSON.stringify({type:E,fd:I}),C=o.get(b);typeof C>"u"&&o.set(b,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await kd(E.args,e,r);for(let b of v)h(E.subtype,E.fd,b)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let b=await Eot(v.shell,e,r);if(v.quoted)u(b);else{let C=Ux(b);for(let T=0;T"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let C=lU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of b.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function Q1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return tce(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return rce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=b}})}function wot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,_x(r,{stdin:a}));return{stdin:a,promise:n}}}function Iot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,r);return{stdin:a,promise:n}}}function oce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,Q1([...e,"__ysh_run_procedure",a],r,o)}}async function ace(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await kd(o.args,e,r),h=await sce(o.envs,e,r);A=o.envs.length?Q1(p,e,_x(u,{environment:h})):Q1(p,e,u)}break;case"subshell":{let p=await kd(o.args,e,r),h=wot(o.subshell,e,u);A=oce(h,p,e,u)}break;case"group":{let p=await kd(o.args,e,r),h=Iot(o.group,e,u);A=oce(h,p,e,u)}break;case"envs":{let p=await sce(o.envs,e,r);u.environment={...u.environment,...p},A=Q1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ox(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Bot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return lce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=nce(r,{prefix:p});return r.backgroundJobs.push(ace(t,e,_x(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended +`)})),0}return await ace(t,e,r)}async function vot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Bot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Hx(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await vot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function fce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>F1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>F1(e));case"arithmetic":return pU(t.arithmetic);case"shell":return hU(t.shell);default:return!1}}function F1(t){switch(t.type){case"redirection":return t.args.some(e=>F1(e));case"argument":return t.segments.some(e=>fce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function pU(t){switch(t.type){case"variable":return fce(t);case"number":return!1;default:return pU(t.left)||pU(t.right)}}function hU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=hU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>F1(n)))||r.args.some(a=>F1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Rn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Mx}={}){let I={};for(let[C,T]of Object.entries(n))typeof T<"u"&&(I[C]=T);let v=new Map(yot);for(let[C,T]of Object.entries(o))v.set(C,T);u===null&&(u=new ll.PassThrough,u.end());let b=LD(t,E);if(!hU(b)&&b.length>0&&e.length>0){let{command:C}=b[b.length-1];for(;C.then;)C=C.then.line;let T=C.chain;for(;T.then;)T=T.then.chain;T.type==="command"&&(T.args=T.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await Hx(b,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var lce,cce,ll,uce,yot,Cot,b1=Et(()=>{Pt();Nl();lce=$e(vN()),cce=Be("os"),ll=Be("stream"),uce=Be("timers/promises");Wle();Vle();Xle();fU();fU();yot=new Map([["cd",async([t=(0,cce.homedir)(),...e],r,o)=>{let a=K.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} +`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,uce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ox(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:b}=JSON.parse(I),C=J=>{switch(b){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=J=>{switch(b){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(K.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>ice(Number(t[J]),1,r));break;case">":case">>":{let te=K.resolve(r.cwd,ue.toPortablePath(t[J]));T(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(le,pe,Ae){setImmediate(Ae)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":T(ice(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=b=>{if(b===u.length)I.end();else{let C=u[b]();C.pipe(I,{end:!1}),C.on("end",()=>{v(b+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ox(Q1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);Cot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var jx=_((n4t,pce)=>{function Dot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var hce=fd(),Pot=jx(),Sot=Hl(),xot=fE(),bot=1/0,gce=hce?hce.prototype:void 0,dce=gce?gce.toString:void 0;function mce(t){if(typeof t=="string")return t;if(Sot(t))return Pot(t,mce)+"";if(xot(t))return dce?dce.call(t):"";var e=t+"";return e=="0"&&1/t==-bot?"-0":e}yce.exports=mce});var R1=_((s4t,Cce)=>{var kot=Ece();function Qot(t){return t==null?"":kot(t)}Cce.exports=Qot});var gU=_((o4t,wce)=>{function Fot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var Tot=gU();function Rot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:Tot(t,e,r)}Ice.exports=Rot});var dU=_((l4t,vce)=>{var Not="\\ud800-\\udfff",Lot="\\u0300-\\u036f",Mot="\\ufe20-\\ufe2f",Oot="\\u20d0-\\u20ff",Uot=Lot+Mot+Oot,_ot="\\ufe0e\\ufe0f",Hot="\\u200d",jot=RegExp("["+Hot+Not+Uot+_ot+"]");function qot(t){return jot.test(t)}vce.exports=qot});var Pce=_((c4t,Dce)=>{function Got(t){return t.split("")}Dce.exports=Got});var Rce=_((u4t,Tce)=>{var Sce="\\ud800-\\udfff",Yot="\\u0300-\\u036f",Wot="\\ufe20-\\ufe2f",Vot="\\u20d0-\\u20ff",Kot=Yot+Wot+Vot,Jot="\\ufe0e\\ufe0f",zot="["+Sce+"]",mU="["+Kot+"]",yU="\\ud83c[\\udffb-\\udfff]",Xot="(?:"+mU+"|"+yU+")",xce="[^"+Sce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",kce="[\\ud800-\\udbff][\\udc00-\\udfff]",Zot="\\u200d",Qce=Xot+"?",Fce="["+Jot+"]?",$ot="(?:"+Zot+"(?:"+[xce,bce,kce].join("|")+")"+Fce+Qce+")*",eat=Fce+Qce+$ot,tat="(?:"+[xce+mU+"?",mU,bce,kce,zot].join("|")+")",rat=RegExp(yU+"(?="+yU+")|"+tat+eat,"g");function nat(t){return t.match(rat)||[]}Tce.exports=nat});var Lce=_((A4t,Nce)=>{var iat=Pce(),sat=dU(),oat=Rce();function aat(t){return sat(t)?oat(t):iat(t)}Nce.exports=aat});var Oce=_((f4t,Mce)=>{var lat=Bce(),cat=dU(),uat=Lce(),Aat=R1();function fat(t){return function(e){e=Aat(e);var r=cat(e)?uat(e):void 0,o=r?r[0]:e.charAt(0),a=r?lat(r,1).join(""):e.slice(1);return o[t]()+a}}Mce.exports=fat});var _ce=_((p4t,Uce)=>{var pat=Oce(),hat=pat("toUpperCase");Uce.exports=hat});var EU=_((h4t,Hce)=>{var gat=R1(),dat=_ce();function mat(t){return dat(gat(t).toLowerCase())}Hce.exports=mat});var jce=_((g4t,qx)=>{function yat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,b=13,C=14,T=15,L=16,U=17,J=0,te=1,le=2,pe=3,Ae=4;function ye(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function ae(g,Ee){Ee===void 0&&(Ee=0);var De=g.charCodeAt(Ee);if(55296<=De&&De<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=De;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return De}function we(g,Ee,De){var ce=[g].concat(Ee).concat([De]),ne=ce[ce.length-2],ee=De,Ie=ce.lastIndexOf(C);if(Ie>1&&ce.slice(1,Ie).every(function(H){return H==o})&&[o,b,U].indexOf(g)==-1)return le;var ke=ce.lastIndexOf(a);if(ke>0&&ce.slice(1,ke).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?pe:Ae;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==T)return J;if(ee==n)return J;if(ne==v)return J;var ht=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[b,U].indexOf(ce[ht])!=-1&&ce.slice(ht+1,-1).every(function(H){return H==o})&&ee==C||ne==T&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?le:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var De=Pe(ae(g,Ee)),ce=[],ne=Ee+1;ne{var Eat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gx;function Cat(){if(Gx)return Gx;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gx=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=jce(),e=new t;return Gx=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(Eat)||[t,t,void 0],p=Cat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var tn,N1=Et(()=>{tn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.0.2"});function zce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Ot(e,a,"grey"):a}function CU(t,{configuration:e,json:r}){let o=zce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Xy(e,o,n)}async function NE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Yx,wat,Yce,Wce,uh,Jce,Vce,Iat,Bat,Wx,vat,Nt,L1=Et(()=>{Kce=$e(Gce()),Yx=$e(ed());pP();Yl();N1();ql();wat="\xB7",Yce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Wce=80,uh=Yx.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:Yx.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:Yx.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Jce=uh!==null,Vce=new Date,Iat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Bat=t=>t,Wx=Bat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),vat=Iat&&Object.keys(Wx).find(t=>{let e=Wx[t];return!(e.date&&(e.date[0]!==Vce.getDate()||e.date[1]!==Vce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(zI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||vat;if(!Object.hasOwn(Wx,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Wx[v];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,md(r.configuration,`Yarn ${tn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,uh!==null&&!this.json&&this.includeInfos&&this.stdout.write(uh.start(r))},reportFooter:A=>{if(this.indent-=1,uh!==null&&!this.json&&this.includeInfos){this.stdout.write(uh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ot(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!uh)return;let a=`${uh.start(r)}${o}${uh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ot(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Wce&&(this.progressFrame=(this.progressFrame+1)%Yce.length,this.progressTime=r);let o=Yce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ot(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Wce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?zce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ot(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?CU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${wat} `}}});var un={};Kt(un,{PackageManager:()=>$ce,detectPackageManager:()=>eue,executePackageAccessibleBinary:()=>sue,executePackageScript:()=>Vx,executePackageShellcode:()=>wU,executeWorkspaceAccessibleBinary:()=>Qat,executeWorkspaceLifecycleScript:()=>nue,executeWorkspaceScript:()=>rue,getPackageAccessibleBinaries:()=>Kx,getWorkspaceAccessibleBinaries:()=>iue,hasPackageScript:()=>xat,hasWorkspaceScript:()=>IU,isNodeScript:()=>BU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>kat,prepareExternalProject:()=>Sat});async function Ah(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(K.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(K.join(t,e),`#!/bin/sh +exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function eue(t){let e=await Mt.tryFind(t);if(e?.packageManager){let o=_S(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(K.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(K.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(K.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([Ah(r,"node",process.execPath),...tn!==null?[Ah(r,"run",process.execPath,[p,"run"]),Ah(r,"yarn",process.execPath,[p]),Ah(r,"yarnpkg",process.execPath,[p]),Ah(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),T={project:t,report:new Nt({stdout:new fh.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(b,T));if(!L)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(b,T)}u.npm_package_json=ue.fromPortablePath(K.join(v,dr.manifest))}let h=tn!==null?`yarn/${tn}`:`yarn/${vf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await Ah(r,E,I,v)),u}async function Sat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Pat(async()=>{await oe.mktempPromise(async u=>{let A=K.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?t1(n):n,v=I?xa(I):"an external project";h.write(`Packing ${v} from sources +`);let b=await eue(t),C;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} + +`),C=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn + +`),C="Yarn");let T=C==="Yarn"&&!b?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:T}),te=new Map([["Yarn Classic",async()=>{let pe=a!==null?["workspace",a]:[],Ae=K.join(t,dr.manifest),ye=await oe.readFilePromise(Ae),ae=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ae.code!==0)return ae.code;await oe.writeFilePromise(Ae,ye),await oe.appendFilePromise(K.join(t,".npmignore"),`/.yarn +`),h.write(` +`),delete U.NODE_ENV;let we=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(we.code!==0)return we.code;h.write(` +`);let Pe=await Gc("yarn",[...pe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Pe.code!==0?Pe.code:0}],["Yarn",async()=>{let pe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let Ae=K.join(t,dr.lockfile);await oe.existsPromise(Ae)||await oe.writeFilePromise(Ae,"");let ye=await Gc("yarn",[...pe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return ye.code!==0?ye.code:0}],["npm",async()=>{if(a!==null){let Ee=new fh.PassThrough,De=Vy(Ee);Ee.pipe(h,{end:!1});let ce=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),ce.code!==0)return h.end(),E.end(),ce.code;let ne=(await De).toString().trim();if(!bf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),ke=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${qn(r,Ie)}; please upgrade to ${qn(r,ke)} (npm has been detected as the primary package manager for ${Ot(r,t,yt.PATH)})`)}}let pe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let Ae=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Ae.code!==0)return Ae.code;let ye=new fh.PassThrough,ae=Vy(ye);ye.pipe(h);let we=await Gc("npm",["pack","--silent",...pe],{cwd:t,env:U,stdin:p,stdout:ye,stderr:E});if(we.code!==0)return we.code;let Pe=(await ae).toString().trim().replace(/^.*\n/s,""),g=K.resolve(t,ue.toPortablePath(Pe));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ot(r,A,yt.PATH)})`)})})})}async function xat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return IU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new fh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Mt.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Vx(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await tue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let b=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function wU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await tue(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function bat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await vU(e,await iue(t)),typeof r>"u"&&(r=K.dirname(await oe.realpathPromise(K.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function tue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return bat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new fh.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await vU(r,await Kx(t,{project:e}));let b=await I.findPackageLocation(u,E),C=new gn(b,{baseFs:A}),T=await Mt.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=b),{manifest:T,binFolder:r,env:v,cwd:o}})}async function rue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Vx(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function IU(t,e){return t.manifest.scripts.has(e)}async function nue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=K.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await rue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Xce.default)(e)} script failed (exit code ${Ot(a,I,yt.NUMBER)}, logs can be found here: ${Ot(a,A,yt.PATH)}); run ${Ot(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function kat(t,e,r){IU(t,e)&&await nue(t,e,r)}function BU(t){let e=K.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kx(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new fh.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${qn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let b=null;try{b=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:b}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[b,C]of I.bin){let T=K.resolve(v,C);o.set(b,[I,ue.fromPortablePath(T),BU(T)])}}return o}async function iue(t){return await Kx(t.anchoredLocator,{project:t.project})}async function vU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?Ah(t,r,process.execPath,[o]):Ah(t,r,o,[])))}async function sue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kx(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,b=await M1({project:a,locator:t,binFolder:I});await vU(b.BERRY_BIN_FOLDER,h);let C=BU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),T;try{T=await C}finally{await oe.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function Qat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await sue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Xce,Zce,fh,$ce,Dat,Pat,DU=Et(()=>{Pt();Pt();nA();b1();Xce=$e(EU()),Zce=$e(nd()),fh=Be("stream");AE();Yl();L1();N1();Px();ql();jl();kf();xo();$ce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))($ce||{});Dat=2,Pat=(0,Zce.default)(Dat)});var LE=_((M4t,aue)=>{"use strict";var oue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);aue.exports=t=>t?Object.keys(t).map(e=>[oue.has(e)?oue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var OE=_((O4t,due)=>{"use strict";var lue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Fat=Be("events"),cue=Be("stream"),uue=Be("string_decoder").StringDecoder,Mf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),ph=Symbol("emittedEnd"),Jx=Symbol("emittingEnd"),O1=Symbol("emittedError"),zx=Symbol("closed"),Aue=Symbol("read"),Xx=Symbol("flush"),fue=Symbol("flushChunk"),ka=Symbol("encoding"),Uf=Symbol("decoder"),Zx=Symbol("flowing"),U1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),PU=Symbol("bufferPush"),SU=Symbol("bufferShift"),Fo=Symbol("objectMode"),To=Symbol("destroyed"),xU=Symbol("emitData"),pue=Symbol("emitEnd"),bU=Symbol("emitEnd2"),_f=Symbol("async"),_1=t=>Promise.resolve().then(t),hue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Tat=hue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Rat=hue&&Symbol.iterator||Symbol("iterator not implemented"),Nat=t=>t==="end"||t==="finish"||t==="prefinish",Lat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Mat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),$x=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},kU=class extends $x{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};due.exports=class gue extends cue{constructor(e){super(),this[Zx]=!1,this[U1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[_f]=e&&!!e.async||!1,this[Uf]=this[ka]?new uue(this[ka]):null,this[Mf]=!1,this[ph]=!1,this[Jx]=!1,this[zx]=!1,this[O1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[To]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[Uf]&&this[Uf].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[Uf]=e?new uue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Uf].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[_f]}set async(e){this[_f]=this[_f]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[To])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[_f]?_1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Mat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Lat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[Uf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[Uf].write(e)),this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[To])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Of](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[Aue](e||null,this.buffer[0]);return this[Of](),r}[Aue](e,r){return e===r.length||e===null?this[SU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[U1])&&this[Of](),this}[ME](){this[To]||(this[U1]=!1,this[Zx]=!0,this.emit("resume"),this.buffer.length?this[Xx]():this[Mf]?this[Of]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Zx]=!1,this[U1]=!0}get destroyed(){return this[To]}get flowing(){return this[Zx]}get paused(){return this[U1]}[PU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[SU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[Xx](e){do;while(this[fue](this[SU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[fue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[To])return;let o=this[ph];return r=r||{},e===lue.stdout||e===lue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new kU(this,e,r):new $x(this,e,r)),this[_f]?_1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):Nat(e)&&this[ph]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[O1]&&(this[_f]?_1(()=>r.call(this,this[O1])):r.call(this,this[O1])),o}get emittedEnd(){return this[ph]}[Of](){!this[Jx]&&!this[ph]&&!this[To]&&this.buffer.length===0&&this[Mf]&&(this[Jx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[zx]&&this.emit("close"),this[Jx]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==To&&this[To])return;if(e==="data")return r?this[_f]?_1(()=>this[xU](r)):this[xU](r):!1;if(e==="end")return this[pue]();if(e==="close"){if(this[zx]=!0,!this[ph]&&!this[To])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[O1]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[xU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[pue](){this[ph]||(this[ph]=!0,this.readable=!1,this[_f]?_1(()=>this[bU]()):this[bU]())}[bU](){if(this[Uf]){let r=this[Uf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(To,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[Tat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(To,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[Rat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[To]?(e?this.emit("error",e):this.emit(To),this):(this[To]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[zx]&&this.close(),e?this.emit("error",e):this.emit(To),this)}static isStream(e){return!!e&&(e instanceof gue||e instanceof cue||e instanceof Fat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var yue=_((U4t,mue)=>{var Oat=Be("zlib").constants||{ZLIB_VERNUM:4736};mue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Oat))});var WU=_(cl=>{"use strict";var NU=Be("assert"),hh=Be("buffer").Buffer,wue=Be("zlib"),Qd=cl.constants=yue(),Uat=OE(),Eue=hh.concat,Fd=Symbol("_superWrite"),_E=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},_at=Symbol("opts"),H1=Symbol("flushFlag"),Cue=Symbol("finishFlushFlag"),YU=Symbol("fullFlushFlag"),ti=Symbol("handle"),eb=Symbol("onError"),UE=Symbol("sawError"),QU=Symbol("level"),FU=Symbol("strategy"),TU=Symbol("ended"),_4t=Symbol("_defaultFullFlush"),tb=class extends Uat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[UE]=!1,this[TU]=!1,this[_at]=e,this[H1]=e.flush,this[Cue]=e.finishFlush;try{this[ti]=new wue[r](e)}catch(o){throw new _E(o)}this[eb]=o=>{this[UE]||(this[UE]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[eb](new _E(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[UE])return NU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[YU]),this.write(Object.assign(hh.alloc(0),{[H1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Cue]),this[TU]=!0,super.end(null,null,o)}get ended(){return this[TU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=hh.from(e,r)),this[UE])return;NU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},hh.concat=h=>h;let A;try{let h=typeof e[H1]=="number"?e[H1]:this[H1];A=this[ti]._processChunk(e,h),hh.concat=Eue}catch(h){hh.concat=Eue,this[eb](new _E(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[eb](new _E(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](hh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[QU]=e,this[FU]=r)}}}},LU=class extends Hf{constructor(e){super(e,"Deflate")}},MU=class extends Hf{constructor(e){super(e,"Inflate")}},RU=Symbol("_portable"),OU=class extends Hf{constructor(e){super(e,"Gzip"),this[RU]=e&&!!e.portable}[Fd](e){return this[RU]?(this[RU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},UU=class extends Hf{constructor(e){super(e,"Gunzip")}},_U=class extends Hf{constructor(e){super(e,"DeflateRaw")}},HU=class extends Hf{constructor(e){super(e,"InflateRaw")}},jU=class extends Hf{constructor(e){super(e,"Unzip")}},rb=class extends tb{constructor(e,r){e=e||{},e.flush=e.flush||Qd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Qd.BROTLI_OPERATION_FINISH,super(e,r),this[YU]=Qd.BROTLI_OPERATION_FLUSH}},qU=class extends rb{constructor(e){super(e,"BrotliCompress")}},GU=class extends rb{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=LU;cl.Inflate=MU;cl.Gzip=OU;cl.Gunzip=UU;cl.DeflateRaw=_U;cl.InflateRaw=HU;cl.Unzip=jU;typeof wue.BrotliCompress=="function"?(cl.BrotliCompress=qU,cl.BrotliDecompress=GU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var HE=_((q4t,Iue)=>{var Hat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Iue.exports=Hat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var nb=_((Y4t,Bue)=>{"use strict";var jat=OE(),VU=HE(),KU=Symbol("slurp");Bue.exports=class extends jat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=VU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=VU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[KU](r),o&&this[KU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[KU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?VU(e[o]):e[o])}}});var JU=_(ib=>{"use strict";ib.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);ib.code=new Map(Array.from(ib.name).map(t=>[t[1],t[0]]))});var Sue=_((V4t,Pue)=>{"use strict";var qat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Yat(t,e):Gat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Gat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Yat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=vue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Due(a))}},Wat=t=>{let e=t[0],r=e===128?Kat(t.slice(1,t.length)):e===255?Vat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Vat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=vue(n):n===0?u=n:(o=!0,u=Due(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Kat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},vue=t=>(255^t)&255,Due=t=>(255^t)+1&255;Pue.exports={encode:qat,parse:Wat}});var qE=_((K4t,bue)=>{"use strict";var zU=JU(),jE=Be("path").posix,xue=Sue(),XU=Symbol("slurp"),ul=Symbol("type"),e3=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=gh(e,r+100,8),this.uid=gh(e,r+108,8),this.gid=gh(e,r+116,8),this.size=gh(e,r+124,12),this.mtime=ZU(e,r+136,12),this.cksum=gh(e,r+148,12),this[XU](o),this[XU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=gh(e,r+329,8),this.devmin=gh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=ZU(e,r+476,12),this.ctime=ZU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Jat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Rd(e,r,100,n)||this.needPax,this.needPax=dh(e,r+100,8,this.mode)||this.needPax,this.needPax=dh(e,r+108,8,this.uid)||this.needPax,this.needPax=dh(e,r+116,8,this.gid)||this.needPax,this.needPax=dh(e,r+124,12,this.size)||this.needPax,this.needPax=$U(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Rd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Rd(e,r+265,32,this.uname)||this.needPax,this.needPax=Rd(e,r+297,32,this.gname)||this.needPax,this.needPax=dh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=dh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Rd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Rd(e,r+345,155,u)||this.needPax:(this.needPax=Rd(e,r+345,130,u)||this.needPax,this.needPax=$U(e,r+476,12,this.atime)||this.needPax,this.needPax=$U(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),ZU=(t,e,r)=>zat(gh(t,e,r)),zat=t=>t===null?null:new Date(t*1e3),gh=(t,e,r)=>t[e]&128?xue.parse(t.slice(e,e+r)):Zat(t,e,r),Xat=t=>isNaN(t)?null:t,Zat=(t,e,r)=>Xat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),$at={12:8589934591,8:2097151},dh=(t,e,r,o)=>o===null?!1:o>$at[r]||o<0?(xue.encode(o,t.slice(e,e+r)),!0):(elt(t,e,r,o),!1),elt=(t,e,r,o)=>t.write(tlt(o,r),e,r,"ascii"),tlt=(t,e)=>rlt(Math.floor(t).toString(8),e),rlt=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",$U=(t,e,r,o)=>o===null?!1:dh(t,e,r,o.getTime()/1e3),nlt=new Array(156).join("\0"),Rd=(t,e,r,o)=>o===null?!1:(t.write(o+nlt,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=e3});var sb=_((J4t,kue)=>{"use strict";var ilt=qE(),slt=Be("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new ilt({path:("PaxHeader/"+slt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(olt(alt(t),e),r);var olt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,alt=t=>t.replace(/\n$/,"").split(` +`).reduce(llt,Object.create(null)),llt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};kue.exports=j1});var GE=_((z4t,Que)=>{Que.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var ob=_((X4t,Fue)=>{"use strict";Fue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var r3=_(($4t,Tue)=>{"use strict";var ab=["|","<",">","?",":"],t3=ab.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),clt=new Map(ab.map((t,e)=>[t,t3[e]])),ult=new Map(t3.map((t,e)=>[t,ab[e]]));Tue.exports={encode:t=>ab.reduce((e,r)=>e.split(r).join(clt.get(r)),t),decode:t=>t3.reduce((e,r)=>e.split(r).join(ult.get(r)),t)}});var n3=_((eUt,Nue)=>{var{isAbsolute:Alt,parse:Rue}=Be("path").win32;Nue.exports=t=>{let e="",r=Rue(t);for(;Alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Mue=_((tUt,Lue)=>{"use strict";Lue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var p3=_((iUt,Xue)=>{"use strict";var Gue=OE(),Yue=sb(),Wue=qE(),oA=Be("fs"),Oue=Be("path"),sA=HE(),flt=GE(),Vue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),flt(e)+"/"+t):sA(t),plt=16*1024*1024,Uue=Symbol("process"),_ue=Symbol("file"),Hue=Symbol("directory"),s3=Symbol("symlink"),jue=Symbol("hardlink"),q1=Symbol("header"),lb=Symbol("read"),o3=Symbol("lstat"),ub=Symbol("onlstat"),a3=Symbol("onread"),l3=Symbol("onreadlink"),c3=Symbol("openfile"),u3=Symbol("onopenfile"),mh=Symbol("close"),Ab=Symbol("mode"),A3=Symbol("awaitDrain"),i3=Symbol("ondrain"),aA=Symbol("prefix"),que=Symbol("hadError"),Kue=ob(),hlt=r3(),Jue=n3(),zue=Mue(),fb=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||plt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=hlt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[ub](this.statCache.get(this.absolute)):this[o3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[o3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[ub](r)})}[ub](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=dlt(e),this.emit("stat",e),this[Uue]()}[Uue](){switch(this.type){case"File":return this[_ue]();case"Directory":return this[Hue]();case"SymbolicLink":return this[s3]();default:return this.end()}}[Ab](e){return zue(e,this.type==="Directory",this.portable)}[aA](e){return Vue(e,this.prefix)}[q1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[Ab](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Hue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[q1](),this.end()}[s3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){this.linkpath=sA(e),this[q1](),this.end()}[jue](e){this.type="Link",this.linkpath=sA(Oue.relative(this.cwd,e)),this.stat.size=0,this[q1](),this.end()}[_ue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[jue](r)}this.linkCache.set(e,this.absolute)}if(this[q1](),this.stat.size===0)return this.end();this[c3]()}[c3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[u3](r)})}[u3](e){if(this.fd=e,this[que])return this[mh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[lb]()}[lb](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[mh](()=>this.emit("error",u));this[a3](A)})}[mh](e){oA.close(this.fd,e)}[a3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[i3]())}[A3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[lb]()}}),f3=class extends fb{[o3](){this[ub](oA.lstatSync(this.absolute))}[s3](){this[l3](oA.readlinkSync(this.absolute))}[c3](){this[u3](oA.openSync(this.absolute,"r"))}[lb](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[a3](A),e=!1}finally{if(e)try{this[mh](()=>{})}catch{}}}[A3](e){e()}[mh](e){oA.closeSync(this.fd),e()}},glt=Kue(class extends Gue{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[Ab](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Vue(e,this.prefix)}[Ab](e){return zue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});fb.Sync=f3;fb.Tar=glt;var dlt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Xue.exports=fb});var wb=_((oUt,iAe)=>{"use strict";var Eb=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},mlt=OE(),ylt=WU(),Elt=nb(),I3=p3(),Clt=I3.Sync,wlt=I3.Tar,Ilt=BP(),Zue=Buffer.alloc(1024),gb=Symbol("onStat"),pb=Symbol("ended"),lA=Symbol("queue"),YE=Symbol("current"),Nd=Symbol("process"),hb=Symbol("processing"),$ue=Symbol("processJob"),cA=Symbol("jobs"),h3=Symbol("jobDone"),db=Symbol("addFSEntry"),eAe=Symbol("addTarEntry"),y3=Symbol("stat"),E3=Symbol("readdir"),mb=Symbol("onreaddir"),yb=Symbol("pipe"),tAe=Symbol("entry"),g3=Symbol("entryOpt"),C3=Symbol("writeEntryClass"),nAe=Symbol("write"),d3=Symbol("ondrain"),Cb=Be("fs"),rAe=Be("path"),Blt=ob(),m3=HE(),B3=Blt(class extends mlt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=m3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[C3]=I3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new ylt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[d3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[d3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new Ilt,this[cA]=0,this.jobs=+e.jobs||4,this[hb]=!1,this[pb]=!1}[nAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[pb]=!0,this[Nd](),this}write(e){if(this[pb])throw new Error("write after end");return e instanceof Elt?this[eAe](e):this[db](e),this.flowing}[eAe](e){let r=m3(rAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new Eb(e.path,r,!1);o.entry=new wlt(e,this[g3](o)),o.entry.on("end",a=>this[h3](o)),this[cA]+=1,this[lA].push(o)}this[Nd]()}[db](e){let r=m3(rAe.resolve(this.cwd,e));this[lA].push(new Eb(e,r)),this[Nd]()}[y3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";Cb[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[gb](e,a)})}[gb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Nd]()}[E3](e){e.pending=!0,this[cA]+=1,Cb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[mb](e,o)})}[mb](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Nd]()}[Nd](){if(!this[hb]){this[hb]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[tAe](e){this[cA]+=1;try{return new this[C3](e.path,this[g3](e)).on("end",()=>this[h3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[d3](){this[YE]&&this[YE].entry&&this[YE].entry.resume()}[yb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),w3=class extends B3{constructor(e){super(e),this[C3]=Clt}pause(){}resume(){}[y3](e){let r=this.follow?"statSync":"lstatSync";this[gb](e,Cb[r](e.absolute))}[E3](e,r){this[mb](e,Cb.readdirSync(e.absolute))}[yb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[nAe](a)})}};B3.Sync=w3;iAe.exports=B3});var $E=_(Y1=>{"use strict";var vlt=OE(),Dlt=Be("events").EventEmitter,Qa=Be("fs"),P3=Qa.writev;if(!P3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;P3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var XE=Symbol("_autoClose"),Yc=Symbol("_close"),G1=Symbol("_ended"),Gn=Symbol("_fd"),sAe=Symbol("_finished"),Eh=Symbol("_flags"),v3=Symbol("_flush"),S3=Symbol("_handleChunk"),x3=Symbol("_makeBuf"),Pb=Symbol("_mode"),Ib=Symbol("_needDrain"),JE=Symbol("_onerror"),ZE=Symbol("_onopen"),D3=Symbol("_onread"),VE=Symbol("_onwrite"),Ch=Symbol("_open"),jf=Symbol("_path"),Ld=Symbol("_pos"),uA=Symbol("_queue"),KE=Symbol("_read"),oAe=Symbol("_readSize"),yh=Symbol("_reading"),Bb=Symbol("_remain"),aAe=Symbol("_size"),vb=Symbol("_write"),WE=Symbol("_writing"),Db=Symbol("_defaultFlag"),zE=Symbol("_errored"),Sb=class extends vlt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[zE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[oAe]=r.readSize||16*1024*1024,this[yh]=!1,this[aAe]=typeof r.size=="number"?r.size:1/0,this[Bb]=this[aAe],this[XE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[KE]():this[Ch]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ch](){Qa.open(this[jf],"r",(e,r)=>this[ZE](e,r))}[ZE](e,r){e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[KE]())}[x3](){return Buffer.allocUnsafe(Math.min(this[oAe],this[Bb]))}[KE](){if(!this[yh]){this[yh]=!0;let e=this[x3]();if(e.length===0)return process.nextTick(()=>this[D3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[D3](r,o,a))}}[D3](e,r,o){this[yh]=!1,e?this[JE](e):this[S3](r,o)&&this[KE]()}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[JE](e){this[yh]=!0,this[Yc](),this.emit("error",e)}[S3](e,r){let o=!1;return this[Bb]-=e,e>0&&(o=super.write(ethis[ZE](e,r))}[ZE](e,r){this[Db]&&this[Eh]==="r+"&&e&&e.code==="ENOENT"?(this[Eh]="w",this[Ch]()):e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[v3]())}end(e,r){return e&&this.write(e,r),this[G1]=!0,!this[WE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[G1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[WE]||this[uA].length?(this[uA].push(e),this[Ib]=!0,!1):(this[WE]=!0,this[vb](e),!0)}[vb](e){Qa.write(this[Gn],e,0,e.length,this[Ld],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[JE](e):(this[Ld]!==null&&(this[Ld]+=r),this[uA].length?this[v3]():(this[WE]=!1,this[G1]&&!this[sAe]?(this[sAe]=!0,this[Yc](),this.emit("finish")):this[Ib]&&(this[Ib]=!1,this.emit("drain"))))}[v3](){if(this[uA].length===0)this[G1]&&this[VE](null,0);else if(this[uA].length===1)this[vb](this[uA].pop());else{let e=this[uA];this[uA]=[],P3(this[Gn],e,this[Ld],(r,o)=>this[VE](r,o))}}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},k3=class extends xb{[Ch](){let e;if(this[Db]&&this[Eh]==="r+")try{e=Qa.openSync(this[jf],this[Eh],this[Pb])}catch(r){if(r.code==="ENOENT")return this[Eh]="w",this[Ch]();throw r}else e=Qa.openSync(this[jf],this[Eh],this[Pb]);this[ZE](null,e)}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[vb](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Ld])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};Y1.ReadStream=Sb;Y1.ReadStreamSync=b3;Y1.WriteStream=xb;Y1.WriteStreamSync=k3});var Nb=_((cUt,hAe)=>{"use strict";var Plt=ob(),Slt=qE(),xlt=Be("events"),blt=BP(),klt=1024*1024,Qlt=nb(),lAe=sb(),Flt=WU(),Q3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),qf=Symbol("readEntry"),F3=Symbol("nextEntry"),cAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),W1=Symbol("globalExtendedHeader"),wh=Symbol("meta"),uAe=Symbol("emitMeta"),fi=Symbol("buffer"),Gf=Symbol("queue"),Od=Symbol("ended"),AAe=Symbol("emittedEnd"),Ud=Symbol("emit"),Fa=Symbol("unzip"),bb=Symbol("consumeChunk"),kb=Symbol("consumeChunkSub"),T3=Symbol("consumeBody"),fAe=Symbol("consumeMeta"),pAe=Symbol("consumeHeader"),Qb=Symbol("consuming"),R3=Symbol("bufferConcat"),N3=Symbol("maybeEnd"),V1=Symbol("writing"),Ih=Symbol("aborted"),Fb=Symbol("onDone"),_d=Symbol("sawValidEntry"),Tb=Symbol("sawNullBlock"),Rb=Symbol("sawEOF"),Tlt=t=>!0;hAe.exports=Plt(class extends xlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[_d]=null,this.on(Fb,r=>{(this[Xl]==="begin"||this[_d]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Fb,e.ondone):this.on(Fb,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||klt,this.filter=typeof e.filter=="function"?e.filter:Tlt,this.writable=!0,this.readable=!1,this[Gf]=new blt,this[fi]=null,this[qf]=null,this[Md]=null,this[Xl]="begin",this[wh]="",this[Zl]=null,this[W1]=null,this[Od]=!1,this[Fa]=null,this[Ih]=!1,this[Tb]=!1,this[Rb]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[pAe](e,r){this[_d]===null&&(this[_d]=!1);let o;try{o=new Slt(e,r,this[Zl],this[W1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Tb]?(this[Rb]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[Ud]("eof")):(this[Tb]=!0,this[Ud]("nullBlock"));else if(this[Tb]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Qlt(o,this[Zl],this[W1]);if(!this[_d])if(n.remain){let u=()=>{n.invalid||(this[_d]=!0)};n.on("end",u)}else this[_d]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Ud]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[wh]="",n.on("data",u=>this[wh]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Ud]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[qf]?this[Gf].push(n):(this[Gf].push(n),this[F3]())))}}}[cAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[F3]()),r=!1)):(this[qf]=null,r=!1),r}[F3](){do;while(this[cAe](this[Gf].shift()));if(!this[Gf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[T3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[fAe](e,r){let o=this[Md],a=this[T3](e,r);return this[Md]||this[uAe](o),a}[Ud](e,r,o){!this[Gf].length&&!this[qf]?this.emit(e,r,o):this[Gf].push([e,r,o])}[uAe](e){switch(this[Ud]("meta",this[wh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=lAe.parse(this[wh],this[Zl],!1);break;case"GlobalExtendedHeader":this[W1]=lAe.parse(this[wh],this[W1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[wh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[wh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ih]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ih])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[bb](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Od]=!0,this[bb]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[bb](e),this[V1]=!1;let r=this[Gf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[Gf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[R3](e){e&&!this[Ih]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[N3](){if(this[Od]&&!this[AAe]&&!this[Ih]&&!this[Qb]){this[AAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Ud](Fb)}}[bb](e){if(this[Qb])this[R3](e);else if(!e&&!this[fi])this[N3]();else{if(this[Qb]=!0,this[fi]){this[R3](e);let r=this[fi];this[fi]=null,this[kb](r)}else this[kb](e);for(;this[fi]&&this[fi].length>=512&&!this[Ih]&&!this[Rb];){let r=this[fi];this[fi]=null,this[kb](r)}this[Qb]=!1}(!this[fi]||this[Od])&&this[N3]()}[kb](e){let r=0,o=e.length;for(;r+512<=o&&!this[Ih]&&!this[Rb];)switch(this[Xl]){case"begin":case"header":this[pAe](e,r),r+=512;break;case"ignore":case"body":r+=this[T3](e,r);break;case"meta":r+=this[fAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var Rlt=LE(),dAe=Nb(),eC=Be("fs"),Nlt=$E(),gAe=Be("path"),L3=GE();yAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Rlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Mlt(o,e),o.noResume||Llt(o),o.file&&o.sync?Olt(o):o.file?Ult(o,r):mAe(o)};var Llt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Mlt=(t,e)=>{let r=new Map(e.map(n=>[L3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||gAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(gAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(L3(n)):n=>a(L3(n))},Olt=t=>{let e=mAe(t),r=t.file,o=!0,a;try{let n=eC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new dAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),eC.stat(a,(p,h)=>{if(p)A(p);else{let E=new Nlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},mAe=t=>new dAe(t)});var vAe=_((AUt,BAe)=>{"use strict";var _lt=LE(),Mb=wb(),EAe=$E(),CAe=Lb(),wAe=Be("path");BAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=_lt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Hlt(o,e):o.file?jlt(o,e,r):o.sync?qlt(o,e):Glt(o,e)};var Hlt=(t,e)=>{let r=new Mb.Sync(t),o=new EAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),IAe(r,e)},jlt=(t,e,r)=>{let o=new Mb(t),a=new EAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return M3(o,e),r?n.then(r,r):n},IAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?CAe({file:wAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},M3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return CAe({file:wAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>M3(t,e));t.add(r)}t.end()},qlt=(t,e)=>{let r=new Mb.Sync(t);return IAe(r,e),r},Glt=(t,e)=>{let r=new Mb(t);return M3(r,e),r}});var O3=_((fUt,QAe)=>{"use strict";var Ylt=LE(),DAe=wb(),Al=Be("fs"),PAe=$E(),SAe=Lb(),xAe=Be("path"),bAe=qE();QAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Wlt(o,e):Klt(o,e,r)};var Wlt=(t,e)=>{let r=new DAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Vlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},Vlt=(t,e,r,o,a)=>{let n=new PAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Jlt(e,a)},Klt=(t,e,r)=>{e=Array.from(e);let o=new DAe(t),a=(u,A,p)=>{let h=(C,T)=>{C?Al.close(u,L=>p(C)):p(null,T)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),b=(C,T)=>{if(C)return h(C);if(I+=T,I<512&&T)return Al.read(u,v,I,v.length-I,E+I,b);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new bAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,b)};Al.read(u,v,0,512,E,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,b)=>{if(v)return Al.close(I,()=>A(v));a(I,b.size,(C,T)=>{if(C)return A(C);let L=new PAe.WriteStream(t.file,{fd:I,start:T});o.pipe(L),L.on("error",A),L.on("close",u),kAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Jlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?SAe({file:xAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},kAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return SAe({file:xAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>kAe(t,e));t.add(r)}t.end()}});var TAe=_((pUt,FAe)=>{"use strict";var zlt=LE(),Xlt=O3();FAe.exports=(t,e,r)=>{let o=zlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Zlt(o),Xlt(o,e,r)};var Zlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((hUt,NAe)=>{var{promisify:RAe}=Be("util"),Bh=Be("fs"),$lt=t=>{if(!t)t={mode:511,fs:Bh};else if(typeof t=="object")t={mode:511,fs:Bh,...t};else if(typeof t=="number")t={mode:t,fs:Bh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Bh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Bh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Bh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Bh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Bh.mkdirSync,t};NAe.exports=$lt});var OAe=_((gUt,MAe)=>{var ect=process.platform,{resolve:tct,parse:rct}=Be("path"),nct=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=tct(t),ect==="win32"){let e=/[*|"<>?:]/,{root:r}=rct(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};MAe.exports=nct});var qAe=_((dUt,jAe)=>{var{dirname:UAe}=Be("path"),_Ae=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?_Ae(t,UAe(e),e):void 0),HAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?HAe(t,UAe(e),e):void 0}};jAe.exports={findMade:_Ae,findMadeSync:HAe}});var H3=_((mUt,YAe)=>{var{dirname:GAe}=Be("path"),U3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return U3(o,e).then(n=>U3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},_3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return _3(t,e,_3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};YAe.exports={mkdirpManual:U3,mkdirpManualSync:_3}});var KAe=_((yUt,VAe)=>{var{dirname:WAe}=Be("path"),{findMade:ict,findMadeSync:sct}=qAe(),{mkdirpManual:oct,mkdirpManualSync:act}=H3(),lct=(t,e)=>(e.recursive=!0,WAe(t)===t?e.mkdirAsync(t,e):ict(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return oct(t,e);throw a}))),cct=(t,e)=>{if(e.recursive=!0,WAe(t)===t)return e.mkdirSync(t,e);let o=sct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return act(t,e);throw a}};VAe.exports={mkdirpNative:lct,mkdirpNativeSync:cct}});var ZAe=_((EUt,XAe)=>{var JAe=Be("fs"),uct=process.version,j3=uct.replace(/^v/,"").split("."),zAe=+j3[0]>10||+j3[0]==10&&+j3[1]>=12,Act=zAe?t=>t.mkdir===JAe.mkdir:()=>!1,fct=zAe?t=>t.mkdirSync===JAe.mkdirSync:()=>!1;XAe.exports={useNative:Act,useNativeSync:fct}});var ife=_((CUt,nfe)=>{var tC=LAe(),rC=OAe(),{mkdirpNative:$Ae,mkdirpNativeSync:efe}=KAe(),{mkdirpManual:tfe,mkdirpManualSync:rfe}=H3(),{useNative:pct,useNativeSync:hct}=ZAe(),nC=(t,e)=>(t=rC(t),e=tC(e),pct(e)?$Ae(t,e):tfe(t,e)),gct=(t,e)=>(t=rC(t),e=tC(e),hct(e)?efe(t,e):rfe(t,e));nC.sync=gct;nC.native=(t,e)=>$Ae(rC(t),tC(e));nC.manual=(t,e)=>tfe(rC(t),tC(e));nC.nativeSync=(t,e)=>efe(rC(t),tC(e));nC.manualSync=(t,e)=>rfe(rC(t),tC(e));nfe.exports=nC});var Afe=_((wUt,ufe)=>{"use strict";var $l=Be("fs"),Hd=Be("path"),dct=$l.lchown?"lchown":"chown",mct=$l.lchownSync?"lchownSync":"chownSync",ofe=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),sfe=(t,e,r)=>{try{return $l[mct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},yct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},Ect=ofe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,q3=ofe?(t,e,r)=>{try{return sfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;yct(t,e,r)}}:(t,e,r)=>sfe(t,e,r),Cct=process.version,afe=(t,e,r)=>$l.readdir(t,e,r),wct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(Cct)&&(afe=(t,e,r)=>$l.readdir(t,r));var Ob=(t,e,r,o)=>{$l[dct](t,e,r,Ect(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},lfe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(Hd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,lfe(t,u,r,o,a)});if(e.isDirectory())G3(Hd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Hd.resolve(t,e.name);Ob(u,r,o,a)});else{let n=Hd.resolve(t,e.name);Ob(n,r,o,a)}},G3=(t,e,r,o)=>{afe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ob(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ob(t,e,r,o)}};n.forEach(h=>lfe(t,h,e,r,p))})},Ict=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(Hd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&cfe(Hd.resolve(t,e.name),r,o),q3(Hd.resolve(t,e.name),r,o)},cfe=(t,e,r)=>{let o;try{o=wct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return q3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>Ict(t,a,e,r)),q3(t,e,r)};ufe.exports=G3;G3.sync=cfe});var gfe=_((IUt,Y3)=>{"use strict";var ffe=ife(),ec=Be("fs"),Ub=Be("path"),pfe=Afe(),Wc=HE(),_b=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Hb=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},jb=(t,e)=>t.get(Wc(e)),K1=(t,e,r)=>t.set(Wc(e),r),Bct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Hb(t,r&&r.code||"ENOTDIR")),e(r)})};Y3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),b=(L,U)=>{L?r(L):(K1(I,t,!0),U&&p?pfe(U,u,A,J=>b(J)):n?ec.chmod(t,a,r):r())};if(I&&jb(I,t)===!0)return b();if(t===v)return Bct(t,b);if(h)return ffe(t,{mode:a}).then(L=>b(null,L),b);let T=Wc(Ub.relative(v,t)).split("/");qb(v,T,a,I,E,v,null,b)};var qb=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ub.resolve(t+"/"+p));if(jb(o,h))return qb(h,e,r,o,a,n,u,A);ec.mkdir(h,r,hfe(h,e,r,o,a,n,u,A))},hfe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())qb(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,hfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new _b(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,qb(t,e,r,o,a,n,u,A))},vct=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Hb(t,r)}};Y3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{K1(E,t,!0),L&&A&&pfe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&jb(E,t)===!0)return v();if(t===I)return vct(I),v();if(p)return v(ffe.sync(t,o));let C=Wc(Ub.relative(I,t)).split("/"),T=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ub.resolve(U)),!jb(E,U))try{ec.mkdirSync(U,o),T=T||U,K1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){K1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),T=T||U,K1(E,U,!0);continue}else if(te.isSymbolicLink())return new _b(U,U+"/"+C.join("/"))}return v(T)}});var V3=_((BUt,dfe)=>{var W3=Object.create(null),{hasOwnProperty:Dct}=Object.prototype;dfe.exports=t=>(Dct.call(W3,t)||(W3[t]=t.normalize("NFKD")),W3[t])});var Cfe=_((vUt,Efe)=>{var mfe=Be("assert"),Pct=V3(),Sct=GE(),{join:yfe}=Be("path"),xct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,bct=xct==="win32";Efe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=yfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(b=>{let C=t.get(b);mfe.equal(C[0],h),C.length===1?t.delete(b):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(T=>v.add(T)))}),I.forEach(b=>{let C=t.get(b);mfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(b):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(b=>u(b)),!0};return{check:n,reserve:(h,E)=>{h=bct?["win32 parallelization disabled"]:h.map(v=>Pct(Sct(yfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,b)=>v.concat(b)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let b=t.get(v);b?b.push(E):t.set(v,[E])}),I.forEach(v=>{let b=t.get(v);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Bfe=_((DUt,Ife)=>{var kct=process.platform,Qct=kct==="win32",Fct=global.__FAKE_TESTING_FS__||Be("fs"),{O_CREAT:Tct,O_TRUNC:Rct,O_WRONLY:Nct,UV_FS_O_FILEMAP:wfe=0}=Fct.constants,Lct=Qct&&!!wfe,Mct=512*1024,Oct=wfe|Rct|Tct|Nct;Ife.exports=Lct?t=>t"w"});var r_=_((PUt,Mfe)=>{"use strict";var Uct=Be("assert"),_ct=Nb(),vn=Be("fs"),Hct=$E(),Yf=Be("path"),Rfe=gfe(),vfe=r3(),jct=Cfe(),qct=n3(),fl=HE(),Gct=GE(),Yct=V3(),Dfe=Symbol("onEntry"),z3=Symbol("checkFs"),Pfe=Symbol("checkFs2"),Wb=Symbol("pruneCache"),X3=Symbol("isReusable"),tc=Symbol("makeFs"),Z3=Symbol("file"),$3=Symbol("directory"),Vb=Symbol("link"),Sfe=Symbol("symlink"),xfe=Symbol("hardlink"),bfe=Symbol("unsupported"),kfe=Symbol("checkPath"),vh=Symbol("mkdir"),Ro=Symbol("onError"),Gb=Symbol("pending"),Qfe=Symbol("pend"),iC=Symbol("unpend"),K3=Symbol("ended"),J3=Symbol("maybeClose"),e_=Symbol("skip"),J1=Symbol("doChown"),z1=Symbol("uid"),X1=Symbol("gid"),Z1=Symbol("checkedCwd"),Nfe=Be("crypto"),Lfe=Bfe(),Wct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,$1=Wct==="win32",Vct=(t,e)=>{if(!$1)return vn.unlink(t,e);let r=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Kct=t=>{if(!$1)return vn.unlinkSync(t);let e=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Ffe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Tfe=t=>Yct(Gct(fl(t))).toLowerCase(),Jct=(t,e)=>{e=Tfe(e);for(let r of t.keys()){let o=Tfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},zct=t=>{for(let e of t.keys())t.delete(e)},e2=class extends _ct{constructor(e){if(e||(e={}),e.ondone=r=>{this[K3]=!0,this[J3]()},super(e),this[Z1]=!1,this.reservations=jct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Gb]=0,this[K3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||$1,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Yf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Dfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[J3](){this[K3]&&this[Gb]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[kfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||$1&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=qct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Yf.isAbsolute(e.path)?e.absolute=fl(Yf.resolve(e.path)):e.absolute=fl(Yf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Yf.win32.parse(e.absolute);e.absolute=r+vfe.encode(e.absolute.substr(r.length));let{root:o}=Yf.win32.parse(e.path);e.path=o+vfe.encode(e.path.substr(o.length))}return!0}[Dfe](e){if(!this[kfe](e))return e.resume();switch(Uct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[Ro](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[iC](),r.resume())}[vh](e,r,o){Rfe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[J1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[z1](e){return Ffe(this.uid,e.uid,this.processUid)}[X1](e){return Ffe(this.gid,e.gid,this.processGid)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=new Hct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[Ro](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[Ro](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[Ro](h,e):this[iC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,b=>b?vn.utimes(h,I,v,C=>u(C&&b)):u())}if(this[J1](e)){n++;let I=this[z1](e),v=this[X1](e);vn.fchown(E,I,v,b=>b?vn.chown(h,I,v,C=>u(C&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Ro](p,e),r()}),e.pipe(A)),A.pipe(a)}[$3](e,r){let o=e.mode&4095||this.dmode;this[vh](e.absolute,o,a=>{if(a){this[Ro](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[iC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[J1](e)&&(n++,vn.chown(e.absolute,this[z1](e),this[X1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Sfe](e,r){this[Vb](e,e.linkpath,"symlink",r)}[xfe](e,r){let o=fl(Yf.resolve(this.cwd,e.linkpath));this[Vb](e,o,"link",r)}[Qfe](){this[Gb]++}[iC](){this[Gb]--,this[J3]()}[e_](e){this[iC](),e.resume()}[X3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!$1}[z3](e){this[Qfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Pfe](e,o))}[Wb](e){e.type==="SymbolicLink"?zct(this.dirCache):e.type!=="Directory"&&Jct(this.dirCache,e.absolute)}[Pfe](e,r){this[Wb](e);let o=A=>{this[Wb](e),r(A)},a=()=>{this[vh](this.cwd,this.dmode,A=>{if(A){this[Ro](A,e),o();return}this[Z1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Yf.dirname(e.absolute));if(A!==this.cwd)return this[vh](A,this.dmode,p=>{if(p){this[Ro](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[e_](e),o();return}if(A||this[X3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);Vct(e.absolute,h=>this[tc](h,e,o))})};this[Z1]?n():a()}[tc](e,r,o){if(e){this[Ro](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[Z3](r,o);case"Link":return this[xfe](r,o);case"SymbolicLink":return this[Sfe](r,o);case"Directory":case"GNUDumpDir":return this[$3](r,o)}}[Vb](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[Ro](n,e):(this[iC](),e.resume()),a()})}},Yb=t=>{try{return[null,t()]}catch(e){return[e,null]}},t_=class extends e2{[tc](e,r){return super[tc](e,r,()=>{})}[z3](e){if(this[Wb](e),!this[Z1]){let n=this[vh](this.cwd,this.dmode);if(n)return this[Ro](n,e);this[Z1]=!0}if(e.absolute!==this.cwd){let n=fl(Yf.dirname(e.absolute));if(n!==this.cwd){let u=this[vh](n,this.dmode);if(u)return this[Ro](u,e)}}let[r,o]=Yb(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[e_](e);if(r||this[X3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Yb(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Yb(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Yb(()=>Kct(e.absolute));this[tc](a,e)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[Ro](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Ro](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[J1](e)){let h=this[z1](e),E=this[X1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[$3](e,r){let o=e.mode&4095||this.dmode,a=this[vh](e.absolute,o);if(a){this[Ro](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[J1](e))try{vn.chownSync(e.absolute,this[z1](e),this[X1](e))}catch{}r(),e.resume()}[vh](e,r){try{return Rfe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Vb](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Ro](n,e)}}};e2.Sync=t_;Mfe.exports=e2});var jfe=_((SUt,Hfe)=>{"use strict";var Xct=LE(),Kb=r_(),Ufe=Be("fs"),_fe=$E(),Ofe=Be("path"),n_=GE();Hfe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Xct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Zct(o,e),o.file&&o.sync?$ct(o):o.file?eut(o,r):o.sync?tut(o):rut(o)};var Zct=(t,e)=>{let r=new Map(e.map(n=>[n_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(n_(n)):n=>a(n_(n))},$ct=t=>{let e=new Kb.Sync(t),r=t.file,o=Ufe.statSync(r),a=t.maxReadSize||16*1024*1024;new _fe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},eut=(t,e)=>{let r=new Kb(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ufe.stat(a,(p,h)=>{if(p)A(p);else{let E=new _fe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},tut=t=>new Kb.Sync(t),rut=t=>new Kb(t)});var qfe=_(us=>{"use strict";us.c=us.create=vAe();us.r=us.replace=O3();us.t=us.list=Lb();us.u=us.update=TAe();us.x=us.extract=jfe();us.Pack=wb();us.Unpack=r_();us.Parse=Nb();us.ReadEntry=nb();us.WriteEntry=p3();us.Header=qE();us.Pax=sb();us.types=JU()});var i_,Gfe,Dh,t2,r2,Yfe=Et(()=>{i_=$e(nd()),Gfe=Be("worker_threads"),Dh=Symbol("kTaskInfo"),t2=class{constructor(e,r){this.fn=e;this.limit=(0,i_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},r2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,i_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Dh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Dh].resolve(r),e[Dh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Dh]?.reject(r),e[Dh]=null}),e.on("exit",r=>{r!==0&&e[Dh]?.reject(new Error(`Worker exited with code ${r}`)),e[Dh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Dh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Vfe=_((QUt,Wfe)=>{var s_;Wfe.exports.getContent=()=>(typeof s_>"u"&&(s_=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),s_)});var Xi={};Kt(Xi,{convertToZip:()=>out,convertToZipWorker:()=>l_,extractArchiveTo:()=>Zfe,getDefaultTaskPool:()=>zfe,getTaskPoolForConfiguration:()=>Xfe,makeArchiveFromDirectory:()=>sut});function nut(t,e){switch(t){case"async":return new t2(l_,{poolSize:e});case"workers":return new r2((0,a_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zfe(){return typeof o_>"u"&&(o_=nut("workers",Ji.availableParallelism())),o_}function Xfe(t){return typeof t>"u"?zfe():ol(iut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new t2(l_,{poolSize:r});case"workers":return new r2((0,a_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function l_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Zfe(u,n,a),n.saveAndClose(),e}async function sut(t,{baseFs:e=new Rn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=K.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=K.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function out(t,e={}){let r=await oe.mktempPromise(),o=K.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Xfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*aut(t){let e=new Jfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of aut(t)){if(a(n))continue;let u=K.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=K.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,Jfe,a_,o_,iut,$fe=Et(()=>{Ye();Pt();nA();Kfe=Be("stream"),Jfe=$e(qfe());Yfe();jl();a_=$e(Vfe());iut=new WeakMap});var tpe=_((c_,epe)=>{(function(t,e){typeof c_=="object"?epe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(c_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,b,C,T=A.slice(0);if(T.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){b=++v===L.length,r(U,n[U],b,T,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var $s={};Kt($s,{emitList:()=>lut,emitTree:()=>spe,treeNodeToJson:()=>ipe,treeNodeToTreeify:()=>npe});function npe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,b=[];typeof E<"u"&&b.push(md(e,E,2)),typeof I<"u"&&b.push(Ot(e,I[0],I[1])),b.length===0&&b.push(md(e,`${p}`,2));let C=b.join(": ").trim(),T=`\0${o++}\0`,L=u[`${T}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function ipe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return yd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[cut(n)]=e(u));return typeof r.value>"u"?a:{value:yd(r.value[0],r.value[1]),children:a}};return e(t)}function lut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));spe({children:a},{configuration:e,stdout:r,json:o})}function spe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(ipe(A))} +`);return}let n=(0,rpe.asTree)(npe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function cut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var rpe,ope=Et(()=>{rpe=$e(tpe());ql()});function n2(t){let e=t.match(uut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var ape,u_,A_,Jb,Lr,uut,f_=Et(()=>{Ye();Pt();Pt();nA();ape=Be("crypto"),u_=$e(Be("fs"));Yl();rh();jl();xo();A_=Ky(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Jb=Ky(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ape.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Jb,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${aE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=n2(r).hash.slice(0,10);return`${aE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=n2(e);if(r===null||r{let ae=new zi,we=K.join(Bt.root,sO(e));return ae.mkdirSync(we,{recursive:!0}),ae.writeJsonSync(K.join(we,dr.manifest),{name:fn(e),mocked:!0}),ae},E=async(ae,{isColdHit:we,controlPath:Pe=null})=>{if(Pe===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!we?n2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(ae)}`:r;if(Pe!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(Pe)}`:r;if(Ee!==ce)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&Ee!==r&&(this.check?De="throw":n2(r).cacheKey!==n2(Ee).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async ae=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let we=await n(),Pe=we.getRealPath();we.saveAndClose(),await oe.chmodPromise(Pe,420);let g=await E(ae,{controlPath:Pe,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let ae=await n(),we=ae.getRealPath();return ae.saveAndClose(),{source:"loader",path:we}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:ae,source:we}=await v(),{hash:Pe}=await E(ae,{isColdHit:!0}),g=this.getLocatorPath(e,Pe),Ee=[];we!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,De,Pe]},C=async()=>{let we=(async()=>{let Pe=u.unstablePackages?.has(e.locatorHash),g=Pe||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=De||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,Ie=g;if(!De)if(this.check)ee=await I(Ie);else{let ke=await E(Ie,{isColdHit:!1});if(ke.isValid)ee=ke.hash;else return b()}return[De,Ie,ee]}else{if(this.immutable&&Pe)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,we);try{return await we}finally{this.mutexes.delete(e.locatorHash)}};for(let ae;ae=this.mutexes.get(e.locatorHash);)await ae;let[T,L,U]=await C();T||this.markedFiles.add(L);let J,te=T?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),le=new ny(()=>wL(()=>J=te(),ae=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${ae}`),K),pe=new Uu(L,{baseFs:le,pathUtils:K}),Ae=()=>{J?.discardAndClose()},ye=u.unstablePackages?.has(e.locatorHash)?null:U;return[pe,Ae,ye]}},uut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zb,lpe=Et(()=>{zb=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zb||{})});var Aut,sC,p_=Et(()=>{Pt();Nl();kf();xo();Aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>HS({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],sC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=K.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Vi(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=i1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=ba(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,T]of Aut){let L=I.match(C);if(L){v=T(E,...L);break}}if(!v){r.reportWarning(14,`${qn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let b=h;try{let C=Id(h.range),T=i1(C.selector,!0);T&&(b=T)}catch{}u.set(h.descriptorHash,Qs(b,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=tO(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,cpe=Et(()=>{Yl();L1();ql();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;zI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return CU(r,{configuration:this.configuration,json:!1})}}});var oC,h_=Et(()=>{xo();oC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Wf(){}function fut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function put(t){return{newPos:t.newPos,components:t.components.slice(0)}}function hut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function fpe(t,e,r){return r=hut(r,{ignoreWhitespace:!0}),E_.diff(t,e,r)}function gut(t,e,r){return C_.diff(t,e,r)}function Xb(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Xb=function(e){return typeof e}:Xb=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xb(t)}function g_(t){return yut(t)||Eut(t)||Cut(t)||wut()}function yut(t){if(Array.isArray(t))return d_(t)}function Eut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function Cut(t,e){if(!!t){if(typeof t=="string")return d_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d_(t,e)}}function d_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=gut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],b=1,C=1,T=function(J){var te=A[J],le=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=le,te.added||te.removed){var pe;if(!E){var Ae=A[J-1];E=b,I=C,Ae&&(v=u.context>0?p(Ae.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(pe=v).push.apply(pe,g_(le.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?C+=le.length:b+=le.length}else{if(E)if(le.length<=u.context*2&&J=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),De=le.length==0&&v.length>Pe.oldLines;!g&&De&&r.length>0&&v.splice(Pe.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!Ee)&&v.push("\\ No newline at end of file")}h.push(Pe),E=0,I=0,v=[]}b+=le.length,C+=le.length}},L=0;L{Wf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(T){return a?(setTimeout(function(){a(void 0,T)},0),!0):T}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var L=void 0,U=I[T-1],J=I[T+1],te=(J?J.newPos:0)-T;U&&(I[T-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(fut(n,L.components,r,e,n.useLongestToken));I[T]=L}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var C=b();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(m_(t,null,null,a),a," ")};i2.equals=function(t,e){return Wf.prototype.equals.call(i2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};y_=new Wf;y_.tokenize=function(t){return t.slice()};y_.join=y_.removeEmpty=function(t){return t}});var gpe=_((o3t,hpe)=>{var But=Hl(),vut=fE(),Dut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Put=/^\w*$/;function Sut(t,e){if(But(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||vut(t)?!0:Put.test(t)||!Dut.test(t)||e!=null&&t in Object(e)}hpe.exports=Sut});var ype=_((a3t,mpe)=>{var dpe=_P(),xut="Expected a function";function I_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(xut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(I_.Cache||dpe),r}I_.Cache=dpe;mpe.exports=I_});var Cpe=_((l3t,Epe)=>{var but=ype(),kut=500;function Qut(t){var e=but(t,function(o){return r.size===kut&&r.clear(),o}),r=e.cache;return e}Epe.exports=Qut});var B_=_((c3t,wpe)=>{var Fut=Cpe(),Tut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Rut=/\\(\\)?/g,Nut=Fut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(Tut,function(r,o,a,n){e.push(a?n.replace(Rut,"$1"):o||r)}),e});wpe.exports=Nut});var jd=_((u3t,Ipe)=>{var Lut=Hl(),Mut=gpe(),Out=B_(),Uut=R1();function _ut(t,e){return Lut(t)?t:Mut(t,e)?[t]:Out(Uut(t))}Ipe.exports=_ut});var aC=_((A3t,Bpe)=>{var Hut=fE(),jut=1/0;function qut(t){if(typeof t=="string"||Hut(t))return t;var e=t+"";return e=="0"&&1/t==-jut?"-0":e}Bpe.exports=qut});var Zb=_((f3t,vpe)=>{var Gut=jd(),Yut=aC();function Wut(t,e){e=Gut(e,t);for(var r=0,o=e.length;t!=null&&r{var Vut=rS(),Kut=jd(),Jut=UI(),Dpe=il(),zut=aC();function Xut(t,e,r,o){if(!Dpe(t))return t;e=Kut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Zut=Zb(),$ut=v_(),eAt=jd();function tAt(t,e,r){for(var o=-1,a=e.length,n={};++o{function rAt(t,e){return t!=null&&e in Object(t)}bpe.exports=rAt});var D_=_((d3t,Qpe)=>{var nAt=jd(),iAt=LI(),sAt=Hl(),oAt=UI(),aAt=YP(),lAt=aC();function cAt(t,e,r){e=nAt(e,t);for(var o=-1,a=e.length,n=!1;++o{var uAt=kpe(),AAt=D_();function fAt(t,e){return t!=null&&AAt(t,e,uAt)}Fpe.exports=fAt});var Npe=_((y3t,Rpe)=>{var pAt=xpe(),hAt=Tpe();function gAt(t,e){return pAt(t,e,function(r,o){return hAt(t,o)})}Rpe.exports=gAt});var Upe=_((E3t,Ope)=>{var Lpe=fd(),dAt=LI(),mAt=Hl(),Mpe=Lpe?Lpe.isConcatSpreadable:void 0;function yAt(t){return mAt(t)||dAt(t)||!!(Mpe&&t&&t[Mpe])}Ope.exports=yAt});var jpe=_((C3t,Hpe)=>{var EAt=qP(),CAt=Upe();function _pe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=CAt),a||(a=[]);++n0&&r(A)?e>1?_pe(A,e-1,r,o,a):EAt(a,A):o||(a[a.length]=A)}return a}Hpe.exports=_pe});var Gpe=_((w3t,qpe)=>{var wAt=jpe();function IAt(t){var e=t==null?0:t.length;return e?wAt(t,1):[]}qpe.exports=IAt});var P_=_((I3t,Ype)=>{var BAt=Gpe(),vAt=pL(),DAt=hL();function PAt(t){return DAt(vAt(t,void 0,BAt),t+"")}Ype.exports=PAt});var S_=_((B3t,Wpe)=>{var SAt=Npe(),xAt=P_(),bAt=xAt(function(t,e){return t==null?{}:SAt(t,e)});Wpe.exports=bAt});var $b,Vpe=Et(()=>{Yl();$b=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,x_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,lC,b_=Et(()=>{Pt();Kpe=$e(RS());AE();Bd();ql();rh();kf();xo();lC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Mt.tryFind(this.cwd)??new Mt,this.relativeCwd=K.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=K.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(K.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${o1(this.project.configuration,this)} (${Ot(this.project.configuration,K.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&K.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ba(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${K.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&n1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=K.join(this.cwd,Mt.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function NAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map(t.workspaces.map(Ae=>{let ye=Ae.anchoredLocator.locatorHash,ae=o.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ye,$I(ae)]})),U=()=>{let Ae=oe.mktempSync(),ye=K.join(Ae,"stacktrace.log"),ae=String(E.length+1).length,we=E.map((Pe,g)=>`${`${g+1}.`.padStart(ae," ")} ${xa(Pe)} +`).join("");throw oe.writeFileSync(ye,we),oe.detachTemp(Ae),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(ye)}`)},J=Ae=>{let ye=r.get(Ae.descriptorHash);if(typeof ye>"u")throw new Error("Assertion failed: The resolution should have been registered");let ae=o.get(ye);if(!ae)throw new Error("Assertion failed: The package could not be found");return ae},te=(Ae,ye,ae,{top:we,optional:Pe})=>{E.length>1e3&&U(),E.push(ye);let g=le(Ae,ye,ae,{top:we,optional:Pe});return E.pop(),g},le=(Ae,ye,ae,{top:we,optional:Pe})=>{if(a.has(ye.locatorHash))return;a.add(ye.locatorHash),Pe||n.delete(ye.locatorHash);let g=o.get(ye.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,ye)}) should have been registered`);let Ee=[],De=[],ce=[],ne=[],ee=[];for(let ke of Array.from(g.dependencies.values())){if(g.peerDependencies.has(ke.identHash)&&g.locatorHash!==we)continue;if(Sf(ke))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(ke.descriptorHash);let ht=Pe;if(!ht){let Te=g.dependenciesMeta.get(fn(ke));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(ht=!0)}}let H=r.get(ke.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${qn(t.configuration,ke)}) should have been registered`);let lt=L.get(H)||o.get(H);if(!lt)throw new Error(`Assertion failed: The package (${H}, resolved from ${qn(t.configuration,ke)}) should have been registered`);if(lt.peerDependencies.size===0){te(ke,lt,new Map,{top:we,optional:ht});continue}let Re,Qe,be=new Set,_e;De.push(()=>{Re=nO(ke,ye.locatorHash),Qe=iO(lt,ye.locatorHash),g.dependencies.delete(ke.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,Qe.locatorHash),e.set(Re.descriptorHash,Re),o.set(Qe.locatorHash,Qe),Ee.push([lt,Re,Qe])}),ce.push(()=>{_e=new Map;for(let Te of Qe.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&r1(ye,Te)&&(Ae.identHash===ye.identHash?Je=Ae:(Je=In(ye,Ae.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,ye.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&Qe.dependencies.has(Te.identHash)){Qe.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),Qe.dependencies.set(Je.identHash,Je),Sf(Je)&&dd(b,Je.descriptorHash).add(Qe.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&be.add(Je.identHash),_e.set(Te.identHash,ae.get(Te.identHash)??Qe.locatorHash)}Qe.dependencies=new Map(ks(Qe.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(Qe.locatorHash))return;let Te=h.get(lt.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(lt.locatorHash),He=typeof Je<"u"?Je+1:1;h.set(lt.locatorHash,He),te(Re,Qe,_e,{top:we,optional:ht}),h.set(lt.locatorHash,He-1)}),ee.push(()=>{let Te=g.dependencies.get(ke.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(dd(T,Je).add(ye.locatorHash),!!o.has(Qe.locatorHash)){for(let He of Qe.peerDependencies.values()){let x=_e.get(He.identHash);if(typeof x>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Gy(Yy(C,x),fn(He)).push(Qe.locatorHash)}for(let He of be)Qe.dependencies.delete(He)}})}for(let ke of[...De,...ce])ke();let Ie;do{Ie=!0;for(let[ke,ht,H]of Ee){let lt=Yy(v,ke.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${qn(t.configuration,Te)} to have been registered`);return Je===we?`${Je} (top)`:Je}),ht.identHash),Qe=lt.get(Re);if(typeof Qe>"u"){lt.set(Re,ht);continue}if(Qe===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let be=b.get(ht.descriptorHash)||[],_e=[g.locatorHash,...be];b.delete(ht.descriptorHash);for(let Te of _e){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(ht.identHash).descriptorHash!==Qe.descriptorHash&&(Ie=!1),Je.dependencies.set(ht.identHash,Qe))}}}while(!Ie);for(let ke of[...ne,...ee])ke()};for(let Ae of t.workspaces){let ye=Ae.anchoredLocator;p.delete(Ae.anchoredDescriptor.descriptorHash),te(Ae.anchoredDescriptor,ye,new Map,{top:ye.locatorHash,optional:!1})}let pe=new Map;for(let[Ae,ye]of T){let ae=o.get(Ae);if(typeof ae>"u")throw new Error("Assertion failed: Expected the root to be registered");let we=C.get(Ae);if(!(typeof we>"u"))for(let Pe of ye){let g=o.get(Pe);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,De]of we){let ce=Js(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${zs(Pe,Ee,Ae).slice(0,5)}`;u.set(ne,{subject:Pe,requested:ce,rootRequester:Ae,allRequesters:De});let ee=ae.dependencies.get(ce.identHash);if(typeof ee<"u"){let Ie=J(ee),ke=Ie.version??"0.0.0",ht=new Set;for(let lt of De){let Re=o.get(lt);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let Qe=Re.peerDependencies.get(ce.identHash);if(typeof Qe>"u")throw new Error("Assertion failed: Expected the ident to be registered");ht.add(Qe.range)}if(![...ht].every(lt=>{if(lt.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;lt=lt.slice(Xn.protocol.length),(lt==="^"||lt==="~")&&(lt="*")}return bf(ke,lt)})){let lt=ol(pe,Ie.locatorHash,()=>({type:2,requested:ce,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:ke,hash:`p${Ie.locatorHash.slice(0,5)}`}));lt.dependents.set(g.locatorHash,g),lt.requesters.set(ae.locatorHash,ae);for(let Re of De)lt.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:ce,requester:ae,version:ke,hash:ne,requirementCount:De.length})}}else ae.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:ae,hash:ne})}}}A.push(...pe.values())}function LAt(t,e){let r=BL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=aO(u),h=p?lE(t.configuration,p):Ot(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${s1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Ot(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Ot(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Ot(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ot(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>zy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>zy.default(u)))e.reportWarning(2,n)})}var ek,tk,rk,Xpe,F_,Q_,T_,nk,kAt,QAt,Jpe,FAt,TAt,RAt,pl,k_,ik,zpe,St,Zpe=Et(()=>{Pt();Pt();Nl();qt();ek=Be("crypto");w_();tk=$e(S_()),rk=$e(nd()),Xpe=$e(zn()),F_=Be("util"),Q_=$e(Be("v8")),T_=$e(Be("zlib"));f_();D1();p_();h_();AE();fO();Yl();Vpe();L1();x_();Bd();b_();VS();ql();rh();jl();Dx();DU();kf();xo();nk=Ky(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),kAt=3,QAt=/ *, */g,Jpe=/\/$/,FAt=32,TAt=(0,F_.promisify)(T_.default.gzip),RAt=(0,F_.promisify)(T_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),k_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},ik=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(ik||{}),zpe=t=>zs(`${kAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(K.join(n,dr.manifest))){o=n;break}a=K.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ve.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ve.telemetry?.reportWorkspaceCount(u.workspaces.length),Ve.telemetry?.reportDependencyCount(u.workspaces.reduce((C,T)=>C+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ot(e,u.cwd,yt.PATH),E=Ot(e,K.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ot(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ot(e,u.cwd,yt.PATH)}. + +${[I,v,b].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=K.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=zpe(o);let a=Vi(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Mt;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,b=p.linkType.toUpperCase(),C=p.conditions??null,T=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let pe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,pe)}let le={...h,version:I,languageName:v,linkType:b,conditions:C,dependencies:T,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(le.locatorHash,le);for(let pe of A.split(QAt)){let Ae=nh(pe);n<=6&&(Ae=this.configuration.normalizeDependency(Ae),Ae=In(Ae,Ae.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(Ae.descriptorHash,Ae),this.storedResolutions.set(Ae.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,rk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new lC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){K.isAbsolute(e)||(e=K.resolve(this.cwd,e)),e=K.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)K.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!ba(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Sf(e)&&(e=e1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${qn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=t1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Sf(o)&&e.dependencies.set(r,e1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Xpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Jpe,"")!==e.replace(Jpe,""))continue;return A}}return null}async loadUserConfig(){let e=K.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&vf(e).setup();let r=K.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?vf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!r1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new sC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new $b(a)]:[n,a],A=new vd([new oC(a),...u]),p=new vd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],le=_4(),pe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let lt=await Wy(async()=>await A.resolve(H,E),_e=>`${jr(this.configuration,H)}: ${_e}`);if(!n1(H,lt))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,lt)})`);C.set(lt.locatorHash,lt),!r.delete(lt.locatorHash)&&!this.tryWorkspaceByLocator(lt)&&o.push(lt);let Qe=await this.preparePackage(lt,{resolver:A,resolveOptions:E}),be=Uc([...Qe.dependencies.values()].map(_e=>ht(_e)));return te.push(be),be.catch(()=>{}),v.set(Qe.locatorHash,Qe),Qe},ee=async H=>{let lt=T.get(H.locatorHash);if(typeof lt<"u")return lt;let Re=Promise.resolve().then(()=>ne(H));return T.set(H.locatorHash,Re),Re},Ie=async(H,lt)=>{let Re=await ht(lt);return I.set(H.descriptorHash,H),b.set(H.descriptorHash,Re.locatorHash),Re},ke=async H=>{ce.setTitle(qn(this.configuration,H));let lt=this.resolutionAliases.get(H.descriptorHash);if(typeof lt<"u")return Ie(H,this.storedDescriptors.get(lt));let Re=A.getResolutionDependencies(H,E),Qe=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let He=A.bindDescriptor(Je,U,E),x=await ht(He);return J.add(x.locatorHash),[Te,x]}))),_e=(await Wy(async()=>await A.getCandidates(H,Qe,E),Te=>`${qn(this.configuration,H)}: ${Te}`))[0];if(typeof _e>"u")throw new zt(82,`${qn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,Qe,[_e],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===_e.locatorHash))throw new zt(78,`Invalid resolution ${XI(this.configuration,H,_e)}`)}return I.set(H.descriptorHash,H),b.set(H.descriptorHash,_e.locatorHash),ee(_e)},ht=H=>{let lt=L.get(H.descriptorHash);if(typeof lt<"u")return lt;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>ke(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let lt=H.anchoredDescriptor;te.push(ht(lt))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let Ae=sl(r.values(),ce=>this.tryWorkspaceByLocator(ce)?sl.skip:ce);if(o.length>0||Ae.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let lt=v.get(H.anchoredLocator.locatorHash);if(!lt)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(lt.dependencies.values(),Re=>{let Qe=b.get(Re.descriptorHash);if(!Qe)throw new Error("Assertion failed: The resolution should have been registered");return Qe})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>xa(H),Ie=ks(o,[ne,ee]),ke=ks(Ae,[ne,ee]),ht=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"+",yt.ADDED)} ${cS(this.configuration,Ie,ht)}`),ke.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"-",yt.REMOVED)} ${cS(this.configuration,ke,ht)}`)}let ye=new Set(this.resolutionAliases.values()),ae=new Set(v.keys()),we=new Set,Pe=new Map,g=[];NAt({project:this,accessibleLocators:we,volatileDescriptors:ye,optionalBuilds:ae,peerRequirements:Pe,peerWarnings:g,allDescriptors:I,allResolutions:b,allPackages:v});for(let ce of J)ae.delete(ce);for(let ce of ye)I.delete(ce),b.delete(ce);let Ee=new Set,De=new Set;for(let ce of v.values())ce.conditions!=null&&(!ae.has(ce.locatorHash)||(qS(ce,pe)||(qS(ce,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ot(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),De.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=b,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=we,this.conditionalLocators=Ee,this.disabledLocators=De,this.originalPackages=C,this.optionalBuilds=ae,this.peerRequirements=Pe,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");return xa(T)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,rk.default)(FAt);if(await Uc(h.map(C=>v(async()=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Hc(T))return;let L;try{L=await A.fetch(T,p)}catch(U){U.message=`${jr(this.configuration,T)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(T.locatorHash,L.checksum):this.storedChecksums.delete(T.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let T=(await Promise.all([...r.cacheMisses].map(async Ae=>{let ye=this.storedPackages.get(Ae),ae=this.storedChecksums.get(Ae)??null,we=e.getLocatorPath(ye,ae);return(await oe.statPromise(we)).size}))).reduce((Ae,ye)=>Ae+ye,0)-(b?.size??0),L=r.cacheMisses.size,U=b?.count??0,J=`${nS(L,{zero:"No new packages",one:"A package was",more:`${Ot(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nS(U,{zero:"none were",one:"one was",more:`${Ot(this.configuration,U,yt.NUMBER)} were`})} removed`,le=T!==0?` (${Ot(this.configuration,T,yt.SIZE_DIFF)})`:"",pe=U>0?L>0?`${J}, and ${te}${le}.`:`${J}, but ${te}${le}.`:`${J}${le}.`;r.reportInfo(13,pe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[ce,ne]})),I=new Map,v=new Map,b=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),T=[],L=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],ke=H=>{Ie.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:lt}=ht.manifest;for(let Qe of["preinstall","install","postinstall"])lt.has(Qe)&&H.push({type:0,script:Qe});try{for(let[Qe,be]of E)if(Qe.supportsPackage(ne,h)&&(await be.installPackage(ne,ee,{holdFetchResult:ke})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=K.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&b.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(Qe=>Qe.supportsPackage(ne,h));if(!H)throw new zt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let lt=E.get(H);if(!lt)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await lt.installPackage(ne,ee,{holdFetchResult:ke})}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):b.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(ke,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let lt=[];for(let Re of ne.dependencies.values()){let Qe=this.storedResolutions.get(Re.descriptorHash);if(typeof Qe>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,Re)}, from ${jr(this.configuration,ne)})should have been registered`);let be=this.storedPackages.get(Qe);if(typeof be>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);let _e=this.tryWorkspaceByLocator(be)===null?I.get(Qe):null;if(typeof _e>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);_e===ke||_e===null?v.get(be.locatorHash)!==null&<.push([Re,be]):!ee&&H!==null&&Gy(J,Qe).push(H)}H!==null&&await ht.attachInternalDependencies(ne,lt)};if(ee)for(let[ke,ht]of E)ke.supportsPackage(ne,h)&&await Ie(ke,ht);else{let ke=I.get(ne.locatorHash);if(!ke)throw new Error("Assertion failed: The linker should have been found");let ht=E.get(ke);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await Ie(ke,ht)}}for(let[ce,ne]of J){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let ke=E.get(Ie);if(!ke)throw new Error("Assertion failed: The installer should have been registered");await ke.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):b.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(T),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>xa(ne)))ce(r);let le=new Set(this.storedPackages.keys()),pe=new Set(b.keys());for(let ce of pe)le.delete(ce);let Ae=(0,ek.createHash)("sha512");Ae.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{Ae.update("\0"),Ae.update(ce)});let ye=Ae.digest("hex"),ae=new Map,we=ce=>{let ne=ae.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,ek.createHash)("sha512");Ie.update(ce.locatorHash),ae.set(ce.locatorHash,"");for(let ke of ee.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(we(H))}return ne=Ie.digest("hex"),ae.set(ce.locatorHash,ne),ne},Pe=(ce,ne)=>{let ee=(0,ek.createHash)("sha512");ee.update(ye),ee.update(we(ce));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,De=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let ke of Ie.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);if(ht!==ce.locatorHash&&pe.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let lt=this.tryWorkspaceByLocator(H);if(lt){if(lt.anchoredLocator.locatorHash!==ce.locatorHash&&pe.has(lt.anchoredLocator.locatorHash))return!1;ne.add(lt.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;pe.size>0;){let ce=pe.size,ne=[];for(let ee of pe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!De(Ie))continue;let ke=b.get(Ie.locatorHash);if(!ke)throw new Error("Assertion failed: The build directive should have been registered");let ht=Pe(Ie,ke.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===ht){g.set(Ie.locatorHash,ht),pe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=ke.buildLocations.map(async lt=>{if(!K.isAbsolute(lt))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${lt})`);for(let Re of ke.buildDirectives){let Qe=`# This file contains the result of Yarn building a package (${xa(Ie)}) +`;switch(Re.type){case 0:Qe+=`# Script name: ${Re.script} +`;break;case 1:Qe+=`# Script code: ${Re.script} +`;break}let be=null;if(!await oe.mktempPromise(async Te=>{let Je=K.join(Te,"build.log"),{stdout:He,stderr:x}=this.configuration.getSubprocessStreams(Je,{header:Qe,prefix:jr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Vx(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break;case 1:w=await wU(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break}}catch(F){x.write(F.stack),w=1}if(He.end(),x.end(),w===0)return!0;oe.detachTemp(Te);let S=`${jr(this.configuration,Ie)} couldn't be built successfully (exit code ${Ot(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ot(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),Jce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(lt=>{pe.delete(ee),lt.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,ht)}))}if(await Uc(ne),ce===pe.size){let ee=Array.from(pe).map(Ie=>{let ke=this.storedPackages.get(Ie);if(!ke)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,ke)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ve.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=K.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{LAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let b=Ot(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Ug(u,this.generateLockfile());if(E!==u){let I=ppe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let b of v.lines)b.startsWith("+")?e.report.reportError(28,Ot(this.configuration,b,yt.ADDED)):b.startsWith("-")?e.report.reportError(28,Ot(this.configuration,b,yt.REMOVED)):e.report.reportInfo(null,Ot(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ve.telemetry?.reportPackageExtension(yd(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>MS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ot(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>MS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:nk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let b of u){let C=this.storedDescriptors.get(b);if(!C)throw new Error("Assertion failed: The descriptor should have been registered");p.push(C)}let h=p.map(b=>Sa(b)).sort().join(", "),E=new Mt;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin);let I,v=this.storedChecksums.get(A.locatorHash);if(typeof v<"u"){let b=v.indexOf("/");if(b===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let C=v.slice(0,b),T=v.slice(b+1);C===o?I=T:I=v}r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:xa(A),checksum:I,conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Ba(r)}async persistLockfile(){let e=K.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Ug(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=zpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(k_))e.push(...u);let r=(0,tk.default)(this,e),o=Q_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(K.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await TAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await RAt(await oe.readFilePromise(a));n=Q_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,tk.default)(n,k_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,tk.default)(n,k_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,rk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!IO(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=K.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ot(this.configuration,K.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function MAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var cC,$pe=Et(()=>{Pt();N1();rh();Bx();jl();kf();cC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&tn?bf(tn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){dd(this.values,e).add(r)}reportEnumerator(e,r){dd(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Yy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return K.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=MAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(K.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>U4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let b=v;b.userId=I,b.reportType="primary";for(let L of Object.keys(b.enumerators??{}))b.enumerators[L]=b.enumerators[L].length;E(b);let C=new Map,T=20;for(let[L,U]of Object.entries(b.values))U.length>0&&C.set(L,U.slice(0,T));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(K.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var s2={};Kt(s2,{BuildDirectiveType:()=>zb,CACHE_CHECKPOINT:()=>A_,CACHE_VERSION:()=>Jb,Cache:()=>Lr,Configuration:()=>Ve,DEFAULT_RC_FILENAME:()=>W4,FormatType:()=>Qle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>B1,LOCKFILE_VERSION:()=>nk,LegacyMigrationResolver:()=>sC,LightReport:()=>AA,LinkType:()=>Jy,LockfileResolver:()=>oC,Manifest:()=>Mt,MessageName:()=>wr,MultiFetcher:()=>pE,PackageExtensionStatus:()=>DL,PackageExtensionType:()=>vL,PeerWarningType:()=>ik,Project:()=>St,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>v1,StreamReport:()=>Nt,TAG_REGEXP:()=>QE,TelemetryManager:()=>cC,ThrowReport:()=>Qi,VirtualFetcher:()=>hE,WindowsLinkType:()=>kx,Workspace:()=>lC,WorkspaceFetcher:()=>dE,WorkspaceResolver:()=>Xn,YarnVersion:()=>tn,execUtils:()=>Ur,folderUtils:()=>WS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>rn,miscUtils:()=>je,nodeUtils:()=>Ji,parseMessageName:()=>fP,reportOptionDeprecations:()=>NE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Px();VS();ql();rh();Bx();jl();Dx();DU();kf();xo();$fe();ope();f_();D1();D1();lpe();p_();cpe();h_();AE();pP();AO();Zpe();Yl();L1();$pe();x_();pO();hO();Bd();b_();N1();Ine()});var she=_((K_t,a2)=>{"use strict";var UAt=process.env.TERM_PROGRAM==="Hyper",_At=process.platform==="win32",rhe=process.platform==="linux",R_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},nhe=Object.assign({},R_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),ihe=Object.assign({},R_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:rhe?"\u25B8":"\u276F",pointerSmall:rhe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});a2.exports=_At&&!UAt?nhe:ihe;Reflect.defineProperty(a2.exports,"common",{enumerable:!1,value:R_});Reflect.defineProperty(a2.exports,"windows",{enumerable:!1,value:nhe});Reflect.defineProperty(a2.exports,"other",{enumerable:!1,value:ihe})});var Vc=_((J_t,N_)=>{"use strict";var HAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),jAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ohe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=jAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!HAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=she(),t.define=a,t};N_.exports=ohe();N_.exports.create=ohe});var No=_(nn=>{"use strict";var qAt=Object.prototype.toString,rc=Vc(),ahe=!1,L_=[],lhe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};nn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);nn.hasColor=t=>!!t&&rc.hasColor(t);var ok=nn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);nn.nativeType=t=>qAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");nn.isAsyncFn=t=>nn.nativeType(t)==="asyncfunction";nn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";nn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;nn.scrollDown=(t=[])=>[...t.slice(1),t[0]];nn.scrollUp=(t=[])=>[t.pop(),...t];nn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};nn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};nn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};nn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};nn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};nn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";nn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+nn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};nn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[lhe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=lhe[o];return a&&rc["bg"+nn.pascal(a)]||t}return rc.none};nn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};nn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!nn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};nn.mixin=(t,e)=>{if(!ok(t))return e;if(!ok(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ok(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ok(a.value)?t[r]=nn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};nn.merge=(...t)=>{let e={};for(let r of t)nn.mixin(e,r);return e};nn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?nn.define(t,o,a.bind(e)):nn.define(t,o,a)}};nn.onExit=t=>{let e=(r,o)=>{ahe||(ahe=!0,L_.forEach(a=>a()),r===!0&&process.exit(128+o))};L_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),L_.push(t)};nn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};nn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var che=_(pC=>{"use strict";pC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};pC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};pC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};pC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};pC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var fhe=_((Z_t,Ahe)=>{"use strict";var uhe=Be("readline"),GAt=che(),YAt=/^(?:\x1b)([a-zA-Z0-9])$/,WAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,VAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function KAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function JAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var ak=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=YAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=WAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=VAt[n],o.shift=KAt(n)||o.shift,o.ctrl=JAt(n)||o.ctrl}return o};ak.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=uhe.createInterface({terminal:!0,input:r});uhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,ak(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};ak.action=(t,e,r)=>{let o={...GAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};Ahe.exports=ak});var hhe=_(($_t,phe)=>{"use strict";phe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),zAt(t,r,o)}};function zAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var dhe=_((e8t,ghe)=>{"use strict";var{define:XAt,width:ZAt}=No(),M_=class{constructor(e){let r=e.options;XAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=ZAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};ghe.exports=M_});var yhe=_((t8t,mhe)=>{"use strict";var O_=No(),eo=Vc(),U_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||O_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||O_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};U_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=O_.merge({},U_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var __=process.platform==="win32",Vf=Vc(),$At=No(),H_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:__?"( )":"\u25EF",on:__?"(*)":"\u25C9",disabled:__?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};H_.merge=t=>{let e=$At.merge({},Vf.symbols,H_,t.symbols);return delete e.merge,e};Ehe.exports=H_});var Ihe=_((n8t,whe)=>{"use strict";var eft=yhe(),tft=Che(),rft=No();whe.exports=t=>{t.options=rft.merge({},t.options.theme,t.options),t.symbols=tft.merge(t.options),t.styles=eft.merge(t.options)}});var She=_((Dhe,Phe)=>{"use strict";var Bhe=process.env.TERM_PROGRAM==="Apple_Terminal",nft=Vc(),j_=No(),Kc=Phe.exports=Dhe,Di="\x1B[",vhe="\x07",q_=!1,Ph=Kc.code={bell:vhe,beep:vhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Bhe?"8":"u"),savePosition:Di+(Bhe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Kc.cursor={get hidden(){return q_},hide(){return q_=!0,Ph.hide},show(){return q_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=j_.isPrimitive(o)?String(o):"",a=j_.isPrimitive(a)?String(a):"",A=j_.isPrimitive(A)?String(A):"",u){let p=Kc.cursor.up(u)+Kc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Kc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Kc.cursor.move(p)}}},G_=Kc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return G_.line+qd.to(0);let r=n=>[...nft.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(G_.line+qd.prevLine()).repeat(a-1)+G_.line+qd.to(0)}});var hC=_((i8t,bhe)=>{"use strict";var ift=Be("events"),xhe=Vc(),Y_=fhe(),sft=hhe(),oft=dhe(),aft=Ihe(),Ta=No(),Gd=She(),l2=class extends ift{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,aft(this),sft(this),this.state=new oft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=cft(this.options.margin),this.setMaxListeners(0),lft(this)}async keypress(e,r={}){this.keypressed=!0;let o=Y_.action(e,Y_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Gd.code.beep)}cursorHide(){this.stdout.write(Gd.cursor.hide()),Ta.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Gd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Gd.cursor.down(e)+Gd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Gd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=xhe.unstyle(o);let a=xhe.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,b=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ta.isObject(e)&&(e=e[o.status]||e.pending),Ta.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ta.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ta.isObject(n)&&(n=n[o.status]||n.pending),Ta.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ta.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ta.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ta.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ta.resolve(this,e,...r)}get base(){return l2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ta.height(this.stdout,25)}get width(){return this.options.columns||Ta.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function lft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function cft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=l2});var Fhe=_((s8t,Qhe)=>{"use strict";var uft=No(),khe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return khe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Qhe.exports=(t,e={})=>{let r=uft.merge({},khe,e.roles);return r[t]||r.default}});var c2=_((o8t,Nhe)=>{"use strict";var Aft=Vc(),fft=hC(),pft=Fhe(),lk=No(),{reorder:W_,scrollUp:hft,scrollDown:gft,isObject:The,swap:dft}=lk,V_=class extends fft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");The(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=pft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,lk.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,Aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=W_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=W_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=W_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=hft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=gft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){dft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(The(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=lk.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(lk.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Nhe.exports=V_});var Sh=_((a8t,Lhe)=>{"use strict";var mft=c2(),K_=No(),J_=class extends mft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!K_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!K_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(K_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` +`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=J_});var Ohe=_((l8t,Mhe)=>{"use strict";var yft=Sh(),Eft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends yft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=Eft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Mhe.exports=z_});var Z_=_((c8t,Uhe)=>{"use strict";var X_=No();Uhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=X_.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=T=>T,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=X_.isPrimitive(o)?`${o}`:"",r=X_.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,C=b?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),b){let T=t.styles.unstyle(E+C);return E+C+A(o.slice(T.length))}return E+C}});var ck=_((u8t,_he)=>{"use strict";var Cft=Vc(),wft=Sh(),Ift=Z_(),$_=class extends wft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:b}=a,C=p,T=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(le="danger");let pe=a[le],Ae=pe(await this.indicator(e,r))+(e.pad||""),ye=this.indent(e),ae=()=>[ye,Ae,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=Cft.unstyle(J),h=I(h),C="",ae();if(e.format)h=await e.format.call(this,h,e,r);else{let we=this.styles.muted;h=Ift(this,{input:h,initial:u,pos:n,showCursor:T,color:we})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),T&&(J=v(J)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),ae()}async submit(){return this.value=this.values,super.base.submit.call(this)}};_he.exports=$_});var e8=_((A8t,jhe)=>{"use strict";var Bft=ck(),vft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Hhe=(t=vft)=>{class e extends Bft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Hhe(o)}}return e};jhe.exports=Hhe()});var Yhe=_((f8t,Ghe)=>{"use strict";var Dft=e8();function Pft(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Pft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Dft.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var uk=_((p8t,Whe)=>{"use strict";var Sft=hC(),{isPrimitive:xft,hasColor:bft}=No(),t8=class extends Sft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return xft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return bft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Whe.exports=t8});var Khe=_((h8t,Vhe)=>{"use strict";var kft=uk(),r8=class extends kft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Vhe.exports=r8});var zhe=_((g8t,Jhe)=>{"use strict";var Qft=Sh(),Fft=ck(),gC=Fft.prototype,n8=class extends Qft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():gC.dispatch.call(this,e,r)}append(e,r){return gC.append.call(this,e,r)}delete(e,r){return gC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?gC.next.call(this):super.next()}prev(){return this.focused.editable?gC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?gC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Jhe.exports=n8});var Yd=_((d8t,Xhe)=>{"use strict";var Tft=hC(),Rft=Z_(),{isPrimitive:Nft}=No(),i8=class extends Tft{constructor(e){super(e),this.initial=Nft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):Rft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Xhe.exports=i8});var $he=_((m8t,Zhe)=>{"use strict";var Lft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),Ak=t=>Lft(t).filter(Boolean);Zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:Ak([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:Ak([...n,r]),present:u};case"save":return{past:Ak([...o,r]),present:""};case"remove":return u=Ak(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var o8=_((y8t,t0e)=>{"use strict";var Mft=Yd(),e0e=$he(),s8=class extends Mft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=e0e(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=e0e("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};t0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Oft=Yd(),a8=class extends Oft{format(){return""}};r0e.exports=a8});var s0e=_((C8t,i0e)=>{"use strict";var Uft=Yd(),l8=class extends Uft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};i0e.exports=l8});var a0e=_((w8t,o0e)=>{"use strict";var _ft=Sh(),c8=class extends _ft{constructor(e){super({...e,multiple:!0})}};o0e.exports=c8});var A8=_((I8t,l0e)=>{"use strict";var Hft=Yd(),u8=class extends Hft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};l0e.exports=u8});var u0e=_((B8t,c0e)=>{c0e.exports=A8()});var f0e=_((v8t,A0e)=>{"use strict";var jft=Yd(),f8=class extends jft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};A0e.exports=f8});var g0e=_((D8t,h0e)=>{"use strict";var qft=Vc(),Gft=c2(),p0e=No(),p8=class extends Gft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` + `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!p0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=qft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let b=p0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),b=b.map(C=>this.styles.info(C))),b[0]+=E,this.linebreak&&b.push(""),[p+a,b.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),b=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};h0e.exports=p8});var y0e=_((P8t,m0e)=>{"use strict";var d0e=Vc(),Yft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",g8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Yft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Wft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],b=C=>{C.line=h,u.push(C)};for(b({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new g8(U),A.push(te)),te.lines.push(U.line-1);continue}let T=u[u.length-1];T.type==="text"&&T.line===h?T.value+=C:b({type:"text",value:C})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};m0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Wft(e,o),A=h8("result",t,e),p=h8("format",t,e),h=h8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let b=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,le,pe)=>{let Ae=await h(J,te,le,pe);return Ae===!1?"Invalid field "+le.name:Ae};for(let J of a){let te=J.value,le=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let pe=n.find(Pe=>Pe.name===le);e.required===!0&&I.required.add(pe.name);let Ae=[pe.input,I.values[pe.value],pe.value,te].find(E),ae=(pe.field||{}).message||J.inner;if(v){let Pe=await C(I.values[le],I,pe,b);if(Pe&&typeof Pe=="string"||Pe===!1){I.invalid.set(le,Pe);continue}I.invalid.delete(le);let g=await A(I.values[le],I,pe,b);I.output+=d0e.unstyle(g);continue}pe.placeholder=!1;let we=te;te=await p(te,I,pe,b),Ae!==te?(I.values[le]=Ae,te=t.styles.typing(Ae),I.missing.delete(ae)):(I.values[le]=void 0,Ae=`<${ae}>`,te=t.styles.primary(Ae),pe.placeholder=!0,I.required.has(le)&&I.missing.add(ae)),I.missing.has(ae)&&I.validating&&(te=t.styles.warning(Ae)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(Ae)),b===I.index&&(we!==te?te=t.styles.underline(te):te=t.styles.heading(d0e.unstyle(te))),b++}te&&(I.output+=te)}let T=I.output.split(` +`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{T[te][0]===" "&&(T[te]=I.styles.danger(I.symbols.bullet)+T[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=T.join(` +`),I.output}};function h8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var C0e=_((S8t,E0e)=>{"use strict";var Vft=Vc(),Kft=y0e(),Jft=hC(),d8=class extends Jft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Kft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",b=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",T=await this.format(C),L=await this.footer();T&&(h+=" "+T),v&&!T&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,b,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Vft.unstyle(o).split(` +`).map(A=>A.slice(1)).join(` +`);return this.value={values:a,result:u},super.submit()}};E0e.exports=d8});var I0e=_((x8t,w0e)=>{"use strict";var zft="(Use + to sort)",Xft=Sh(),m8=class extends Xft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,zft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};w0e.exports=m8});var v0e=_((b8t,B0e)=>{"use strict";var Zft=c2(),y8=class extends Zft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=$ft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),b=this.indent(e),C=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),T=te=>te===e.scaleIdx?I(te):te,L=b+e.scale.map((te,le)=>T(le)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` +`);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` +`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function $ft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{D0e.exports=o8()});var x0e=_((Q8t,S0e)=>{"use strict";var ept=uk(),E8=class extends ept{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};S0e.exports=E8});var k0e=_((F8t,b0e)=>{"use strict";var tpt=Sh(),C8=class extends tpt{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=C8});var F0e=_(w8=>{"use strict";var Q0e=No(),As=(t,e)=>{Q0e.defineExport(w8,t,e),Q0e.defineExport(w8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>Yhe());As("Confirm",()=>Khe());As("Editable",()=>zhe());As("Form",()=>ck());As("Input",()=>o8());As("Invisible",()=>n0e());As("List",()=>s0e());As("MultiSelect",()=>a0e());As("Numeral",()=>u0e());As("Password",()=>f0e());As("Scale",()=>g0e());As("Select",()=>Sh());As("Snippet",()=>C0e());As("Sort",()=>I0e());As("Survey",()=>v0e());As("Text",()=>P0e());As("Toggle",()=>x0e());As("Quiz",()=>k0e())});var R0e=_((R8t,T0e)=>{T0e.exports={ArrayPrompt:c2(),AuthPrompt:e8(),BooleanPrompt:uk(),NumberPrompt:A8(),StringPrompt:Yd()}});var A2=_((N8t,L0e)=>{"use strict";var N0e=Be("assert"),B8=Be("events"),xh=No(),Jc=class extends B8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}N0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];N0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||hC()}static get prompts(){return F0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new B8),e}};xh.mixinEmitter(Jc,new B8);var I8=Jc.prompts;for(let t of Object.keys(I8)){let e=t.toLowerCase(),r=o=>new I8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>I8[t]})}var u2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};u2("ArrayPrompt");u2("AuthPrompt");u2("BooleanPrompt");u2("NumberPrompt");u2("StringPrompt");L0e.exports=Jc});var g2=_((mHt,q0e)=>{var apt=Zb();function lpt(t,e,r){var o=t==null?void 0:apt(t,e);return o===void 0?r:o}q0e.exports=lpt});var W0e=_((BHt,Y0e)=>{function cpt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var upt=gd(),Apt=zP();function fpt(t,e){return t&&upt(e,Apt(e),t)}V0e.exports=fpt});var z0e=_((DHt,J0e)=>{var ppt=gd(),hpt=qy();function gpt(t,e){return t&&ppt(e,hpt(e),t)}J0e.exports=gpt});var Z0e=_((PHt,X0e)=>{var dpt=gd(),mpt=GP();function ypt(t,e){return dpt(t,mpt(t),e)}X0e.exports=ypt});var b8=_((SHt,$0e)=>{var Ept=qP(),Cpt=tS(),wpt=GP(),Ipt=KN(),Bpt=Object.getOwnPropertySymbols,vpt=Bpt?function(t){for(var e=[];t;)Ept(e,wpt(t)),t=Cpt(t);return e}:Ipt;$0e.exports=vpt});var tge=_((xHt,ege)=>{var Dpt=gd(),Ppt=b8();function Spt(t,e){return Dpt(t,Ppt(t),e)}ege.exports=Spt});var k8=_((bHt,rge)=>{var xpt=VN(),bpt=b8(),kpt=qy();function Qpt(t){return xpt(t,kpt,bpt)}rge.exports=Qpt});var ige=_((kHt,nge)=>{var Fpt=Object.prototype,Tpt=Fpt.hasOwnProperty;function Rpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Tpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}nge.exports=Rpt});var oge=_((QHt,sge)=>{var Npt=$P();function Lpt(t,e){var r=e?Npt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}sge.exports=Lpt});var lge=_((FHt,age)=>{var Mpt=/\w*$/;function Opt(t){var e=new t.constructor(t.source,Mpt.exec(t));return e.lastIndex=t.lastIndex,e}age.exports=Opt});var pge=_((THt,fge)=>{var cge=fd(),uge=cge?cge.prototype:void 0,Age=uge?uge.valueOf:void 0;function Upt(t){return Age?Object(Age.call(t)):{}}fge.exports=Upt});var gge=_((RHt,hge)=>{var _pt=$P(),Hpt=oge(),jpt=lge(),qpt=pge(),Gpt=lL(),Ypt="[object Boolean]",Wpt="[object Date]",Vpt="[object Map]",Kpt="[object Number]",Jpt="[object RegExp]",zpt="[object Set]",Xpt="[object String]",Zpt="[object Symbol]",$pt="[object ArrayBuffer]",eht="[object DataView]",tht="[object Float32Array]",rht="[object Float64Array]",nht="[object Int8Array]",iht="[object Int16Array]",sht="[object Int32Array]",oht="[object Uint8Array]",aht="[object Uint8ClampedArray]",lht="[object Uint16Array]",cht="[object Uint32Array]";function uht(t,e,r){var o=t.constructor;switch(e){case $pt:return _pt(t);case Ypt:case Wpt:return new o(+t);case eht:return Hpt(t,r);case tht:case rht:case nht:case iht:case sht:case oht:case aht:case lht:case cht:return Gpt(t,r);case Vpt:return new o;case Kpt:case Xpt:return new o(t);case Jpt:return jpt(t);case zpt:return new o;case Zpt:return qpt(t)}}hge.exports=uht});var mge=_((NHt,dge)=>{var Aht=qI(),fht=Ju(),pht="[object Map]";function hht(t){return fht(t)&&Aht(t)==pht}dge.exports=hht});var wge=_((LHt,Cge)=>{var ght=mge(),dht=WP(),yge=VP(),Ege=yge&&yge.isMap,mht=Ege?dht(Ege):ght;Cge.exports=mht});var Bge=_((MHt,Ige)=>{var yht=qI(),Eht=Ju(),Cht="[object Set]";function wht(t){return Eht(t)&&yht(t)==Cht}Ige.exports=wht});var Sge=_((OHt,Pge)=>{var Iht=Bge(),Bht=WP(),vge=VP(),Dge=vge&&vge.isSet,vht=Dge?Bht(Dge):Iht;Pge.exports=vht});var Q8=_((UHt,Qge)=>{var Dht=HP(),Pht=W0e(),Sht=rS(),xht=K0e(),bht=z0e(),kht=aL(),Qht=eS(),Fht=Z0e(),Tht=tge(),Rht=ZN(),Nht=k8(),Lht=qI(),Mht=ige(),Oht=gge(),Uht=cL(),_ht=Hl(),Hht=OI(),jht=wge(),qht=il(),Ght=Sge(),Yht=zP(),Wht=qy(),Vht=1,Kht=2,Jht=4,xge="[object Arguments]",zht="[object Array]",Xht="[object Boolean]",Zht="[object Date]",$ht="[object Error]",bge="[object Function]",e0t="[object GeneratorFunction]",t0t="[object Map]",r0t="[object Number]",kge="[object Object]",n0t="[object RegExp]",i0t="[object Set]",s0t="[object String]",o0t="[object Symbol]",a0t="[object WeakMap]",l0t="[object ArrayBuffer]",c0t="[object DataView]",u0t="[object Float32Array]",A0t="[object Float64Array]",f0t="[object Int8Array]",p0t="[object Int16Array]",h0t="[object Int32Array]",g0t="[object Uint8Array]",d0t="[object Uint8ClampedArray]",m0t="[object Uint16Array]",y0t="[object Uint32Array]",ri={};ri[xge]=ri[zht]=ri[l0t]=ri[c0t]=ri[Xht]=ri[Zht]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=ri[t0t]=ri[r0t]=ri[kge]=ri[n0t]=ri[i0t]=ri[s0t]=ri[o0t]=ri[g0t]=ri[d0t]=ri[m0t]=ri[y0t]=!0;ri[$ht]=ri[bge]=ri[a0t]=!1;function pk(t,e,r,o,a,n){var u,A=e&Vht,p=e&Kht,h=e&Jht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!qht(t))return t;var E=_ht(t);if(E){if(u=Mht(t),!A)return Qht(t,u)}else{var I=Lht(t),v=I==bge||I==e0t;if(Hht(t))return kht(t,A);if(I==kge||I==xge||v&&!a){if(u=p||v?{}:Uht(t),!A)return p?Tht(t,bht(u,t)):Fht(t,xht(u,t))}else{if(!ri[I])return a?t:{};u=Oht(t,I,A)}}n||(n=new Dht);var b=n.get(t);if(b)return b;n.set(t,u),Ght(t)?t.forEach(function(L){u.add(pk(L,e,r,L,t,n))}):jht(t)&&t.forEach(function(L,U){u.set(U,pk(L,e,r,U,t,n))});var C=h?p?Nht:Rht:p?Wht:Yht,T=E?void 0:C(t);return Pht(T||t,function(L,U){T&&(U=L,L=t[U]),Sht(u,U,pk(L,e,r,U,t,n))}),u}Qge.exports=pk});var F8=_((_Ht,Fge)=>{var E0t=Q8(),C0t=1,w0t=4;function I0t(t){return E0t(t,C0t|w0t)}Fge.exports=I0t});var T8=_((HHt,Tge)=>{var B0t=v_();function v0t(t,e,r){return t==null?t:B0t(t,e,r)}Tge.exports=v0t});var Oge=_((VHt,Mge)=>{var D0t=Object.prototype,P0t=D0t.hasOwnProperty;function S0t(t,e){return t!=null&&P0t.call(t,e)}Mge.exports=S0t});var _ge=_((KHt,Uge)=>{var x0t=Oge(),b0t=D_();function k0t(t,e){return t!=null&&b0t(t,e,x0t)}Uge.exports=k0t});var jge=_((JHt,Hge)=>{function Q0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Hge.exports=Q0t});var Gge=_((zHt,qge)=>{var F0t=Zb(),T0t=gU();function R0t(t,e){return e.length<2?t:F0t(t,T0t(e,0,-1))}qge.exports=R0t});var N8=_((XHt,Yge)=>{var N0t=jd(),L0t=jge(),M0t=Gge(),O0t=aC();function U0t(t,e){return e=N0t(e,t),t=M0t(t,e),t==null||delete t[O0t(L0t(e))]}Yge.exports=U0t});var L8=_((ZHt,Wge)=>{var _0t=N8();function H0t(t,e){return t==null?!0:_0t(t,e)}Wge.exports=H0t});var Xge=_((S6t,G0t)=>{G0t.exports={name:"@yarnpkg/cli",version:"4.0.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var Y8=_((n5t,ude)=>{"use strict";ude.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var fde=_((i5t,Ade)=>{"use strict";var cgt=Y8();function ugt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=cgt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}Ade.exports=ugt});var gde=_((s5t,hde)=>{"use strict";var Agt=fde();function fgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var pgt=fgt(Agt),hgt="text/plain",ggt="us-ascii",pde=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),dgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,b=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(b=b.toLowerCase(),b===ggt)?"":`${v}${b?`=${b}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==hgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function mgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return dgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,b=a.pathname.slice(A,v);p+=b.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];pde(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])pde(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var W8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>W8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=mgt(t,e));let a=pgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};W8.MAX_INPUT_LENGTH=2048;hde.exports=W8});var yde=_((o5t,mde)=>{"use strict";var ygt=Y8();function dde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=ygt(t);if(t=t.substring(t.indexOf("://")+3),dde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var Egt=gde(),Ede=yde();function Cgt(t){var e=Egt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),Ede(e.protocols)||e.protocols.length===0&&Ede(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Cde.exports=Cgt});var Bde=_((l5t,Ide)=>{"use strict";var wgt=wde();function V8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=wgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return V8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=C.exec(r.pathname);return T!=null&&(r.source="bitbucket-server",T[1]==="users"?r.owner="~"+T[2]:r.owner=T[2],r.organization=r.owner,r.name=T[3],a=T[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}V8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Igt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Bgt(t)+a;default:return t.href}};function Igt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Bgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ide.exports=V8});var Ude=_((H9t,Ode)=>{var Rgt=jx(),Ngt=eS(),Lgt=Hl(),Mgt=fE(),Ogt=B_(),Ugt=aC(),_gt=R1();function Hgt(t){return Lgt(t)?Rgt(t,Ugt):Mgt(t)?[t]:Ngt(Ogt(_gt(t)))}Ode.exports=Hgt});function Ygt(t,e){return e===1&&Ggt.has(t[0])}function I2(t){let e=Array.isArray(t)?t:(0,jde.default)(t);return e.map((o,a)=>jgt.test(o)?`[${o}]`:qgt.test(o)&&!Ygt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Wgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function mk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[b,C]of p){if(C.size>1){let T=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Wgt(t.configuration,U.values().next().value):null;return te!==null?` +${J} at ${te}`:` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,b,de.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=C,L=(0,_de.default)(v,b);if(JSON.stringify(L)===JSON.stringify(T))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${de.pretty(t.configuration,b,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?(0,qde.default)(v,b):(0,Hde.default)(v,b,T),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Gde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:je.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=je.sortMap(r.children,o=>o.value[1]),r}var _de,Hde,jde,qde,CC,jgt,qgt,Ggt,B2=Et(()=>{Ye();_de=$e(g2()),Hde=$e(T8()),jde=$e(Ude()),qde=$e(L8()),CC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;je.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},jgt=/^[0-9]+$/,qgt=/^[a-zA-Z0-9_]+$/,Ggt=new Set(["scripts",...Mt.allDependencies])});var Yde=_(($9t,aH)=>{var Vgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),b=I.length-1;b>=0;b--)v=new t.type.Term(".",[new t.type.Term("-",[I[b],I[b].pair]),v]),delete I[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,b=0;b=0;b--)I=new t.type.Term(".",[E[b],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof aH<"u"?aH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Vgt)});var ome=_(Yr=>{"use strict";var Zd=process.platform==="win32",lH="aes-256-cbc",Kgt="sha256",Kde="The current environment doesn't support interactive reading from TTY.",Yn=Be("fs"),Wde=process.binding("tty_wrap").TTY,uH=Be("child_process"),l0=Be("path"),AH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Jf="none",Xc,IC,Vde=!1,a0,Ek,cH,Jgt=0,dH="",Xd=[],Ck,Jde=!1,fH=!1,v2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return Ek.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function zgt(t,e){function r(U){var J,te="",le;for(cH=cH||Be("os").tmpdir();;){J=l0.join(cH,U+te);try{le=Yn.openSync(J,"wx")}catch(pe){if(pe.code==="EEXIST"){te++;continue}else throw pe}Yn.closeSync(le);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),b=Be("crypto"),C,T,L;C=b.createHash(Kgt),C.update(""+process.pid+Jgt+++Math.random()),L=C.digest("hex"),T=b.createDecipher(lH,L),o=zde(t),Zd?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+a0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+lH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+a0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+lH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),v2&&v2("_execFileSync",o);try{uH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=T.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Kde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Xgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(a0||(Zd?process.env.PSModulePath?(a0="powershell.exe",Ek=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(a0="cscript.exe",Ek=["//nologo",__dirname+"\\read.cs.js"]):(a0="/bin/sh",Ek=[__dirname+"/read.sh"])),Zd&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),uH.execFileSync){e=zde(t),v2&&v2("execFileSync",e);try{r.input=uH.execFileSync(a0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Kde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=a0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=zgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function pH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Xgt(t);if(n.error)throw n.error;return n.input}return fH&&fH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,Zd){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,IC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),IC=new Wde(Jf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),IC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),IC=new Wde(Jf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;Ck="";function b(C){return C===Vde?!0:IC.setRawMode(C)!==0?!1:(Vde=C,!0)}if(Jde||!IC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),Ck+=I):(I=` +`,Ck+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` +`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":dH=t.keepWhitespace||t.keyIn?e:e.trim()}function Zgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function mH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ts(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(AH),t.unshift(AH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Zgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function hH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function yH(t,e){var r=l0.normalize(Zd?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=l0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+mH(r)+"(?=\\/|\\\\|$)",Zd?"i":""),"~")}function BC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Xde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,b;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(b=I.charCodeAt(0),v&&v===n&&b===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=b),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Zde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function $de(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Xde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Zde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=dH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=l0.basename(r):t==="cwdHome"&&(r=yH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Xd[Xd.length-n]||"")}return r}function eme(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=BC(e.charlist?e.charlist+"":"$",eme),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+mH(u)+"]{"+o+","+a+"}$"),r=Xde([u],n.caseSensitive,!0),r.text=Zde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function nme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Ts({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return nme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return nme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Ts({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=yH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var b=l0.resolve(I+=v+l0.sep);if(!Yn.existsSync(b))Yn.mkdirSync(b);else if(!Yn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):l0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(l0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function ime(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=gH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=gH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Ts({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Ts({hideEchoBack:!1,history:!0},t,{prompt:function(){return Zd?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function sme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Ts(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return sme(t,e)};Yr.keyInYNStrict=function(t,e){return sme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Ts({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Ts({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` +`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` +`),o.limit=a,A+=` +`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return Ck};function D2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return D2("print",arguments)};Yr.setPrompt=function(){return D2("prompt",arguments)};Yr.setEncoding=function(){return D2("encoding",arguments)};Yr.setMask=function(){return D2("mask",arguments)};Yr.setBufferSize=function(){return D2("bufferSize",arguments)}});var EH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:S,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var S,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var Se=[],Ne=!1;if(/^\n/.exec(S)!==null){F++,z=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in T)if(T.hasOwnProperty(ot)){var dt=T[ot].exec(S);dt&&Se.push({value:dt[0],name:ot,matches:dt})}if(!Se.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Se,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,S=S.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var xt=this.set_last_tokens(X);return xt.length===0?null:xt};function J(w,S,y,F,z){if(!S[y])return{type:A,value:x.error.syntax(S[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new x.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Num(n(Z.value,Se),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Term(Z.value.charAt(Se),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_paren"?(xt.len++,xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],") or operator expected",!S[xt.len])};case"l_bracket":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_bracket"?(xt.len++,xt.value=new H("{}",[xt.value]),xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],"} or operator expected",!S[xt.len])}}var Ne=te(w,S,y,z);return Ne.type===p||Ne.derived||(Ne=le(w,S,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:x.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var xt=J(w,S,y,F,z);if(xt.type!==A)return Z.value==="-"&&!Z.space&&x.type.is_number(xt.value)?{value:new x.type.Num(-xt.value.value,xt.value.is_float),len:xt.len,type:p}:{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}else if($t&&$t.indexOf("fx")>-1){var xt=J(w,S,y,dt,z);if(xt.type!==A)return{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}}y=jt;var xt=J(w,S,y,dt,z);if(xt.type===p){y=xt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new x.type.Term(Z.value,[xt.value]),len:++xt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,S,y+1,an,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,S,y+1,Qr,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(xt.type!==A)for(;;){y=xt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)xt={value:new x.type.Term(Z.value,[xt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,S,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,xt={value:new x.type.Term(Z.value,[xt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(S[xt.len-1],"operator expected")};return xt}return xt}function te(w,S,y,F){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!F&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(S[y-1],"unfounded token")};var z=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(S[y+1],"argument expected")};var Z=J(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=J(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new x.type.Term(z.value,X)}}return{type:A,derived:!1,value:x.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:x.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var F=J(w,S,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(S[y],"] expected")};for(y=F.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};z.push(F.value),y=F.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=F.value,y=F.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:x.error.syntax(S[y],"list expected")}}function pe(w,S,y){var F=S[y].line,z=J(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new x.type.Rule(z.value.args[0],Pe(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=ae(new x.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=Pe(X.body),Z={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(x.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:x.error.syntax(S[y],"callable expected")};else return{type:A,value:x.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return z}function Ae(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(S);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Se=pe(w,ie,Z);if(Se.type===A)return new H("throw",[Se.value]);if(Se.value.body===null&&Se.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Se.value.head.args[0]),Ne.answer(function(dt){x.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(x.warning.failed_goal(Se.value.head.args[0],Se.len))}),Z=Se.len;var ot=!0}else if(Se.value.body===null&&Se.value.head.indicator===":-/1"){var ot=w.run_directive(Se.value.head.args[0]);Z=Se.len,Se.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Se.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Se.value,y);Z=Se.len}if(!ot)return ot}while(!0);return!0}function ye(w,S){var y=new U(w);y.new_text(S);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(Pe(X.value));else{var Se=z[Z];return new H("throw",[x.error.syntax(Se||z[Z-1],". or operator expected",!Se)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function ae(w,S){w=w.rename(S);var y=S.next_free_variable(),F=we(w.body,y,S);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function we(w,S,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=we(w.args[0],S,y);if(z.error)return z;var X=we(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(x.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return x.type.is_variable(Z)?{value:x.error.instantiation("DCG"),variable:S,error:!0}:x.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[S,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:S,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([S,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Pe(w){return x.type.is_variable(w)?new H("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Pe(w.args[0]),Pe(w.args[1])]):w}function g(w,S){for(var y=S||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],F=0;F=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new ke(parseInt(w.substring(S+1)),!1)])}function Ie(w){this.id=w}function ke(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var lt=0;function Re(w,S,y,F,z,X){this.id=lt++,this.stream=w,this.mode=S,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Qe(w){w=w||{},this.links=w}function be(w,S,y){S=S||new Qe,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function _e(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function He(w,S,y){this.id=w,this.rules=S,this.exports=y,x.module[w]=this}He.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Qe(y)},ke.prototype.unify=function(w,S){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Qe:null},H.prototype.unify=function(w,S){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Qe,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Se=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Se)&&Se!=="{}"&&Se!=="[]"&&(Se="'"+b(Se)+"'"),Se+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>S.priority||Ne.priority===S.priority&&(Ne.class==="xfy"&&this.indicator!==S.indicator||Ne.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Se+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Se+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},Qe.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},be.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},_e.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var S="",y=0;y=0;z--)F=new H(".",[S[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},_e.prototype.apply=function(w){return new _e(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Qe.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new Qe(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&F0&&(S=this.head_point().substitution.domain());e(S,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(x.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Te.prototype.success=function(w,S){return this.thread.success(w,S)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new be(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new be(new H("throw",[w]),new Qe,null,null)])},Te.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},Je.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},Je.prototype.answers=function(w,S,y){var F=S||1e3,z=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,S-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var S,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],z(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),z(S))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Se=S.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new _e(Se,Ne))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return x.error.instantiation(w.level)},ke.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},ke.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SF)return 1;if(w.constructor===ke){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Qe},is_state:function(w){return w instanceof be},is_rule:function(w){return w instanceof _e},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof ke},is_integer:function(w){return w instanceof ke&&!w.is_float},is_float:function(w){return w instanceof ke&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof ke&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(!!x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):x.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,S.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],S.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],S.indicator));else{var F=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,S){var y=S.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(S.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,S.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],S.indicator)):w.throw_error(x.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new H("+",[y,F]),S.indicator)):w.throw_error(x.error.domain("prolog_flag",y,S.indicator)):w.throw_error(x.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,S.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,S.indicator)):w.throw_error(x.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],F=S.args[1],z=S.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,S.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,S.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,S.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Se;switch(F.id){case"fy":case"fx":Se="prefix";break;case"yf":case"xf":Se="postfix";break;default:Se="infix";break}if(((X.prefix&&Se==="prefix"||X.postfix&&Se==="postfix"||X.infix&&Se==="infix")&&X[Se].type!==F.id||X.infix&&Se==="postfix"||X.postfix&&Se==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,S.indicator));else return X[Se]&&(Ee(w.session.__operators[X[Se].priority][z.id],F.id),w.session.__operators[X[Se].priority][z.id].length===0&&delete w.session.__operators[X[Se].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,S,y){x.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Se in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new be(y.args[0].args[0],S.substitution,S)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new be(S.goal.replace(y.args[1]),S.substitution,S)]):x.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new be(S.goal.replace(y.args[0].args[1]).apply(Ne),S.substitution.apply(Ne),S)])};w.__calls.unshift(Z)}else{var ie=new be(S.goal.replace(y.args[0]),S.substitution,S),Se=new be(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,Se])}},"!/0":function(w,S,y){var F,z,X=[];for(F=S,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Se=w.points[ie],Ne=Se.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Se)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new be(S.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new be(S.goal.replace(null),S.substitution,S)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,S,y){var F=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new be(F,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new be(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var F=w.points;w.points=[],w.prepend([new be(y.args[0],S.substitution,S)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Se=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,x.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new be,xt=x.unify(ie.args[0],y.args[1],jt);xt!==null?($t.substitution=S.substitution.apply(xt),$t.goal=S.goal.replace(y.args[2]).apply(xt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new be(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],Qr=[],ot=Se.length-1;ot>=0;ot--){Qr.push(Se[ot]);var mr=Se[ot].goal!==null?Se[ot].goal.select():null;if(x.type.is_term(mr)&&mr.indicator==="!/0")break}var xr=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new be(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(xr),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new be,X=x.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=S.goal.apply(X).replace(null),z.substitution=S.substitution.apply(X),z.parent=S,w.prepend([z]))},"unify_with_occurs_check/2":function(w,S,y){var F=new be,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=S.goal.apply(z).replace(null),F.substitution=S.substitution.apply(z),F.parent=S,w.prepend([F]))},"\\=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Se=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!x.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Se,w.session.limit=Ne,w.session.format_success=ot,x.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var xt=new H("[]"),an=dt.length-1;an>=0;an--)xt=new H(".",[dt[an],xt]);w.prepend([new be(S.goal.replace(new H("=",[X,xt])),S.substitution,S)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer(Z)&&Z.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Se=0;Se0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new be(S.goal.replace(z),S.substitution,S)])}}},"=../2":function(w,S,y){var F;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new be(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(x.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var F=y.args[0].rename(w);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var X=g(o(De(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new be(S.goal.replace(Z),S.substitution,S))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Se=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new ke(Se,!1)]),ot=new H("=",[Ne,F]);z.push(new be(S.goal.replace(ot),S.substitution,S))}w.prepend(z)}},"asserta/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new _e(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new _e(F,z,!0)),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new ke(y.args[0].id.length,!1);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(x.type.is_variable(ie)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_atom(ie))w.throw_error(x.error.type("atom",ie,y.indicator));else{var Se=x.type.is_variable(X),Ne=x.type.is_variable(Z);if(!Se&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]);else if(Se&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else if(Ne&&!Se)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new be(S.goal.replace(z),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Se=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_integer(ie))w.throw_error(x.error.type("integer",ie,y.indicator));else if(x.type.is_integer(X)&&X.value<0)w.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer(ie)&&ie.value<0)w.throw_error(x.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(x.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(x.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var xt in ot)if(!!ot.hasOwnProperty(xt)){var an=ot[xt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var xr=new H("=",[new H(mr),Se]),Wr=new H("=",[X,new ke(F)]),Vn=new H("=",[Z,new ke(an)]),Ns=new H("=",[ie,new ke(Qr)]),Ri=new H(",",[new H(",",[new H(",",[Wr,Vn]),Ns]),xr]);jt.push(new be(S.goal.replace(Ri),S.substitution,S))}}}}w.prepend(jt)}},"atom_chars/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new ke(n(F.id,Z),!1),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var X=new ke(n(F.id,0),!1);w.prepend([new be(S.goal.replace(new H("=",[X,z])),S.substitution,S)])}else{var Z=new H(u(z.value));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new ke(n(F,jt),!1),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var ie="",Se=F;x.type.is_term(Se)&&Se.indicator==="./2";){if(!x.type.is_atom(Se.args[0])&&!x.type.is_number(Se.args[0])){w.throw_error(x.error.type("atomic",Se.args[0],y.indicator));return}ie!==""&&(ie+=z.id),x.type.is_atom(Se.args[0])?ie+=Se.args[0].id:ie+=""+Se.args[0].value,Se=Se.args[1]}ie=new H(ie,[]),x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(Se)||Se.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"@=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var Z=x.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new be(S.goal.replace(new H("=",[F,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new be(S.goal.replace(new H("=",[y.args[0],F],w.level)),S.substitution,S)]):w.throw_error(F)},"between/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var Z=[new be(S.goal.replace(new H("=",[X,F])),S.substitution,S)];F.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new be(S.goal.replace(new H("=",[F,new ke(z.value-1,!1)])),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[z,new ke(F.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(S)},"=\\=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(S)},"/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(S)},">=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(S)},"var/1":function(w,S,y){x.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){x.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){x.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){x.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){x.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){x.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){x.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){x.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var F=S.substitution.apply(S.substitution),z=y.args[0].variables(),X=0;X0?xt[xt.length-1]:null,xt!==null&&(jt=J(w,xt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===xt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(De(jt.variables()),function(xr){return new Ie(xr)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(jt.variables()),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new _e(jt,null).singleton_variables(),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new be(S.goal.replace(Qr),S.substitution,S)])}else jt.type===p?w.throw_error(x.error.syntax(xt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),S.substitution,S)])},"write/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),S.substitution,S)])},"writeq/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),S.substitution,S)])},"write_term/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream(Z)||Z.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Se=X,Ne;x.type.is_term(Se)&&Se.indicator==="./2";){if(Ne=Se.args[0],x.type.is_variable(Ne)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Ne)){w.throw_error(x.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Se=Se.args[1]}if(Se.indicator!=="[]/0"){x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in x.flag)if(!!x.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new be(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(S)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new ke(Number.MAX_SAFE_INTEGER)],value:new ke(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new ke(Number.MIN_SAFE_INTEGER)],value:new ke(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)])],value:new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var F=[{left:w,right:S}],z={};F.length!==0;){var X=F.pop();if(w=X.left,S=X.right,x.type.is_term(w)&&x.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,S){if(x.type.is_operator(S)){for(var y=x.type.is_operator(S),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new ke(w.line+1)]),new H(".",[new H("column",[new ke(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(S)]),new H(".",[new H("line",[new ke(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new ke(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,F){S instanceof Te&&(S=S.thread);var F=F||{};if(F.session=S?S.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(x.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!x.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Se=typeof S>"u"||S.points.length>0?" ;":".";return z===0?"true"+Se:X+Se},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new x.type.Session(w)}};typeof hl<"u"?hl.exports=x:window.pl=x})()});function ame(t,e,r){t.prepend(r.map(o=>new Ra.default.type.State(e.goal.replace(o),e.substitution,e)))}function CH(t){let e=cme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ume(t,e){cme.set(t,e),t.consult(`:- use_module(library(${tdt.id})).`)}var wH,Ra,lme,c0,$gt,edt,cme,tdt,Ame=Et(()=>{Ye();wH=$e(g2()),Ra=$e(EH()),lme=$e(Be("vm")),{is_atom:c0,is_variable:$gt,is_instantiated_list:edt}=Ra.default.type;cme=new WeakMap;tdt=new Ra.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=CH(t).tryWorkspaceByDescriptor(A);$gt(n)&&h!==null&&ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(String(h.relativeCwd))])]),c0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let A=CH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,wH.default)(A.manifest.raw,a.id);typeof p>"u"||ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ra.default.type.State(e.goal.replace(new Ra.default.type.Term("workspace_field_test",[o,a,n,new Ra.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!c0(o)||!c0(a)||!c0(n)||!edt(u)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let p=CH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,wH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,b]of u.toJavaScript().entries())E[`$${v}`]=b;lme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var S2={};Kt(S2,{Constraints:()=>P2,DependencyType:()=>gme});function to(t){if(t instanceof vC.default.type.Num)return t.value;if(t instanceof vC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof vC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function pme(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function $d(t){return t.id==="null"?null:`${t.toJavaScript()}`}function rdt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function u0(t){return typeof t=="string"?`'${t}'`:"[]"}var hme,vC,gme,fme,IH,P2,x2=Et(()=>{Ye();Ye();Pt();hme=$e(Yde()),vC=$e(EH());B2();Ame();(0,hme.default)(vC.default);gme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(gme||{}),fme=["dependencies","devDependencies","peerDependencies"];IH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=vC.default.create(o),ume(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw pme(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw pme(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of fme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${u0(o)}). +`,e+=`workspace_ident(${u0(o)}, ${u0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${u0(o)}, ${u0(r.manifest.version)}). +`;for(let a of fme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${u0(o)}, ${u0(W.stringifyIdent(n))}, ${u0(n.range)}, ${a}). +`}return e+=`workspace(_) :- false. +`,e+=`workspace_ident(_, _) :- false. +`,e+=`workspace_version(_, _) :- false. +`,e+=`workspace_has_dependency(_, _, _, _) :- false. +`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. +`,e+=`gen_enforced_field(_, _, _) :- false. +`,e}get fullSource(){return`${this.getProjectDatabase()} +${this.source} +${this.getDeclarations()}`}createSession(){return new IH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=I2([A,W.stringifyIdent(n)]),h=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=I2(n),p=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.DependencyIdent),u=$d(o.links.DependencyRange),A=$d(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return je.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.FieldPath),u=rdt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return je.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=$d(u));yield a}}}});var vme=_(vk=>{"use strict";Object.defineProperty(vk,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?Bme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function Bme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}vk.createFallbackableCache=q2;vk.createNullCache=Bme});var Pme=_((QWt,Dme)=>{Dme.exports=vme()});var Sme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});function wdt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}LH.createInMemoryCache=wdt});var bme=_((TWt,xme)=>{xme.exports=Sme()});var Qme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function Idt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===MH.WithinHeaders?o:{}},queryParameters(){return t===MH.WithinQueryParameters?o:{}}}}function Bdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function kme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return kme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function vdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Ddt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function Pdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Sdt="4.14.2",xdt=t=>()=>t.transporter.requester.destroy(),MH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=MH;Zc.addMethods=Ddt;Zc.createAuth=Idt;Zc.createRetryablePromise=Bdt;Zc.createWaitablePromise=kme;Zc.destroy=xdt;Zc.encode=Pdt;Zc.shuffle=vdt;Zc.version=Sdt});var G2=_((NWt,Fme)=>{Fme.exports=Qme()});var Tme=_(OH=>{"use strict";Object.defineProperty(OH,"__esModule",{value:!0});var bdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};OH.MethodEnum=bdt});var Y2=_((MWt,Rme)=>{Rme.exports=Tme()});var Jme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Lme=Y2();function UH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var W2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Mme=2*60*1e3;function HH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Ome(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Mme}function Ume(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Mme}function jH(t){return typeof t=="string"?{protocol:"https",url:t,accept:W2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||W2.Any}}function kdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(HH(r))))).then(r=>{let o=r.filter(A=>Ome(A)),a=r.filter(A=>Ume(A)),n=[...o,...a],u=n.length>0?n.map(A=>jH(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Qdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Fdt=t=>{let e=t.status;return t.isTimedOut||Qdt(t)||~~(e/100)!==2&&~~(e/100)!==4},Tdt=({status:t})=>~~(t/100)===2,Rdt=(t,e)=>Fdt(t)?e.onRetry(t):Tdt(t)?e.onSuccess(t):e.onFail(t);function Nme(t,e,r,o){let a=[],n=Gme(r,o),u=Yme(t,o),A=r.method,p=r.method!==Lme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,b)=>{let C=v.pop();if(C===void 0)throw Kme(_H(a));let T={data:n,headers:u,method:A,url:jme(C,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,o.timeout)},L=J=>{let te={request:T,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>_me(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",qH(te)),t.hostsCache.set(C,HH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,b))},onFail(J){throw L(J),Hme(J,_H(a))}};return t.requester.send(T).then(J=>Rdt(J,U))};return kdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Ndt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>jH(v)),read(v,b){let C=UH(b,I.timeouts.read),T=()=>Nme(I,I.hosts.filter(J=>(J.accept&W2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return T();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,T()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,b){return Nme(I,I.hosts.filter(C=>(C.accept&W2.Write)!==0),v,UH(b,I.timeouts.write))}};return I}function Ldt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function _me(t){try{return JSON.parse(t.content)}catch(e){throw Vme(e.message,t)}}function Hme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Wme(o,e,r)}function Mdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function jme(t,e,r){let o=qme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function qme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Mdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Gme(t,e){if(t.method===Lme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Yme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function _H(t){return t.map(e=>qH(e))}function qH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Wme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Vme(t,e){return{name:"DeserializationError",message:t,response:e}}function Kme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=W2;Fi.HostStatusEnum=xC;Fi.createApiError=Wme;Fi.createDeserializationError=Vme;Fi.createMappedRequestOptions=UH;Fi.createRetryError=Kme;Fi.createStatefulHost=HH;Fi.createStatelessHost=jH;Fi.createTransporter=Ndt;Fi.createUserAgent=Ldt;Fi.deserializeFailure=Hme;Fi.deserializeSuccess=_me;Fi.isStatefulHostTimeouted=Ume;Fi.isStatefulHostUp=Ome;Fi.serializeData=Gme;Fi.serializeHeaders=Yme;Fi.serializeQueryParameters=qme;Fi.serializeUrl=jme;Fi.stackFrameWithoutCredentials=qH;Fi.stackTraceWithoutCredentials=_H});var V2=_((UWt,zme)=>{zme.exports=Jme()});var Xme=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var bC=G2(),Odt=V2(),K2=Y2(),Udt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Odt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return bC.addMethods({appId:a,transporter:o},t.methods)},_dt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:"2/abtests",data:e},r),Hdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),jdt=t=>(e,r)=>t.transporter.read({method:K2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),qdt=t=>e=>t.transporter.read({method:K2.MethodEnum.Get,path:"2/abtests"},e),Gdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);d0.addABTest=_dt;d0.createAnalyticsClient=Udt;d0.deleteABTest=Hdt;d0.getABTest=jdt;d0.getABTests=qdt;d0.stopABTest=Gdt});var $me=_((HWt,Zme)=>{Zme.exports=Xme()});var tye=_(J2=>{"use strict";Object.defineProperty(J2,"__esModule",{value:!0});var GH=G2(),Ydt=V2(),eye=Y2(),Wdt=t=>{let e=t.region||"us",r=GH.createAuth(GH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ydt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return GH.addMethods({appId:t.appId,transporter:o},t.methods)},Vdt=t=>e=>t.transporter.read({method:eye.MethodEnum.Get,path:"1/strategies/personalization"},e),Kdt=t=>(e,r)=>t.transporter.write({method:eye.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);J2.createPersonalizationClient=Wdt;J2.getPersonalizationStrategy=Vdt;J2.setPersonalizationStrategy=Kdt});var nye=_((qWt,rye)=>{rye.exports=tye()});var mye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=G2(),Na=V2(),Ir=Y2(),Jdt=Be("crypto");function Dk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var zdt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function iye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function sye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function oye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Xdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>z2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Zdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},$dt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),emt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>kC(t)(o.taskID,a)),Pk=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},tmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Rules]}),rmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Settings]}),nmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Synonyms]}),imt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),smt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},omt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},amt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Jdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},z2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),lmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),umt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw oye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),fmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),pmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},X2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},hmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),gmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),dmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),mmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),ymt=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},Emt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>X2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},Cmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),wmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},Imt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return X2(t)(o.indexName,{methods:{searchForFacetValues:hye}}).searchForFacetValues(a,n,{...r,...u})})),Bmt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},vmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Dmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},Pmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Smt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),xmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),bmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>kC(t)(o.taskID,a)),kmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>z2(t)(e,I).then(b=>p(b)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},kC=t=>(e,r)=>Gt.createRetryablePromise(o=>aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),lye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Qmt=t=>e=>Dk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Fmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Tmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Sk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Nmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Lmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Mmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Omt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Umt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Sk(t)(o,rm.DeleteObject,r)},_mt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Hmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},jmt=t=>e=>uye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),qmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Gmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>pye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw sye();return A()});return A()},Ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Wmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Vmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Kmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),uye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),zmt=t=>(e,r)=>Gt.createWaitablePromise(fye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),fye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?rm.PartialUpdateObject:rm.PartialUpdateObjectNoCreate;return Sk(t)(e,n,a)},Xmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,T,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:T}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=YH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let b=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,T,L])=>({objectIDs:T.objectIDs,taskIDs:[C.taskID,...T.taskIDs,L.taskID]}));return Gt.createWaitablePromise(b,(C,T)=>Promise.all(I.map(L=>L.wait(T))))},Zmt=t=>(e,r)=>WH(t)(e,{...r,clearExistingRules:!0}),$mt=t=>(e,r)=>VH(t)(e,{...r,clearExistingSynonyms:!0}),eyt=t=>(e,r)=>Gt.createWaitablePromise(YH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),YH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?rm.AddObject:rm.UpdateObject;if(n===rm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(iye()))}return Sk(t)(e,n,a)},tyt=t=>(e,r)=>WH(t)([e],r),WH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},ryt=t=>(e,r)=>VH(t)([e],r),VH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),hye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),gye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),dye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),nyt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>Aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),iyt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},rm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},xk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},syt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},oyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=iyt;Ft.BatchActionEnum=rm;Ft.ScopeEnum=xk;Ft.StrategyEnum=syt;Ft.SynonymEnum=oyt;Ft.addApiKey=Xdt;Ft.assignUserID=Zdt;Ft.assignUserIDs=$dt;Ft.batch=lye;Ft.browseObjects=Qmt;Ft.browseRules=Fmt;Ft.browseSynonyms=Tmt;Ft.chunkedBatch=Sk;Ft.clearDictionaryEntries=emt;Ft.clearObjects=Rmt;Ft.clearRules=Nmt;Ft.clearSynonyms=Lmt;Ft.copyIndex=Pk;Ft.copyRules=tmt;Ft.copySettings=rmt;Ft.copySynonyms=nmt;Ft.createBrowsablePromise=Dk;Ft.createMissingObjectIDError=iye;Ft.createObjectNotFoundError=sye;Ft.createSearchClient=zdt;Ft.createValidUntilNotFoundError=oye;Ft.customRequest=imt;Ft.deleteApiKey=smt;Ft.deleteBy=Mmt;Ft.deleteDictionaryEntries=omt;Ft.deleteIndex=Omt;Ft.deleteObject=Umt;Ft.deleteObjects=cye;Ft.deleteRule=_mt;Ft.deleteSynonym=Hmt;Ft.exists=jmt;Ft.findAnswers=qmt;Ft.findObject=Gmt;Ft.generateSecuredApiKey=amt;Ft.getApiKey=z2;Ft.getAppTask=aye;Ft.getDictionarySettings=lmt;Ft.getLogs=cmt;Ft.getObject=Ymt;Ft.getObjectPosition=Wmt;Ft.getObjects=Vmt;Ft.getRule=Kmt;Ft.getSecuredApiKeyRemainingValidity=umt;Ft.getSettings=uye;Ft.getSynonym=Jmt;Ft.getTask=Aye;Ft.getTopUserIDs=Amt;Ft.getUserID=fmt;Ft.hasPendingMappings=pmt;Ft.initIndex=X2;Ft.listApiKeys=hmt;Ft.listClusters=gmt;Ft.listIndices=dmt;Ft.listUserIDs=mmt;Ft.moveIndex=ymt;Ft.multipleBatch=Emt;Ft.multipleGetObjects=Cmt;Ft.multipleQueries=wmt;Ft.multipleSearchForFacetValues=Imt;Ft.partialUpdateObject=zmt;Ft.partialUpdateObjects=fye;Ft.removeUserID=Bmt;Ft.replaceAllObjects=Xmt;Ft.replaceAllRules=Zmt;Ft.replaceAllSynonyms=$mt;Ft.replaceDictionaryEntries=vmt;Ft.restoreApiKey=Dmt;Ft.saveDictionaryEntries=Pmt;Ft.saveObject=eyt;Ft.saveObjects=YH;Ft.saveRule=tyt;Ft.saveRules=WH;Ft.saveSynonym=ryt;Ft.saveSynonyms=VH;Ft.search=pye;Ft.searchDictionaryEntries=Smt;Ft.searchForFacetValues=hye;Ft.searchRules=gye;Ft.searchSynonyms=dye;Ft.searchUserIDs=xmt;Ft.setDictionarySettings=bmt;Ft.setSettings=nyt;Ft.updateApiKey=kmt;Ft.waitAppTask=kC;Ft.waitTask=Zi});var Eye=_((YWt,yye)=>{yye.exports=mye()});var Cye=_(bk=>{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});function ayt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var lyt={Debug:1,Info:2,Error:3};bk.LogLevelEnum=lyt;bk.createNullLogger=ayt});var Iye=_((VWt,wye)=>{wye.exports=Cye()});var Pye=_(KH=>{"use strict";Object.defineProperty(KH,"__esModule",{value:!0});var Bye=Be("http"),vye=Be("https"),cyt=Be("url"),Dye={keepAlive:!0},uyt=new Bye.Agent(Dye),Ayt=new vye.Agent(Dye);function fyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||uyt,n=r||t||Ayt;return{send(u){return new Promise(A=>{let p=cyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?vye:Bye).request(E,T=>{let L=[];T.on("data",U=>{L=L.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(C),A({status:T.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(T,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},T*1e3),b=v(u.connectTimeout,"Connection timeout"),C;I.on("error",T=>{clearTimeout(b),clearTimeout(C),A({status:0,content:T.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(b),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}KH.createNodeHttpRequester=fyt});var xye=_((JWt,Sye)=>{Sye.exports=Pye()});var Fye=_((zWt,Qye)=>{"use strict";var bye=Pme(),pyt=bme(),QC=$me(),zH=G2(),JH=nye(),Ut=Eye(),hyt=Iye(),gyt=xye(),dyt=V2();function kye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:gyt.createNodeHttpRequester(),logger:hyt.createNullLogger(),responsesCache:bye.createNullCache(),requestsCache:bye.createNullCache(),hostsCache:pyt.createInMemoryCache(),userAgent:dyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>JH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:JH.getPersonalizationStrategy,setPersonalizationStrategy:JH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>QC.createAnalyticsClient({...o,...u,methods:{addABTest:QC.addABTest,getABTest:QC.getABTest,getABTests:QC.getABTests,stopABTest:QC.stopABTest,deleteABTest:QC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}kye.version=zH.version;Qye.exports=kye});var ZH=_((XWt,XH)=>{var Tye=Fye();XH.exports=Tye;XH.exports.default=Tye});var t6=_(($Wt,Lye)=>{"use strict";var Nye=Object.getOwnPropertySymbols,yyt=Object.prototype.hasOwnProperty,Eyt=Object.prototype.propertyIsEnumerable;function Cyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function wyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Lye.exports=wyt()?Object.assign:function(t,e){for(var r,o=Cyt(t),a,n=1;n{"use strict";var o6=t6(),$c=typeof Symbol=="function"&&Symbol.for,Z2=$c?Symbol.for("react.element"):60103,Iyt=$c?Symbol.for("react.portal"):60106,Byt=$c?Symbol.for("react.fragment"):60107,vyt=$c?Symbol.for("react.strict_mode"):60108,Dyt=$c?Symbol.for("react.profiler"):60114,Pyt=$c?Symbol.for("react.provider"):60109,Syt=$c?Symbol.for("react.context"):60110,xyt=$c?Symbol.for("react.forward_ref"):60112,byt=$c?Symbol.for("react.suspense"):60113,kyt=$c?Symbol.for("react.memo"):60115,Qyt=$c?Symbol.for("react.lazy"):60116,Mye=typeof Symbol=="function"&&Symbol.iterator;function $2(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rkk.length&&kk.push(t)}function n6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case Z2:case Iyt:n=!0}}if(n)return r(o,t,e===""?"."+r6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Jye.exports=Kye()});var f6=_((rVt,A6)=>{"use strict";var An=A6.exports;A6.exports.default=An;var Ln="\x1B[",eB="\x1B]",TC="\x07",Qk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=zye?"\x1B7":Ln+"s";An.cursorRestorePosition=zye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[eB,"8",Qk,Qk,e,TC,t,eB,"8",Qk,Qk,TC].join("");An.image=(t,e={})=>{let r=`${eB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${eB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${eB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Zye=_((nVt,p6)=>{"use strict";var Xye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};p6.exports=Xye;p6.exports.default=Xye});var eEe=_((iVt,Tk)=>{"use strict";var Myt=Zye(),Fk=new WeakMap,$ye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(Fk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Myt(n,t),Fk.set(n,o),n};Tk.exports=$ye;Tk.exports.default=$ye;Tk.exports.callCount=t=>{if(!Fk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Fk.get(t)}});var tEe=_((sVt,Rk)=>{Rk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Rk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Rk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var d6=_((oVt,LC)=>{var Ei=global.process,nm=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};nm(Ei)?(rEe=Be("assert"),RC=tEe(),nEe=/^win/i.test(Ei.platform),tB=Be("events"),typeof tB!="function"&&(tB=tB.EventEmitter),Ei.__signal_exit_emitter__?Rs=Ei.__signal_exit_emitter__:(Rs=Ei.__signal_exit_emitter__=new tB,Rs.count=0,Rs.emitted={}),Rs.infinite||(Rs.setMaxListeners(1/0),Rs.infinite=!0),LC.exports=function(t,e){if(!nm(global.process))return function(){};rEe.equal(typeof t,"function","a callback must be provided for exit handler"),NC===!1&&h6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Rs.removeListener(r,t),Rs.listeners("exit").length===0&&Rs.listeners("afterexit").length===0&&Nk()};return Rs.on(r,t),o},Nk=function(){!NC||!nm(global.process)||(NC=!1,RC.forEach(function(e){try{Ei.removeListener(e,Lk[e])}catch{}}),Ei.emit=Mk,Ei.reallyExit=g6,Rs.count-=1)},LC.exports.unload=Nk,im=function(e,r,o){Rs.emitted[e]||(Rs.emitted[e]=!0,Rs.emit(e,r,o))},Lk={},RC.forEach(function(t){Lk[t]=function(){if(!!nm(global.process)){var r=Ei.listeners(t);r.length===Rs.count&&(Nk(),im("exit",null,t),im("afterexit",null,t),nEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),LC.exports.signals=function(){return RC},NC=!1,h6=function(){NC||!nm(global.process)||(NC=!0,Rs.count+=1,RC=RC.filter(function(e){try{return Ei.on(e,Lk[e]),!0}catch{return!1}}),Ei.emit=sEe,Ei.reallyExit=iEe)},LC.exports.load=h6,g6=Ei.reallyExit,iEe=function(e){!nm(global.process)||(Ei.exitCode=e||0,im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),g6.call(Ei,Ei.exitCode))},Mk=Ei.emit,sEe=function(e,r){if(e==="exit"&&nm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Mk.apply(this,arguments);return im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),o}else return Mk.apply(this,arguments)}):LC.exports=function(){return function(){}};var rEe,RC,nEe,tB,Rs,Nk,im,Lk,NC,h6,g6,iEe,Mk,sEe});var aEe=_((aVt,oEe)=>{"use strict";var Oyt=eEe(),Uyt=d6();oEe.exports=Oyt(()=>{Uyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var m6=_(MC=>{"use strict";var _yt=aEe(),Ok=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Ok=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(_yt(),Ok=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Ok=t),Ok?MC.show(e):MC.hide(e)}});var AEe=_(rB=>{"use strict";var uEe=rB&&rB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rB,"__esModule",{value:!0});var lEe=uEe(f6()),cEe=uEe(m6()),Hyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(cEe.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(lEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(lEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(cEe.default.show(),a=!1)},n};rB.default={create:Hyt}});var fEe=_((uVt,jyt)=>{jyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var gEe=_(gl=>{"use strict";var hEe=fEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:hEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;hEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return pEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=pEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function pEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var mEe=_((fVt,dEe)=>{"use strict";dEe.exports=gEe().isCI});var EEe=_((pVt,yEe)=>{"use strict";var qyt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};yEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of qyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var PEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var UC,sB,qk,Gk,v6;typeof window>"u"||typeof MessageChannel!="function"?(OC=null,y6=null,E6=function(){if(OC!==null)try{var t=kn.unstable_now();OC(!0,t),OC=null}catch(e){throw setTimeout(E6,0),e}},CEe=Date.now(),kn.unstable_now=function(){return Date.now()-CEe},UC=function(t){OC!==null?setTimeout(UC,0,t):(OC=t,setTimeout(E6,0))},sB=function(t,e){y6=setTimeout(t,e)},qk=function(){clearTimeout(y6)},Gk=function(){return!1},v6=kn.unstable_forceFrameRate=function(){}):(Uk=window.performance,C6=window.Date,wEe=window.setTimeout,IEe=window.clearTimeout,typeof console<"u"&&(BEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof BEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Uk=="object"&&typeof Uk.now=="function"?kn.unstable_now=function(){return Uk.now()}:(vEe=C6.now(),kn.unstable_now=function(){return C6.now()-vEe}),nB=!1,iB=null,_k=-1,w6=5,I6=0,Gk=function(){return kn.unstable_now()>=I6},v6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125jk(u,r))p!==void 0&&0>jk(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>jk(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function jk(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],m0=[],Gyt=1,na=null,Lo=3,Wk=!1,sm=!1,oB=!1;function Vk(t){for(var e=nc(m0);e!==null;){if(e.callback===null)Yk(m0);else if(e.startTime<=t)Yk(m0),e.sortIndex=e.expirationTime,D6(eu,e);else break;e=nc(m0)}}function P6(t){if(oB=!1,Vk(t),!sm)if(nc(eu)!==null)sm=!0,UC(S6);else{var e=nc(m0);e!==null&&sB(P6,e.startTime-t)}}function S6(t,e){sm=!1,oB&&(oB=!1,qk()),Wk=!0;var r=Lo;try{for(Vk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!Gk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&Yk(eu),Vk(e)}else Yk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(m0);u!==null&&sB(P6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Wk=!1}}function DEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Yyt=v6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,D6(m0,t),nc(eu)===null&&t===nc(m0)&&(oB?qk():oB=!0,sB(P6,a-o))):(t.sortIndex=r,D6(eu,t),sm||Wk||(sm=!0,UC(S6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Vk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";SEe.exports=PEe()});var xEe=_((dVt,aB)=>{aB.exports=function t(e){"use strict";var r=t6(),o=sn(),a=x6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,R=1;Rao||(P.current=yl[ao],yl[ao]=null,ao--)}function Mn(P,D){ao++,yl[ao]=P.current,P.current=D}var Ni={},On={current:Ni},_i={current:!1},tr=Ni;function Me(P,D){var R=P.type.contextTypes;if(!R)return Ni;var j=P.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var Y={},fe;for(fe in R)Y[fe]=D[fe];return j&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(P){return P=P.childContextTypes,P!=null}function Oa(P){Kn(_i,P),Kn(On,P)}function hr(P){Kn(_i,P),Kn(On,P)}function uc(P,D,R){if(On.current!==Ni)throw Error(n(168));Mn(On,D,P),Mn(_i,R,P)}function uu(P,D,R){var j=P.stateNode;if(P=D.childContextTypes,typeof j.getChildContext!="function")return R;j=j.getChildContext();for(var Y in j)if(!(Y in P))throw Error(n(108,ae(D)||"Unknown",Y));return r({},R,{},j)}function Ac(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=On.current,Mn(On,D,P),Mn(_i,_i.current,P),!0}function El(P,D,R){var j=P.stateNode;if(!j)throw Error(n(169));R?(D=uu(P,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Kn(_i,P),Kn(On,P),Mn(On,D,P)):Kn(_i,P),Mn(_i,R,P)}var vA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Tt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,cp=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,SA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case DA:return 97;case cp:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return Cl;case 97:return DA;case 96:return cp;case 95:return pc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),vA(P,D)}function gc(P,D,R){return P=Ze(P),Au(P,D,R)}function pu(P){return hi===null?(hi=[P],hc=Au(Yt,hu)):hi.push(P),PA}function ji(){if(hc!==null){var P=hc;hc=null,Ce(P)}hu()}function hu(){if(!SA&&hi!==null){SA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(qo=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return x?P._currentValue:P._currentValue2}var _s=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var R=P.alternate;if(R===null){var j=P.updateQueue,Y=null;j===null&&(j=P.updateQueue=Un(P.memoizedState))}else j=P.updateQueue,Y=R.updateQueue,j===null?Y===null?(j=P.updateQueue=Un(P.memoizedState),Y=R.updateQueue=Un(R.memoizedState)):j=P.updateQueue=Pn(Y):Y===null&&(Y=R.updateQueue=Pn(j));Y===null||j===Y?We(j,D):j.lastUpdate===null||Y.lastUpdate===null?(We(j,D),We(Y,D)):(We(j,D),Y.lastUpdate=D)}function It(P,D){var R=P.updateQueue;R=R===null?P.updateQueue=Un(P.memoizedState):nr(P,R),R.lastCapturedUpdate===null?R.firstCapturedUpdate=R.lastCapturedUpdate=D:(R.lastCapturedUpdate.next=D,R.lastCapturedUpdate=D)}function nr(P,D){var R=P.alternate;return R!==null&&D===R.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,R,j,Y,fe){switch(R.tag){case 1:return P=R.payload,typeof P=="function"?P.call(fe,j,Y):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=R.payload,Y=typeof P=="function"?P.call(fe,j,Y):P,Y==null)break;return r({},j,Y);case 2:_s=!0}return j}function me(P,D,R,j,Y){_s=!1,D=nr(P,D);for(var fe=D.baseState,ve=null,vt=0,wt=D.firstUpdate,bt=fe;wt!==null;){var _r=wt.expirationTime;_rxn?(ai=Fr,Fr=null):ai=Fr.sibling;var en=di(rt,Fr,At[xn],Wt);if(en===null){Fr===null&&(Fr=ai);break}P&&Fr&&en.alternate===null&&D(rt,Fr),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en,Fr=ai}if(xn===At.length)return R(rt,Fr),vr;if(Fr===null){for(;xnxn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,en.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),Ke=fe(ho,Ke,xn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(en.done)return R(rt,Fr),vr;if(Fr===null){for(;!en.done;xn++,en=At.next())en=is(rt,en.value,Wt),en!==null&&(Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return vr}for(Fr=j(rt,Fr);!en.done;xn++,en=At.next())en=po(Fr,rt,xn,en.value,Wt),en!==null&&(P&&en.alternate!==null&&Fr.delete(en.key===null?xn:en.key),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return P&&Fr.forEach(function(PF){return D(rt,PF)}),vr}return function(rt,Ke,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===E&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=Ke;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===E:vr.elementType===At.type){R(rt,vr.sibling),Ke=Y(vr,At.type===E?At.props.children:At.props,Wt),Ke.ref=kA(rt,vr,At),Ke.return=rt,rt=Ke;break e}else{R(rt,vr);break}else D(rt,vr);vr=vr.sibling}At.type===E?(Ke=xu(At.props.children,rt.mode,Wt,At.key),Ke.return=rt,rt=Ke):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=kA(rt,Ke,At),Wt.return=rt,rt=Wt)}return ve(rt);case h:e:{for(vr=At.key;Ke!==null;){if(Ke.key===vr)if(Ke.tag===4&&Ke.stateNode.containerInfo===At.containerInfo&&Ke.stateNode.implementation===At.implementation){R(rt,Ke.sibling),Ke=Y(Ke,At.children||[],Wt),Ke.return=rt,rt=Ke;break e}else{R(rt,Ke);break}else D(rt,Ke);Ke=Ke.sibling}Ke=Fw(At,rt.mode,Wt),Ke.return=rt,rt=Ke}return ve(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,Ke!==null&&Ke.tag===6?(R(rt,Ke.sibling),Ke=Y(Ke,At,Wt),Ke.return=rt,rt=Ke):(R(rt,Ke),Ke=Qw(At,rt.mode,Wt),Ke.return=rt,rt=Ke),ve(rt);if(bA(At))return VA(rt,Ke,At,Wt);if(Ae(At))return Yo(rt,Ke,At,Wt);if(Sn&&up(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return R(rt,Ke)}}var gu=ng(!0),ig=ng(!1),du={},uo={current:du},QA={current:du},mc={current:du};function ca(P){if(P===du)throw Error(n(174));return P}function sg(P,D){Mn(mc,D,P),Mn(QA,P,P),Mn(uo,du,P),D=ne(D),Kn(uo,P),Mn(uo,D,P)}function yc(P){Kn(uo,P),Kn(QA,P),Kn(mc,P)}function Pm(P){var D=ca(mc.current),R=ca(uo.current);D=ee(R,P.type,D),R!==D&&(Mn(QA,P,P),Mn(uo,D,P))}function og(P){QA.current===P&&(Kn(uo,P),Kn(QA,P))}var $n={current:0};function Ap(P){for(var D=P;D!==null;){if(D.tag===13){var R=D.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Ls(R)||so(R)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function ag(P,D){return{responder:P,props:D}}var FA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,bi=null,wc=0;function ct(){throw Error(n(321))}function Eu(P,D){if(D===null)return!1;for(var R=0;RCc&&(Cc=_r,_m(Cc))):(Pw(_r,wt.suspenseConfig),fe=wt.eagerReducer===P?wt.eagerState:P(fe,wt.action)),ve=wt,wt=wt.next}while(wt!==null&&wt!==j);bt||(vt=ve,Y=fe),hs(fe,D.memoizedState)||(qo=!0),D.memoizedState=fe,D.baseUpdate=vt,D.baseState=Y,R.lastRenderedState=fe}return[D.memoizedState,R.dispatch]}function cg(P){var D=TA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=hg.bind(null,Ha,P),[D.memoizedState,P]}function ug(P){return Cs(Br,P)}function Ag(P,D,R,j){return P={tag:P,create:D,destroy:R,deps:j,next:null},G===null?(G={lastEffect:null},G.lastEffect=P.next=P):(D=G.lastEffect,D===null?G.lastEffect=P.next=P:(R=D.next,D.next=P,P.next=R,G.lastEffect=P)),P}function pp(P,D,R,j){var Y=TA();Dt|=P,Y.memoizedState=Ag(D,R,void 0,j===void 0?null:j)}function Ic(P,D,R,j){var Y=fp();j=j===void 0?null:j;var fe=void 0;if(Gi!==null){var ve=Gi.memoizedState;if(fe=ve.destroy,j!==null&&Eu(j,ve.deps)){Ag(0,R,fe,j);return}}Dt|=P,Y.memoizedState=Ag(D,R,fe,j)}function Ct(P,D){return pp(516,192,P,D)}function Sm(P,D){return Ic(516,192,P,D)}function fg(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function pg(){}function Cu(P,D){return TA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(R.memoizedState=[P,D],P)}function hg(P,D,R){if(!(25>wc))throw Error(n(301));var j=P.alternate;if(P===Ha||j!==null&&j===Ha)if(wl=!0,P={expirationTime:mu,suspenseConfig:null,action:R,eagerReducer:null,eagerState:null,next:null},bi===null&&(bi=new Map),R=bi.get(D),R===void 0)bi.set(D,P);else{for(D=R;D.next!==null;)D=D.next;D.next=P}else{var Y=ga(),fe=pt.suspense;Y=HA(Y,P,fe),fe={expirationTime:Y,suspenseConfig:fe,action:R,eagerReducer:null,eagerState:null,next:null};var ve=D.last;if(ve===null)fe.next=fe;else{var vt=ve.next;vt!==null&&(fe.next=vt),ve.next=fe}if(D.last=fe,P.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,bt=j(wt,R);if(fe.eagerReducer=j,fe.eagerState=bt,hs(bt,wt))return}catch{}finally{}Sc(P,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},yw={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,pp(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return pp(4,36,P,D)},useMemo:function(P,D){var R=TA();return D=D===void 0?null:D,P=P(),R.memoizedState=[P,D],P},useReducer:function(P,D,R){var j=TA();return D=R!==void 0?R(D):D,j.memoizedState=j.baseState=D,P=j.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=hg.bind(null,Ha,P),[j.memoizedState,P]},useRef:function(P){var D=TA();return P={current:P},D.memoizedState=P},useState:cg,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=cg(P),j=R[0],Y=R[1];return Ct(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=cg(!1),R=D[0],j=D[1];return[Cu(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},bm={readContext:ms,useCallback:xm,useContext:ms,useEffect:Sm,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,Ic(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return Ic(4,36,P,D)},useMemo:function(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(P=P(),R.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return fp().memoizedState},useState:ug,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=ug(P),j=R[0],Y=R[1];return Sm(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=ug(!1),R=D[0],j=D[1];return[xm(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},Aa=null,Bc=null,Il=!1;function Iu(P,D){var R=Dl(5,null,null,0);R.elementType="DELETED",R.type="DELETED",R.stateNode=D,R.return=P,R.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=R,P.lastEffect=R):P.firstEffect=P.lastEffect=R}function gg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function RA(P){if(Il){var D=Bc;if(D){var R=D;if(!gg(P,D)){if(D=cc(R),!D||!gg(P,D)){P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P;return}Iu(Aa,R)}Aa=P,Bc=cu(D)}else P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P}}function hp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function ja(P){if(!y||P!==Aa)return!1;if(!Il)return hp(P),Il=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!Qe(D,P.memoizedProps))for(D=Bc;D;)Iu(P,D),D=cc(D);if(hp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));Bc=Ms(P)}else Bc=Aa?cc(P.stateNode):null;return!0}function dg(){y&&(Bc=Aa=null,Il=!1)}var gp=u.ReactCurrentOwner,qo=!1;function ws(P,D,R,j){D.child=P===null?ig(D,null,R,j):gu(D,P.child,R,j)}function Ii(P,D,R,j,Y){R=R.render;var fe=D.ref;return ds(D,Y),j=lg(P,D,R,j,fe,Y),P!==null&&!qo?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=Y&&(P.expirationTime=0),si(P,D,Y)):(D.effectTag|=1,ws(P,D,j,Y),D.child)}function km(P,D,R,j,Y,fe){if(P===null){var ve=R.type;return typeof ve=="function"&&!kw(ve)&&ve.defaultProps===void 0&&R.compare===null&&R.defaultProps===void 0?(D.tag=15,D.type=ve,Qm(P,D,ve,j,Y,fe)):(P=Hm(R.type,null,j,null,D.mode,fe),P.ref=D.ref,P.return=D,D.child=P)}return ve=P.child,YD)&&_A.set(P,D)))}}function vg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=pu(Dw.bind(null,P));else{var D=Um(P),R=P.callbackNode;if(D===0)R!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),R!==null){var Y=P.callbackPriority;if(P.callbackExpirationTime===D&&Y>=j)return;R!==PA&&Ce(R)}P.callbackExpirationTime=D,P.callbackPriority=j,D=D===1073741823?pu(Dw.bind(null,P)):gc(j,Wv.bind(null,P),{timeout:10*(1073741821-D)-Li()}),P.callbackNode=D}}}function Wv(P,D){if(Om=0,D)return D=ga(),jm(P,D),fo(P),null;var R=Um(P);if(R!==0){if(D=P.callbackNode,(yr&(rs|js))!==En)throw Error(n(327));if(Ip(),P===gi&&R===ns||Pu(P,R),Mr!==null){var j=yr;yr|=rs;var Y=qA(P);do try{gF();break}catch(vt){jA(P,vt)}while(1);if(la(),yr=j,Ep.current=Y,Yi===Rm)throw D=Nm,Pu(P,R),WA(P,R),fo(P),D;if(Mr===null)switch(Y=P.finishedWork=P.current.alternate,P.finishedExpirationTime=R,j=Yi,gi=null,j){case Bu:case Rm:throw Error(n(345));case Bi:jm(P,2=R){P.lastPingedTime=R,Pu(P,R);break}}if(fe=Um(P),fe!==0&&fe!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}P.timeoutHandle=Te(Su.bind(null,P),Y);break}Su(P);break;case vl:if(WA(P,R),j=P.lastSuspendedTime,R===j&&(P.nextKnownPendingLevel=Sw(Y)),OA&&(Y=P.lastPingedTime,Y===0||Y>=R)){P.lastPingedTime=R,Pu(P,R);break}if(Y=Um(P),Y!==0&&Y!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}if(MA!==1073741823?j=10*(1073741821-MA)-Li():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,Y=Li(),R=10*(1073741821-R)-Y,j=Y-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*Cw(j/1960))-j,R=j?j=0:(Y=ve.busyDelayMs|0,fe=Li()-(10*(1073741821-fe)-(ve.timeoutMs|0||5e3)),j=fe<=Y?0:Y+j-fe),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Pc&&(Yi=Bi),fe=yg(fe,Y),wt=j;do{switch(wt.tag){case 3:ve=fe,wt.effectTag|=4096,wt.expirationTime=D;var Ke=Gv(wt,ve,D);It(wt,Ke);break e;case 1:ve=fe;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,ve,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Mr=zv(Mr)}catch(Sn){D=Sn;continue}break}while(1)}function qA(){var P=Ep.current;return Ep.current=wu,P===null?wu:P}function Pw(P,D){PCp&&(Cp=P)}function hF(){for(;Mr!==null;)Mr=Jv(Mr)}function gF(){for(;Mr!==null&&!Tt();)Mr=Jv(Mr)}function Jv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=zv(P)),ww.current=null,D}function zv(P){Mr=P;do{var D=Mr.alternate;if(P=Mr.return,(Mr.effectTag&2048)===0){e:{var R=D;D=Mr;var j=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Oa(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(R===null||R.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:og(D);var fe=ca(mc.current);if(j=D.type,R!==null&&D.stateNode!=null)ts(R,D,j,Y,fe),R.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(R=ca(uo.current),ja(D)){if(Y=D,!y)throw Error(n(175));R=ap(Y.stateNode,Y.type,Y.memoizedProps,fe,R,Y),Y.updateQueue=R,R=R!==null,R&&pa(D)}else{var ve=ht(j,Y,fe,R,D);vc(ve,D,!1,!1),D.stateNode=ve,lt(ve,j,Y,fe,R)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(R&&D.stateNode!=null)Gr(R,D,R.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(R=ca(mc.current),fe=ca(uo.current),ja(D)){if(R=D,!y)throw Error(n(176));(R=lp(R.stateNode,R.memoizedProps,R))&&pa(D)}else D.stateNode=_e(Y,R,fe,D)}break;case 11:break;case 13:if(Kn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}Y=Y!==null,fe=!1,R===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=R.memoizedState,fe=j!==null,Y||j===null||(j=R.child.sibling,j!==null&&(ve=D.firstEffect,ve!==null?(D.firstEffect=j,j.nextEffect=ve):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),Y&&!fe&&(D.mode&2)!==0&&(R===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),Cp!==0&&gi!==null&&(WA(gi,ns),eD(gi,Cp)))),S&&Y&&(D.effectTag|=4),w&&(Y||fe)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Oa(D);break;case 19:if(Kn($n,D),Y=D.memoizedState,Y===null)break;if(fe=(D.effectTag&64)!==0,ve=Y.rendering,ve===null){if(fe)Dc(Y,!1);else if(Yi!==Bu||R!==null&&(R.effectTag&64)!==0)for(R=D.child;R!==null;){if(ve=Ap(R),ve!==null){for(D.effectTag|=64,Dc(Y,!1),R=ve.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,R=j,Y=D.child;Y!==null;)fe=Y,j=R,fe.effectTag&=2,fe.nextEffect=null,fe.firstEffect=null,fe.lastEffect=null,ve=fe.alternate,ve===null?(fe.childExpirationTime=0,fe.expirationTime=j,fe.child=null,fe.memoizedProps=null,fe.memoizedState=null,fe.updateQueue=null,fe.dependencies=null):(fe.childExpirationTime=ve.childExpirationTime,fe.expirationTime=ve.expirationTime,fe.child=ve.child,fe.memoizedProps=ve.memoizedProps,fe.memoizedState=ve.memoizedState,fe.updateQueue=ve.updateQueue,j=ve.dependencies,fe.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),Y=Y.sibling;Mn($n,$n.current&1|2,D),D=D.child;break e}R=R.sibling}}else{if(!fe)if(R=Ap(ve),R!==null){if(D.effectTag|=64,fe=!0,R=R.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!ve.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=j),ve>Y&&(Y=ve),fe=fe.sibling;R.childExpirationTime=Y}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Mr.firstEffect),Mr.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Mr.firstEffect),P.lastEffect=Mr.lastEffect),1P?D:P}function Su(P){var D=_o();return lo(99,dF.bind(null,P,D)),null}function dF(P,D){do Ip();while(Ig!==null);if((yr&(rs|js))!==En)throw Error(n(327));var R=P.finishedWork,j=P.finishedExpirationTime;if(R===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,R===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var Y=Sw(R);if(P.firstPendingTime=Y,j<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:j<=P.firstSuspendedTime&&(P.firstSuspendedTime=j-1),j<=P.lastPingedTime&&(P.lastPingedTime=0),j<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Mr=gi=null,ns=0),1=R?ln(P,D,R):(Mn($n,$n.current&1,D),D=si(P,D,R),D!==null?D.sibling:null);Mn($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=R,(P.effectTag&64)!==0){if(j)return qa(P,D,R);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),Mn($n,$n.current,D),!j)return null}return si(P,D,R)}qo=!1}}else qo=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,Y=Me(D,On.current),ds(D,R),Y=lg(null,D,j,P,Y,R),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,mw(),ii(j)){var fe=!0;Ac(D)}else fe=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var ve=j.getDerivedStateFromProps;typeof ve=="function"&&er(D,j,ve,P),Y.updater=Zr,D.stateNode=Y,Y._reactInternalFiber=D,jo(D,j,P,R),D=mp(null,D,j,!0,fe,R)}else D.tag=0,ws(null,D,Y,R),D=D.child;return D;case 16:if(Y=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,ye(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,fe=D.tag=BF(Y),P=Ci(Y,P),fe){case 0:D=NA(null,D,Y,P,R);break;case 1:D=dp(null,D,Y,P,R);break;case 11:D=Ii(null,D,Y,P,R);break;case 14:D=km(null,D,Y,Ci(Y.type,P),j,R);break;default:throw Error(n(306,Y,""))}return D;case 0:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),NA(P,D,j,Y,R);case 1:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),dp(P,D,j,Y,R);case 3:if(mg(D),j=D.updateQueue,j===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,me(D,j,D.pendingProps,null,R),j=D.memoizedState.element,j===Y)dg(),D=si(P,D,R);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(R=ig(D,null,j,R),D.child=R;R;)R.effectTag=R.effectTag&-3|1024,R=R.sibling;else ws(P,D,j,R),dg();D=D.child}return D;case 5:return Pm(D),P===null&&RA(D),j=D.type,Y=D.pendingProps,fe=P!==null?P.memoizedProps:null,ve=Y.children,Qe(j,Y)?ve=null:fe!==null&&Qe(j,fe)&&(D.effectTag|=16),Go(P,D),D.mode&4&&R!==1&&be(j,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,ve,R),D=D.child),D;case 6:return P===null&&RA(D),null;case 13:return ln(P,D,R);case 4:return sg(D,D.stateNode.containerInfo),j=D.pendingProps,P===null?D.child=gu(D,null,j,R):ws(P,D,j,R),D.child;case 11:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),Ii(P,D,j,Y,R);case 7:return ws(P,D,D.pendingProps,R),D.child;case 8:return ws(P,D,D.pendingProps.children,R),D.child;case 12:return ws(P,D,D.pendingProps.children,R),D.child;case 10:e:{if(j=D.type._context,Y=D.pendingProps,ve=D.memoizedProps,fe=Y.value,Ho(D,fe),ve!==null){var vt=ve.value;if(fe=hs(vt,fe)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,fe):1073741823)|0,fe===0){if(ve.children===Y.children&&!_i.current){D=si(P,D,R);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){ve=vt.child;for(var bt=wt.firstContext;bt!==null;){if(bt.context===j&&(bt.observedBits&fe)!==0){vt.tag===1&&(bt=ys(R,null),bt.tag=2,tt(vt,bt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var R=D.inject(P);xw=function(j){try{D.onCommitFiberRoot(R,j,void 0,(j.current.effectTag&64)===64)}catch{}},bw=function(j){try{D.onCommitFiberUnmount(R,j)}catch{}}}catch{}return!0}function IF(P,D,R,j){this.tag=P,this.key=R,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(P,D,R,j){return new IF(P,D,R,j)}function kw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function BF(P){if(typeof P=="function")return kw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===L)return 11;if(P===te)return 14}return 2}function YA(P,D){var R=P.alternate;return R===null?(R=Dl(P.tag,D,P.key,P.mode),R.elementType=P.elementType,R.type=P.type,R.stateNode=P.stateNode,R.alternate=P,P.alternate=R):(R.pendingProps=D,R.effectTag=0,R.nextEffect=null,R.firstEffect=null,R.lastEffect=null),R.childExpirationTime=P.childExpirationTime,R.expirationTime=P.expirationTime,R.child=P.child,R.memoizedProps=P.memoizedProps,R.memoizedState=P.memoizedState,R.updateQueue=P.updateQueue,D=P.dependencies,R.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},R.sibling=P.sibling,R.index=P.index,R.ref=P.ref,R}function Hm(P,D,R,j,Y,fe){var ve=2;if(j=P,typeof P=="function")kw(P)&&(ve=1);else if(typeof P=="string")ve=5;else e:switch(P){case E:return xu(R.children,Y,fe,D);case T:ve=8,Y|=7;break;case I:ve=8,Y|=1;break;case v:return P=Dl(12,R,D,Y|8),P.elementType=v,P.type=v,P.expirationTime=fe,P;case U:return P=Dl(13,R,D,Y),P.type=U,P.elementType=U,P.expirationTime=fe,P;case J:return P=Dl(19,R,D,Y),P.elementType=J,P.expirationTime=fe,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case b:ve=10;break e;case C:ve=9;break e;case L:ve=11;break e;case te:ve=14;break e;case le:ve=16,j=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Dl(ve,R,D,Y),D.elementType=P,D.type=j,D.expirationTime=fe,D}function xu(P,D,R,j){return P=Dl(7,P,j,D),P.expirationTime=R,P}function Qw(P,D,R){return P=Dl(6,P,null,D),P.expirationTime=R,P}function Fw(P,D,R){return D=Dl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=R,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function vF(P,D,R){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=He,this.pendingContext=this.context=null,this.hydrate=R,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var R=P.firstSuspendedTime;return P=P.lastSuspendedTime,R!==0&&R>=D&&P<=D}function WA(P,D){var R=P.firstSuspendedTime,j=P.lastSuspendedTime;RD||R===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var R=P.firstSuspendedTime;R!==0&&(D>=R?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function jm(P,D){var R=P.lastExpiredTime;(R===0||R>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";bEe.exports=xEe()});var FEe=_((yVt,QEe)=>{"use strict";var Wyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};QEe.exports=Wyt});var LEe=_((EVt,NEe)=>{"use strict";var Vyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),TEe=function(){Kk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){k6(this,t),this.width=e,this.height=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),REe=function(){function t(e,r){k6(this,t),this.unit=e,this.value=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();NEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),Vyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Kyt),Size:t("Size",TEe),Value:t("Value",REe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var MEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Be=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var T=C.getContext("2d");T.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[u]=T,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var b=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",pe="",Ae=0,ye=0,ae=0;ae=6;){var we=Ae>>ye-6&63;ye-=6,pe+=te[we]}return ye==2?(pe+=te[(Ae&3)<<4],pe+=le+le):ye==4&&(pe+=te[(Ae&15)<<2],pe+=le),pe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=b,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,b){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",v):T=p.replace("X",E).replace("Y",v),T.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,b,C,T){b===void 0&&(b="X"),T===void 0&&(T=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(b=r(C[2],C[0],b,te[0],"?",!0));var le;J==0&&(le="Unbound"),J>=10&&(le="Corrupt"),T>20&&(le="Deeply nested"),le&&o(le,p,b,J,v||"?");var pe=U.paramList[0],Ae=a(pe,h,E,I,v,b,te,T+1),ye,ae={flags:te[0],id:p,name:"",paramList:[Ae]},we=[],Pe="?";switch(U.placeholderFlag){case 1:ye=Ae.spec;break;case 2:if((Ae.flags&15360)==1024&&Ae.spec.ptrSize==1){ae.flags=7168;break}case 3:case 6:case 5:ye=Ae.spec,Ae.flags&15360;break;case 8:Pe=""+U.paramList[1],ae.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[b/4],I=HEAPU32[b/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:I};v&&(T.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(T);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,b=e.ABORT|0,C=e.STACKTOP|0,T=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,le=0,pe=0,Ae=t.NaN,ye=t.Infinity,ae=0,we=0,Pe=0,g=0,Ee=0,De=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,ke=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,lt=t.Math.acos,Re=t.Math.asin,Qe=t.Math.atan,be=t.Math.atan2,_e=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,He=t.Math.imul,x=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Se=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,xt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,xr=e.invoke_diii,Wr=e.invoke_di,Vn=e.invoke_iid,Ns=e.invoke_iii,Ri=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,ap=e.invoke_v,lp=e.invoke_viid,Ms=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Os=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Kn=e._removeAccessorPrefix,Mn=e._typeModule,Ni=e.__nbind_register_pool,On=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Me=e.__extends,ii=e.__nbind_get_value_object,Oa=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,vA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Tt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,cp=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,SA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function ji(s,l){s=s|0,l=l|0,C=s,T=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,De=s}function Ua(){return De|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,ft(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,yg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Vt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Fm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,wp(l,d,d,s+8|0),Ig(s,l),UA(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;O=wi(s)|0;do if(O|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||LT[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(O|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(O|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],me(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||LT[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0;et=C,C=C+64|0,q=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Oe=et+20|0,Fe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}_A(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),M=n[s>>2]|0,O=(n[B>>2]|0)-M|0,m=O>>1,wp(Fe,O>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-M>>2,s+8|0),M=Fe+8|0,f=n[M>>2]|0,m=Fe+12|0,O=n[m>>2]|0,B=O,Q=f;do if((f|0)==(O|0)){if(O=Fe+4|0,f=n[O>>2]|0,Xe=n[Fe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,wp(se,f,f>>>2,n[Fe+16>>2]|0),n[Ge>>2]=n[O>>2],n[Oe>>2]=n[M>>2],n[k>>2]=n[Ge>>2],n[q>>2]=n[Oe>>2],vw(se,k,q),f=n[Fe>>2]|0,n[Fe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,UA(se),f=n[M>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[O>>2]|0),Xe=k+(m<<2)|0,n[M>>2]=Xe,n[O>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[M>>2]=(n[M>>2]|0)+4,l=Bg(s,Fe,l)|0,UA(Fe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(Ae),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Rt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function Zr(s,l){s=s|0,l=l|0,LUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function qi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function xi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function bA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function kA(s){return s=s|0,n[s+4>>2]|0}function up(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ng(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function QA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function og(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ag(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(Ae),n[c>>2]=3,Le(s))}function bi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function lg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function fp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(Ae),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function cg(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ug(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(Ae),n[l>>2]=3,Le(s))}function Ag(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function pp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function fg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function bm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function gg(s){return s=s|0,y(h[s+408>>2])}function RA(s){return s=s|0,y(h[s+412>>2])}function hp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function dg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function gp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Oa(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),s3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(kT(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,O,M,q,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),O=y(O),M=y(M),q=y(q),se=se|0;var Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze;return Q>2]),Oe!=y(0))?(et=y(Go(l,Oe,0,0)),Xe=y(Go(f,Oe,0,0)),Fe=y(Go(m,Oe,0,0)),Oe=y(Go(k,Oe,0,0))):(Fe=m,et=l,Oe=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Fe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Oe,Xe)|0:se=0,!Ge&&(at=y(l-M),!(dp(s,at,Q)|0))&&!(mp(s,at,d,Q)|0)?Ge=mg(s,at,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-q),!(dp(c,Ue,O)|0))&&!(mp(c,Ue,B,O)|0)?se=mg(c,Ue,B,k,O)|0:se=1,se=Ge&se),se|0}function dp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function mp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function mg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,O,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0,M=M|0;var q=0,se=0,Ge=0,Oe=0,Fe=Ze,et=Ze,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Or=ir+104|0,Ue=ir+72|0,Oe=ir+56|0,Lt=ir+8|0,at=ir,qe=(n[2279]|0)+1|0,n[2279]=qe,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Fe=y(ln(s,2,B)),et=y(ln(s,0,B)),q=s+916|0,mo=y(h[q>>2]),go=y(h[s+920>>2]),bn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,bn,y(h[s+936>>2]),Fe,et,M)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,bn=y(h[q>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,bn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Fe,et,M)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(q=s+916|0,!(Ii(y(h[q>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[s+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,Ii(y(h[q>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((q|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Oe=q+16|0,n[s+908>>2]=n[Oe>>2],Ge=q+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[at>>2]=LA(qe)|0,n[at+4>>2]=qe,Ao(s,4,2972,at),se=n[s+972>>2]|0,se|0&&ef[se&127](s),d=qa(d,Q)|0,m=qa(m,Q)|0,ya=+y(h[Oe>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=O,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=LA(qe)|0,n[Oe>>2]=se,n[Oe+4>>2]=qe,n[Oe+8>>2]=Nr?3047:11699,Ao(s,4,3038,Oe),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Xe=qa(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=O,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,M),o[11697]|0&&(se=n[2279]|0,Lt=LA(se)|0,n[Or>>2]=Lt,n[Or+4>>2]=se,n[Or+8>>2]=Nr?3047:11699,Ao(s,4,3083,Or),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Or=qa(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Or,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=O,Ao(s,4,3092,or)),n[s+516>>2]=f,q||(se=s+520|0,q=n[se>>2]|0,(q|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,q=0),Q?q=s+916|0:(n[se>>2]=q+1,q=s+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=c,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[s+908>>2],n[q+20>>2]=n[s+912>>2],q=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(q|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(V(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Eg(f,s,l,c,d),C=m}function LA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function qa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0;var M=0,q=0,se=0,Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze,qe=Ze,Lt=0,Or=0,or=0,Xt=Ze,Pr=Ze,Nr=0,ir=Ze,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=Ze,Up=Ze,Ru=Ze,Nu=Ze,kc=Ze,qs=0,za=0,Wo=0,kl=0,rf=0,nf=Ze,Lu=Ze,sf=Ze,of=Ze,Gs=Ze,vs=Ze,Ql=0,Tn=Ze,af=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,lf=0,cf=0,Tc=Ze,Ys=Ze,Fl=0,uf=0,Af=0,ff=0,br=Ze,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0,Jt=Ze,pf=0,li=0;Tl=C,C=C+16|0,qs=Tl+12|0,za=Tl+8|0,Wo=Tl+4|0,kl=Tl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Tr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(V(s,Tr,B)),h[s+444>>2]=y(re(s,Tr,B)),h[s+428>>2]=y(V(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Tr)),h[s+468>>2]=y(yn(s,Tr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Tr,B)),h[s+492>>2]=y(Mi(s,Tr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Mi(s,ur,B));do if(n[s+964>>2]|0)wg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),bl=s+508|0,o[bl>>0]=0,Tr=fr(n[s+4>>2]|0,Ds)|0,ur=Cw(Tr,Ds)|0,Jn=he(Tr)|0,Mp=n[s+8>>2]|0,uf=s+28|0,bc=(n[uf>>2]|0)!=0,Co=Jn?B:k,Tc=Jn?k:B,Op=y(Ep(s,Tr,B)),Up=y(ww(s,Tr,B)),Oe=y(Ep(s,ur,B)),Fc=y(En(s,Tr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,br=Jn?Fc:Ys,at=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Fe=y(y(Gr(s+364|0,B))-br),et=y(y(Gr(s+380|0,B))-br),Ue=y(y(Gr(s+372|0,k))-at),qe=y(y(Gr(s+388|0,k))-at),Ru=Jn?Fe:Ue,Nu=Jn?et:qe,Qc=y(l-Qc),l=y(Qc-br),_t(l)|0?br=l:br=y(_n(y(Tg(l,et)),Fe)),af=y(c-Xe),l=y(af-at),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,qe)),Ue)),Fe=Jn?br:Eo,Tn=Jn?Eo:br;e:do if((or|0)==1)for(f=0,q=0;;){if(M=gs(s,q)|0,!f)y(rs(M))>y(0)&&y(js(M))>y(0)?f=M:f=0;else if(Tm(M)|0){Ge=0;break e}if(q=q+1|0,q>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Or=Ge+504|0,f=0,M=0,l=y(0),se=0;do{if(q=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[q+36>>2]|0)==1)Bu(q),o[q+985>>0]=1,o[q+984>>0]=0;else{Bl(q),Q&&yp(q,mt(q,Ds)|0,Fe,Tn,br);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Or>>2]=y(0);break}else{Rm(s,q,br,d,Eo,br,Eo,m,Ds,O);break}else M|0&&(n[M+960>>2]=q),n[q+960>>2]=0,M=q,f=(f|0)==0?q:f;while(0);vs=y(h[q+504>>2]),l=y(l+y(vs+y(ln(q,Tr,br))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Fe,Ql=bc&((or|0)==2&mo)?1:or,bn=(Fl|0)==1,ya=bn&(Q^1),Qp=(Ql|0)==1,Fp=(Ql|0)==2,xl=976+(Tr<<2)|0,Tp=(Fl|2|0)==2,Lp=bn&(bc^1),Fu=1040+(ur<<2)|0,Tu=1040+(Tr<<2)|0,Rp=976+(ur<<2)|0,Np=(Fl|0)!=1,mo=bc&((or|0)!=0&mo),go=s+976|0,bn=bn^1,l=Fe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Or=n[wo>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Fe=y(0),q=0,M=0,Ge=Nr;;){if(Lt=n[Or+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Tr,br)),Xr=n[xl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),at=y(h[Lt+504>>2]),c=y(Tg(c,at)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),bc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=qe,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(qe+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Fe=y(Fe-y(at*y(js(Lt))))),M|0&&(n[M+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,M=Lt,q=(q|0)==0?Lt:q}else Xe=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Fe=y(0),q=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&FeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Pr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),M=q;do c=y(Gr(M+380+(se<<3)|0,Co)),Fe=y(Gr(M+364+(se<<3)|0,Co)),Fe=y(Tg(c,y(_n(Fe,y(h[M+504>>2]))))),Ge?(c=y(Fe*y(js(M))),c!=y(-0)&&(Jt=y(Fe-y(at*c)),nf=y(Bi(M,Tr,Jt,ir,br)),Jt!=nf)&&(et=y(et-y(nf-Fe)),l=y(l+c))):Lt&&(Lu=y(rs(M)),Lu!=y(0))&&(Jt=y(Fe+y(Ue*Lu)),sf=y(Bi(M,Tr,Jt,ir,br)),Jt!=sf)&&(et=y(et-y(sf-Fe)),Xe=y(Xe-Lu)),M=n[M+960>>2]|0;while((M|0)!=0);if(l=y(qe+l),Fe=y(Pr+et),rf)l=y(0);else{at=y(Xt+Xe),Ge=n[xl>>2]|0,Lt=Fey(0),at=y(Fe/at),l=y(0);do{Jt=y(Gr(q+380+(Ge<<3)|0,Co)),et=y(Gr(q+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[q+504>>2]))))),Lt?(Jt=y(et*y(js(q))),Fe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Fe),Fe=y(Bi(q,Tr,y(et+(Or?Fe:Jt)),ir,br))):Fe=et):se&&(of=y(rs(q)),of!=y(0))?Fe=y(Bi(q,Tr,y(et+y(at*of)),ir,br)):Fe=et,l=y(l-y(Fe-et)),Xe=y(ln(q,Tr,br)),c=y(ln(q,ur,br)),Fe=y(Fe+Xe),h[za>>2]=Fe,n[kl>>2]=1,et=y(h[q+396>>2]);e:do if(_t(et)|0){M=_t(Tn)|0;do if(!M){if(mo|(ts(q,ur,Tn)|0|bn)||(ha(s,q)|0)!=4||(n[(vl(q,ur)|0)+4>>2]|0)==3||(n[(Pc(q,ur)|0)+4>>2]|0)==3)break;h[qs>>2]=Tn,n[Wo>>2]=1;break e}while(0);if(ts(q,ur,Tn)|0){M=n[q+992+(n[Rp>>2]<<2)>>2]|0,Jt=y(c+y(Gr(M,Tn))),h[qs>>2]=Jt,M=Np&(n[M+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|M)^1)&1;break}else{h[qs>>2]=Tn,n[Wo>>2]=M?0:2;break}}else Jt=y(Fe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[qs>>2]=y(c+(Jn?Xt:Jt));while(0);yr(q,Tr,ir,br,kl,za),yr(q,ur,Tn,br,Wo,qs);do if(!(ts(q,ur,Tn)|0)&&(ha(s,q)|0)==4){if((n[(vl(q,ur)|0)+4>>2]|0)==3){M=0;break}M=(n[(Pc(q,ur)|0)+4>>2]|0)!=3}else M=0;while(0);Jt=y(h[za>>2]),Xt=y(h[qs>>2]),pf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(q,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?pf:li,Jn?li:pf,br,Eo,Q&(M^1),3488,O)|0,o[bl>>0]=o[bl>>0]|o[q+508>>0],q=n[q+960>>2]|0}while((q|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[bl>>0],Fp&l>y(0)?(M=n[xl>>2]|0,(n[s+364+(M<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(M<<3)|0,Co)),Gs>=y(0))?Fe=y(_n(y(0),y(Gs-y(ir-l)))):Fe=y(0)):Fe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,M=0;do q=n[Ge+(se<<2)>>2]|0,n[q+24>>2]|0||(M=((n[(vl(q,Tr)|0)+4>>2]|0)==3&1)+M|0,M=M+((n[(Pc(q,Tr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));M?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{M=0,Xe=y(Fe*y(.5)),c=y(0);break e}case 2:{M=0,Xe=Fe,c=y(0);break e}case 3:{if(m>>>0<=1){M=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),M=0,Xe=y(0),c=y(y(_n(Fe,y(0)))/c);break e}case 5:{c=y(Fe/y((m+1|0)>>>0)),M=0,Xe=c;break e}case 4:{c=y(Fe/y(m>>>0)),M=0,Xe=y(c*y(.5));break e}default:{M=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Op+Xe),Lt){et=y(Fe/y(M|0)),se=n[wo>>2]|0,q=Nr,Fe=y(0);do{M=n[se+(q<<2)>>2]|0;e:do if((n[M+36>>2]|0)!=1){switch(n[M+24>>2]|0){case 1:{if(gi(M,Tr)|0){if(!Q)break e;Jt=y(Mr(M,Tr,ir)),Jt=y(Jt+y(Cr(s,Tr))),Jt=y(Jt+y(V(M,Tr,br))),h[M+400+(n[Tu>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Pc(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(M,Tr,br))),Fe=Tn,l=y(l+y(Jt+y(h[M+504>>2])));break e}else{l=y(l+y(c+y(ns(M,Tr,br)))),Fe=y(_n(Fe,y(ns(M,ur,br))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Tr))),li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);q=q+1|0}while((q|0)!=(or|0))}else Fe=y(0);if(c=y(Up+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Fe),Tc,B))-Ys):Xe=Tn,et=y(y(Bi(s,ur,y(Ys+(Lp?Tn:Fe)),Tc,B))-Ys),Lt&Q){q=Nr;do{se=n[(n[wo>>2]|0)+(q<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Mr(se,ur,Tn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(V(se,ur,br))),M=n[Fu>>2]|0,h[se+400+(M<<2)>>2]=Jt,!(_t(Jt)|0))break}else M=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(M<<2)>>2]=y(Jt+y(V(se,ur,br)));break}M=ha(s,se)|0;do if((M|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Pc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Tn)|0){l=Oe;break}pf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[qs>>2]=pf,l=y(h[se+396>>2]),li=_t(l)|0,Fe=(n[v>>2]=pf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,br)),Jt=y(Fe/l),l=y(l*Fe),l=y(Pr+(Jn?Jt:l))),h[za>>2]=l,h[qs>>2]=y(y(ln(se,Tr,br))+Fe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Tr,ir,br,Wo,qs),yr(se,ur,Tn,br,kl,za),l=y(h[qs>>2]),Pr=y(h[za>>2]),Jt=Jn?l:Pr,l=Jn?Pr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,br,Eo,1,3493,O)|0,l=Oe}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,br)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Pc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Oe+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Pc(se,ur)|0)+4>>2]|0)==3){l=Oe;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Oe+y(_n(y(0),l)));break}switch(M|0){case 1:{l=Oe;break e}case 2:{l=y(Oe+y(l*y(.5)));break e}default:{l=y(Oe+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);q=q+1|0}while((q|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(M=m>>>0>1,!M&&!(Yi(s)|0))break;if(!(_t(Tn)|0)){l=y(Tn-vs);e:do switch(n[s+12>>2]|0){case 3:{Oe=y(Oe+l),Ue=y(0);break}case 2:{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break}case 4:{Tn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Tn>vs){Oe=y(Oe+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=M?Ue:y(0);break e}else{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Tn>vs&M?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Or=976+(ur<<2)|0,Ge=0,q=0;;){e:do if(q>>>0>>0)for(Fe=y(0),et=y(0),l=y(0),se=q;;){M=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[M+36>>2]|0)!=1&&(n[M+24>>2]|0)==0){if((n[M+940>>2]|0)!=(Ge|0))break e;if(Nm(M,ur)|0&&(Jt=y(h[M+908+(n[Or>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(M,ur,br)))))),(ha(s,M)|0)!=5)break;Gs=y(Ya(M)),Gs=y(Gs+y(V(M,0,br))),Jt=y(h[M+912>>2]),Jt=y(y(Jt+y(ln(M,0,br)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Fe,Jt)),Fe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(M=se+1|0,M>>>0>>0)se=M;else{se=M;break}}else et=y(0),l=y(0),se=q;while(0);if(at=y(Ue+l),c=Oe,Oe=y(Oe+at),q>>>0>>0){Xe=y(c+et),M=q;do{q=n[(n[wo>>2]|0)+(M<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&(n[q+24>>2]|0)==0)switch(ha(s,q)|0){case 1:{Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Oe-y(re(q,ur,br)))-y(h[q+908+(n[Or>>2]<<2)>>2])),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(at-y(h[q+908+(n[Or>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt,ts(q,ur,Tn)|0||(Jn?(Fe=y(h[q+908>>2]),l=y(Fe+y(ln(q,Tr,br))),et=at):(et=y(h[q+912>>2]),et=y(et+y(ln(q,ur,br))),l=at,Fe=y(h[q+908>>2])),Ii(l,Fe)|0&&Ii(et,y(h[q+912>>2]))|0))break e;fa(q,l,et,Ds,1,1,br,Eo,1,3501,O)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Ya(q)))+y(Mr(q,0,Tn)));break e}default:break e}while(0);M=M+1|0}while((M|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;q=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,af,k,B)),(Ql|0)!=0&&(lf=n[s+32>>2]|0,cf=(Ql|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Tr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Tr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Tr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(Af=n[s+32>>2]|0,ff=(Fl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(Ys+Tn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Tc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[uf>>2]|0)==2){q=976+(ur<<2)|0,se=1040+(ur<<2)|0,M=0;do Ge=gs(s,M)|0,n[Ge+24>>2]|0||(pf=n[q>>2]|0,Jt=y(h[s+908+(pf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(pf<<2)>>2]))),M=M+1|0;while((M|0)!=(Ws|0))}if(f|0){M=Jn?Ql:d;do Lm(s,f,br,M,Eo,Ds,O),f=n[f+960>>2]|0;while((f|0)!=0)}if(M=(Tr|2|0)==3,q=(ur|2|0)==3,M|q){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(M&&Cp(s,se,Tr),q&&Cp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(yp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,O=n[Q+4>>2]|0,M=f,n[M>>2]=n[Q>>2],n[M+4>>2]=O,M=s+364+(c<<3)|0,O=n[M+4>>2]|0,Q=d,n[Q>>2]=n[M>>2],n[Q+4>>2]=O,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(Ae)}return y(l)}function yp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Cw(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(V(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(V(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,O=0,M=Ze,q=0,se=Ze,Ge=Ze,Oe=Ze,Fe=Ze;if(l!=y(0)&&(d=s+400|0,Fe=y(h[d>>2]),m=s+404|0,Oe=y(h[m>>2]),q=s+416|0,Ge=y(h[q>>2]),O=s+420|0,B=y(h[O>>2]),se=y(Fe+c),M=y(Oe+f),f=y(se+Ge),k=y(M+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Fe,l,0,Q)),h[m>>2]=y(Go(Oe,l,0,Q)),c=y(kT(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(kT(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Fe=y(Go(f,l,Q&m,Q&(m^1))),h[q>>2]=y(Fe-y(Go(se,l,0,Q))),Fe=y(Go(k,l,Q&d,Q&(d^1))),h[O>>2]=y(Fe-y(Go(M,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,M),d=d+1|0;while((d|0)!=(m|0))}}function Ew(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=a7(n[489]|0,f,d)|0;break}default:s=t3e(f,d)|0}return s|0}function yg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Eg(s,0,l,c,m),C=d}function Eg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,x7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Fm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Cg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Cg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function V(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function he(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Mi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function wg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze,q=Ze,se=Ze,Ge=0,Oe=0,Fe=0;Fe=C,C=C+16|0,Ge=Fe,Oe=s+964|0,Un(s,(n[Oe>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),O=y(ln(s,2,l)),M=y(ln(s,0,l)),_t(l)|0?q=l:q=y(_n(y(0),y(y(l-O)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-M)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-O),m,m)),l=y(Bi(s,0,y(c-M),B,m))):(b7[n[Oe>>2]&1](Ge,s,q,f,se,d),q=y(k+y(h[Ge>>2])),se=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?q:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-M),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Fe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze;O=y(En(s,2,m)),k=y(En(s,0,m)),M=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?O:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,O=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),O=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Cw(s,l){return s=s|0,l=l|0,OA(s)|0?s=fr(2,l)|0:s=0,s|0}function Ep(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function ww(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Mi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Ep(s,l,c)),y(f+y(ww(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(zm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Rm(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,O=O|0;var M=0,q=Ze,se=0,Ge=0,Oe=Ze,Fe=Ze,et=0,Xe=Ze,at=0,Ue=Ze,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0;bn=C,C=C+16|0,Or=bn+12|0,or=bn+8|0,Xt=bn+4|0,Pr=bn,ir=fr(n[s+4>>2]|0,Q)|0,qe=he(ir)|0,q=y(Gr(Iw(l)|0,qe?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(q)|0)&&!(_t(qe?c:d)|0)){if(M=l+504|0,!(_t(y(h[M>>2]))|0)&&(!(Bw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[M>>2]=y(_n(q,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(at=qe^1,!(at|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Or>>2]=y(Ae),h[or>>2]=y(Ae),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Oe=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Or>>2]=Oe,n[Xt>>2]=1,Ge=1):(Ge=0,Oe=y(Ae)),Nr?(q=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=q,n[Pr>>2]=1,M=1):(M=0,q=y(Ae)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:_t(Oe)|0&&!(_t(c)|0)&&(h[Or>>2]=c,n[Xt>>2]=2,Ge=2,Oe=c),!((se|0)==2&at)&&_t(q)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Pr>>2]=2,M=2,q=d),Fe=y(h[l+396>>2]),et=_t(Fe)|0;do if(et)se=Ge;else{if((Ge|0)==1&at){h[or>>2]=y(y(Oe-Xe)/Fe),n[Pr>>2]=1,M=1,se=1;break}qe&(M|0)==1?(h[Or>>2]=y(Fe*y(q-Ue)),n[Xt>>2]=1,M=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Or>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Fe),n[Pr>>2]=1,M=1),!(Nr|at|((k|0)!=1|(_t(d)|0))|(Ge|(M|0)==1))&&(h[or>>2]=d,n[Pr>>2]=1,!et)&&(h[Or>>2]=y(Fe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Or),yr(l,0,B,m,Pr,or),c=y(h[Or>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,O)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=bn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&OA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Pc(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Mr(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(V(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(OA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Nm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(v7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return OA(l)|0?(l=1,m=3):he(l)|0?(l=0,m=3):(f=y(Ae),d=y(Ae)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Oe=Cw(et,m)|0,Fe=he(et)|0,q=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(q+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Mr(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(Ae),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),at=y(Cr(s,0)),at=y(Q-y(at+y(yn(s,0)))),Q=y(Mr(l,0,d)),Q=y(Bi(l,0,y(at-y(Q+y(vu(l,0,d)))),d,c))):Q=y(Ae),O=_t(k)|0,M=_t(Q)|0;do if(O^M&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(O){k=y(q+y(y(Q-se)*Ge));break}else{at=y(se+y(y(k-q)/Ge)),Q=M?at:Q;break}while(0);M=_t(k)|0,O=_t(Q)|0,M|O&&(Ue=(M^1)&1,f=c>y(0)&((f|0)!=0&M),k=Fe?k:f?c:k,fa(l,k,Q,m,Fe?Ue:f?2:Ue,M&(O^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,et))),at=y(at-y(re(l,et,c))),at=y(at-y(vu(l,et,Fe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at)}while(0);sr(l,Oe)|0&&!(gi(l,Oe)|0)?(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,Oe))),at=y(at-y(re(l,Oe,c))),at=y(at-y(vu(l,Oe,Fe?d:c))),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at):Xe=30;do if((Xe|0)==30&&!(gi(l,Oe)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at)}while(0)}function Cp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function OA(s){return s=s|0,(s|1|0)==1|0}function Iw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Bw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Mr(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function wp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Ig(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UA(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _A(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function Bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function vw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Om(){dc()}function ga(){var s=0;return s=Vt(4)|0,HA(s),s|0}function HA(s){s=s|0,n[s>>2]=ys()|0}function Sc(s){s=s|0,s|0&&(vg(s),gt(s))}function vg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,Bw(n[s>>2]|0,l)|0}function Dw(){var s=0;return s=Vt(8)|0,Vv(s,0),s|0}function Vv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,xi(l,s)}function pF(s){s=s|0;var l=0;return l=Vt(8)|0,Vv(l,s),l|0}function Kv(s){s=s|0,s|0&&(Pu(s),gt(s))}function Pu(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function hF(s,l){s=s|0,l=l|0,Zr(n[s>>2]|0,n[l>>2]|0)}function gF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function Sw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Su(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,QA(n[s>>2]|0,l)}function mF(s,l){s=s|0,l=l|0,bA(n[s>>2]|0,l)}function Ip(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,up(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function GA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function EF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function CF(s,l){s=s|0,l=l|0,og(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function BF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function YA(s){s=s|0,fp(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,cg(n[s>>2]|0,y(l))}function Qw(s){s=s|0,ug(n[s>>2]|0)}function Fw(s,l){s=s|0,l=+l,pp(n[s>>2]|0,y(l))}function vF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function WA(s,l){s=s|0,l=+l,fg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function DF(s,l,c){s=s|0,l=l|0,c=+c,bi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,sg(n[s>>2]|0)|0}function R(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),C=f}function j(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function fe(s){return s=s|0,ig(n[s>>2]|0)|0}function ve(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,kA(n[s>>2]|0)|0}function bt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ng(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,ag(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),C=c}function Yo(s){return s=s|0,+ +y(qi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ke(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),C=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ag(f,n[l>>2]|0),j(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),j(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),j(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,bm(f,n[l>>2]|0),j(s,f),C=c}function xn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(lg(n[s>>2]|0,l))}function en(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function PF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function sve(s){return s=s|0,wi(n[s>>2]|0)|0}function ove(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function ave(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function lve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Vt(4)|0,$G(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function $G(s,l){s=s|0,l=l|0,Cve(s,l)}function cve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,uve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function uve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,O=0,M=0;B=C,C=C+32|0,M=B+8|0,O=B+20|0,Q=B,k=B+16|0,E[M>>3]=c,n[O>>2]=f,E[Q>>3]=d,n[k>>2]=m,Ave(s,n[l+4>>2]|0,M,O,Q,k),C=B}function Ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Va(k),l=da(l)|0,fve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Ka(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function fve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Pl(pve()|0)|0,c=+KA(c),f=SF(f)|0,d=+KA(d),hve(s,hi(0,B|0,l|0,+c,f|0,+d,SF(m)|0)|0)}function pve(){var s=0;return o[7608]|0||(yve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Pl(s){return s=s|0,n[s+8>>2]|0}function KA(s){return s=+s,+ +xF(s)}function SF(s){return s=s|0,t5(s)|0}function hve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(gve(c,0),ii(f|0,c|0)|0,dve(s,c),mve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function gve(s,l){s=s|0,l=l|0,e5(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function dve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function mve(s){s=s|0,o[s+24>>0]=0}function e5(s,l){s=s|0,l=l|0,n[s>>2]=l}function t5(s){return s=s|0,s|0}function xF(s){return s=+s,+s}function yve(s){s=s|0,Sl(s,Eve()|0,4)}function Eve(){return 1064}function Sl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=cp(l|0,c+1|0)|0}function Cve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function wve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function Ive(s){s=s|0,Rt(n[s>>2]|0)}function Bve(s){return s=s|0,er(n[s>>2]|0)|0}function vve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Dve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(gg(n[s>>2]|0))}function Sve(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function xve(s){return s=s|0,+ +y(RA(n[s>>2]|0))}function bve(s){return s=s|0,+ +y(hp(n[s>>2]|0))}function kve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function Qve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(gg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(RA(n[l>>2]|0)),E[s+32>>3]=+y(hp(n[l>>2]|0)),E[s+40>>3]=+y(ja(n[l>>2]|0))}function Fve(s,l){return s=s|0,l=l|0,+ +y(dg(n[s>>2]|0,l))}function Tve(s,l){return s=s|0,l=l|0,+ +y(gp(n[s>>2]|0,l))}function Rve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Nve(){return Pn()|0}function Lve(){Mve(),Ove(),Uve(),_ve(),Hve(),jve()}function Mve(){HNe(11713,4938,1)}function Ove(){oNe(10448)}function Uve(){HRe(10408)}function _ve(){uRe(10324)}function Hve(){yFe(10096)}function jve(){qve(9132)}function qve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=0,Up=0,Ru=0,Nu=0,kc=0,qs=0,za=0,Wo=0,kl=0,rf=0,nf=0,Lu=0,sf=0,of=0,Gs=0,vs=0,Ql=0,Tn=0,af=0,Eo=0,Qc=0,Co=0,Fc=0,lf=0,cf=0,Tc=0,Ys=0,Fl=0,uf=0,Af=0,ff=0,br=0,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Tr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,br=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Fl=l+560|0,Ys=l+552|0,Tc=l+544|0,cf=l+536|0,lf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,af=l+488|0,Tn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,of=l+448|0,sf=l+440|0,Lu=l+432|0,nf=l+424|0,rf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,qs=l+384|0,kc=l+376|0,Nu=l+368|0,Ru=l+360|0,Up=l+352|0,Op=l+344|0,bc=l+336|0,Mp=l+328|0,bl=l+320|0,Xr=l+312|0,Lp=l+304|0,Np=l+296|0,Rp=l+288|0,Tu=l+280|0,Fu=l+272|0,Tp=l+264|0,xl=l+256|0,Fp=l+248|0,Qp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,bn=l+200|0,ir=l+192|0,Nr=l+184|0,Pr=l+176|0,Xt=l+168|0,or=l+160|0,Or=l+152|0,Lt=l+144|0,qe=l+136|0,Ue=l+128|0,at=l+120|0,Xe=l+112|0,et=l+104|0,Fe=l+96|0,Oe=l+88|0,Ge=l+80|0,se=l+72|0,q=l+64|0,M=l+56|0,O=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Gve(s,3646),Yve(s,3651,2)|0,Wve(s,3665,2)|0,Vve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Kve(s,3696,c)|0,n[Tr>>2]=2,n[Tr+4>>2]=0,n[c>>2]=n[Tr>>2],n[c+4>>2]=n[Tr+4>>2],bu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Dg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Dg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],bu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],bu(s,3769,c)|0,n[br>>2]=5,n[br+4>>2]=0,n[c>>2]=n[br>>2],n[c+4>>2]=n[br+4>>2],bu(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],bu(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],bu(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],bu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Dg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Dg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],bu(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],bu(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],bu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,3960,c)|0,n[Tn>>2]=6,n[Tn+4>>2]=0,n[c>>2]=n[Tn>>2],n[c+4>>2]=n[Tn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Is(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[qs>>2]=16,n[qs+4>>2]=0,n[c>>2]=n[qs>>2],n[c+4>>2]=n[qs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Ru>>2]=5,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],Dg(s,4196,c)|0,n[Up>>2]=6,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Dg(s,4206,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],Dg(s,4217,c)|0,n[bc>>2]=3,n[bc+4>>2]=0,n[c>>2]=n[bc>>2],n[c+4>>2]=n[bc+4>>2],JA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],bF(s,4251,c)|0,n[bl>>2]=4,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Lp>>2]=6,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],JA(s,4293,c)|0,n[Np>>2]=7,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4306,c)|0,n[Rp>>2]=8,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],bF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4376,c)|0,n[Fp>>2]=2,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],zA(s,4388,c)|0,n[Qp>>2]=13,n[Qp+4>>2]=0,n[c>>2]=n[Qp>>2],n[c+4>>2]=n[Qp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[bn>>2]=18,n[bn+4>>2]=0,n[c>>2]=n[bn>>2],n[c+4>>2]=n[bn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],zA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],bF(s,4519,c)|0,n[Or>>2]=4,n[Or+4>>2]=0,n[c>>2]=n[Or>>2],n[c+4>>2]=n[Or+4>>2],Jve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],zve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Xve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Zve(s,4568,c)|0,n[at>>2]=2,n[at+4>>2]=0,n[c>>2]=n[at>>2],n[c+4>>2]=n[at+4>>2],$ve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],eDe(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Fe>>2]=23,n[Fe+4>>2]=0,n[c>>2]=n[Fe>>2],n[c+4>>2]=n[Fe+4>>2],Tw(s,4619,c)|0,n[Oe>>2]=14,n[Oe+4>>2]=0,n[c>>2]=n[Oe>>2],n[c+4>>2]=n[Oe+4>>2],tDe(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],rDe(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],zA(s,4653,c)|0,n[q>>2]=5,n[q+4>>2]=0,n[c>>2]=n[q>>2],n[c+4>>2]=n[q+4>>2],zA(s,4669,c)|0,n[M>>2]=6,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],zA(s,4686,c)|0,n[O>>2]=7,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],zA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],zA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],zA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],nDe(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Gve(s,l){s=s|0,l=l|0;var c=0;c=cFe()|0,n[s>>2]=c,uFe(c,l),xp(n[s>>2]|0)}function Yve(s,l,c){return s=s|0,l=l|0,c=c|0,JQe(s,pn(l)|0,c,0),s|0}function Wve(s,l,c){return s=s|0,l=l|0,c=c|0,TQe(s,pn(l)|0,c,0),s|0}function Vve(s,l,c){return s=s|0,l=l|0,c=c|0,EQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nQe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oke(s,l,d),C=f,s|0}function bu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ike(s,l,d),C=f,s|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gbe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xbe(s,l,d),C=f,s|0}function bF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fbe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ixe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oxe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],GSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xSe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZPe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NPe(s,l,d),C=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yPe(s,l,d),C=f,s|0}function tDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rPe(s,l,d),C=f,s|0}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ODe(s,l,d),C=f,s|0}function nDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iDe(s,l,d),C=f,s|0}function iDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function sDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=kF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=oDe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,aDe(m,f)|0,f),C=d}function kF(){var s=0,l=0;if(o[7616]|0||(i5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i5(9136)}return 9136}function oDe(s){return s=s|0,0}function aDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=kF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],n5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,q=B+20|0,Q=B+16|0,M=B+12|0,O=B+8|0,k=B+4|0,Ge=B,n[q>>2]=l,n[Q>>2]=c,n[M>>2]=f,n[O>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],lDe(s+24|0,se,q,M,O,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function lDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=cDe(l)|0,l=Vt(24)|0,r5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function cDe(s){return s=s|0,n[s>>2]|0}function r5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ADe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],n5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pDe(s,k),hDe(k),C=O;return}}function ADe(s){return s=s|0,357913941}function fDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function i5(s){s=s|0,mDe(s)}function gDe(s){s=s|0,dDe(s+24|0)}function Rr(s){return s=s|0,n[s>>2]|0}function dDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vr(){return 9228}function yDe(){return 1140}function EDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=CDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=wDe(l,f)|0,C=c,l|0}function Kr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function CDe(s){return s=s|0,(n[(kF()|0)+24>>2]|0)+(s*12|0)|0}function wDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=IDe(f)|0,C=d,f|0}function IDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(s5()|0)|0,f?(FF(l,f),TF(c,l),BDe(s,c),s=RF(l)|0):s=vDe(s)|0,C=d,s|0}function s5(){var s=0;return o[7632]|0||(RDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function QF(s){return s=s|0,n[s+36>>2]|0}function FF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function TF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function BDe(s,l){s=s|0,l=l|0,xDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function RF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function vDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Vt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Vt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],o5(k,B,c),n[d>>2]=k,C=Q,m|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function DDe(s){s=s|0,Jm(s),gt(s)}function PDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function SDe(s){s=s|0,gt(s)}function xDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=bDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function bDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Va(Q),s=da(s)|0,B=kDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Ka(Q),C=k,B|0}function kDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Pl(QDe()|0)|0,l=+KA(l),c=+KA(c),f=+KA(f),d=+KA(d),m=+KA(m),Os(0,k|0,s|0,+l,+c,+f,+d,+m,+ +KA(B))|0}function QDe(){var s=0;return o[7624]|0||(FDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function FDe(s){s=s|0,Sl(s,TDe()|0,6)}function TDe(){return 1112}function RDe(s){s=s|0,Bp(s)}function NDe(s){s=s|0,a5(s+24|0),l5(s+16|0)}function a5(s){s=s|0,MDe(s)}function l5(s){s=s|0,LDe(s)}function LDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function MDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Bp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UDe(s,c,d,0),C=f}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_De(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,HDe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7640]|0||(u5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u5(9232)}return 9232}function _De(s){return s=s|0,0}function HDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=NF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qDe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,GDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,YDe(s,k),WDe(k),C=O;return}}function qDe(s){return s=s|0,357913941}function GDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function YDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function WDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u5(s){s=s|0,JDe(s)}function VDe(s){s=s|0,KDe(s+24|0)}function KDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function JDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,zDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zDe(){return 1144}function XDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=ZDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],$De(l,B,c,f,d),C=m}function ZDe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function $De(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,O=0;O=C,C=C+16|0,B=O+2|0,k=O+1|0,Q=O,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),XA(Q,d),Q=ZA(Q,d)|0,D7[m&1](s,c,f,Q),C=O}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +tPe(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,ePe(l)|0}function ePe(s){return s=s|0,s|0}function tPe(s){return s=+s,+s}function rPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nPe(s,c,d,1),C=f}function nPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=iPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sPe(m,f)|0,f),C=d}function LF(){var s=0,l=0;if(o[7648]|0||(f5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9268)}return 9268}function iPe(s){return s=s|0,0}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=LF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,lPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cPe(s,k),uPe(k),C=O;return}}function aPe(s){return s=s|0,357913941}function lPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,pPe(s)}function APe(s){s=s|0,fPe(s+24|0)}function fPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,hPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hPe(){return 1160}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mPe(l,f)|0,C=c,l|0}function dPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function mPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),p5(Ng[c&31](s)|0)|0}function p5(s){return s=s|0,s&1|0}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],EPe(s,c,d,0),C=f}function EPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=CPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wPe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7656]|0||(g5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));g5(9304)}return 9304}function CPe(s){return s=s|0,0}function wPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=MF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],h5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(IPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function h5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function IPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=BPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,vPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],h5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,DPe(s,k),PPe(k),C=O;return}}function BPe(s){return s=s|0,357913941}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function DPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function g5(s){s=s|0,bPe(s)}function SPe(s){s=s|0,xPe(s+24|0)}function xPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,kPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kPe(){return 1164}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=FPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(l,d,c),C=f}function FPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),vp(d,c),c=Dp(d,c)|0,tf[f&31](s,c),Pp(d),C=m}function vp(s,l){s=s|0,l=l|0,RPe(s,l)}function Dp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function RPe(s,l){s=s|0,l=l|0,OF(s,l)}function OF(s,l){s=s|0,l=l|0,n[s>>2]=l}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LPe(s,c,d,0),C=f}function LPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=MPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,OPe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7664]|0||(m5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));m5(9340)}return 9340}function MPe(s){return s=s|0,0}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=UF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],d5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(UPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function d5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=_Pe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,HPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],d5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jPe(s,k),qPe(k),C=O;return}}function _Pe(s){return s=s|0,357913941}function HPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function m5(s){s=s|0,WPe(s)}function GPe(s){s=s|0,YPe(s+24|0)}function YPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function WPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,VPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VPe(){return 1180}function KPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=JPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=zPe(l,d,c)|0,C=f,c|0}function JPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Sg(d,c),d=xg(d,c)|0,d=sD(NT[f&15](s,d)|0)|0,C=m,d|0}function Sg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,XPe(l)|0}function sD(s){return s=s|0,s|0}function XPe(s){return s=s|0,s|0}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$Pe(s,c,d,0),C=f}function $Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=eSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tSe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7672]|0||(E5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9376)}return 9376}function eSe(s){return s=s|0,0}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=_F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,iSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sSe(s,k),oSe(k),C=O;return}}function nSe(s){return s=s|0,357913941}function iSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,cSe(s)}function aSe(s){s=s|0,lSe(s+24|0)}function lSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1196}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Ng[c&31](s)|0)|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,1),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=HF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=gSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function HF(){var s=0,l=0;if(o[7680]|0||(I5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9412)}return 9412}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=HF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ESe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=O;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1200}function DSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=PSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=SSe(l,f)|0,C=c,l|0}function PSe(s){return s=s|0,(n[(HF()|0)+24>>2]|0)+(s*12|0)|0}function SSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Ng[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function xSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(s,c,d,0),C=f}function bSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,QSe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7688]|0||(D5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9448)}return 9448}function kSe(s){return s=s|0,0}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=jF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(FSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function FSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=TSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,RSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,NSe(s,k),LSe(k),C=O;return}}function TSe(s){return s=s|0,357913941}function RSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function NSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,USe(s)}function MSe(s){s=s|0,OSe(s+24|0)}function OSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function USe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function P5(){return 1204}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=HSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jSe(l,d,c),C=f}function HSe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),qF(d,c),d=GF(d,c)|0,tf[f&31](s,d),C=m}function qF(s,l){s=s|0,l=l|0}function GF(s,l){return s=s|0,l=l|0,qSe(l)|0}function qSe(s){return s=s|0,s|0}function GSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YSe(s,c,d,0),C=f}function YSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=WSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,VSe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7696]|0||(x5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9484)}return 9484}function WSe(s){return s=s|0,0}function VSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=YF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(KSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=JSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,XSe(s,k),ZSe(k),C=O;return}}function JSe(s){return s=s|0,357913941}function zSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function XSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,txe(s)}function $Se(s){s=s|0,exe(s+24|0)}function exe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,rxe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rxe(){return 1212}function nxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ixe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],sxe(l,m,c,f),C=d}function ixe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function sxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),qF(m,c),m=GF(m,c)|0,Sg(B,f),B=xg(B,f)|0,_w[d&15](s,m,B),C=k}function oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,c,d,1),C=f}function axe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cxe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7704]|0||(k5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));k5(9520)}return 9520}function lxe(s){return s=s|0,0}function cxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=WF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Axe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pxe(s,k),hxe(k),C=O;return}}function Axe(s){return s=s|0,357913941}function fxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function k5(s){s=s|0,mxe(s)}function gxe(s){s=s|0,dxe(s+24|0)}function dxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yxe(){return 1224}function Exe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=Cxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+wxe(l,m,c),C=d,+f}function Cxe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+xF(+S7[f&7](s,d)),C=m,+B}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,c,d,1),C=f}function Bxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7712]|0||(F5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));F5(9556)}return 9556}function vxe(s){return s=s|0,0}function Dxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=VF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Sxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bxe(s,k),kxe(k),C=O;return}}function Sxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function F5(s){s=s|0,Txe(s)}function Qxe(s){s=s|0,Fxe(s+24|0)}function Fxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,Rxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rxe(){return 1232}function Nxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Lxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Mxe(l,d),C=f,+c}function Lxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +xF(+P7[c&15](s))}function Oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,c,d,1),C=f}function Uxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=KF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_xe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hxe(m,f)|0,f),C=d}function KF(){var s=0,l=0;if(o[7720]|0||(R5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));R5(9592)}return 9592}function _xe(s){return s=s|0,0}function Hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=KF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yxe(s,k),Wxe(k),C=O;return}}function qxe(s){return s=s|0,357913941}function Gxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function R5(s){s=s|0,Jxe(s)}function Vxe(s){s=s|0,Kxe(s+24|0)}function Kxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,zxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zxe(){return 1276}function Xxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Zxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=$xe(l,f)|0,C=c,l|0}function Zxe(s){return s=s|0,(n[(KF()|0)+24>>2]|0)+(s*12|0)|0}function $xe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=N5(f)|0,C=d,f|0}function N5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(L5()|0)|0,f?(FF(l,f),TF(c,l),ebe(s,c),s=RF(l)|0):s=tbe(s)|0,C=d,s|0}function L5(){var s=0;return o[7736]|0||(Abe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function ebe(s,l){s=s|0,l=l|0,sbe(l,s,s+8|0)|0}function tbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(s,m,d),n[f>>2]=s,C=c,l|0}function JF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function rbe(s){s=s|0,Jm(s),gt(s)}function nbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function ibe(s){s=s|0,gt(s)}function sbe(s,l,c){return s=s|0,l=l|0,c=c|0,l=obe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Va(d),s=da(s)|0,c=abe(s,n[l>>2]|0,+E[c>>3])|0,Ka(d),C=f,c|0}function abe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Pl(lbe()|0)|0,l=SF(l)|0,ml(0,f|0,s|0,l|0,+ +KA(c))|0}function lbe(){var s=0;return o[7728]|0||(cbe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function cbe(s){s=s|0,Sl(s,ube()|0,2)}function ube(){return 1264}function Abe(s){s=s|0,Bp(s)}function fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pbe(s,c,d,1),C=f}function pbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=hbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,gbe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7744]|0||(O5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9684)}return 9684}function hbe(s){return s=s|0,0}function gbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=zF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(dbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=mbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ybe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ebe(s,k),Cbe(k),C=O;return}}function mbe(s){return s=s|0,357913941}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ebe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Bbe(s)}function wbe(s){s=s|0,Ibe(s+24|0)}function Ibe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Bbe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,vbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vbe(){return 1280}function Dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Pbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Sbe(l,d,c)|0,C=f,c|0}function Pbe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,_w[f&15](d,s,m),m=N5(d)|0,C=B,m|0}function xbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bbe(s,c,d,1),C=f}function bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Qbe(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7752]|0||(_5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));_5(9720)}return 9720}function kbe(s){return s=s|0,0}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=XF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],U5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Fbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Tbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Rbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],U5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Nbe(s,k),Lbe(k),C=O;return}}function Tbe(s){return s=s|0,357913941}function Rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Nbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Lbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function _5(s){s=s|0,Ube(s)}function Mbe(s){s=s|0,Obe(s+24|0)}function Obe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ube(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,_be()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _be(){return 1288}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=jbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=qbe(l,f)|0,C=c,l|0}function jbe(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function qbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),t5(Ng[c&31](s)|0)|0}function Gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ybe(s,c,d,0),C=f}function Ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=Wbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Vbe(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7760]|0||(j5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9756)}return 9756}function Wbe(s){return s=s|0,0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=ZF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],H5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Kbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function H5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Jbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],H5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Xbe(s,k),Zbe(k),C=O;return}}function Jbe(s){return s=s|0,357913941}function zbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Xbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Zbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,tke(s)}function $be(s){s=s|0,eke(s+24|0)}function eke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rke(){return 1292}function nke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=ike(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ske(l,d,c),C=f}function ike(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function ske(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),B7[f&31](s,c),C=m}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ake(s,c,d,0),C=f}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7768]|0||(G5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G5(9792)}return 9792}function lke(s){return s=s|0,0}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=$F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ake(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pke(s,k),hke(k),C=O;return}}function Ake(s){return s=s|0,357913941}function fke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G5(s){s=s|0,mke(s)}function gke(s){s=s|0,dke(s+24|0)}function dke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yke(){return 1300}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=Cke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wke(l,m,c,f),C=d}function Cke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function wke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ku(B,f),f=+Qu(B,f),Q7[d&15](s,m,f),C=k}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bke(s,c,d,0),C=f}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dke(m,f)|0,f),C=d}function eT(){var s=0,l=0;if(o[7776]|0||(W5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(9828)}return 9828}function vke(s){return s=s|0,0}function Dke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=eT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ske(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bke(s,k),kke(k),C=O;return}}function Ske(s){return s=s|0,357913941}function xke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,Tke(s)}function Qke(s){s=s|0,Fke(s+24|0)}function Fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,Rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rke(){return 1312}function Nke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Lke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Mke(l,d,c),C=f}function Lke(s){return s=s|0,(n[(eT()|0)+24>>2]|0)+(s*12|0)|0}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),C=m}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uke(s,c,d,0),C=f}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=tT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_ke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hke(m,f)|0,f),C=d}function tT(){var s=0,l=0;if(o[7784]|0||(K5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9864)}return 9864}function _ke(s){return s=s|0,0}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=tT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qke(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yke(s,k),Wke(k),C=O;return}}function qke(s){return s=s|0,357913941}function Gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,Jke(s)}function Vke(s){s=s|0,Kke(s+24|0)}function Kke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,zke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zke(){return 1320}function Xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(l,d,c),C=f}function Zke(s){return s=s|0,(n[(tT()|0)+24>>2]|0)+(s*12|0)|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),eQe(d,c),d=tQe(d,c)|0,tf[f&31](s,d),C=m}function eQe(s,l){s=s|0,l=l|0}function tQe(s,l){return s=s|0,l=l|0,rQe(l)|0}function rQe(s){return s=s|0,s|0}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iQe(s,c,d,0),C=f}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=rT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=sQe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,oQe(m,f)|0,f),C=d}function rT(){var s=0,l=0;if(o[7792]|0||(z5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9900)}return 9900}function sQe(s){return s=s|0,0}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=rT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],J5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(aQe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function aQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=lQe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,cQe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],J5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,uQe(s,k),AQe(k),C=O;return}}function lQe(s){return s=s|0,357913941}function cQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function uQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function AQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,hQe(s)}function fQe(s){s=s|0,pQe(s+24|0)}function pQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function hQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,22,l,gQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function gQe(){return 1344}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=mQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],yQe(l,f),C=c}function mQe(s){return s=s|0,(n[(rT()|0)+24>>2]|0)+(s*12|0)|0}function yQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nT()|0,s=CQe(c)|0,hn(m,l,d,s,wQe(c,f)|0,f)}function nT(){var s=0,l=0;if(o[7800]|0||(Z5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(9936)}return 9936}function CQe(s){return s=s|0,s|0}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(IQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function IQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=BQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,vQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,DQe(s,d),PQe(d),C=k;return}}function BQe(s){return s=s|0,536870911}function vQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function DQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,bQe(s)}function SQe(s){s=s|0,xQe(s+24|0)}function xQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function bQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,23,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kQe(s,l){s=s|0,l=l|0,FQe(n[(QQe(s)|0)>>2]|0,l)}function QQe(s){return s=s|0,(n[(nT()|0)+24>>2]|0)+(s<<3)|0}function FQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,qF(f,l),l=GF(f,l)|0,ef[s&127](l),C=c}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=iT()|0,s=RQe(c)|0,hn(m,l,d,s,NQe(c,f)|0,f)}function iT(){var s=0,l=0;if(o[7808]|0||(e9(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));e9(9972)}return 9972}function RQe(s){return s=s|0,s|0}function NQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=iT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?($5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(LQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function $5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function LQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=MQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,OQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,$5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,UQe(s,d),_Qe(d),C=k;return}}function MQe(s){return s=s|0,536870911}function OQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function UQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Qe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function e9(s){s=s|0,qQe(s)}function HQe(s){s=s|0,jQe(s+24|0)}function jQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,9,l,GQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GQe(){return 1348}function YQe(s,l){return s=s|0,l=l|0,VQe(n[(WQe(s)|0)>>2]|0,l)|0}function WQe(s){return s=s|0,(n[(iT()|0)+24>>2]|0)+(s<<3)|0}function VQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,l=sD(Ng[s&31](l)|0)|0,C=c,l|0}function t9(s,l){s=s|0,l=l|0}function r9(s,l){return s=s|0,l=l|0,KQe(l)|0}function KQe(s){return s=s|0,s|0}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=sT()|0,s=zQe(c)|0,hn(m,l,d,s,XQe(c,f)|0,f)}function sT(){var s=0,l=0;if(o[7816]|0||(i9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i9(10008)}return 10008}function zQe(s){return s=s|0,s|0}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=sT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(n9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(ZQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function ZQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=$Qe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,eFe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,n9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,tFe(s,d),rFe(d),C=k;return}}function $Qe(s){return s=s|0,536870911}function eFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function tFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function i9(s){s=s|0,sFe(s)}function nFe(s){s=s|0,iFe(s+24|0)}function iFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function sFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,15,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function oFe(s){return s=s|0,lFe(n[(aFe(s)|0)>>2]|0)|0}function aFe(s){return s=s|0,(n[(sT()|0)+24>>2]|0)+(s<<3)|0}function lFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function cFe(){var s=0;return o[7832]|0||(mFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function uFe(s,l){s=s|0,l=l|0,n[s>>2]=AFe()|0,n[s+4>>2]=fFe()|0,n[s+12>>2]=l,n[s+8>>2]=pFe()|0,n[s+32>>2]=2}function AFe(){return 11709}function fFe(){return 1188}function pFe(){return aD()|0}function hFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(gFe(c),gt(c)):l|0&&(Pu(l),gt(l))}function Sp(s,l){return s=s|0,l=l|0,l&s|0}function gFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=dFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function dFe(){return 0}function mFe(s){s=s|0,Bp(s)}function yFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,EFe(s,4827),CFe(s,4834,3)|0,wFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],IFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],BFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],vFe(s,4891,c)|0,C=l}function EFe(s,l){s=s|0,l=l|0;var c=0;c=rRe()|0,n[s>>2]=c,nRe(c,l),xp(n[s>>2]|0)}function CFe(s,l,c){return s=s|0,l=l|0,c=c|0,_Te(s,pn(l)|0,c,0),s|0}function wFe(s,l,c){return s=s|0,l=l|0,c=c|0,DTe(s,pn(l)|0,c,0),s|0}function IFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oTe(s,l,d),C=f,s|0}function BFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HFe(s,l,d),C=f,s|0}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DFe(s,l,d),C=f,s|0}function DFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PFe(s,c,d,1),C=f}function PFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=SFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,xFe(m,f)|0,f),C=d}function oT(){var s=0,l=0;if(o[7840]|0||(o9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o9(10100)}return 10100}function SFe(s){return s=s|0,0}function xFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=oT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],s9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function s9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=kFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,QFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],s9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,FFe(s,k),TFe(k),C=O;return}}function kFe(s){return s=s|0,357913941}function QFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function FFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function TFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function o9(s){s=s|0,LFe(s)}function RFe(s){s=s|0,NFe(s+24|0)}function NFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,MFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function MFe(){return 1364}function OFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=UFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=_Fe(l,d,c)|0,C=f,c|0}function UFe(s){return s=s|0,(n[(oT()|0)+24>>2]|0)+(s*12|0)|0}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=p5(NT[f&15](s,d)|0)|0,C=m,d|0}function HFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jFe(s,c,d,0),C=f}function jFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=aT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=qFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GFe(m,f)|0,f),C=d}function aT(){var s=0,l=0;if(o[7848]|0||(l9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));l9(10136)}return 10136}function qFe(s){return s=s|0,0}function GFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=aT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],a9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(YFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function a9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function YFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=WFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,VFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],a9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KFe(s,k),JFe(k),C=O;return}}function WFe(s){return s=s|0,357913941}function VFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function l9(s){s=s|0,ZFe(s)}function zFe(s){s=s|0,XFe(s+24|0)}function XFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function ZFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,9,l,$Fe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Fe(){return 1372}function eTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=tTe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rTe(l,d,c),C=f}function tTe(s){return s=s|0,(n[(aT()|0)+24>>2]|0)+(s*12|0)|0}function rTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),nTe(d,c),B=y(iTe(d,c)),I7[f&1](s,B),C=m}function nTe(s,l){s=s|0,l=+l}function iTe(s,l){return s=s|0,l=+l,y(sTe(l))}function sTe(s){return s=+s,y(s)}function oTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aTe(s,c,d,0),C=f}function aTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=lT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lTe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cTe(m,f)|0,f),C=d}function lT(){var s=0,l=0;if(o[7856]|0||(u9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u9(10172)}return 10172}function lTe(s){return s=s|0,0}function cTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=lT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uTe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ATe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fTe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pTe(s,k),hTe(k),C=O;return}}function ATe(s){return s=s|0,357913941}function fTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u9(s){s=s|0,mTe(s)}function gTe(s){s=s|0,dTe(s+24|0)}function dTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yTe(){return 1380}function ETe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=CTe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wTe(l,m,c,f),C=d}function CTe(s){return s=s|0,(n[(lT()|0)+24>>2]|0)+(s*12|0)|0}function wTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ITe(B,f),B=BTe(B,f)|0,_w[d&15](s,m,B),C=k}function ITe(s,l){s=s|0,l=l|0}function BTe(s,l){return s=s|0,l=l|0,vTe(l)|0}function vTe(s){return s=s|0,(s|0)!=0|0}function DTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=cT()|0,s=PTe(c)|0,hn(m,l,d,s,STe(c,f)|0,f)}function cT(){var s=0,l=0;if(o[7864]|0||(f9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(10208)}return 10208}function PTe(s){return s=s|0,s|0}function STe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(A9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(xTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function xTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=bTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,kTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,A9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,QTe(s,d),FTe(d),C=k;return}}function bTe(s){return s=s|0,536870911}function kTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function QTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,NTe(s)}function TTe(s){s=s|0,RTe(s+24|0)}function RTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function NTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,24,l,LTe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function LTe(){return 1392}function MTe(s,l){s=s|0,l=l|0,UTe(n[(OTe(s)|0)>>2]|0,l)}function OTe(s){return s=s|0,(n[(cT()|0)+24>>2]|0)+(s<<3)|0}function UTe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,ef[s&127](l),C=c}function _Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=uT()|0,s=HTe(c)|0,hn(m,l,d,s,jTe(c,f)|0,f)}function uT(){var s=0,l=0;if(o[7872]|0||(h9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(10244)}return 10244}function HTe(s){return s=s|0,s|0}function jTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=uT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(p9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(qTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function qTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=GTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,YTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,p9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,WTe(s,d),VTe(d),C=k;return}}function GTe(s){return s=s|0,536870911}function YTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function WTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function VTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,zTe(s)}function KTe(s){s=s|0,JTe(s+24|0)}function JTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,16,l,XTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XTe(){return 1400}function ZTe(s){return s=s|0,eRe(n[($Te(s)|0)>>2]|0)|0}function $Te(s){return s=s|0,(n[(uT()|0)+24>>2]|0)+(s<<3)|0}function eRe(s){return s=s|0,tRe(CD[s&7]()|0)|0}function tRe(s){return s=s|0,s|0}function rRe(){var s=0;return o[7880]|0||(cRe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function nRe(s,l){s=s|0,l=l|0,n[s>>2]=iRe()|0,n[s+4>>2]=sRe()|0,n[s+12>>2]=l,n[s+8>>2]=oRe()|0,n[s+32>>2]=4}function iRe(){return 11711}function sRe(){return 1356}function oRe(){return aD()|0}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(lRe(c),gt(c)):l|0&&(vg(l),gt(l))}function lRe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function cRe(s){s=s|0,Bp(s)}function uRe(s){s=s|0,ARe(s,4920),fRe(s)|0,pRe(s)|0}function ARe(s,l){s=s|0,l=l|0;var c=0;c=L5()|0,n[s>>2]=c,RRe(c,l),xp(n[s>>2]|0)}function fRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,vRe()|0),s|0}function pRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,hRe()|0),s|0}function hRe(){var s=0;return o[7888]|0||(g9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Rr(10328)|0||g9(10328),10328}function bg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function g9(s){s=s|0,mRe(s),kg(s,10)}function gRe(s){s=s|0,dRe(s+24|0)}function dRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,wRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yRe(s,l,c){s=s|0,l=l|0,c=+c,ERe(s,l,c)}function kg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function ERe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),CRe(s,m,d),C=f}function CRe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function wRe(){return 1404}function IRe(s,l){return s=s|0,l=+l,BRe(s,l)|0}function BRe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Vt(16)|0,XA(m,s),s=ZA(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Vt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],JF(s,B,m),n[d>>2]=s,C=f,c|0}function vRe(){var s=0;return o[7896]|0||(d9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Rr(10364)|0||d9(10364),10364}function d9(s){s=s|0,SRe(s),kg(s,55)}function DRe(s){s=s|0,PRe(s+24|0)}function PRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function SRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,4,l,QRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xRe(s){s=s|0,bRe(s)}function bRe(s){s=s|0,kRe(s)}function kRe(s){s=s|0,m9(s+8|0),o[s+24>>0]=1}function m9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function QRe(){return 1424}function FRe(){return TRe()|0}function TRe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,m9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(f,m,d),n[c>>2]=f,C=l,s|0}function RRe(s,l){s=s|0,l=l|0,n[s>>2]=NRe()|0,n[s+4>>2]=LRe()|0,n[s+12>>2]=l,n[s+8>>2]=MRe()|0,n[s+32>>2]=5}function NRe(){return 11710}function LRe(){return 1416}function MRe(){return lD()|0}function ORe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(URe(c),gt(c)):l|0&>(l)}function URe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=_Re()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function _Re(){return n[357]|0}function HRe(s){s=s|0,jRe(s,4926),qRe(s)|0}function jRe(s,l){s=s|0,l=l|0;var c=0;c=s5()|0,n[s>>2]=c,eNe(c,l),xp(n[s>>2]|0)}function qRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,GRe()|0),s|0}function GRe(){var s=0;return o[7912]|0||(y9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Rr(10412)|0||y9(10412),10412}function y9(s){s=s|0,VRe(s),kg(s,57)}function YRe(s){s=s|0,WRe(s+24|0)}function WRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function VRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,5,l,XRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KRe(s){s=s|0,JRe(s)}function JRe(s){s=s|0,zRe(s)}function zRe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function XRe(){return 1432}function ZRe(){return $Re()|0}function $Re(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Vt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Vt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],o5(k,m,s),n[c>>2]=k,C=B,f|0}function eNe(s,l){s=s|0,l=l|0,n[s>>2]=tNe()|0,n[s+4>>2]=rNe()|0,n[s+12>>2]=l,n[s+8>>2]=nNe()|0,n[s+32>>2]=6}function tNe(){return 11704}function rNe(){return 1436}function nNe(){return lD()|0}function iNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(sNe(c),gt(c)):l|0&>(l)}function sNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function oNe(s){s=s|0,aNe(s,4933),lNe(s)|0,cNe(s)|0}function aNe(s,l){s=s|0,l=l|0;var c=0;c=TNe()|0,n[s>>2]=c,RNe(c,l),xp(n[s>>2]|0)}function lNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,BNe()|0),s|0}function cNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,uNe()|0),s|0}function uNe(){var s=0;return o[7920]|0||(E9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Rr(10452)|0||E9(10452),10452}function E9(s){s=s|0,pNe(s),kg(s,1)}function ANe(s){s=s|0,fNe(s+24|0)}function fNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,mNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hNe(s,l,c){s=s|0,l=+l,c=+c,gNe(s,l,c)}function gNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),dNe(s,m,d),C=f}function dNe(s,l,c){s=s|0,l=l|0,c=c|0,C9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function C9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function mNe(){return 1472}function yNe(s,l){return s=+s,l=+l,ENe(s,l)|0}function ENe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Vt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),C9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Vt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],w9(m,k,B),n[d>>2]=m,C=f,c|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function CNe(s){s=s|0,Jm(s),gt(s)}function wNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function INe(s){s=s|0,gt(s)}function BNe(){var s=0;return o[7928]|0||(I9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Rr(10488)|0||I9(10488),10488}function I9(s){s=s|0,PNe(s),kg(s,60)}function vNe(s){s=s|0,DNe(s+24|0)}function DNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function PNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,6,l,kNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function SNe(s){s=s|0,xNe(s)}function xNe(s){s=s|0,bNe(s)}function bNe(s){s=s|0,B9(s+8|0),o[s+24>>0]=1}function B9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function kNe(){return 1492}function QNe(){return FNe()|0}function FNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,B9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],w9(f,m,d),n[c>>2]=f,C=l,s|0}function TNe(){var s=0;return o[7936]|0||(_Ne(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function RNe(s,l){s=s|0,l=l|0,n[s>>2]=NNe()|0,n[s+4>>2]=LNe()|0,n[s+12>>2]=l,n[s+8>>2]=MNe()|0,n[s+32>>2]=7}function NNe(){return 11700}function LNe(){return 1484}function MNe(){return lD()|0}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(UNe(c),gt(c)):l|0&>(l)}function UNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function _Ne(s){s=s|0,Bp(s)}function HNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=jNe(c)|0,c=qNe(c,0)|0,ELe(s,l,c,AT()|0,0)}function jNe(s){return s=s|0,s|0}function qNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=AT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(D9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function AT(){var s=0,l=0;if(o[7944]|0||(v9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v9(10568)}return 10568}function v9(s){s=s|0,WNe(s)}function GNe(s){s=s|0,YNe(s+24|0)}function YNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,17,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VNe(s){return s=s|0,JNe(n[(KNe(s)|0)>>2]|0)|0}function KNe(s){return s=s|0,(n[(AT()|0)+24>>2]|0)+(s<<3)|0}function JNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function D9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=XNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,ZNe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,D9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$Ne(s,d),eLe(d),C=k;return}}function XNe(s){return s=s|0,536870911}function ZNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function $Ne(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function tLe(){rLe()}function rLe(){nLe(10604)}function nLe(s){s=s|0,iLe(s,4955)}function iLe(s,l){s=s|0,l=l|0;var c=0;c=sLe()|0,n[s>>2]=c,oLe(c,l),xp(n[s>>2]|0)}function sLe(){var s=0;return o[7952]|0||(gLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function oLe(s,l){s=s|0,l=l|0,n[s>>2]=uLe()|0,n[s+4>>2]=ALe()|0,n[s+12>>2]=l,n[s+8>>2]=fLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Gm()|0,n[c>>2]=s,aLe(10608,c),C=l}function Gm(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function aLe(s,l){s=s|0,l=l|0;var c=0;c=Vt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function lLe(s){s=s|0,cLe(s)}function cLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function uLe(){return 11715}function ALe(){return 1496}function fLe(){return aD()|0}function pLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(hLe(c),gt(c)):l|0&>(l)}function hLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function gLe(s){s=s|0,Bp(s)}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0;Gm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(o7(fT(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;mLe(f,l)}while(0)}function fT(s){return s=s|0,n[s+12>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Vt(4)|0,$G(c,l),n[s>>2]=c}function pT(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function P9(){var s=0;return o[11717]|0?s=n[2665]|0:(yLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function yLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function S9(){return 1572}function ELe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0;m=C,C=C+32|0,M=m+16|0,O=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[M>>2]=s,n[O>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,pT()|0,CLe(10656,M,O,Q,k,B),C=m}function CLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Vt(24)|0,r5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function x9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0;if(at=C,C=C+32|0,Oe=at+20|0,Fe=at+8|0,et=at+4|0,Xe=at,l=n[l>>2]|0,l|0){Ge=Oe+4|0,Q=Oe+8|0,O=Fe+4|0,M=Fe+8|0,q=Fe+8|0,se=Oe+8|0;do{if(B=l+4|0,k=hT(B)|0,k|0){if(d=Rw(k)|0,n[Oe>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Nw(k)|0)+1|0,wLe(Oe,f),f|0)for(;f=f+-1|0,xc(Fe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Fe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):gT(Oe,Fe),f;)d=d+4|0;f=Lw(k)|0,n[Fe>>2]=0,n[O>>2]=0,n[M>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?ILe(Fe,f):(n[d>>2]=n[f>>2],n[O>>2]=(n[O>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[O>>2]|0,m=n[q>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Rr(k)|0,BLe(c,s,et,Xe,Oe,Fe),dT(Fe),$A(Oe)}l=n[l>>2]|0}while((l|0)!=0)}C=at}function hT(s){return s=s|0,n[s+12>>2]|0}function Rw(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+16>>2]|0}function wLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(L9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),M9(s,c),O9(c)),C=d}function gT(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=N9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,L9(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,M9(s,c),O9(c),C=B;return}}function Lw(s){return s=s|0,n[s+8>>2]|0}function ILe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,jLe(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,qLe(s,c),GLe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function BLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,vLe(s,l,c,f,d,m)}function dT(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function vLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+48|0,M=B+40|0,k=B+32|0,q=B+24|0,Q=B+12|0,O=B,Va(k),s=da(s)|0,n[q>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,mT(Q,d),DLe(O,m),n[M>>2]=n[q>>2],PLe(s,M,c,f,Q,O),dT(O),$A(Q),Ka(k),C=B}function mT(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(_Le(s,f),HLe(s,n[l>>2]|0,n[c>>2]|0,f))}function DLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(OLe(s,f),ULe(s,n[l>>2]|0,n[c>>2]|0,f))}function PLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,M=B+28|0,q=B+24|0,k=B+12|0,Q=B,O=Pl(SLe()|0)|0,n[q>>2]=n[l>>2],n[M>>2]=n[q>>2],l=Qg(M)|0,c=b9(c)|0,f=yT(f)|0,n[k>>2]=n[d>>2],M=d+4|0,n[k+4>>2]=n[M>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[d>>2]=0,d=ET(k)|0,n[Q>>2]=n[m>>2],M=m+4|0,n[Q+4>>2]=n[M>>2],q=m+8|0,n[Q+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[m>>2]=0,ao(0,O|0,s|0,l|0,c|0,f|0,d|0,xLe(Q)|0)|0,dT(Q),$A(k),C=B}function SLe(){var s=0;return o[7968]|0||(LLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Qg(s){return s=s|0,Q9(s)|0}function b9(s){return s=s|0,k9(s)|0}function yT(s){return s=s|0,oD(s)|0}function ET(s){return s=s|0,kLe(s)|0}function xLe(s){return s=s|0,bLe(s)|0}function bLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=k9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function k9(s){return s=s|0,s|0}function kLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=Q9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function Q9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(F9()|0)|0,f?(FF(l,f),TF(c,l),fUe(s,c),s=RF(l)|0):s=QLe(s)|0,C=d,s|0}function F9(){var s=0;return o[7960]|0||(NLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function QLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function FLe(s){s=s|0,Jm(s),gt(s)}function TLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function RLe(s){s=s|0,gt(s)}function NLe(s){s=s|0,Bp(s)}function LLe(s){s=s|0,Sl(s,MLe()|0,5)}function MLe(){return 1676}function OLe(s,l){s=s|0,l=l|0;var c=0;if((R9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ULe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R9(s){return s=s|0,1073741823}function _Le(s,l){s=s|0,l=l|0;var c=0;if((N9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N9(s){return s=s|0,1073741823}function jLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function qLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function L9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function M9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function O9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function YLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Fe=C,C=C+32|0,M=Fe+20|0,q=Fe+12|0,O=Fe+16|0,se=Fe+4|0,Ge=Fe,Oe=Fe+8|0,k=P9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(M,B),WLe(s,M,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=S9()|0,B=n[m>>2]|0,B|0)do xc(M,B),n[q>>2]=n[m+4>>2],VLe(l,M,q),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Gm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(M,n[(Ym(l)|0)>>2]|0),n[q>>2]=fT(l)|0,KLe(c,M,q),m=n[m>>2]|0;while((m|0)!=0);if(xc(O,0),m=pT()|0,n[M>>2]=n[O>>2],x9(M,m,d),m=n[(Gm()|0)>>2]|0,m|0){s=M+4|0,l=M+8|0,c=M+8|0;do{if(Q=n[m+4>>2]|0,xc(q,n[(Ym(Q)|0)>>2]|0),JLe(se,U9(Q)|0),B=n[se>>2]|0,B|0){n[M>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):gT(M,Ge),B=n[B>>2]|0;while((B|0)!=0);zLe(f,q,M),$A(M)}n[Oe>>2]=n[q>>2],O=_9(Q)|0,n[M>>2]=n[Oe>>2],x9(M,O,d),l5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Fe}function WLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,lMe(s,l,c,f)}function VLe(s,l,c){s=s|0,l=l|0,c=c|0,aMe(s,l,c)}function Ym(s){return s=s|0,s|0}function KLe(s,l,c){s=s|0,l=l|0,c=c|0,nMe(s,l,c)}function U9(s){return s=s|0,s+16|0}function JLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=rMe(c)|0,f|0){if(f=Vt(12)|0,B=(H9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Vt(12)|0,Q=(H9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function zLe(s,l,c){s=s|0,l=l|0,c=c|0,XLe(s,l,c)}function _9(s){return s=s|0,s+24|0}function XLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Va(d),s=da(s)|0,n[k>>2]=n[l>>2],mT(m,c),n[B>>2]=n[k>>2],ZLe(s,B,m),$A(m),Ka(d),C=f}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Pl($Le()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,ET(d)|0)|0,$A(d),C=f}function $Le(){var s=0;return o[7976]|0||(eMe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function eMe(s){s=s|0,Sl(s,tMe()|0,2)}function tMe(){return 1732}function rMe(s){return s=s|0,n[s>>2]|0}function H9(s){return s=s|0,n[s>>2]|0}function nMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Pl(iMe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Qg(m)|0,oo(0,d|0,s|0,l|0,b9(c)|0)|0,C=f}function iMe(){var s=0;return o[7984]|0||(sMe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function sMe(s){s=s|0,Sl(s,oMe()|0,2)}function oMe(){return 1744}function aMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],cMe(s,B,c,f),Ka(m),C=d}function cMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Pl(uMe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,c=Wm(c)|0,pc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,C=d}function uMe(){var s=0;return o[7992]|0||(fMe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,AMe(s)|0}function AMe(s){return s=s|0,s&255|0}function fMe(s){s=s|0,Sl(s,pMe()|0,3)}function pMe(){return 1756}function hMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,O=se+20|0,M=se,OF(s,0),f=AUe(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[O>>0]=0,gMe(Q,c,O),uD(s,Q)|0,qA(Q);break}case 8:{q=DT(l)|0,o[O>>0]=8,xc(M,n[q+4>>2]|0),dMe(Q,c,O,M,q+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=DT(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[q>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[q>>2]=(n[q>>2]|0)+4):gT(k,Q),l;)d=d+4|0;o[O>>0]=9,xc(M,n[m+8>>2]|0),mMe(Q,c,O,M,k),uD(s,Q)|0,qA(Q);break}default:q=DT(l)|0,o[O>>0]=f,xc(M,n[q+4>>2]|0),yMe(Q,c,O,M),uD(s,Q)|0,qA(Q)}$A(k),C=se}function gMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Va(d),l=da(l)|0,QMe(s,l,o[c>>0]|0),Ka(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function dMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],SMe(s,l,c,k,d),Ka(B),C=m}function mMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,O=m+12|0,k=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[O>>2]=n[f>>2],mT(k,d),n[Q>>2]=n[O>>2],BMe(s,l,c,Q,k),$A(k),Ka(B),C=m}function yMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],EMe(s,l,c,B),Ka(m),C=d}function EMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Pl(CMe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Qg(m)|0)|0),C=d}function CMe(){var s=0;return o[8e3]|0||(wMe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,OF(s,l)}function wMe(s){s=s|0,Sl(s,IMe()|0,2)}function IMe(){return 1772}function BMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+16|0,O=m+12|0,B=m,k=Pl(vMe()|0)|0,c=Wm(c)|0,n[O>>2]=n[f>>2],n[Q>>2]=n[O>>2],f=Qg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],O=d+8|0,n[B+8>>2]=n[O>>2],n[O>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,ET(B)|0)|0),$A(B),C=m}function vMe(){var s=0;return o[8008]|0||(DMe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function DMe(s){s=s|0,Sl(s,PMe()|0,3)}function PMe(){return 1784}function SMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Pl(xMe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Qg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,yT(d)|0)|0),C=m}function xMe(){var s=0;return o[8016]|0||(bMe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function bMe(s){s=s|0,Sl(s,kMe()|0,3)}function kMe(){return 1800}function QMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Pl(FMe()|0)|0,AD(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function FMe(){var s=0;return o[8024]|0||(TMe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function TMe(s){s=s|0,Sl(s,RMe()|0,1)}function RMe(){return 1816}function NMe(){LMe(),MMe(),OMe()}function LMe(){n[2702]=d7(65536)|0}function MMe(){iOe(10856)}function OMe(){UMe(10816)}function UMe(s){s=s|0,_Me(s,5044),HMe(s)|0}function _Me(s,l){s=s|0,l=l|0;var c=0;c=F9()|0,n[s>>2]=c,ZMe(c,l),xp(n[s>>2]|0)}function HMe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,jMe()|0),s|0}function jMe(){var s=0;return o[8032]|0||(q9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Rr(10820)|0||q9(10820),10820}function q9(s){s=s|0,YMe(s),kg(s,25)}function qMe(s){s=s|0,GMe(s+24|0)}function GMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YMe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,18,l,JMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WMe(s,l){s=s|0,l=l|0,VMe(s,l)}function VMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,Sg(d,l),n[f>>2]=xg(d,l)|0,KMe(s,f),C=c}function KMe(s,l){s=s|0,l=l|0,G9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function G9(s,l){s=s|0,l=l|0,n[s>>2]=l}function JMe(){return 1824}function zMe(s){return s=s|0,XMe(s)|0}function XMe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,Sg(d,s),G9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=d7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function ZMe(s,l){s=s|0,l=l|0,n[s>>2]=$Me()|0,n[s+4>>2]=eOe()|0,n[s+12>>2]=l,n[s+8>>2]=tOe()|0,n[s+32>>2]=9}function $Me(){return 11744}function eOe(){return 1832}function tOe(){return lD()|0}function rOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(nOe(c),gt(c)):l|0&>(l)}function nOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function iOe(s){s=s|0,sOe(s,5052),oOe(s)|0,aOe(s,5058,26)|0,lOe(s,5069,1)|0,cOe(s,5077,10)|0,uOe(s,5087,19)|0,AOe(s,5094,27)|0}function sOe(s,l){s=s|0,l=l|0;var c=0;c=nUe()|0,n[s>>2]=c,iUe(c,l),xp(n[s>>2]|0)}function oOe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,q4e()|0),s|0}function aOe(s,l,c){return s=s|0,l=l|0,c=c|0,D4e(s,pn(l)|0,c,0),s|0}function lOe(s,l,c){return s=s|0,l=l|0,c=c|0,u4e(s,pn(l)|0,c,0),s|0}function cOe(s,l,c){return s=s|0,l=l|0,c=c|0,jOe(s,pn(l)|0,c,0),s|0}function uOe(s,l,c){return s=s|0,l=l|0,c=c|0,SOe(s,pn(l)|0,c,0),s|0}function Y9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function AOe(s,l,c){return s=s|0,l=l|0,c=c|0,fOe(s,pn(l)|0,c,0),s|0}function fOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CT()|0,s=pOe(c)|0,hn(m,l,d,s,hOe(c,f)|0,f)}function CT(){var s=0,l=0;if(o[8040]|0||(V9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10860)}return 10860}function pOe(s){return s=s|0,s|0}function hOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(W9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(gOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function gOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=dOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,mOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,W9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,yOe(s,d),EOe(d),C=k;return}}function dOe(s){return s=s|0,536870911}function mOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function yOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function EOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,IOe(s)}function COe(s){s=s|0,wOe(s+24|0)}function wOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function IOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,BOe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BOe(){return 1840}function vOe(s,l,c){s=s|0,l=l|0,c=c|0,POe(n[(DOe(s)|0)>>2]|0,l,c)}function DOe(s){return s=s|0,(n[(CT()|0)+24>>2]|0)+(s<<3)|0}function POe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,Sg(m,l),l=xg(m,l)|0,Sg(d,c),c=xg(d,c)|0,tf[s&31](l,c),C=f}function SOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wT()|0,s=xOe(c)|0,hn(m,l,d,s,bOe(c,f)|0,f)}function wT(){var s=0,l=0;if(o[8048]|0||(J9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(10896)}return 10896}function xOe(s){return s=s|0,s|0}function bOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(kOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function kOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=QOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,FOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TOe(s,d),ROe(d),C=k;return}}function QOe(s){return s=s|0,536870911}function FOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ROe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,MOe(s)}function NOe(s){s=s|0,LOe(s+24|0)}function LOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,OOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function OOe(){return 1852}function UOe(s,l){return s=s|0,l=l|0,HOe(n[(_Oe(s)|0)>>2]|0,l)|0}function _Oe(s){return s=s|0,(n[(wT()|0)+24>>2]|0)+(s<<3)|0}function HOe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Sg(f,l),l=xg(f,l)|0,l=oD(Ng[s&31](l)|0)|0,C=c,l|0}function jOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IT()|0,s=qOe(c)|0,hn(m,l,d,s,GOe(c,f)|0,f)}function IT(){var s=0,l=0;if(o[8056]|0||(X9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(10932)}return 10932}function qOe(s){return s=s|0,s|0}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,VOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,KOe(s,d),JOe(d),C=k;return}}function WOe(s){return s=s|0,536870911}function VOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function KOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,ZOe(s)}function zOe(s){s=s|0,XOe(s+24|0)}function XOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ZOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,7,l,$Oe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Oe(){return 1860}function e4e(s,l,c){return s=s|0,l=l|0,c=c|0,r4e(n[(t4e(s)|0)>>2]|0,l,c)|0}function t4e(s){return s=s|0,(n[(IT()|0)+24>>2]|0)+(s<<3)|0}function r4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,n4e(Q,l),i4e(k,Q,l),vp(d,c),c=Dp(d,c)|0,n[B>>2]=n[k>>2],_w[s&15](m,B,c),c=s4e(m)|0,qA(m),Pp(d),C=f,c|0}function n4e(s,l){s=s|0,l=l|0}function i4e(s,l,c){s=s|0,l=l|0,c=c|0,o4e(s,c)}function s4e(s){return s=s|0,da(s)|0}function o4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(a4e(c,0),ii(f|0,c|0)|0,l4e(s,c),c4e(c)):n[s>>2]=n[l>>2],C=d}function a4e(s,l){s=s|0,l=l|0,e5(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function l4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function c4e(s){s=s|0,o[s+8>>0]=0}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=BT()|0,s=A4e(c)|0,hn(m,l,d,s,f4e(c,f)|0,f)}function BT(){var s=0,l=0;if(o[8064]|0||($9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$9(10968)}return 10968}function A4e(s){return s=s|0,s|0}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=BT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(p4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function p4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=h4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,g4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,d4e(s,d),m4e(d),C=k;return}}function h4e(s){return s=s|0,536870911}function g4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function d4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function m4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $9(s){s=s|0,C4e(s)}function y4e(s){s=s|0,E4e(s+24|0)}function E4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function C4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,1,l,w4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function w4e(){return 1872}function I4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,v4e(n[(B4e(s)|0)>>2]|0,l,c,f,d,m)}function B4e(s){return s=s|0,(n[(BT()|0)+24>>2]|0)+(s<<3)|0}function v4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,O=B+8|0,M=B+4|0,q=B,vp(k,l),l=Dp(k,l)|0,vp(Q,c),c=Dp(Q,c)|0,vp(O,f),f=Dp(O,f)|0,vp(M,d),d=Dp(M,d)|0,vp(q,m),m=Dp(q,m)|0,w7[s&1](l,c,f,d,m),Pp(q),Pp(M),Pp(O),Pp(Q),Pp(k),C=B}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=vT()|0,s=P4e(c)|0,hn(m,l,d,s,S4e(c,f)|0,f)}function vT(){var s=0,l=0;if(o[8072]|0||(t7(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Rr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t7(11004)}return 11004}function P4e(s){return s=s|0,s|0}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=vT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(x4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function x4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=b4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,k4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Q4e(s,d),F4e(d),C=k;return}}function b4e(s){return s=s|0,536870911}function k4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function Q4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function F4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t7(s){s=s|0,N4e(s)}function T4e(s){s=s|0,R4e(s+24|0)}function R4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function N4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,12,l,L4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function L4e(){return 1896}function M4e(s,l,c){s=s|0,l=l|0,c=c|0,U4e(n[(O4e(s)|0)>>2]|0,l,c)}function O4e(s){return s=s|0,(n[(vT()|0)+24>>2]|0)+(s<<3)|0}function U4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,_4e(m,l),l=H4e(m,l)|0,vp(d,c),c=Dp(d,c)|0,tf[s&31](l,c),Pp(d),C=f}function _4e(s,l){s=s|0,l=l|0}function H4e(s,l){return s=s|0,l=l|0,j4e(l)|0}function j4e(s){return s=s|0,s|0}function q4e(){var s=0;return o[8080]|0||(r7(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Rr(11040)|0||r7(11040),11040}function r7(s){s=s|0,W4e(s),kg(s,71)}function G4e(s){s=s|0,Y4e(s+24|0)}function Y4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function W4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,7,l,z4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function V4e(s){s=s|0,K4e(s)}function K4e(s){s=s|0,J4e(s)}function J4e(s){s=s|0,o[s+8>>0]=1}function z4e(){return 1936}function X4e(){return Z4e()|0}function Z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Vt(1)|0,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],$4e(f,m,d),n[c>>2]=f,C=l,s|0}function $4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function eUe(s){s=s|0,Jm(s),gt(s)}function tUe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function rUe(s){s=s|0,gt(s)}function nUe(){var s=0;return o[8088]|0||(uUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function iUe(s,l){s=s|0,l=l|0,n[s>>2]=sUe()|0,n[s+4>>2]=oUe()|0,n[s+12>>2]=l,n[s+8>>2]=aUe()|0,n[s+32>>2]=10}function sUe(){return 11745}function oUe(){return 1940}function aUe(){return aD()|0}function lUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(cUe(c),gt(c)):l|0&>(l)}function cUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function uUe(s){s=s|0,Bp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function DT(s){return s=s|0,n[s>>2]|0}function AUe(s){return s=s|0,o[n[s>>2]>>0]|0}function fUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],pUe(l,f)|0,C=c}function pUe(s,l){s=s|0,l=l|0;var c=0;return c=hUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function hUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Va(f),s=da(s)|0,l=gUe(s,n[l>>2]|0)|0,Ka(f),C=c,l|0}function Va(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function gUe(s,l){s=s|0,l=l|0;var c=0;return c=Pl(dUe()|0)|0,Qn(0,c|0,s|0,yT(l)|0)|0}function Ka(s){s=s|0,Y9(n[s>>2]|0,n[s+4>>2]|0)}function dUe(){var s=0;return o[8096]|0||(mUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function mUe(s){s=s|0,Sl(s,yUe()|0,1)}function yUe(){return 1948}function EUe(){CUe()}function CUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Oe=C,C=C+16|0,M=Oe+4|0,q=Oe,Ni(65536,10804,n[2702]|0,10812),c=P9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=S9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(wUe()|0,5167),O=Gm()|0,s=n[O>>2]|0;e:do if(s|0){do IUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[O>>2]|0,s|0){Q=O;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(BUe(d)|0);)if(n[q>>2]=Q,n[M>>2]=n[q>>2],vUe(O,M)|0,!s)break e;if(DUe(d),Q=n[Q>>2]|0,l=n7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(U9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Fe=Ym(d)|0,l=PUe(d)|0,c=n7(d)|0,f=SUe(d)|0,Au(Fe|0,l|0,B|0,k|0,c|0,f|0,fT(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(pT()|0)>>2]|0,s|0)do Fe=s+4|0,O=hT(Fe)|0,d=Lw(O)|0,m=Rw(O)|0,B=(Nw(O)|0)+1|0,k=fD(O)|0,Q=i7(Fe)|0,O=Rr(O)|0,M=cD(Fe)|0,q=PT(Fe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,O|0,M|0,q|0,ST(Fe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Gm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(_9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=hT(l)|0;r:do if(f|0)switch(Rr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Lw(f)|0,Q=Rw(f)|0,O=(Nw(f)|0)+1|0,M=fD(f)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,k|0,Q|0,O|0,M|0,0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 1:{B=Lw(f)|0,k=Rw(f)|0,Q=(Nw(f)|0)+1|0,O=fD(f)|0,M=i7(l)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,B|0,k|0,Q|0,O|0,M|0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 5:{O=Lw(f)|0,M=Rw(f)|0,q=(Nw(f)|0)+1|0,Fe=fD(f)|0,El(se|0,O|0,M|0,q|0,Fe|0,xUe(f)|0,Rr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(0);Ce(),C=Oe}function wUe(){return 11703}function IUe(s){s=s|0,o[s+40>>0]=0}function BUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function vUe(s,l){return s=s|0,l=l|0,l=bUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function DUe(s){s=s|0,o[s+40>>0]=1}function n7(s){return s=s|0,n[s+20>>2]|0}function PUe(s){return s=s|0,n[s+8>>2]|0}function SUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function i7(s){return s=s|0,n[s+4>>2]|0}function PT(s){return s=s|0,n[s+8>>2]|0}function ST(s){return s=s|0,n[s+16>>2]|0}function xUe(s){return s=s|0,n[s+20>>2]|0}function bUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(O=s>>>0<11?16:s+11&-8,s=O>>>3,q=n[2783]|0,c=q>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=q&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,C=Lt,qe|0;if(M=n[2785]|0,O>>>0>M>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=q&~(1<>2]=l,n[s>>2]=c,s=q),m=(f<<3)-O|0,n[d+4>>2]=O|3,f=d+O|0,n[f+4>>2]=m|1,n[f+m>>2]=m,M|0&&(d=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,C=Lt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-O|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-O|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+O|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+O|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=O|3,n[B+4>>2]=m|1,n[B+m>>2]=m,M|0&&(f=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,C=Lt,qe|0}else q=O}else q=O}else q=O}else if(s>>>0<=4294967231)if(s=s+11|0,O=s&-8,Q=n[2784]|0,Q){f=0-O|0,s=s>>>8,s?O>>>0>16777215?k=31:(q=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(M|q|k)+(Ue<>>15)|0,k=O>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=O<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-O|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,M=q>>>1&2,q=q>>>M,c=q>>>1&1,s=0,c=n[11436+((m|B|k|M|c)+(q>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-O|0,q=c>>>0>>0,c=q?c:f,s=q?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-O|0)>>>0){if(m=k+O|0,k>>>0>=m>>>0)return qe=0,C=Lt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=O|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+O|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,C=Lt,qe|0}else q=O}else q=O;else q=-1;while(0);if(c=n[2785]|0,c>>>0>=q>>>0)return l=c-q|0,s=n[2788]|0,l>>>0>15?(qe=s+q|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,C=Lt,qe|0;if(B=n[2786]|0,B>>>0>q>>>0)return at=B-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=q+48|0,Q=q+47|0,m=s+Q|0,d=0-s|0,O=m&d,O>>>0<=q>>>0||(s=n[2893]|0,s|0&&(M=n[2891]|0,se=M+O|0,se>>>0<=M>>>0|se>>>0>s>>>0)))return qe=0,C=Lt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Fe=f+4|0,(s+(n[Fe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=kp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Fe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=kp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Oe=Ge+-1|0,l=((Oe&l|0)==0?0:(Oe+l&0-Ge)-l|0)+O|0,Ge=n[2891]|0,Oe=l+Ge|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Fe=n[2893]|0,Fe|0&&Oe>>>0<=Ge>>>0|Oe>>>0>Fe>>>0){l=0;break}if(s=kp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((kp(s|0)|0)==-1){kp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&O>>>0<2147483647&&(at=kp(O|0)|0,Fe=kp(0)|0,et=Fe-at|0,Xe=et>>>0>(q+40|0)>>>0,!((at|0)==-1|Xe^1|at>>>0>>0&((at|0)!=-1&(Fe|0)!=-1)^1))&&(B=Xe?et:l,m=at,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,M=l+4|0,n[M>>2]=(n[M>>2]|0)+B,M=m+8|0,M=m+((M&7|0)==0?0:0-M&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,O=M+q|0,k=l-M-q|0,n[M+4>>2]=q|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=O,n[O+4>>2]=qe|1,n[O+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[O+4>>2]=d|1,n[O+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=O,n[l+12>>2]=O,n[O+8>>2]=l,n[O+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[O+28>>2]=l,s=O+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=O,n[O+24>>2]=f,n[O+12>>2]=O,n[O+8>>2]=O;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=O,n[O+24>>2]=c,n[O+12>>2]=O,n[O+8>>2]=O;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=O,n[Ue>>2]=O,n[O+8>>2]=qe,n[O+12>>2]=c,n[O+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=O,n[O+4>>2]=qe|1;while(0);return qe=M+8|0,C=Lt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(at|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>q>>>0)return at=l-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0}return n[(Vm()|0)>>2]=12,qe=0,C=Lt,qe|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function kUe(){return 11628}function QUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=RUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function s7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;q=C,C=C+48|0,O=q+16|0,m=q,d=q+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[O>>2]=n[B>>2],n[O+4>>2]=d,n[O+8>>2]=l,m=gD(Li(146,O|0)|0)|0,(f|0)==(m|0)){M=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else M=3;while(0);return(M|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=q,c|0}function FUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(TUe()|0)+64|0}function TUe(){return xT()|0}function xT(){return 2084}function RUe(s){return s=s|0,s|0}function NUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=s7(s,l,c)|0,C=d,f|0}function o7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function LUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function a7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;Fe=C,C=C+224|0,M=Fe+120|0,q=Fe+80|0,Ge=Fe,Oe=Fe+136|0,f=q,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[M>>2]=n[c>>2],(bT(0,l,M,Ge,q)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=MUe(s)|0:se=0,c=n[s>>2]|0,O=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=bT(s,l,M,Ge,q)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Oe,B=s+28|0,n[B>>2]=Oe,k=s+20|0,n[k>>2]=Oe,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Oe+80,c=bT(s,l,M,Ge,q)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|O,se|0&&OUe(s),c=(f&32|0)==0?c:-1),C=Fe,c|0}function bT(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Pr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,at=(s|0)!=0,Ue=Lt+40|0,qe=Ue,Lt=Lt+39|0,Or=Pr+4|0,B=0,m=0,M=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,at&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Fe=et?B:-1,M=et?1:M,Q=et?k+3|0:Q):Fe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(O=0,q=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else O=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,M=1,Q=Q+3|0;else{if(M|0){m=-1;break}at?(M=(n[c>>2]|0)+(4-1)&~(4-1),B=n[M>>2]|0,n[c>>2]=M+4,M=0,Q=k):(B=0,M=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,O=et?O|8192:O}else{if(B=l7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=l7(or)|0,Q=n[or>>2]|0;break}if(q=Q+2|0,k=(o[q>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[q>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(M|0){m=-1;break e}at?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=q,Q=q}else k=-1;while(0);for(Oe=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,q=o[(o[Q>>0]|0)+-65+(5178+(Oe*58|0))>>0]|0,se=q&255,(se+-1|0)>>>0<8)Oe=se,Q=et;else break}if(!(q<<24>>24)){m=-1;break}Ge=(Fe|0)>-1;do if(q<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Fe<<2)>>2]=se,Ge=f+(Fe<<3)|0,Fe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Fe,Xe=49;break}if(!at){m=0;break e}c7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!at)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Oe|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=O&-65537,Fe=(O&8192|0)==0?O:Ge;t:do switch(Q|0){case 110:switch((Oe&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Fe|8,Xe=61;break}case 88:case 120:{l=Fe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=_Ue(l,Q,Ue)|0,Ge=qe-se|0,O=0,q=5642,k=(Fe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Fe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=De,O=Xt,n[O>>2]=l,n[O+4>>2]=Q,O=1,q=5642,Xe=66;break t}else{O=(Fe&2049|0)!=0&1,q=(Fe&2048|0)==0?(Fe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,O=0,q=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,O=0,q=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=HUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Or>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Fe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=qUe(s,+E[Xt>>3],B,k,Fe,Q)|0,l=et;continue e}default:O=0,q=5642,se=Ue,Q=k,k=Fe}while(0);t:do if((Xe|0)==61)Fe=Xt,Oe=n[Fe>>2]|0,Fe=n[Fe+4>>2]|0,se=UUe(Oe,Fe,Ue,Q&32)|0,q=(l&8|0)==0|(Oe|0)==0&(Fe|0)==0,O=q?0:2,q=q?5642:5642+(Q>>4)|0,Ge=l,l=Oe,Q=Fe,Xe=67;else if((Xe|0)==66)se=Km(l,Q,Ue)|0,Ge=Fe,Xe=67;else if((Xe|0)==71)Xe=0,Fe=jUe(Q,0,k)|0,Oe=(Fe|0)==0,l=Q,O=0,q=5642,se=Oe?Q+k|0:Fe,Q=Oe?k:Fe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,q=Q,l=0,k=0;O=n[q>>2]|0,!(!O||(k=u7(Nr,O)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Fe),!l)l=0,Xe=84;else for(O=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=u7(Nr,k)|0,O=k+O|0,(O|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),O>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Fe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Fe?se:Ue,se=Ue,Q=Fe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Fe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Oe=se-l|0,Ge=(Q|0)<(Oe|0)?Oe:Q,Fe=Ge+O|0,B=(B|0)<(Fe|0)?Fe:B,Bs(s,32,B,Fe,k),ss(s,q,O),Bs(s,48,B,Fe,k^65536),Bs(s,48,Ge,Oe,0),ss(s,l,Oe),Bs(s,32,B,Fe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!M)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(c7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function MUe(s){return s=s|0,0}function OUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||ZUe(l,c,s)|0}function l7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function c7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function UUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function _Ue(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function Km(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=TT(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=FT(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function HUe(s){return s=s|0,KUe(s,n[(VUe()|0)+188>>2]|0)|0}function jUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=He(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,zm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function u7(s,l){return s=s|0,l=l|0,s?s=YUe(s,l,0)|0:s=0,s|0}function qUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0;bn=C,C=C+560|0,Q=bn+8|0,et=bn,ir=bn+524|0,Nr=ir,O=bn+512|0,n[et>>2]=0,Pr=O+12|0,A7(l)|0,(De|0)<0?(l=-l,or=1,Or=5659):(or=(d&2049|0)!=0&1,Or=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),A7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+GUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),at=m|32,(at|0)==97){Oe=m&32,se=(Oe|0)==0?Or:Or+9|0,q=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=O+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,M=B+-2|0,o[M>>0]=m+15,O=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Oe,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(O&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Pr-M|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+q+Pr|0,Bs(s,32,c,B,d),ss(s,se,q),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,M,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(O=Xt,q=Q;;){if(M=(B|0)<29?B:29,B=q+-4|0,B>>>0>=O>>>0){Q=0;do Ue=m7(n[B>>2]|0,0,M|0)|0,Ue=QT(Ue|0,De|0,Q|0,0)|0,qe=De,Xe=TT(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Xe,Q=FT(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=O>>>0);Q&&(O=O+-4|0,n[O>>2]=Q)}for(Q=q;!(Q>>>0<=O>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-M|0,n[et>>2]=B,(B|0)>0)q=Q;else break}else O=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Fe=(at|0)==102;do{if(Oe=0-B|0,Oe=(Oe|0)<9?Oe:9,O>>>0>>0){M=(1<>>Oe,se=0,B=O;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Oe)+se,se=He(qe&M,q)|0,B=B+4|0;while(B>>>0>>0);B=(n[O>>2]|0)==0?O+4|0:O,se?(n[Q>>2]=se,O=B,B=Q+4|0):(O=B,B=Q)}else O=(n[O>>2]|0)==0?O+4|0:O,B=Q;Q=Fe?Xt:O,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Oe|0,n[et>>2]=B}while((B|0)<0);B=O,f=Q}else B=O,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,M=n[B>>2]|0,M>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(M>>>0>=O>>>0)}}else Q=0;if(Fe=(at|0)==103,Xe=(k|0)!=0,O=k-((at|0)!=102?Q:0)+((Xe&Fe)<<31>>31)|0,(O|0)<(((f-qe>>2)*9|0)+-9|0)){if(O=O+9216|0,Oe=Xt+4+(((O|0)/9|0)+-1024<<2)|0,O=((O|0)%9|0)+1|0,(O|0)<9){M=10;do M=M*10|0,O=O+1|0;while((O|0)!=9)}else M=10;if(q=n[Oe>>2]|0,se=(q>>>0)%(M>>>0)|0,O=(Oe+4|0)==(f|0),O&(se|0)==0)O=Oe;else if(Ge=(((q>>>0)/(M>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(M|0)/2|0,l=se>>>0>>0?.5:O&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Or>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),O=q-se|0,n[Oe>>2]=O,Ge+l!=Ge){if(Ue=O+M|0,n[Oe>>2]=Ue,Ue>>>0>999999999)for(Q=Oe;O=Q+-4|0,n[Q>>2]=0,O>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[O>>2]|0)+1|0,n[O>>2]=Ue,Ue>>>0>999999999;)Q=O;else O=Oe;if(Q=(qe-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(q>>>0>=M>>>0)}}else O=Oe;O=O+4|0,O=f>>>0>O>>>0?O:f,Ue=B}else O=f,Ue=B;for(at=O;;){if(at>>>0<=Ue>>>0){et=0;break}if(B=at+-4|0,!(n[B>>2]|0))at=B;else{et=1;break}}f=0-Q|0;do if(Fe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(M=m+-1|0,k=B+-1-Q|0):(M=m+-2|0,k=B+-1|0),B=d&8,B)Oe=B;else{if(et&&(Lt=n[at+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)O=0;else{O=0,B=10;do B=B*10|0,O=O+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else O=9;if(B=((at-qe>>2)*9|0)+-9|0,(M|32|0)==102){Oe=B-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}else{Oe=B+Q-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}}else M=m,Oe=d&8;while(0);if(Fe=k|Oe,q=(Fe|0)!=0&1,se=(M|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,O=Pr,(O-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((O-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=M,Xe=B,B=O-B|0}if(B=or+1+k+q+B|0,Bs(s,32,c,B,d),ss(s,Or,or),Bs(s,48,c,B,d^65536),se){M=Ue>>>0>Xt>>>0?Xt:Ue,Oe=ir+9|0,q=Oe,se=ir+8|0,O=M;do{if(Q=Km(n[O>>2]|0,0,Oe)|0,(O|0)==(M|0))(Q|0)==(Oe|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,q-Q|0),O=O+4|0}while(O>>>0<=Xt>>>0);if(Fe|0&&ss(s,5710,1),O>>>0>>0&(k|0)>0)for(;;){if(Q=Km(n[O>>2]|0,0,Oe)|0,Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),O=O+4|0,Q=k+-9|0,O>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Fe=et?at:Ue+4|0,(k|0)>-1){et=ir+9|0,Oe=(Oe|0)==0,f=et,q=0-Nr|0,se=ir+8|0,M=Ue;do{Q=Km(n[M>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((M|0)==(Ue|0)){if(O=Q+1|0,ss(s,Q,1),Oe&(k|0)<1){Q=O;break}ss(s,5710,1),Q=O}else{if(Q>>>0<=ir>>>0)break;zm(ir|0,48,Q+q|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,M=M+4|0}while(M>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Or,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=bn,((B|0)<(c|0)?c:B)|0}function A7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function GUe(s,l){return s=+s,l=l|0,+ +f7(s,l)}function f7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+f7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function YUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(WUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function WUe(){return xT()|0}function VUe(){return xT()|0}function KUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return JUe(c,n[l+20>>2]|0)|0}function JUe(s,l){return s=s|0,l=l|0,zUe(s,l)|0}function zUe(s,l){return s=s|0,l=l|0,l?l=XUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function XUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Fg(n[s+8>>2]|0,se)|0,f=Fg(n[s+12>>2]|0,se)|0,d=Fg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(q=f>>>2,M=d>>>2,O=0;;){if(k=m>>>1,Q=O+k|0,B=Q<<1,d=B+q|0,f=Fg(n[s+(d<<2)>>2]|0,se)|0,d=Fg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=o7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else O=f?O:Q,m=f?k:m-k|0}f=B+M|0,d=Fg(n[s+(f<<2)>>2]|0,se)|0,f=Fg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Fg(s,l){s=s|0,l=l|0;var c=0;return c=C7(s|0)|0,((l|0)==0?s:c)|0}function ZUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:$Ue(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function $Ue(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=p7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=p7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=h7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=h7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function kT(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((e3e(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else O=3;while(0);return(O|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function e3e(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function t3e(s,l){return s=s|0,l=l|0,a7(n[582]|0,s,l)|0}function zr(s){s=s|0,Tt()}function Jm(s){s=s|0}function r3e(s,l){return s=s|0,l=l|0,0}function n3e(s){return s=s|0,(g7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function g7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function bp(s){s=s|0,n3e(s)|0&&i3e(s)}function i3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(g7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Vt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=o3e()|0,!s){s=0;break}k7[s&0]()}return s|0}function d7(s){return s=s|0,Vt(s)|0}function gt(s){s=s|0,hD(s)}function s3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function o3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function a3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function QT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function zm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function m7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function y7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function E7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0;if(M=s,Q=l,O=Q,B=c,se=f,k=se,!O)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(M>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=31){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,s=M>>>(q>>>0)&l|O<>>(q>>>0)&l,m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(O|0)|0)|0,Oe=64-k|0,q=32-k|0,Q=q>>31,Ge=k-32|0,l=Ge>>31,B=k,s=q-1>>31&O>>>(Ge>>>0)|(O<>>(k>>>0))&l,l=l&O>>>(k>>>0),m=M<>>(Ge>>>0))&Q|M<>31;break}return d|0&&(n[d>>2]=m&M,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Oe=s|0|0,De=Ge,Oe|0):(Oe=y7(B|0)|0,Ge=O>>>(Oe>>>0)|0,Oe=O<<32-Oe|M>>>(Oe>>>0)|0,De=Ge,Oe|0)}else{if(m)return d|0&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Oe=(O>>>0)/(B>>>0)>>>0,De=Ge,Oe|0;if(!M)return d|0&&(n[d>>2]=0,n[d+4>>2]=(O>>>0)%(k>>>0)),Ge=0,Oe=(O>>>0)/(k>>>0)>>>0,De=Ge,Oe|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&O|l&0),Ge=0,Oe=O>>>((y7(k|0)|0)>>>0),De=Ge,Oe|0;if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=O<>>(l>>>0),l=O>>>(l>>>0),m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Oe=0,De=Ge,Oe|0):(Ge=0,Oe=0,De=Ge,Oe|0)}while(0);if(!B)O=k,Q=0,k=0;else{q=c|0|0,M=se|f&0,O=QT(q|0,M|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(O|0,c|0,f|0,se|0)|0,Oe=De,Ge=Oe>>31|((Oe|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&q|0,(((Oe|0)<0?-1:0)>>31|((Oe|0)<0?-1:0)<<1)&M|0)|0,l=De,B=B-1|0;while((B|0)!=0);O=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(O|B)<<1|(B<<1|m>>>31)&0|Q,Oe=(m<<1|0>>>31)&-2|k,De=Ge,Oe|0}function FT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,E7(s,l,c,f,0)|0}function kp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,vA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,vA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function TT(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,E7(s,l,c,f,d)|0,C=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function C7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function l3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,w7[s&1](l|0,c|0,f|0,d|0,m|0)}function c3e(s,l,c){s=s|0,l=l|0,c=y(c),I7[s&1](l|0,y(c))}function u3e(s,l,c){s=s|0,l=l|0,c=+c,B7[s&31](l|0,+c)}function A3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(v7[s&0](l|0,y(c),y(f)))}function f3e(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function p3e(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function h3e(s,l){return s=s|0,l=l|0,Ng[s&31](l|0)|0}function g3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,D7[s&1](l|0,+c,+f,d|0)}function d3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,z3e[s&1](l|0,+c,+f)}function m3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function y3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+X3e[s&1](l|0,c|0,f|0)}function E3e(s,l){return s=s|0,l=l|0,+P7[s&15](l|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=+c,Z3e[s&1](l|0,+c)|0}function w3e(s,l,c){return s=s|0,l=l|0,c=c|0,NT[s&15](l|0,c|0)|0}function I3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,$3e[s&1](l|0,c|0,+f,+d,m|0)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,e_e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function v3e(s,l,c){return s=s|0,l=l|0,c=c|0,+S7[s&7](l|0,c|0)}function D3e(s){return s=s|0,CD[s&7]()|0}function P3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,x7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function S3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,t_e[s&1](l|0,c|0,f|0,+d)}function x3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,b7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function b3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,_w[s&15](l|0,c|0,f|0)}function k3e(s){s=s|0,k7[s&0]()}function Q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,Q7[s&15](l|0,c|0,+f)}function F3e(s,l,c){return s=s|0,l=+l,c=+c,r_e[s&1](+l,+c)|0}function T3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,LT[s&15](l|0,c|0,f|0,d|0)}function R3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function N3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function L3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Ow(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function M3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function O3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function U3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function _3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Rg(s){return s=s|0,F(11),0}function H3e(s,l){return s=s|0,l=+l,F(12),0}function Uw(s,l){return s=s|0,l=l|0,F(13),0}function j3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function RT(s,l){return s=s|0,l=l|0,F(16),0}function G3e(){return F(17),0}function Y3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function W3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function V3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function K3e(){F(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function J3e(s,l){return s=+s,l=+l,F(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var w7=[R3e,YLe],I7=[N3e,fo],B7=[ma,xw,bw,wF,IF,Dl,kw,BF,Hm,xu,Fw,vF,$v,WA,eD,jm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],v7=[L3e],ef=[Er,Jm,DDe,PDe,SDe,rbe,nbe,ibe,CNe,wNe,INe,FLe,TLe,RLe,eUe,tUe,rUe,hs,Kv,_m,YA,Qw,wve,Ive,gDe,NDe,VDe,APe,SPe,GPe,aSe,ISe,MSe,$Se,gxe,Qxe,Vxe,wbe,Mbe,$be,gke,Qke,Vke,fQe,SQe,HQe,nFe,Sc,RFe,zFe,gTe,TTe,KTe,gRe,DRe,xRe,YRe,KRe,ANe,vNe,SNe,GNe,lLe,a5,qMe,COe,NOe,zOe,y4e,T4e,G4e,V4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],tf=[Ow,hF,gF,Sw,Su,dF,mF,Ip,yF,EF,CF,Zv,VA,Ke,At,Wt,vr,Sn,Fr,PF,lve,Qve,dQe,kQe,MTe,WMe,dLe,Y9,Ow,Ow,Ow,Ow],Ng=[Ja,QUe,pF,D,fe,ve,vt,wt,bt,_r,di,po,sve,ove,Bve,oFe,ZTe,VNe,zMe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],D7=[M3e,vve],z3e=[O3e,hNe],ED=[U3e,s7,FUe,NUe,KPe,Dbe,OFe,e4e],X3e=[_3e,Exe],P7=[Rg,Yo,rt,xn,Dve,Pve,Sve,xve,bve,kve,Rg,Rg,Rg,Rg,Rg,Rg],Z3e=[H3e,IRe],NT=[Uw,r3e,ave,EDe,gPe,uSe,DSe,Xxe,Hbe,YQe,Wv,UOe,Uw,Uw,Uw,Uw],$3e=[j3e,XDe],e_e=[q3e,I4e],S7=[RT,ai,Fve,Tve,Rve,Nxe,RT,RT],CD=[G3e,Nve,Dw,ga,FRe,ZRe,QNe,X4e],x7=[Y3e,Ew],t_e=[W3e,Eke],b7=[V3e,cve],_w=[yD,R,is,en,ho,QPe,_Se,Nke,Xke,Um,hMe,vOe,M4e,yD,yD,yD],k7=[K3e],Q7=[Xm,Jv,zv,Xv,GA,nD,DF,P,nke,eTe,yRe,Xm,Xm,Xm,Xm,Xm],r_e=[J3e,yNe],LT=[Zm,nxe,hFe,ETe,aRe,ORe,iNe,ONe,pLe,rOe,lUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:C7,dynCall_idd:F3e,dynCall_i:D3e,_i64Subtract:dD,___udivdi3:FT,dynCall_vif:c3e,setThrew:hu,dynCall_viii:b3e,_bitshift64Lshr:mD,_bitshift64Shl:m7,dynCall_vi:f3e,dynCall_viiddi:I3e,dynCall_diii:y3e,dynCall_iii:w3e,_memset:zm,_sbrk:kp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Om,dynCall_vii:p3e,___uremdi3:TT,dynCall_vid:u3e,stackAlloc:lo,_nbind_init:EUe,getTempRet0:Ua,dynCall_di:E3e,dynCall_iid:C3e,setTempRet0:xA,_i64Add:QT,dynCall_fiff:A3e,dynCall_iiii:m3e,_emscripten_get_global_libc:kUe,dynCall_viid:Q3e,dynCall_viiid:S3e,dynCall_viififi:x3e,dynCall_ii:h3e,__GLOBAL__sub_I_Binding_cc:NMe,dynCall_viiii:T3e,dynCall_iiiiii:P3e,stackSave:gc,dynCall_viiiii:l3e,__GLOBAL__sub_I_nbind_cc:Lve,dynCall_vidd:d3e,_free:hD,runPostSets:a3e,dynCall_viiiiii:B3e,establishStackSpace:ji,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:tLe,dynCall_viddi:g3e,dynCall_dii:v3e,dynCall_v:k3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var om=_((wVt,OEe)=>{"use strict";var Jyt=LEe(),zyt=MEe(),Q6=!1,F6=null;zyt({},function(t,e){if(!Q6){if(Q6=!0,t)throw t;F6=e}});if(!Q6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");OEe.exports=Jyt(F6.bind,F6.lib)});var R6=_((IVt,T6)=>{"use strict";var UEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);T6.exports=UEe;T6.exports.default=UEe});var HEe=_((BVt,_Ee)=>{"use strict";_Ee.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Jk=_((vVt,N6)=>{"use strict";var Xyt=MP(),Zyt=R6(),$yt=HEe(),jEe=t=>{if(typeof t!="string"||t.length===0||(t=Xyt(t),t.length===0))return 0;t=t.replace($yt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Zyt(o)?2:1)}return e};N6.exports=jEe;N6.exports.default=jEe});var M6=_((DVt,L6)=>{"use strict";var eEt=Jk(),qEe=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,eEt(r));return e};L6.exports=qEe;L6.exports.default=qEe});var GEe=_(lB=>{"use strict";var tEt=lB&&lB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lB,"__esModule",{value:!0});var rEt=tEt(M6()),O6={};lB.default=t=>{if(t.length===0)return{width:0,height:0};if(O6[t])return O6[t];let e=rEt.default(t),r=t.split(` +`).length;return O6[t]={width:e,height:r},{width:e,height:r}}});var YEe=_(cB=>{"use strict";var nEt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var dn=nEt(om()),iEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},sEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},oEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},aEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},lEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},cEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},uEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};cB.default=(t,e={})=>{iEt(t,e),sEt(t,e),oEt(t,e),aEt(t,e),lEt(t,e),cEt(t,e),uEt(t,e)}});var KEe=_((xVt,VEe)=>{"use strict";var uB=Jk(),AEt=MP(),fEt=vI(),_6=new Set(["\x1B","\x9B"]),pEt=39,WEe=t=>`${_6.values().next().value}[${t}m`,hEt=t=>t.split(" ").map(e=>uB(e)),U6=(t,e,r)=>{let o=[...e],a=!1,n=uB(AEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=uB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),_6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},gEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(uB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},dEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=hEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=uB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){U6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(gEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,_6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===pEt?null:I}let E=fEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=WEe(E):h===` +`&&(a+=WEe(n)))}return a};VEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +`).split(` +`).map(o=>dEt(o,e,r)).join(` +`)});var XEe=_((bVt,zEe)=>{"use strict";var JEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",mEt=t=>t&&t.exact?new RegExp(`^${JEe}$`):new RegExp(JEe,"g");zEe.exports=mEt});var H6=_((kVt,tCe)=>{"use strict";var yEt=R6(),EEt=XEe(),ZEe=vI(),eCe=["\x1B","\x9B"],zk=t=>`${eCe[0]}[${t}m`,$Ee=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=ZEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(zk(e?u:n))}else if(e){o.push(zk(0));break}else o.push(zk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=zk(ZEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};tCe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(eCe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=$Ee(a);else if(A>=r){p+=$Ee(a,!0,u);break}}return p}});var nCe=_((QVt,rCe)=>{"use strict";var y0=H6(),CEt=Jk();function Xk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}rCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=CEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Xk(t,p-e+1,!0);return u+y0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+y0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Xk(t,h),I=Xk(t,p-(e-h)+1,!0);return y0(t,0,E)+u+y0(t,I,p).trim()}return y0(t,0,h)+u+y0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Xk(t,e-1);return y0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),y0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var q6=_(AB=>{"use strict";var iCe=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var wEt=iCe(KEe()),IEt=iCe(nCe()),j6={};AB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(j6[o])return j6[o];let a=t;if(r==="wrap"&&(a=wEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=IEt.default(t,e,{position:n})}return j6[o]=a,a}});var Y6=_(G6=>{"use strict";Object.defineProperty(G6,"__esModule",{value:!0});var sCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=sCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};G6.default=sCe});var W6=_(pi=>{"use strict";var fB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var BEt=fB(om()),oCe=fB(GEe()),vEt=fB(YEe()),DEt=fB(q6()),PEt=fB(Y6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:BEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(SEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&vEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var SEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:PEt.default(t),n=oCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=DEt.default(a,e,u);return oCe.default(A)},aCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:aCe(t.parentNode)},Zk=t=>{let e=aCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Zk(t)}});var fCe=_(pB=>{"use strict";var ACe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var lCe=x6(),xEt=ACe(kEe()),cCe=ACe(om()),Mo=W6(),uCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};pB.default=xEt.default({schedulePassiveEffects:lCe.unstable_scheduleCallback,cancelPassiveEffects:lCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Mo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Mo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Mo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Mo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Mo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Mo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_FLEX)},appendInitialChild:Mo.appendChildNode,appendChild:Mo.appendChildNode,insertBefore:Mo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Mo.appendChildNode,insertInContainerBefore:Mo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let b={};n.style=b}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Mo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Mo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Mo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)}})});var hCe=_((LVt,pCe)=>{"use strict";pCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var gCe=_(hB=>{"use strict";var bEt=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var $k=bEt(om());hB.default=t=>t.getComputedWidth()-t.getComputedPadding($k.default.EDGE_LEFT)-t.getComputedPadding($k.default.EDGE_RIGHT)-t.getComputedBorder($k.default.EDGE_LEFT)-t.getComputedBorder($k.default.EDGE_RIGHT)});var dCe=_((OVt,kEt)=>{kEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var yCe=_((UVt,V6)=>{"use strict";var mCe=dCe();V6.exports=mCe;V6.exports.default=mCe});var CCe=_((_Vt,ECe)=>{"use strict";var QEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},FEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};ECe.exports={stringReplaceAll:QEt,stringEncaseCRLFWithFirstIndex:FEt}});var DCe=_((HVt,vCe)=>{"use strict";var TEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,wCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,REt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,NEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,LEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function BCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):LEt.get(t)||t}function MEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(REt))r.push(a[2].replace(NEt,(A,p,h)=>p?BCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function OEt(t){wCe.lastIndex=0;let e=[],r;for(;(r=wCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=MEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ICe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}vCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(TEt,(n,u,A,p,h,E)=>{if(u)a.push(BCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ICe(t,r)(I)),r.push({inverse:A,styles:OEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ICe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var iQ=_((jVt,QCe)=>{"use strict";var gB=vI(),{stdout:J6,stderr:z6}=yN(),{stringReplaceAll:UEt,stringEncaseCRLFWithFirstIndex:_Et}=CCe(),{isArray:eQ}=Array,SCe=["ansi","ansi","ansi256","ansi16m"],_C=Object.create(null),HEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=J6?J6.level:0;t.level=e.level===void 0?r:e.level},X6=class{constructor(e){return xCe(e)}},xCe=t=>{let e={};return HEt(e,t),e.template=(...r)=>kCe(e.template,...r),Object.setPrototypeOf(e,tQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=X6,e.template};function tQ(t){return xCe(t)}for(let[t,e]of Object.entries(gB))_C[t]={get(){let r=rQ(this,Z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};_C.visible={get(){let t=rQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bCe)_C[t]={get(){let{level:e}=this;return function(...r){let o=Z6(gB.color[SCe[e]][t](...r),gB.color.close,this._styler);return rQ(this,o,this._isEmpty)}}};for(let t of bCe){let e="bg"+t[0].toUpperCase()+t.slice(1);_C[e]={get(){let{level:r}=this;return function(...o){let a=Z6(gB.bgColor[SCe[r]][t](...o),gB.bgColor.close,this._styler);return rQ(this,a,this._isEmpty)}}}}var jEt=Object.defineProperties(()=>{},{..._C,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},rQ=(t,e,r)=>{let o=(...a)=>eQ(a[0])&&eQ(a[0].raw)?PCe(o,kCe(o,...a)):PCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,jEt),o._generator=t,o._styler=e,o._isEmpty=r,o},PCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=UEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=_Et(e,a,o,n)),o+e+a},K6,kCe=(t,...e)=>{let[r]=e;if(!eQ(r)||!eQ(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var qEt=mB&&mB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mB,"__esModule",{value:!0});var dB=qEt(iQ()),GEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,YEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,sQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);mB.default=(t,e,r)=>{if(!e)return t;if(e in dB.default){let a=sQ(e,r);return dB.default[a](t)}if(e.startsWith("#")){let a=sQ("hex",r);return dB.default[a](e)(t)}if(e.startsWith("ansi")){let a=YEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]);return dB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=GEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return dB.default[n](u,A,p)(t)}return t}});var TCe=_(yB=>{"use strict";var FCe=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var WEt=FCe(yCe()),ej=FCe($6());yB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=WEt.default[r.style.borderStyle],p=ej.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(ej.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=ej.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var NCe=_(EB=>{"use strict";var am=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var VEt=am(om()),KEt=am(M6()),JEt=am(hCe()),zEt=am(q6()),XEt=am(gCe()),ZEt=am(Y6()),$Et=am(TCe()),eCt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+JEt.default(e,a)}return e},RCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===VEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=ZEt.default(t);if(v.length>0){let b=KEt.default(v),C=XEt.default(p);if(b>C){let T=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=zEt.default(v,C,T)}v=eCt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&$Et.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)RCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};EB.default=RCe});var MCe=_((WVt,LCe)=>{"use strict";LCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var UCe=_((VVt,tj)=>{"use strict";var tCt=MCe(),OCe=t=>typeof t=="string"?t.replace(tCt(),""):t;tj.exports=OCe;tj.exports.default=OCe});var jCe=_((KVt,HCe)=>{"use strict";var _Ce="[\uD800-\uDBFF][\uDC00-\uDFFF]";HCe.exports=t=>t&&t.exact?new RegExp(`^${_Ce}$`):new RegExp(_Ce,"g")});var GCe=_((JVt,rj)=>{"use strict";var rCt=UCe(),nCt=jCe(),qCe=t=>rCt(t).replace(nCt()," ").length;rj.exports=qCe;rj.exports.default=qCe});var VCe=_(CB=>{"use strict";var WCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var YCe=WCe(H6()),iCt=WCe(GCe()),nj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};CB.default=nj});var zCe=_(wB=>{"use strict";var ij=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var sCt=ij(om()),KCe=ij(NCe()),JCe=ij(VCe());wB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,sCt.default.DIRECTION_LTR);let o=new JCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});KCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new JCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),KCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ewe=_((ZVt,$Ce)=>{"use strict";var XCe=Be("stream"),ZCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],sj={},oCt=t=>{let e=new XCe.PassThrough,r=new XCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of ZCe)sj[a]=console[a],console[a]=o[a];return()=>{for(let a of ZCe)console[a]=sj[a];sj={}}};$Ce.exports=oCt});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});oj.default=new WeakMap});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var aCt=sn(),twe=aCt.createContext({exit:()=>{}});twe.displayName="InternalAppContext";lj.default=twe});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var lCt=sn(),rwe=lCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});rwe.displayName="InternalStdinContext";uj.default=rwe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var cCt=sn(),nwe=cCt.createContext({stdout:void 0,write:()=>{}});nwe.displayName="InternalStdoutContext";fj.default=nwe});var gj=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var uCt=sn(),iwe=uCt.createContext({stderr:void 0,write:()=>{}});iwe.displayName="InternalStderrContext";hj.default=iwe});var oQ=_(dj=>{"use strict";Object.defineProperty(dj,"__esModule",{value:!0});var ACt=sn(),swe=ACt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});swe.displayName="InternalFocusContext";dj.default=swe});var awe=_((sKt,owe)=>{"use strict";var fCt=/[|\\{}()[\]^$+*?.-]/g;owe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(fCt,"\\$&")}});var Awe=_((oKt,uwe)=>{"use strict";var pCt=awe(),hCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",cwe=[].concat(Be("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));cwe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var IB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=IB.nodeInternals()),"cwd"in e||(e.cwd=hCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,gCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...cwe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};lwe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(dCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",b=r[11]===")",C,T={};if(E&&(T.line=Number(E)),I&&(T.column=Number(I)),b&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(mCt);L&&(a=L[1],C=L[2])}return lwe(T,h,this._cwd),o&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=A,T.evalColumn=p,T.evalFile=u&&u.replace(/\\/g,"/")),v&&(T.native=!0),a&&(T.function=a),C&&a!==C&&(T.method=C),T}};function lwe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function gCt(t){if(t.length===0)return[];let e=t.map(r=>pCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var dCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),mCt=/^(.*?) \[as (.*?)\]$/;uwe.exports=IB});var pwe=_((aKt,fwe)=>{"use strict";fwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var gwe=_((lKt,hwe)=>{"use strict";var yCt=pwe(),ECt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};hwe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=yCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},ECt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var aQ=_(ru=>{"use strict";var CCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},BCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=BCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return dwe.default.createElement("ink-box",{ref:e,style:a},r)});mj.displayName="Box";mj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=mj});var Cj=_(BB=>{"use strict";var yj=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var vCt=yj(sn()),HC=yj(iQ()),mwe=yj($6()),Ej=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=HC.default.dim(I)),t&&(I=mwe.default(I,t,"foreground")),e&&(I=mwe.default(I,e,"background")),o&&(I=HC.default.bold(I)),a&&(I=HC.default.italic(I)),n&&(I=HC.default.underline(I)),u&&(I=HC.default.strikethrough(I)),A&&(I=HC.default.inverse(I)),I);return vCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};Ej.displayName="Text";Ej.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};BB.default=Ej});var wwe=_(nu=>{"use strict";var DCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),PCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),SCt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return PCt(e,t),e},vB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var ywe=SCt(Be("fs")),fs=vB(sn()),Ewe=vB(Awe()),xCt=vB(gwe()),Xf=vB(aQ()),hA=vB(Cj()),Cwe=new Ewe.default({cwd:process.cwd(),internals:Ewe.default.nodeInternals()}),bCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?Cwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&ywe.existsSync(r.file)){let n=ywe.readFileSync(r.file,"utf8");if(o=xCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Xf.default,{flexDirection:"column",padding:1},fs.default.createElement(Xf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Xf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Xf.default,{key:n},fs.default.createElement(Xf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=Cwe.parseLine(n);return u?fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=bCt});var Bwe=_(iu=>{"use strict";var kCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),QCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),FCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&kCt(e,t,r);return QCt(e,t),e},cm=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var lm=FCt(sn()),Iwe=cm(m6()),TCt=cm(cj()),RCt=cm(Aj()),NCt=cm(pj()),LCt=cm(gj()),MCt=cm(oQ()),OCt=cm(wwe()),UCt=" ",_Ct="\x1B[Z",HCt="\x1B",lQ=class extends lm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===HCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===UCt&&this.focusNext(),e===_Ct&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return lm.default.createElement(TCt.default.Provider,{value:{exit:this.handleExit}},lm.default.createElement(RCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},lm.default.createElement(NCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},lm.default.createElement(LCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},lm.default.createElement(MCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?lm.default.createElement(OCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Iwe.default.hide(this.props.stdout)}componentWillUnmount(){Iwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=lQ;lQ.displayName="InternalApp"});var Pwe=_(su=>{"use strict";var jCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),qCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),GCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&jCt(e,t,r);return qCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var YCt=ou(sn()),vwe=uO(),WCt=ou(AEe()),VCt=ou(f6()),KCt=ou(mEe()),JCt=ou(EEe()),wj=ou(fCe()),zCt=ou(zCe()),XCt=ou(d6()),ZCt=ou(ewe()),$Ct=GCt(W6()),ewt=ou(aj()),twt=ou(Bwe()),jC=process.env.CI==="false"?!1:KCt.default,Dwe=()=>{},Ij=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=zCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(VCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},JCt.default(this),this.options=e,this.rootNode=$Ct.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:vwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=WCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:vwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=wj.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=XCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=YCt.default.createElement(twt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);wj.default.updateContainer(r,this.container,null,Dwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,wj.default.updateContainer(null,this.container,null,Dwe),ewt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=ZCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Ij});var xwe=_(DB=>{"use strict";var Swe=DB&&DB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DB,"__esModule",{value:!0});var rwt=Swe(Pwe()),cQ=Swe(aj()),nwt=Be("stream"),iwt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},swt(e)),o=owt(r.stdout,()=>new rwt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>cQ.default.delete(r.stdout),clear:o.clear}};DB.default=iwt;var swt=(t={})=>t instanceof nwt.Stream?{stdout:t,stdin:process.stdin}:t,owt=(t,e)=>{let r;return cQ.default.has(t)?r=cQ.default.get(t):(r=e(),cQ.default.set(t,r)),r}});var kwe=_(Zf=>{"use strict";var awt=Zf&&Zf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),lwt=Zf&&Zf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),cwt=Zf&&Zf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&awt(e,t,r);return lwt(e,t),e};Object.defineProperty(Zf,"__esModule",{value:!0});var PB=cwt(sn()),bwe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};bwe.displayName="Static";Zf.default=bwe});var Fwe=_(SB=>{"use strict";var uwt=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var Awt=uwt(sn()),Qwe=({children:t,transform:e})=>t==null?null:Awt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);Qwe.displayName="Transform";SB.default=Qwe});var Rwe=_(xB=>{"use strict";var fwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var pwt=fwt(sn()),Twe=({count:t=1})=>pwt.default.createElement("ink-text",null,` +`.repeat(t));Twe.displayName="Newline";xB.default=Twe});var Mwe=_(bB=>{"use strict";var Nwe=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var hwt=Nwe(sn()),gwt=Nwe(aQ()),Lwe=()=>hwt.default.createElement(gwt.default,{flexGrow:1});Lwe.displayName="Spacer";bB.default=Lwe});var uQ=_(kB=>{"use strict";var dwt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var mwt=sn(),ywt=dwt(Aj()),Ewt=()=>mwt.useContext(ywt.default);kB.default=Ewt});var Uwe=_(QB=>{"use strict";var Cwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var Owe=sn(),wwt=Cwt(uQ()),Iwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=wwt.default();Owe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Owe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};QB.default=Iwt});var _we=_(FB=>{"use strict";var Bwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var vwt=sn(),Dwt=Bwt(cj()),Pwt=()=>vwt.useContext(Dwt.default);FB.default=Pwt});var Hwe=_(TB=>{"use strict";var Swt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var xwt=sn(),bwt=Swt(pj()),kwt=()=>xwt.useContext(bwt.default);TB.default=kwt});var jwe=_(RB=>{"use strict";var Qwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Fwt=sn(),Twt=Qwt(gj()),Rwt=()=>Fwt.useContext(Twt.default);RB.default=Rwt});var Gwe=_(LB=>{"use strict";var qwe=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var NB=sn(),Nwt=qwe(oQ()),Lwt=qwe(uQ()),Mwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Lwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=NB.useContext(Nwt.default),h=NB.useMemo(()=>Math.random().toString().slice(2,7),[]);return NB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),NB.useEffect(()=>{t?A(h):p(h)},[t,h]),NB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};LB.default=Mwt});var Ywe=_(MB=>{"use strict";var Owt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Uwt=sn(),_wt=Owt(oQ()),Hwt=()=>{let t=Uwt.useContext(_wt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Hwt});var Wwe=_(Bj=>{"use strict";Object.defineProperty(Bj,"__esModule",{value:!0});Bj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var jwt=xwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return jwt.default}});var qwt=aQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Cj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=kwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Fwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Wwt.default}});var Vwt=Rwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return Vwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return Kwt.default}});var Jwt=Uwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Jwt.default}});var zwt=_we();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return zwt.default}});var Xwt=uQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=Hwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Zwt.default}});var $wt=jwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return $wt.default}});var eIt=Gwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return eIt.default}});var tIt=Ywe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return tIt.default}});var rIt=Wwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return rIt.default}})});var Dj={};Kt(Dj,{Gem:()=>vj});var Vwe,um,vj,AQ=Et(()=>{Vwe=$e(ic()),um=$e(sn()),vj=(0,um.memo)(({active:t})=>{let e=(0,um.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,um.useMemo)(()=>t?"green":"yellow",[t]);return um.default.createElement(Vwe.Text,{color:r},e)})});var Jwe={};Kt(Jwe,{useKeypress:()=>Am});function Am({active:t},e,r){let{stdin:o}=(0,Kwe.useStdin)(),a=(0,fQ.useCallback)((n,u)=>e(n,u),r);(0,fQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Kwe,fQ,OB=Et(()=>{Kwe=$e(ic()),fQ=$e(sn())});var Xwe={};Kt(Xwe,{FocusRequest:()=>zwe,useFocusRequest:()=>Pj});var zwe,Pj,Sj=Et(()=>{OB();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),Pj=function({active:t},e,r){Am({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Zwe={};Kt(Zwe,{useListInput:()=>UB});var UB,pQ=Et(()=>{OB();UB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){Am({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var hQ={};Kt(hQ,{ScrollableItems:()=>nIt});var E0,La,nIt,gQ=Et(()=>{E0=$e(ic()),La=$e(sn());Sj();pQ();nIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),Pj({active:t&&!!n},L=>{n?.(L)},[n]),UB(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let b=v-r,C=v+r;C>p.length&&(b-=C-p.length,C=p.length),b<0&&(C+=-b,b=0),C>=p.length&&(C=p.length-1);let T=[];for(let L=b;L<=C;++L){let U=p[L],J=t&&U===E;T.push(La.default.createElement(E0.Box,{key:U,height:o},La.default.createElement(E0.Box,{marginLeft:1,marginRight:1},La.default.createElement(E0.Text,null,J?La.default.createElement(E0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(E0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(E0.Box,{flexDirection:"column",width:"100%"},T)}});var $we,$f,eIe,xj,tIe,bj=Et(()=>{$we=$e(ic()),$f=$e(sn()),eIe=Be("readline"),xj=$f.default.createContext(null),tIe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,$we.useStdin)();(0,$f.useEffect)(()=>{r&&r(!0),e&&(0,eIe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,$f.useState)(new Map),n=(0,$f.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return $f.default.createElement(xj.Provider,{value:n,children:t})}});var kj={};Kt(kj,{useMinistore:()=>iIt});function iIt(t,e){let r=(0,dQ.useContext)(xj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,dQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var dQ,Qj=Et(()=>{dQ=$e(sn());bj()});var yQ={};Kt(yQ,{renderForm:()=>sIt});async function sIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,mQ.useApp)();Am({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,mQ.render)(Fj.default.createElement(tIe,null,Fj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var mQ,Fj,EQ=Et(()=>{mQ=$e(ic()),Fj=$e(sn());bj();OB()});var sIe=_(_B=>{"use strict";Object.defineProperty(_B,"__esModule",{value:!0});_B.UncontrolledTextInput=void 0;var nIe=sn(),Tj=sn(),rIe=ic(),fm=iQ(),iIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Tj.useState({cursorOffset:(t||"").length,cursorWidth:0});Tj.useEffect(()=>{E(T=>{if(!r||!n)return T;let L=t||"";return T.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:T})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,b=v,C=e?fm.grey(e):void 0;if(n&&r){C=e.length>0?fm.inverse(e[0])+fm.grey(e.slice(1)):fm.inverse(" "),b=v.length>0?"":fm.inverse(" ");let T=0;for(let L of v)T>=p-I&&T<=p?b+=fm.inverse(L):b+=L,T++;v.length>0&&p===v.length&&(b+=fm.inverse(" "))}return rIe.useInput((T,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&T==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(te=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),nIe.createElement(rIe.Text,null,e?v.length>0?b:C:b)};_B.default=iIe;_B.UncontrolledTextInput=t=>{let[e,r]=Tj.useState("");return nIe.createElement(iIe,Object.assign({},t,{value:e,onChange:r}))}});var lIe={};Kt(lIe,{Pad:()=>Rj});var oIe,aIe,Rj,Nj=Et(()=>{oIe=$e(ic()),aIe=$e(sn()),Rj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return aIe.default.createElement(oIe.Text,{dimColor:!e},r)}});var cIe={};Kt(cIe,{ItemOptions:()=>oIt});var jB,w0,oIt,uIe=Et(()=>{jB=$e(ic()),w0=$e(sn());pQ();AQ();Nj();oIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return UB(o,u,{active:t,minus:"left",plus:"right",set:a}),w0.default.createElement(w0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,I-v.length-2);return p?w0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},w0.default.createElement(jB.Text,{wrap:"truncate"},w0.default.createElement(vj,{active:E})," ",p),e?w0.default.createElement(Rj,{active:t,length:b}):null):w0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var PIe=_((zJt,DIe)=>{var Gj;DIe.exports=()=>(typeof Gj>"u"&&(Gj=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Gj)});var VIe=_((wzt,WIe)=>{var $j=Symbol("arg flag"),Ma=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Ma.prototype)}};function iv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Ma("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Ma("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Ma(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Ma(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,b=[])=>(b.push(E(I,v,b[b.length-1])),b),h=E===Boolean||E[$j]===!0}else if(typeof p=="function")h=p===Boolean||p[$j]===!0;else throw new Ma(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Ma(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=b===T?"":` (alias for ${T})`;throw new Ma(`option requires argument: ${b}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=L(e[A+1],T,a[T]),++A}else a[T]=L(C,T,a[T])}}else a._.push(h)}return a}iv.flag=t=>(t[$j]=!0,t);iv.COUNT=iv.flag((t,e,r)=>(r||0)+1);iv.ArgError=Ma;WIe.exports=iv});var t1e=_((Kzt,e1e)=>{var nq;e1e.exports=()=>(typeof nq>"u"&&(nq=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nq)});var o1e=_((cq,uq)=>{(function(t){cq&&typeof cq=="object"&&typeof uq<"u"?uq.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var u1e=_((WXt,c1e)=>{"use strict";Aq.ifExists=n1t;var GC=Be("util"),sc=Be("path"),a1e=o1e(),e1t=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,t1t={createPwshFile:!0,createCmdFile:a1e(),fs:Be("fs")},r1t=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function l1e(t){let e={...t1t,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function Aq(t,e,r){let o=l1e(r);await o.fs_.stat(t),await s1t(t,e,o)}function n1t(t,e,r){return Aq(t,e,r).catch(()=>{})}function i1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function s1t(t,e,r){let o=await u1t(t,r);return await o1t(e,r),a1t(t,e,o,r)}function o1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function a1t(t,e,r,o){let a=l1e(o),n=[{generator:p1t,extension:""}];return a.createCmdFile&&n.push({generator:f1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:h1t,extension:".ps1"}),Promise.all(n.map(u=>A1t(t,e+u.extension,r,u.generator,a)))}function l1t(t,e){return i1t(t,e)}function c1t(t,e){return g1t(t,e)}async function u1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(e1t);if(!a){let n=sc.extname(t).toLowerCase();return{program:r1t.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function A1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await l1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),c1t(e,a)}function f1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=fq(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +`:"";return u?I+=`@IF EXIST ${u} (\r + ${u} ${p} ${a} ${E}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${A} ${p} ${a} ${E}%*\r +)\r +`:I+=`@${A} ${p} ${a} ${E}%*\r +`,I}function p1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=fq(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,I=r.nodePath?`export NODE_PATH="${p}" +`:"";return n?E+=`${I}if [ -x ${n} ]; then + exec ${n} ${A} ${o} ${h}"$@" +else + exec ${a} ${A} ${o} ${h}"$@" +fi +`:E+=`${I}${a} ${A} ${o} ${h}"$@" +exit $? +`,E}function h1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=fq(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${E}" +`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +}`;return r.nodePath&&(b+=` else { + $env:NODE_PATH="${I}" +}`),u?b+=` +$ret=0 +if (Test-Path ${u}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${u} ${p} ${o} ${v}$args + } else { + & ${u} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args + } else { + & ${n} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:b+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args +} else { + & ${n} ${p} ${o} ${v}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,b}function g1t(t,e){return e.fs_.chmod(t,493)}function fq(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}c1e.exports=Aq});var Sq=_((h$t,F1e)=>{F1e.exports=Be("stream")});var L1e=_((g$t,N1e)=>{"use strict";function T1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function U1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return QQ.alloc(0);for(var o=QQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)W1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=QQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:Y1t,value:function(r,o){return xq(this,U1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var kq=_((d$t,O1e)=>{"use strict";function V1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(bq,this,t)):process.nextTick(bq,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(FQ,r):(r._writableState.errorEmitted=!0,process.nextTick(M1e,r,n)):process.nextTick(M1e,r,n):e?(process.nextTick(FQ,r),e(n)):process.nextTick(FQ,r)}),this)}function M1e(t,e){bq(t,e),FQ(t)}function FQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function K1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function bq(t,e){t.emit("error",e)}function J1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}O1e.exports={destroy:V1t,undestroy:K1t,errorOrDestroy:J1t}});var k0=_((m$t,H1e)=>{"use strict";var _1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,_1e[t]=a}function U1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function z1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function X1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function Z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&z1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(X1t(t," argument"))a=`The ${t} ${o} ${U1e(e,"type")}`;else{let n=Z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${U1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");H1e.exports.codes=_1e});var Qq=_((y$t,j1e)=>{"use strict";var $1t=k0().codes.ERR_INVALID_OPT_VALUE;function e2t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function t2t(t,e,r,o){var a=e2t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new $1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}j1e.exports={getHighWaterMark:t2t}});var q1e=_((E$t,Fq)=>{typeof Object.create=="function"?Fq.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Fq.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var Q0=_((C$t,Rq)=>{try{if(Tq=Be("util"),typeof Tq.inherits!="function")throw"";Rq.exports=Tq.inherits}catch{Rq.exports=q1e()}var Tq});var Y1e=_((w$t,G1e)=>{G1e.exports=Be("util").deprecate});var Mq=_((I$t,X1e)=>{"use strict";X1e.exports=Ti;function V1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){x2t(e,t)}}var JC;Ti.WritableState=mv;var r2t={deprecate:Y1e()},K1e=Sq(),RQ=Be("buffer").Buffer,n2t=global.Uint8Array||function(){};function i2t(t){return RQ.from(t)}function s2t(t){return RQ.isBuffer(t)||t instanceof n2t}var Lq=kq(),o2t=Qq(),a2t=o2t.getHighWaterMark,F0=k0().codes,l2t=F0.ERR_INVALID_ARG_TYPE,c2t=F0.ERR_METHOD_NOT_IMPLEMENTED,u2t=F0.ERR_MULTIPLE_CALLBACK,A2t=F0.ERR_STREAM_CANNOT_PIPE,f2t=F0.ERR_STREAM_DESTROYED,p2t=F0.ERR_STREAM_NULL_VALUES,h2t=F0.ERR_STREAM_WRITE_AFTER_END,g2t=F0.ERR_UNKNOWN_ENCODING,zC=Lq.errorOrDestroy;Q0()(Ti,K1e);function d2t(){}function mv(t,e,r){JC=JC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof JC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=a2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){B2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new V1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:r2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var TQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(TQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ti,Symbol.hasInstance,{value:function(e){return TQ.call(this,e)?!0:this!==Ti?!1:e&&e._writableState instanceof mv}})):TQ=function(e){return e instanceof this};function Ti(t){JC=JC||Em();var e=this instanceof JC;if(!e&&!TQ.call(Ti,this))return new Ti(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),K1e.call(this)}Ti.prototype.pipe=function(){zC(this,new A2t)};function m2t(t,e){var r=new h2t;zC(t,r),process.nextTick(e,r)}function y2t(t,e,r,o){var a;return r===null?a=new p2t:typeof r!="string"&&!e.objectMode&&(a=new l2t("chunk",["string","Buffer"],r)),a?(zC(t,a),process.nextTick(o,a),!1):!0}Ti.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&s2t(t);return n&&!RQ.isBuffer(t)&&(t=i2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=d2t),o.ending?m2t(this,r):(n||y2t(this,o,t,r))&&(o.pendingcb++,a=C2t(this,o,n,t,e,r)),a};Ti.prototype.cork=function(){this._writableState.corked++};Ti.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&J1e(this,t))};Ti.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new g2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ti.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function E2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=RQ.from(e,r)),e}Object.defineProperty(Ti.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function C2t(t,e,r,o,a,n){if(!r){var u=E2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var b2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};$1e.exports=yA;var Z1e=_q(),Uq=Mq();Q0()(yA,Z1e);for(Oq=b2t(Uq.prototype),NQ=0;NQ{var MQ=Be("buffer"),np=MQ.Buffer;function e2e(t,e){for(var r in t)e[r]=t[r]}np.from&&np.alloc&&np.allocUnsafe&&np.allocUnsafeSlow?t2e.exports=MQ:(e2e(MQ,Hq),Hq.Buffer=XC);function XC(t,e,r){return np(t,e,r)}e2e(np,XC);XC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return np(t,e,r)};XC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=np(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};XC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return np(t)};XC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return MQ.SlowBuffer(t)}});var Gq=_(i2e=>{"use strict";var qq=r2e().Buffer,n2e=qq.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function F2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function T2t(t){var e=F2t(t);if(typeof e!="string"&&(qq.isEncoding===n2e||!n2e(t)))throw new Error("Unknown encoding: "+t);return e||t}i2e.StringDecoder=yv;function yv(t){this.encoding=T2t(t);var e;switch(this.encoding){case"utf16le":this.text=U2t,this.end=_2t,e=4;break;case"utf8":this.fillLast=L2t,e=4;break;case"base64":this.text=H2t,this.end=j2t,e=3;break;default:this.write=q2t,this.end=G2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=qq.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function R2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function N2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function L2t(t){var e=this.lastTotal-this.lastNeed,r=N2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function M2t(t,e){var r=R2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function U2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function _2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function H2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function j2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function q2t(t){return t.toString(this.encoding)}function G2t(t){return t&&t.length?this.write(t):""}});var OQ=_((D$t,a2e)=>{"use strict";var s2e=k0().codes.ERR_STREAM_PREMATURE_CLOSE;function Y2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var UQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var K2t=OQ(),R0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Ev=Symbol("error"),_Q=Symbol("ended"),wm=Symbol("lastPromise"),Yq=Symbol("handlePromise"),Im=Symbol("stream");function N0(t,e){return{value:t,done:e}}function J2t(t){var e=t[R0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[R0]=null,t[Cm]=null,e(N0(r,!1)))}}function z2t(t){process.nextTick(J2t,t)}function X2t(t,e){return function(r,o){t.then(function(){if(e[_Q]){r(N0(void 0,!0));return}e[Yq](r,o)},o)}}var Z2t=Object.getPrototypeOf(function(){}),$2t=Object.setPrototypeOf((UQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[_Q])return Promise.resolve(N0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(N0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(X2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(N0(n,!1));a=new Promise(this[Yq])}return this[wm]=a,a}},T0(UQ,Symbol.asyncIterator,function(){return this}),T0(UQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(N0(void 0,!0))})})}),UQ),Z2t),eBt=function(e){var r,o=Object.create($2t,(r={},T0(r,Im,{value:e,writable:!0}),T0(r,R0,{value:null,writable:!0}),T0(r,Cm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,_Q,{value:e._readableState.endEmitted,writable:!0}),T0(r,Yq,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[R0]=null,o[Cm]=null,n(N0(A,!1))):(o[R0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,K2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,n(a)),o[Ev]=a;return}var u=o[R0];u!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,u(N0(void 0,!0))),o[_Q]=!0}),e.on("readable",z2t.bind(null,o)),o};l2e.exports=eBt});var p2e=_((S$t,f2e)=>{"use strict";function u2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function tBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){u2e(n,o,a,u,A,"next",p)}function A(p){u2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function A2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function rBt(t){for(var e=1;e{"use strict";B2e.exports=mn;var ZC;mn.ReadableState=m2e;var x$t=Be("events").EventEmitter,d2e=function(e,r){return e.listeners(r).length},wv=Sq(),HQ=Be("buffer").Buffer,oBt=global.Uint8Array||function(){};function aBt(t){return HQ.from(t)}function lBt(t){return HQ.isBuffer(t)||t instanceof oBt}var Wq=Be("util"),$r;Wq&&Wq.debuglog?$r=Wq.debuglog("stream"):$r=function(){};var cBt=L1e(),$q=kq(),uBt=Qq(),ABt=uBt.getHighWaterMark,jQ=k0().codes,fBt=jQ.ERR_INVALID_ARG_TYPE,pBt=jQ.ERR_STREAM_PUSH_AFTER_EOF,hBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,gBt=jQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,$C,Vq,Kq;Q0()(mn,wv);var Cv=$q.errorOrDestroy,Jq=["error","close","destroy","pause","resume"];function dBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function m2e(t,e,r){ZC=ZC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof ZC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=ABt(this,t,"readableHighWaterMark",r),this.buffer=new cBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&($C||($C=Gq().StringDecoder),this.decoder=new $C(t.encoding),this.encoding=t.encoding)}function mn(t){if(ZC=ZC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof ZC;this._readableState=new m2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=$q.destroy;mn.prototype._undestroy=$q.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=HQ.from(t,e),e=""),o=!0),y2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return y2e(this,t,null,!0,!1)};function y2e(t,e,r,o,a){$r("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,EBt(t,n);else{var u;if(a||(u=mBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==HQ.prototype&&(e=aBt(e)),o)n.endEmitted?Cv(t,new gBt):zq(t,n,e,!0);else if(n.ended)Cv(t,new pBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?zq(t,n,e,!1):Zq(t,n)):zq(t,n,e,!1)}else o||(n.reading=!1,Zq(t,n))}return!n.ended&&(n.length=h2e?t=h2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function g2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=yBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){$r("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return $r("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Xq(this):qQ(this),null;if(t=g2e(t,e),t===0&&e.ended)return e.length===0&&Xq(this),null;var o=e.needReadable;$r("need readable",o),(e.length===0||e.length-t0?a=w2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Xq(this)),a!==null&&this.emit("data",a),a};function EBt(t,e){if($r("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?qQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,E2e(t)))}}function qQ(t){var e=t._readableState;$r("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||($r("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(E2e,t))}function E2e(t){var e=t._readableState;$r("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,eG(t)}function Zq(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(CBt,t,e))}function CBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&I2e(o.pipes,t)!==-1)&&!h&&($r("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){$r("onerror",L),T(),t.removeListener("error",v),d2e(t,"error")===0&&Cv(t,L)}dBt(t,"error",v);function b(){t.removeListener("finish",C),T()}t.once("close",b);function C(){$r("onfinish"),t.removeListener("close",b),T()}t.once("finish",C);function T(){$r("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||($r("pipe resume"),r.resume()),t};function wBt(t){return function(){var r=t._readableState;$r("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&d2e(t,"data")&&(r.flowing=!0,eG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,$r("on readable",o.length,o.reading),o.length?qQ(this):o.reading||process.nextTick(IBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(C2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(C2e,this),e};function C2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function IBt(t){$r("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||($r("resume"),t.flowing=!t.readableListening,BBt(this,t)),t.paused=!1,this};function BBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(vBt,t,e))}function vBt(t,e){$r("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),eG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return $r("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&($r("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function eG(t){var e=t._readableState;for($r("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if($r("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if($r("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Xq(t){var e=t._readableState;$r("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(DBt,e,t))}function DBt(t,e){if($r("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Kq===void 0&&(Kq=p2e()),Kq(mn,t,e)});function I2e(t,e){for(var r=0,o=t.length;r{"use strict";D2e.exports=ip;var GQ=k0().codes,PBt=GQ.ERR_METHOD_NOT_IMPLEMENTED,SBt=GQ.ERR_MULTIPLE_CALLBACK,xBt=GQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,bBt=GQ.ERR_TRANSFORM_WITH_LENGTH_0,YQ=Em();Q0()(ip,YQ);function kBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new SBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";S2e.exports=Iv;var P2e=tG();Q0()(Iv,P2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);P2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var T2e=_((F$t,F2e)=>{"use strict";var rG;function FBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Q2e=k0().codes,TBt=Q2e.ERR_MISSING_ARGS,RBt=Q2e.ERR_STREAM_DESTROYED;function b2e(t){if(t)throw t}function NBt(t){return t.setHeader&&typeof t.abort=="function"}function LBt(t,e,r,o){o=FBt(o);var a=!1;t.on("close",function(){a=!0}),rG===void 0&&(rG=OQ()),rG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,NBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new RBt("pipe"))}}}function k2e(t){t()}function MBt(t,e){return t.pipe(e)}function OBt(t){return!t.length||typeof t[t.length-1]!="function"?b2e:t.pop()}function UBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return LBt(u,p,h,function(E){a||(a=E),E&&n.forEach(k2e),!p&&(n.forEach(k2e),o(a))})});return e.reduce(MBt)}F2e.exports=UBt});var ew=_((lc,vv)=>{var Bv=Be("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=_q(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Mq(),lc.Duplex=Em(),lc.Transform=tG(),lc.PassThrough=x2e(),lc.finished=OQ(),lc.pipeline=T2e())});var L2e=_((T$t,N2e)=>{"use strict";var{Buffer:lu}=Be("buffer"),R2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,R2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var nG=ew().Duplex,_Bt=Q0(),Dv=L2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),nG.call(this)}_Bt(Uo,nG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){nG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;WQ.exports=Uo;WQ.exports.BufferListStream=Uo;WQ.exports.BufferList=Dv});var oG=_(rw=>{var HBt=Buffer.alloc,jBt="0000000000000000000",qBt="7777777777777777777",O2e="0".charCodeAt(0),U2e=Buffer.from("ustar\0","binary"),GBt=Buffer.from("00","binary"),YBt=Buffer.from("ustar ","binary"),WBt=Buffer.from(" \0","binary"),VBt=parseInt("7777",8),Pv=257,sG=263,KBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},JBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},zBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},_2e=function(t,e,r,o){for(;re?qBt.slice(0,e)+" ":jBt.slice(0,e-t.length)+t+" "};function XBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};rw.decodeLongPath=function(t,e){return tw(t,0,t.length,e)};rw.encodePax=function(t){var e="";t.name&&(e+=iG(" path="+t.name+` +`)),t.linkname&&(e+=iG(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=iG(" "+o+"="+r[o]+` +`);return Buffer.from(e)};rw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(L0(t.mode&VBt,6),100),e.write(L0(t.uid,6),108),e.write(L0(t.gid,6),116),e.write(L0(t.size,11),124),e.write(L0(t.mtime.getTime()/1e3|0,11),136),e[156]=O2e+zBt(t.type),t.linkname&&e.write(t.linkname,157),U2e.copy(e,Pv),GBt.copy(e,sG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(L0(t.devmajor||0,6),329),e.write(L0(t.devminor||0,6),337),o&&e.write(o,345),e.write(L0(H2e(e),6),148),e)};rw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-O2e,a=tw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=JBt(o),I=t[157]===0?null:tw(t,157,100,e),v=tw(t,265,32),b=tw(t,297,32),C=M0(t,329,8),T=M0(t,337,8),L=H2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(U2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=tw(t,345,155,e)+"/"+a);else if(!(YBt.compare(t,Pv,Pv+6)===0&&WBt.compare(t,sG,sG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:b,devmajor:C,devminor:T}}});var K2e=_((L$t,V2e)=>{var q2e=Be("util"),ZBt=M2e(),Sv=oG(),G2e=ew().Writable,Y2e=ew().PassThrough,W2e=function(){},j2e=function(t){return t&=511,t&&512-t},$Bt=function(t,e){var r=new VQ(t,e);return r.end(),r},evt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},VQ=function(t,e){this._parent=t,this.offset=e,Y2e.call(this,{autoDestroy:!1})};q2e.inherits(VQ,Y2e);VQ.prototype.destroy=function(t){this._parent.destroy(t)};var sp=function(t){if(!(this instanceof sp))return new sp(t);G2e.call(this,t),t=t||{},this._offset=0,this._buffer=ZBt(),this._missing=0,this._partial=!1,this._onparse=W2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=j2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(j2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,b;try{b=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!b){e._parse(512,I),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=evt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,I),e.emit("entry",b,$Bt(e,v),a);return}e._stream=new VQ(e,v),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=I,this._parse(512,I)};q2e.inherits(sp,G2e);sp.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};sp.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};sp.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=W2e,this._overflow?this._write(this._overflow,void 0,t):t()}};sp.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};sp.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};V2e.exports=sp});var z2e=_((M$t,J2e)=>{J2e.exports=Be("fs").constants||Be("constants")});var tBe=_((O$t,eBe)=>{var nw=z2e(),X2e=OO(),JQ=Q0(),tvt=Buffer.alloc,Z2e=ew().Readable,iw=ew().Writable,rvt=Be("string_decoder").StringDecoder,KQ=oG(),nvt=parseInt("755",8),ivt=parseInt("644",8),$2e=tvt(1024),lG=function(){},aG=function(t,e){e&=511,e&&t.push($2e.slice(0,512-e))};function svt(t){switch(t&nw.S_IFMT){case nw.S_IFBLK:return"block-device";case nw.S_IFCHR:return"character-device";case nw.S_IFDIR:return"directory";case nw.S_IFIFO:return"fifo";case nw.S_IFLNK:return"symlink"}return"file"}var zQ=function(t){iw.call(this),this.written=0,this._to=t,this._destroyed=!1};JQ(zQ,iw);zQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var XQ=function(){iw.call(this),this.linkname="",this._decoder=new rvt("utf-8"),this._destroyed=!1};JQ(XQ,iw);XQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};XQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){iw.call(this),this._destroyed=!1};JQ(xv,iw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);Z2e.call(this,t),this._drain=lG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};JQ(EA,Z2e);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=lG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=svt(t.mode)),t.mode||(t.mode=t.type==="directory"?nvt:ivt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return aG(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new XQ;return X2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new zQ(this);return this._stream=u,X2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));aG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push($2e),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=KQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=KQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(KQ.encode(r)),this.push(e),aG(this,e.length),r.size=t.size,r.type=t.type,this.push(KQ.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=lG,e()};eBe.exports=EA});var rBe=_(cG=>{cG.extract=K2e();cG.pack=tBe()});var hBe=_((ier,pBe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=ABe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return gG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):Cvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,ABe(this.__providers).concat(e)),fBe)}};try{let t=Be("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function yvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function gG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))yvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=uBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=uBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function uBe(t,e){let r;return e.__isFiggyPudding?r=gG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var fBe={has(t,e){return e in t.__specs&&gG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};pBe.exports=Evt;function Evt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),fBe)}return r}function ABe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function Cvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var mBe=_((ser,IA)=>{"use strict";var kv=Be("crypto"),wvt=hBe(),Ivt=Be("stream").Transform,gBe=["sha256","sha384","sha512"],Bvt=/^[a-z0-9+/]+(?:=?=?)$/i,vvt=/^([^-]+)-([^?]+)([?\S*]*)$/,Dvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Pvt=/^[\x21-\x7E]+$/,ia=wvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Rvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),U0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Dvt:vvt);if(!a||o&&!gBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(gBe.some(o=>o===this.algorithm)&&this.digest.match(Bvt)&&(this.options||[]).every(o=>o.match(Pvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>U0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:bv(e,r);return wA(`${this.toString(r)} ${o}`,r)}hexDigest(){return wA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=wA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};IA.exports.parse=wA;function wA(t,e){if(e=ia(e),typeof t=="string")return dG(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],dG(bv(r,e),e)}else return dG(bv(t,e),e)}function dG(t,e){return e.single?new U0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new U0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}IA.exports.stringify=bv;function bv(t,e){return e=ia(e),t.algorithm&&t.digest?U0.prototype.toString.call(t,e):typeof t=="string"?bv(wA(t,e),e):vm.prototype.toString.call(t,e)}IA.exports.fromHex=Svt;function Svt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return wA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}IA.exports.fromData=xvt;function xvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new U0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}IA.exports.fromStream=bvt;function bvt(t,e){e=ia(e);let r=e.Promise||Promise,o=mG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}IA.exports.checkData=kvt;function kvt(t,e,r){if(r=ia(r),e=wA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=wA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. + Wanted: ${r.size} + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}IA.exports.checkStream=Qvt;function Qvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=mG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}IA.exports.integrityStream=mG;function mG(t){t=ia(t);let e=t.integrity&&wA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Ivt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=wA(u.map((v,b)=>`${n[b]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}IA.exports.create=Fvt;function Fvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new U0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new vm)}}}var Tvt=new Set(kv.getHashes()),dBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Tvt.has(t));function Rvt(t,e){return dBe.indexOf(t.toLowerCase())>=dBe.indexOf(e.toLowerCase())?t:e}});var VBe=_((lir,WBe)=>{var TDt=uL();function RDt(t){return TDt(t)?void 0:t}WBe.exports=RDt});var JBe=_((cir,KBe)=>{var NDt=jx(),LDt=Q8(),MDt=N8(),ODt=jd(),UDt=gd(),_Dt=VBe(),HDt=P_(),jDt=k8(),qDt=1,GDt=2,YDt=4,WDt=HDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=NDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),UDt(t,jDt(t),r),o&&(r=LDt(r,qDt|GDt|YDt,_Dt));for(var a=e.length;a--;)MDt(r,e[a]);return r});KBe.exports=WDt});Pt();Ye();Pt();var eve=Be("child_process"),tve=$e(ed());qt();var uC=new Map([]);var o2={};Kt(o2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>the,getDynamicLibs:()=>ehe,getPluginConfiguration:()=>fC,openWorkspace:()=>AC,pluginCommands:()=>uC,runExit:()=>sk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var rr=class extends it{constructor(e,r){let o=K.relative(e,r),a=K.join(e,Mt.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();nA();Nl();b1();qt();var OAt=$e(zn());Za();var ehe=()=>new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",OAt],["typanion",Ko]]);Ye();async function AC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();Pt();nA();Nl();b1();qt();var tPt=$e(zn());Za();var tH={};Kt(tH,{AddCommand:()=>bh,BinCommand:()=>kh,CacheCleanCommand:()=>Qh,ClipanionCommand:()=>Wd,ConfigCommand:()=>Nh,ConfigGetCommand:()=>Fh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Rh,DedupeCommand:()=>Lh,EntryCommand:()=>dC,ExecCommand:()=>Mh,ExplainCommand:()=>_h,ExplainPeerRequirementsCommand:()=>Oh,HelpCommand:()=>Vd,InfoCommand:()=>Hh,LinkCommand:()=>qh,NodeCommand:()=>Gh,PluginCheckCommand:()=>Yh,PluginImportCommand:()=>Kh,PluginImportSourcesCommand:()=>Jh,PluginListCommand:()=>Wh,PluginRemoveCommand:()=>zh,PluginRuntimeCommand:()=>Xh,RebuildCommand:()=>Zh,RemoveCommand:()=>$h,RunCommand:()=>e0,RunIndexCommand:()=>zd,SetResolutionCommand:()=>t0,SetVersionCommand:()=>Uh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>r0,UpCommand:()=>Kf,VersionCommand:()=>Kd,WhyCommand:()=>n0,WorkspaceCommand:()=>o0,WorkspacesListCommand:()=>s0,YarnCommand:()=>jh,dedupeUtils:()=>gk,default:()=>Qgt,suggestUtils:()=>zc});var Tde=$e(ed());Ye();Ye();Ye();qt();var j0e=$e(A2());Za();var zc={};Kt(zc,{Modifier:()=>D8,Strategy:()=>fk,Target:()=>f2,WorkspaceModifier:()=>M0e,applyModifier:()=>ipt,extractDescriptorFromPath:()=>P8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>S8,findProjectDescriptors:()=>H0e,getModifier:()=>p2,getSuggestedDescriptors:()=>h2,makeWorkspaceDescriptor:()=>_0e,toWorkspaceModifier:()=>U0e});Ye();Ye();Pt();var v8=$e(zn()),rpt="workspace:",f2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(f2||{}),D8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(D8||{}),M0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(M0e||{}),fk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(fk||{});function p2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var npt=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match(npt);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ipt(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return v8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function U0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function _0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${rpt}${U0e(e)}`)}async function H0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function P8(t,{cwd:e,workspace:r}){return await spt(async o=>{K.isAbsolute(t)||(t=K.relative(r.cwd,K.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await S8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),b=await Mt.find(v.prefixPath,{baseFs:v.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(b.name,t)})}async function h2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],b=[],C=async T=>{try{await T()}catch(L){b.push(L)}};for(let T of A){if(v.length>=p)break;switch(T){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await H0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=_0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await S8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:b.slice(0,p)}}async function S8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},b=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(b,{},v);if(C.length===0)return null;let T=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(T.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),v8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let ye=typeof n=="string"?n:A.range;te=O0e(ye,{project:r})+te}let pe=W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(pe),{},v)).length!==1&&(te=le)}return W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function spt(t){return await oe.mktempPromise(async e=>{let r=Ve.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var bh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=p2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await P8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=opt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async Ae=>{let ye=await h2(J,{project:o,workspace:a,cache:n,fixed:u,target:Ae,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:ye,target:Ae}}))})).then(U=>U.flat()),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(Ae=>Ae.descriptor!==null).length===0){let[Ae]=le;if(typeof Ae>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(Ae)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,le=U.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,j0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=a.manifest[J].get(te.identHash);(typeof ye>"u"||ye.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof ye>"u"?T.push([a,J,te,E]):L.push([a,J,ye,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,T),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};bh.paths=[["add"]],bh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function opt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var kh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};kh.paths=[["bin"]],kh.usage=nt.Usage({description:"get the path to a binary script",details:` + When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. + + When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Pt();qt();var Qh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Qh.paths=[["cache","clean"],["cache","clear"]],Qh.usage=nt.Usage({description:"remove the shared cache files",details:` + This command will remove all the files from the cache. + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var G0e=$e(g2()),x8=Be("util"),Fh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=je.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();x8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,x8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Fh.paths=[["config","get"]],Fh.usage=nt.Usage({description:"read a configuration settings",details:` + This command will print a configuration setting. + + Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Rge=$e(F8()),Nge=$e(g2()),Lge=$e(T8()),R8=Be("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ve.updateHomeConfiguration(C):C=>Ve.updateConfiguration(o(),C))(C=>{if(n){let T=(0,Rge.default)(C);return(0,Lge.default)(T,this.name,A),T}else return{...C,[a]:A}});let E=(await Ve.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=je.convertMapsToIndexableObjects(E),v=n?(0,Nge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{R8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,R8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` + This command will set a configuration setting. + + When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). + + When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Vge=$e(F8()),Kge=$e(_ge()),Jge=$e(L8()),Rh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ve.updateHomeConfiguration(h):h=>Ve.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Vge.default)(I):{...I};return(0,Jge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Rh.paths=[["config","unset"]],Rh.usage=nt.Usage({description:"unset a configuration setting",details:` + This command will unset a configuration setting. + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();Pt();qt();var hk=Be("util"),Nh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await NE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),b=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(b[0]==="<"?de.Type.CODE:de.Type.PATH,b)}};h[I]={value:de.tuple(de.Type.CODE,I),children:T};let L=(U,J)=>{for(let[te,le]of J)if(le instanceof Map){let pe={};U[te]={children:pe},L(pe,le)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(le,p))}};C instanceof Map?L(T,C):T.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,hk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` +`),this.context.stdout.write(`${p} +`)}return u.exitCode()}};Nh.paths=[["config"]],Nh.usage=nt.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var gk={};Kt(gk,{Strategy:()=>d2,acceptedStrategies:()=>j0t,dedupe:()=>M8});Ye();Ye();var zge=$e(Zo()),d2=(e=>(e.HIGHEST="highest",e))(d2||{}),j0t=new Set(Object.values(d2)),q0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);je.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),b=Object.fromEntries(await je.allSettledSafe(Object.entries(v).map(async([te,le])=>{let pe=A.get(le.descriptorHash);if(typeof pe>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let Ae=await pe.promise;if(!Ae)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,Ae.updatedPackage]})));if(e.length&&!zge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let T=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),L=await r.getSatisfying(p,b,T,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let b=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:b})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function M8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=q0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Xs.progressViaCounter(v.length);await a.reportProgress(b);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:pe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,le)} to ${W.prettyLocator(n,pe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(le),updatedResolution:W.stringifyLocator(pe)}),t.storedResolutions.set(te.descriptorHash,pe.locatorHash)}).finally(()=>b.tick())));let T;switch(C){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${L} strategy`),C})}var Lh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(d2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await M8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Lh.paths=[["dedupe"]],Lh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Wd=class extends ut{async execute(){let{plugins:e}=await Ve.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Xge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Wd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var dC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=K.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Kd=class extends ut{async execute(){this.context.stdout.write(`${tn||""} +`)}};Kd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` + This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. + + It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Oh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:aP(Ey(),[sI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await Y0t(this.hash,o,{stdout:this.context.stdout})}};Oh.paths=[["explain","peer-requirements"]],Oh.usage=nt.Usage({description:"explain a set of peer requirements",details:` + A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + + When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. + + When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + + **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function Y0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();Pt();qt();var Zge=$e(zn()),Uh=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(K.contains(p,A))return 0}let o=()=>{if(typeof tn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:tn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${K.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await W0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await rn.get(a.url,{configuration:r}))};await O8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Uh.paths=[["set","version"]],Uh.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function W0t(t,e){let o=(await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function m2(t,e){let r=await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function O8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let pe=K.join(le,"yarn.cjs");await oe.writeFilePromise(pe,te);let{stdout:Ae}=await Ur.execvp(process.execPath,[ue.fromPortablePath(pe),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=Ae.trim(),!Zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=K.resolve(A,".yarn/releases"),h=K.resolve(p,`yarn-${e}.cjs`),E=K.relative(t.startingCwd,h),I=je.isTaggedYarnVersion(e),v=t.get("yarnPath"),b=!I,C=b||!!v||!!a;if(a===!1){if(b)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(K.dirname(h)),await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ve.updateConfiguration(A,{yarnPath:K.relative(A,h)})}else await oe.removePromise(K.dirname(h)),await Ve.updateConfiguration(A,{yarnPath:Ve.deleteProperty});let T=await Mt.tryFind(A)||new Mt;T.packageManager=`yarn@${I?e:await m2(t,"stable")}`;let L={};T.exportTo(L);let U=K.join(A,Mt.fileName),J=`${JSON.stringify(L,null,T.indent)} +`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function $ge(t){return wr[fP(t)]}var V0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
        (?:.(?!##))+)/gs;async function K0t(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(tn)?tn:await m2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await rn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(V0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=$ge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var _h=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:oI(Ey(),[sI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=$ge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await K0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + +You can help us by editing this page on GitHub \u{1F642}: +${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} +`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} +`):this.context.stdout.write(`${n} + +${p} +`)}else{let o={children:je.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};_h.paths=[["explain"]],_h.usage=nt.Usage({description:"explain an error code",details:` + When the code argument is specified, this command prints its name and its details. + + When used without arguments, this command lists all error codes and their names. + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Pt();qt();var ede=$e(Zo()),Hh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:pe})=>{let Ae=le.anchoredLocator.locatorHash,ye=new Map,ae=[Ae];for(;ae.length>0;){let we=ae.shift();if(ye.has(we))continue;let Pe=o.storedPackages.get(we);if(typeof Pe>"u")throw new Error("Assertion failed: Expected the package to be registered");if(ye.set(we,Pe),W.isVirtualLocator(Pe)&&ae.push(W.devirtualizeLocator(Pe).locatorHash),!(!pe&&we!==Ae))for(let g of Pe.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");ae.push(Ee)}}return ye.values()},p=({recursive:le})=>{let pe=new Map;for(let Ae of o.workspaces)for(let ye of A(Ae,{recursive:le}))pe.set(ye.locatorHash,ye);return pe.values()},h=({all:le,recursive:pe})=>le&&pe?o.storedPackages.values():le?p({recursive:pe}):A(a,{recursive:pe}),E=({all:le,recursive:pe})=>{let Ae=h({all:le,recursive:pe}),ye=this.patterns.map(Pe=>{let g=W.parseLocator(Pe),Ee=ede.default.makeRe(W.stringifyIdent(g)),De=W.isVirtualLocator(g),ce=De?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),ke=Ie?W.devirtualizeLocator(ne):ne;return!(De&&Ie&&g.reference!==ne.reference||ce.reference!==ke.reference)}}),ae=je.sortMap([...Ae],Pe=>W.stringifyLocator(Pe));return{selection:ae.filter(Pe=>ye.length===0||ye.some(g=>g(Pe))),sortedLookup:ae}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of v)for(let pe of le.dependencies.values()){let Ae=o.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(b,Ae).push(le)}let C=new Map;for(let le of v){if(!W.isVirtualLocator(le))continue;let pe=W.devirtualizeLocator(le);je.getArrayWithDefault(C,pe.locatorHash).push(le)}let T={},L={children:T},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,pe,Ae)=>{if(!pe.has("manifest"))return;let ye=await U.fetch(le,J),ae;try{ae=await Mt.find(ye.prefixPath,{baseFs:ye.packageFs})}finally{ye.releaseFs?.()}Ae("Manifest",{License:de.tuple(de.Type.NO_HINT,ae.license),Homepage:de.tuple(de.Type.URL,ae.raw.homepage??null)})},async(le,pe,Ae)=>{if(!pe.has("cache"))return;let ye=o.storedChecksums.get(le.locatorHash)??null,ae=n.getLocatorPath(le,ye),we;if(ae!==null)try{we=await oe.statPromise(ae)}catch{}let Pe=typeof we<"u"?[we.size,de.Type.SIZE]:void 0;Ae("Cache",{Checksum:de.tuple(de.Type.NO_HINT,ye),Path:de.tuple(de.Type.PATH,ae),Size:Pe})}];for(let le of I){let pe=W.isVirtualLocator(le);if(!this.virtuals&&pe)continue;let Ae={},ye={value:[le,de.Type.LOCATOR],children:Ae};if(T[W.stringifyLocator(le)]=ye,this.nameOnly){delete ye.children;continue}let ae=C.get(le.locatorHash);typeof ae<"u"&&(Ae.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,ae.length)}),Ae.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,le.version)};let we=(g,Ee)=>{let De={};if(Ae[g]=De,Array.isArray(Ee))De.children=Ee.map(ce=>({value:ce}));else{let ce={};De.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!pe){for(let g of te)await g(le,u,we);await r.triggerHook(g=>g.fetchPackageInfo,le,u,we)}le.bin.size>0&&!pe&&we("Exported Binaries",[...le.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let Pe=b.get(le.locatorHash);typeof Pe<"u"&&Pe.length>0&&we("Dependents",Pe.map(g=>de.tuple(de.Type.LOCATOR,g))),le.dependencies.size>0&&!pe&&we("Dependencies",[...le.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),De=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&pe&&we("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let Ee=le.dependencies.get(g.identHash),De=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=De!==null?o.storedPackages.get(De)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Hh.paths=[["info"]],Hh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();Pt();Nl();var dk=$e(ed());qt();var U8=$e(zn());Za();var J0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await NE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!dk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!dk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!dk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await Z0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await X0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(T.hasErrors())return T.exitCode()}if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ve.telemetry?.isNew)Ve.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ve.telemetry?.shouldShowTips){let U=await rn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(tn!==null){let le=U8.default.prerelease(tn)?"canary":"stable",pe=U.latest[le];U8.default.gt(pe,tn)&&(J=[le,pe])}if(J)Ve.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ve.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of J0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ve.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(T.hasErrors())return T.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async T=>{T.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),T.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:I,report:T,immutable:u,checkResolutions:b,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var z0t="<<<<<<<";async function X0t(t,e){if(!t.projectCwd)return!1;let r=K.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(z0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Vi(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function Z0t(t,e){if(!t.projectCwd)return!1;let r=[],o=K.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ve.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=K.resolve(t.projectCwd,A.path),h=B1.has(A.spec)&&K.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ve.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=K.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let b=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?K.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Gh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Gh.paths=[["node"]],Gh.usage=nt.Usage({description:"run node with the hook already setup",details:` + This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + + The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Yh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Ve.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await rn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Yh.paths=[["plugin","check"]],Yh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + Check only the plugins from https. + + If this command detects any plugin differences in the CI environment, it will throw an error. + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Pt();qt();var ode=Be("os");Ye();Pt();qt();var tde=Be("os");Ye();Nl();qt();var $0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jd(t,e){let r=await rn.get($0t,{configuration:t}),o=Vi(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jd(r,tn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Wh.paths=[["plugin","list"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var egt=/^[0-9]+$/,tgt=process.platform==="win32";function rde(t){return egt.test(t)?`pull/${t}/head`:t}var rgt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",rde(e)],["git","reset","--hard","FETCH_HEAD"]],ngt=({branch:t})=>[["git","fetch","origin","--depth=1",rde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],igt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",K.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[tgt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,tde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await _8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=K.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await y2(igt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await O8(r,null,async()=>h,{report:u});this.skipPlugins||await sgt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. + + By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function y2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function _8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(K.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await y2(ngt(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await y2(rgt(t,o),{configuration:e,context:t.context,target:o}))}async function sgt(t,e,{project:r,report:o,target:a}){let n=await Jd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await H8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var nde=$e(zn()),ide=Be("url"),sde=Be("vm");var Kh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=K.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=K.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new ide.URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!nde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await Jd(r,tn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):tn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${tn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await rn.get(p,{configuration:r})}await j8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Kh.paths=[["plugin","import"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. + + Three types of plugin references are accepted: + + - If the plugin is stored within the Yarn repository, it can be referenced by name. + - Third-party plugins can be referenced directly through their public urls. + - Local plugins can be referenced by their path on the disk. + + If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. + + Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function j8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,sde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=K.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(K.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ve.addPlugin(o.cwd,[I])}var ogt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Jh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,ode.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await Jd(r,tn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await _8(this,{configuration:r,report:n,target:o}),await H8(E,this,{project:u,report:n,target:o})})).exitCode()}};Jh.paths=[["plugin","import","from","sources"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. + + The plugins can be referenced by their short name if sourced from the official Yarn repository. + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function H8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await y2(ogt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=K.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await j8(t,h,{project:o,report:a})}Ye();Pt();qt();var zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=K.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ve.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ve.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};zh.paths=[["plugin","remove"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. + + **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Xh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Xh.paths=[["plugin","runtime"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Zh.paths=[["rebuild"]],Zh.usage=nt.Usage({description:"rebuild the project's native packages",details:` + This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. + + Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). + + By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var q8=$e(Zo());Za();var $h=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let T=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,q8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,T=!0;for(let te of A){let le=U.manifest.getForScope(te),pe=[...le.values()].map(Ae=>W.stringifyIdent(Ae));for(let Ae of(0,q8.default)(pe,W.stringifyIdent(L))){let{identHash:ye}=W.parseIdent(Ae),ae=le.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(ye),E.push([U,te,ae]),h=!0,T=!0}}}T||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};$h.paths=[["remove"]],$h.usage=nt.Usage({description:"remove dependencies from the project",details:` + This command will remove the packages matching the specified patterns from the current workspace. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + + This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();var ade=Be("util"),zd=class extends ut{async execute(){let e=await Ve.find(this.context.cwd,this.context.plugins),{project:r,workspace:o}=await St.find(e,this.context.cwd);if(!o)throw new rr(r.cwd,this.context.cwd);return(await Nt.start({configuration:e,stdout:this.context.stdout},async n=>{let u=o.manifest.scripts,A=je.sortMap(u.keys(),E=>E),p={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},h=A.reduce((E,I)=>Math.max(E,I.length),0);for(let[E,I]of u.entries())n.reportInfo(null,`${E.padEnd(h," ")} ${(0,ade.inspect)(I,p)}`)})).exitCode()}};zd.paths=[["run"]];Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of uC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};e0.paths=[["run"]],e0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: + + - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. + + - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. + + - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. + + Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};t0.paths=[["set","resolution"]],t0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var lde=$e(Zo()),r0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=K.resolve(this.context.cwd,ue.toPortablePath(p));if(je.isPathLike(p)){let E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let b of I.workspaces)b.manifest.name&&A.add(W.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,lde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};r0.paths=[["unlink"]],r0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var cde=$e(A2()),G8=$e(Zo());Za();var Kf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,G8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=p2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let le of o.workspaces)for(let pe of["dependencies","devDependencies"]){let ye=[...le.manifest.getForScope(pe).values()].map(we=>W.stringifyIdent(we)),ae=te==="*"?ye:(0,G8.default)(ye,te);for(let we of ae){let Pe=W.parseIdent(we),g=le.manifest[pe].get(Pe.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(Pe,J.range);E.push(Promise.resolve().then(async()=>[le,pe,g,await h2(Ee,{project:o,workspace:le,cache:n,target:pe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let le=J.filter(pe=>pe.descriptor!==null);if(le.length===0){let[pe]=te;if(typeof pe>"u")throw new Error("Assertion failed: Expected an error to have been set");let Ae=this.cli.error(pe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + +${Ae}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${Ae}`)}else le.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[];for(let[L,U,,{suggestions:J}]of v){let te,le=J.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,cde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=L.manifest[U].get(te.identHash);if(typeof ye>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(ye.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),T.push([L,U,ye,te]);else{let ae=r.makeResolver(),we={project:o,resolver:ae},Pe=r.normalizeDependency(ye),g=ae.bindDescriptor(Pe,L.anchoredLocator,we);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,T),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Kf.paths=[["up"]],Kf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Kf.schema=[lI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?lgt(o,n,{configuration:r,peers:this.peers}):agt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};n0.paths=[["why"]],n0.usage=nt.Usage({description:"display the reason why a package is needed",details:` + This command prints the exact reasons why a package appears in the dependency tree. + + If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function agt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let b=W.stringifyLocator(v);p[b]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function lgt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let b=!1;v.identHash===e&&(b=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let T=t.storedResolutions.get(C.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(T);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(b=!0)}return b&&u.add(v.locatorHash),b};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,b,C)=>{if(!u.has(v.locatorHash))return;let T=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:T,children:L},J=W.stringifyLocator(v);if(b[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let pe=t.storedPackages.get(le);if(!pe)throw new Error("Assertion failed: The package should have been registered");I(pe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var eH={};Kt(eH,{GitFetcher:()=>C2,GitResolver:()=>w2,default:()=>bgt,gitUtils:()=>ra});Ye();Pt();var ra={};Kt(ra,{TreeishProtocols:()=>E2,clone:()=>$8,fetchBase:()=>Qde,fetchChangedFiles:()=>Fde,fetchChangedWorkspaces:()=>Sgt,fetchRoot:()=>kde,isGitUrl:()=>EC,lsRemote:()=>bde,normalizeLocator:()=>Pgt,normalizeRepoUrl:()=>mC,resolveUrl:()=>Z8,splitRepoUrl:()=>i0,validateRepoUrl:()=>X8});Ye();Pt();qt();var Pde=$e(Bde()),Sde=$e(EU()),yC=$e(Be("querystring")),J8=$e(zn());function K8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function vde(t){try{return new URL(t)}catch{return}}function vgt(t){let e=K8(t,"@","#"),r=K8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),K8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Dde(t){return vde(t)||vde(vgt(t))}function mC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Dde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function xde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Dgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],E2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(E2||{});function EC(t){return t?Dgt.some(e=>!!t.match(e)):!1}function i0(t){t=mC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=yC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(E2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(E2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function Pgt(t){return W.makeLocator(t,mC(t.reference))}function X8(t,{configuration:e}){let r=mC(t,{git:!0});if(!rn.getNetworkSettings(`https://${(0,Pde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function bde(t,e){let r=X8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:xde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function Z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=i0(t),u=await bde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return yC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return yC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return yC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,T])=>[J8.default.parse(C.slice(10)),T]).filter(C=>C[0]!==null)),b=J8.default.maxSatisfying([...v.keys()],I);if(b===null)throw new Error(`No matching range ("${E}")`);return yC.default.stringify({...n,commit:v.get(b)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return mC(`${r}#${A(o,a)}`)}async function $8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=i0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=X8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:xde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function kde(t){let e,r=t;do{if(e=r,await oe.existsPromise(K.join(e,".git")))return e;r=K.dirname(e)}while(r!==e);return null}async function Qde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function Fde(t,{base:e,project:r}){let o=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!K.relative(r.cwd,h).match(o)):p}async function Sgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[K.resolve(e.cwd,dr.lockfile),K.resolve(e.cwd,e.configuration.get("cacheFolder")),K.resolve(e.cwd,e.configuration.get("installStatePath")),K.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await kde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await Qde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Fde(o,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?je.mapAndFilter.skip:r.some(p=>u.startsWith(p))?je.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Sde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var C2=class{supports(e,r){return EC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await $8(e.reference,r.project.configuration),a=i0(e.reference),n=K.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await je.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var w2=class{supportsDescriptor(e,r){return EC(e.range)}supportsLocator(e,r){return EC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await Z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=i0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=i0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var xgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[C2],resolvers:[w2]};var bgt=xgt;qt();var s0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let b of Mt.hardDependencies)for(let[C,T]of h.getForScope(b)){let L=o.tryWorkspaceByDescriptor(T);L===null?o.workspacesByIdent.has(C)&&v.add(T):I.add(L)}E={workspaceDependencies:Array.from(I).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(b=>W.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};s0.paths=[["workspaces","list"]],s0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var o0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${p.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};o0.paths=[["workspace"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + This command will run a given sub-command on a single workspace. + `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var kgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Tde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Qh,Fh,Th,Rh,t0,Vh,Uh,s0,Wd,Vd,dC,Kd,bh,kh,Nh,Lh,Mh,Oh,_h,Hh,jh,qh,r0,Gh,Yh,Jh,Kh,zh,Wh,Xh,Zh,$h,zd,e0,Kf,n0,o0]},Qgt=kgt;var oH={};Kt(oH,{default:()=>Tgt});Ye();var kt={optional:!0},rH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@*",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}]];var nH;function Rde(){return typeof nH>"u"&&(nH=Be("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),nH}var iH;function Nde(){return typeof iH>"u"&&(iH=Be("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),iH}var sH;function Lde(){return typeof sH>"u"&&(sH=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),sH}var Mde=new Map([[W.makeIdent(null,"fsevents").identHash,Rde],[W.makeIdent(null,"resolve").identHash,Nde],[W.makeIdent(null,"typescript").identHash,Lde]]),Fgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of rH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Mde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Mde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Tgt=Fgt;var BH={};Kt(BH,{ConstraintsCheckCommand:()=>p0,ConstraintsQueryCommand:()=>A0,ConstraintsSourceCommand:()=>f0,default:()=>odt});Ye();Ye();B2();var wC=class{constructor(e){this.project=e}createEnvironment(){let e=new CC(["cwd","ident"]),r=new CC(["workspace","type","ident"]),o=new CC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(T,L,{caller:U=Ji.getCaller()}={})=>{let J=I2(T),te=je.getMapWithDefault(a.manifestUpdates,A.cwd),le=je.getMapWithDefault(te,J),pe=je.getSetWithDefault(le,L);U!==null&&pe.add(U)},v=T=>I(T,void 0,{caller:Ji.getCaller()}),b=T=>{je.getArrayWithDefault(a.reportedErrors,A.cwd).push(T)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:b});u.set(A,C);for(let T of Mt.allDependencies)for(let L of A.manifest[T].values()){let U=W.stringifyIdent(L),J=()=>{I([T,U],void 0,{caller:Ji.getCaller()})},te=pe=>{I([T,U],pe,{caller:Ji.getCaller()})},le=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let pe=A.anchoredPackage.dependencies.get(L.identHash);if(pe){if(typeof pe>"u")throw new Error("Assertion failed: The dependency should have been registered");let Ae=this.project.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: The resolution should have been registered");let ye=n.get(Ae);if(typeof ye>"u")throw new Error("Assertion failed: The package should have been registered");le=ye}}r.insert({workspace:C,ident:U,range:L.range,type:T,resolution:le,update:te,delete:J,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var A0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((b,[C])=>Math.max(b,C.length),0);for(let b=0;b(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};f0.paths=[["constraints","source"]],f0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();B2();var p0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new wC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),S2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=mk(o,E,{fix:this.fix}),b=[];for(let[C,T]of I){let L=C.manifest.indent;C.manifest=new Mt,C.manifest.indent=L,C.manifest.load(T),b.push(C.persistManifest())}if(await Promise.all(b),!(I.size>0&&h>1)){u=Gde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let T of C)T.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=je.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};p0.paths=[["constraints"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. + + If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. + + For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});B2();var sdt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[A0,f0,p0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new wC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),S2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=mk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},odt=sdt;var vH={};Kt(vH,{CreateCommand:()=>em,DlxCommand:()=>h0,default:()=>ldt});Ye();qt();var em=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};em.paths=[["create"]];Ye();Ye();Pt();qt();var h0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ve.telemetry=null,await oe.mktempPromise(async r=>{let o=K.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(K.join(o,"package.json"),`{} +`),await oe.writeFilePromise(K.join(o,"yarn.lock"),"");let a=K.join(o,".yarnrc.yml"),n=await Ve.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ve.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?K.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ve.updateConfiguration(o,L=>{let U=je.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,le=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?le:{path:le,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ve.find(o,this.context.plugins),{project:b,workspace:C}=await St.find(v,o);if(C===null)throw new rr(b.cwd,o);await b.restoreInstallState();let T=await un.getWorkspaceAccessibleBinaries(C);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};h0.paths=[["dlx"]],h0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var adt={commands:[em,h0]},ldt=adt;var SH={};Kt(SH,{ExecFetcher:()=>k2,ExecResolver:()=>Q2,default:()=>Adt,execUtils:()=>wk});Ye();Ye();Pt();var fA="exec:";var wk={};Kt(wk,{loadGeneratorFile:()=>b2,makeLocator:()=>PH,makeSpec:()=>dme,parseSpec:()=>DH});Ye();Pt();function DH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function dme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,dme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function b2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var k2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await b2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=K.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(K.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(K.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=K.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=K.join(p,"buildfile.log"),E=K.join(e,"generator"),I=K.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + // Expose 'Module' as a global variable + Object.defineProperty(global, 'Module', { + get: () => require('module'), + configurable: true, + enumerable: false, + }); + + // Expose non-hidden built-in modules as global variables + for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { + Object.defineProperty(global, name, { + get: () => require(name), + configurable: true, + enumerable: false, + }); + } + + // Expose the 'execEnv' global variable + Object.defineProperty(global, 'execEnv', { + value: { + ...${JSON.stringify(v)}, + }, + enumerable: true, + }); + `);let b=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(C," ").trim(),u.NODE_OPTIONS=b;let{stdout:T,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) +`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:T,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var cdt=2,Q2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=DH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await b2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${cdt}`,u).slice(0,6);return[PH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var udt={fetchers:[k2],resolvers:[Q2]},Adt=udt;var bH={};Kt(bH,{FileFetcher:()=>N2,FileResolver:()=>L2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>O2,default:()=>hdt,fileUtils:()=>tm});Ye();Pt();var DC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,F2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var tm={};Kt(tm,{fetchArchiveFromLocator:()=>R2,makeArchiveFromLocator:()=>Ik,makeBufferFromLocator:()=>xH,makeLocator:()=>PC,makeSpec:()=>mme,parseSpec:()=>T2});Ye();Pt();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function mme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,mme({parentLocator:e,path:r,hash:o,protocol:a}))}async function R2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=K.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=K.join(n.prefixPath,o);return await je.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ik(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=K.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=K.join(A.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function xH(t,{protocol:e,fetchOptions:r}){return(await Ik(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var N2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ik(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var fdt=2,L2=class{supportsDescriptor(e,r){return e.range.match(DC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await xH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${fdt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await R2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var O2=class{supportsDescriptor(e,r){return F2.test(e.range)?!!(e.range.startsWith(Ui)||DC.test(e.range)):!1}supportsLocator(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await R2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var pdt={fetchers:[M2,N2],resolvers:[O2,L2]},hdt=pdt;var FH={};Kt(FH,{GithubFetcher:()=>U2,default:()=>ddt,githubUtils:()=>Bk});Ye();Pt();var Bk={};Kt(Bk,{invalidGithubUrlMessage:()=>Cme,isGithubUrl:()=>kH,parseGithubUrl:()=>QH});var yme=$e(Be("querystring")),Eme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function kH(t){return t?Eme.some(e=>!!t.match(e)):!1}function QH(t){let e;for(let A of Eme)if(e=t.match(A),e)break;if(!e)throw new Error(Cme(t));let[,r,o,a,n="master"]=e,{commit:u}=yme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function Cme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var U2=class{supports(e,r){return!!kH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=K.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=QH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var gdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new U2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},ddt=gdt;var TH={};Kt(TH,{TarballHttpFetcher:()=>H2,TarballHttpResolver:()=>j2,default:()=>ydt});Ye();function _2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var H2=class{supports(e,r){return _2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return _2(e.range)}supportsLocator(e,r){return _2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var mdt={fetchers:[H2],resolvers:[j2]},ydt=mdt;var RH={};Kt(RH,{InitCommand:()=>g0,default:()=>Cdt});Ye();Ye();Pt();qt();var g0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=K.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Mt.tryFind(this.context.cwd),n=a??new Mt,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??K.basename(this.context.cwd)),n.packageManager=tn&&je.isTaggedYarnVersion(tn)?`yarn@${tn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(K.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=K.join(this.context.cwd,Mt.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=K.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=K.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(pe=>`${pe} +`).join(""),C=K.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,b),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(pe=>`${pe} +`).join(""),U=K.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};je.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[pe,Ae]of Object.entries(J)){te+=` +[${pe}] +`;for(let[ye,ae]of Object.entries(Ae)){let we=ye.replace(/[A-Z]/g,Pe=>`_${Pe.toLowerCase()}`);te+=`${we} = ${ae} +`}}let le=K.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(K.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};g0.paths=[["init"]],g0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var Edt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[g0]},Cdt=Edt;var Lj={};Kt(Lj,{SearchCommand:()=>C0,UpgradeInteractiveCommand:()=>I0,default:()=>lIt});Ye();var Ime=$e(Be("os"));function SC({stdout:t}){if(Ime.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Rye=$e(ZH()),$H={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},myt=(0,Rye.default)($H.appId,$H.apiKey).initIndex($H.indexName),e6=async(t,e=0)=>await myt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var HB=["regular","dev","peer"],C0=class extends ut{async execute(){SC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(gQ(),hQ)),{useKeypress:o}=await Promise.resolve().then(()=>(OB(),Jwe)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{default:u}=await Promise.resolve().then(()=>$e(sIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:ae,active:we})=>{let[Pe,g]=a(ae.name,null);o({active:we},(ce,ne)=>{if(ne.name!=="space")return;if(!Pe){g(HB[0]);return}let ee=HB.indexOf(Pe)+1;ee===HB.length?g(null):g(HB[ee])},[Pe,g]);let Ee=W.parseIdent(ae.name),De=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},ae.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},ae.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,ae.humanDownloadsLast30Days)))},U=({name:ae,active:we})=>{let[Pe]=a(ae,null),g=W.parseIdent(ae);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),HB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Pe===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:ae})=>{let we=a();ae(we);let Pe=Array.from(we.keys()).filter(H=>we.get(H)!==null),[g,Ee]=I(""),[De,ce]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},ke=async()=>{ce(0);let H=await e6(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await e6(g,De+1);H.query===g&&H.page-1===De&&(ce(H.page),ee([...ne,...H.hits]))};return E(()=>{g?ke():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Pe.length?Pe.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let pe=Array.from(le.keys()).filter(ae=>le.get(ae)==="regular"),Ae=Array.from(le.keys()).filter(ae=>le.get(ae)==="dev"),ye=Array.from(le.keys()).filter(ae=>le.get(ae)==="peer");return pe.length&&await this.cli.run(["add",...pe]),Ae.length&&await this.cli.run(["add","--dev",...Ae]),ye&&await this.cli.run(["add","--peer",...ye]),0}};C0.paths=[["search"]],C0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. + `,examples:[["Open the search window","yarn search"]]});Ye();qt();w_();var fIe=$e(zn()),AIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,pIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(pIe(t.slice(e),e)):[],I0=class extends ut{async execute(){SC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(uIe(),cIe)),{Pad:r}=await Promise.resolve().then(()=>(Nj(),lIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd),T=await Lr.find(v);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,De)=>{let ce=fpe(Ee,De),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,De)=>{if(Ee===De)return De;let ce=W.parseRange(Ee),ne=W.parseRange(De),ee=ce.selector.match(AIe),Ie=ne.selector.match(AIe);if(!ee||!Ie)return U(Ee,De);let ke=["gray","red","yellow","green","magenta"],ht=null,H="";for(let lt=1;lt{let ne=await zc.fetchDescriptorFrom(Ee,ce,{project:b,cache:T,preserveModifier:De,workspace:C});return ne!==null?ne.range:Ee.range},le=async Ee=>{let De=fIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,De).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:J(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},pe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),Ae=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),ye=({active:Ee,descriptor:De,suggestions:ce})=>{let[ne,ee]=a(De.descriptorHash,null),Ie=W.stringifyIdent(De),ke=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,De)),p.createElement(r,{active:Ee,length:ke})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},ae=({dependencies:Ee})=>{let[De,ce]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let ke=await le(Ie);return ke.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Ie,suggestions:ke}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),ke=Ee.slice(0,Ie),ht=Ee.slice(Ie),H=pIe(ht,L),lt=ke.map(ee).reduce(async(Re,Qe)=>{await Re;let be=await Qe;be!==null&&(!ne.current||ce(_e=>{let Te=_e.findIndex(He=>He===null),Je=[..._e];return Je[Te]=be,Je}))},Promise.resolve());H.reduce((Re,Qe)=>Promise.all(Qe.map(be=>Promise.resolve().then(()=>ee(be)))).then(async be=>{be=be.filter(_e=>_e!==null),await Re,ne.current&&ce(_e=>{let Te=_e.findIndex(Je=>Je===null);return _e.slice(0,Te).concat(be).concat(_e.slice(Te+be.length))})}),lt).then(()=>{ne.current&&ce(Re=>Re.filter(Qe=>Qe!==null))})},[]),De.length?p.createElement(o,{radius:L>>1,children:De.map((Ie,ke)=>Ie!==null?p.createElement(ye,{key:ke,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:ke},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Pe=await n(({useSubmit:Ee})=>{Ee(a());let De=new Map;for(let ne of b.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())b.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||De.set(Ie.descriptorHash,Ie));let ce=je.sortMap(De.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(pe,null),p.createElement(Ae,null),p.createElement(ae,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Pe>"u")return 1;let g=!1;for(let Ee of b.workspaces)for(let De of["dependencies","devDependencies"]){let ce=Ee.manifest[De];for(let ne of ce.values()){let ee=Pe.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};I0.paths=[["upgrade-interactive"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var aIt={commands:[C0,I0]},lIt=aIt;var Mj={};Kt(Mj,{LinkFetcher:()=>qB,LinkResolver:()=>GB,PortalFetcher:()=>YB,PortalResolver:()=>WB,default:()=>uIt});Ye();Pt();var ep="portal:",tp="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var GB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var YB=class{supports(e,r){return!!e.reference.startsWith(ep)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith(ep)}supportsLocator(e,r){return!!e.reference.startsWith(ep)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(ep.length);return[W.makeLocator(e,`${ep}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cIt={fetchers:[qB,YB],resolvers:[GB,WB]},uIt=cIt;var Cq={};Kt(Cq,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>dq,PnpLooseLinker:()=>cv,default:()=>P1t});Pt();Ye();Pt();Pt();var Uj=(t,e)=>`${t}@${e}`,hIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Uj(t,o)};var mIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=mIt(t,n),p=!1,h=0;do p=_j(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(_j(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${E}, next tree: +${VB(A)}`);let v=yIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),yIt(A)},AIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},fIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},gIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:C,hoistedTo:T}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:new Map(C),hoistedTo:new Map(T)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},pIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Oj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},_j=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=EIt(u),p=pIt(u,A),h=t==u?new Map:a.fastLookupPossible?AIt(e):fIt(e),E,I=!1,v=!1,b=new Map(Array.from(p.entries()).map(([T,L])=>[T,L[0]])),C=new Map;do{let T=dIt(t,e,r,h,b,p,o,C,a);T.isGraphChanged&&(v=!0),T.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(b.delete(L),U.shift(),b.set(L,U[0]),E=!0)}while(E);for(let T of u.dependencies.values())if(!u.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let L=_j(t,[...e,T],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(T.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},hIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},gIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let b=r[r.length-1],T=!(o.ident===b.ident);if(p&&!T&&(I="- self-reference"),T&&(T=o.dependencyKind!==1,p&&!T&&(I="- workspace")),T&&o.dependencyKind===2&&(T=!hIt(o),p&&!T&&(I="- external soft link with unhoisted dependencies")),T&&(T=b.dependencyKind!==1||b.hoistedFrom.has(o.name)||e.size===1,p&&!T&&(I=b.reasons.get(o.name))),T&&(T=!t.peerNames.has(o.name),p&&!T&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),T){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let le=r[J].dependencies.get(o.name);if(le&&le.ident!==o.ident){L=!1;let pe=A.get(b);pe||(pe=new Set,A.set(b,pe)),pe.add(o.name),p&&(I=`- filled by ${no(le.locator)} at ${r.slice(0,J).map(Ae=>no(Ae.locator)).join("\u2192")}`);break}}T=L}if(T&&(T=n.get(o.name)===o.ident,p&&!T&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),T){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let pe=te.dependencies.get(le);pe&&t.dependencies.get(le)!==pe&&(J===r.length-1?v.add(pe):(v=null,L=!1,p&&(I=`- peer dependency ${no(pe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!L)break}T=L}if(T&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){T=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:T?0:1,reason:I}},CQ=t=>`${t.name}@${t.locator}`,dIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,b=(U,J,te,le,pe)=>{if(E.has(le))return;let Ae=[...J,CQ(le)],ye=[...te,CQ(le)],ae=new Map,we=new Map;for(let ce of Oj(le)){let ne=gIt(h,r,[h,...U,le],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(we.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=ae.get(ee.name)||new Set;Ie.add(ce.name),ae.set(ee.name,Ie)}}let Pe=new Set,g=(ce,ne,ee)=>{if(!Pe.has(ce)){Pe.add(ce),we.set(ce,{isHoistable:1,reason:ee});for(let Ie of ae.get(ce.name)||[])g(le.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(le.locator)} was not hoisted`:"")}};for(let[ce,ne]of we)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of we.keys())if(!Pe.has(ce)){v=!0;let ne=u.get(le);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,le.dependencies.delete(ce.name),le.hoistedDependencies.set(ce.name,ce),le.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([le.locator]).map(ht=>no(ht)).join("\u2192"),ke=h.hoistedFrom.get(ce.name);ke||(ke=[],h.hoistedFrom.set(ce.name,ke)),ke.push(Ie),le.hoistedTo.set(ce.name,Array.from(e).map(ht=>no(ht.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),pe.add(ce));else for(let Ie of ce.references)ee.references.add(Ie)}if(le.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=yIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,le].map(ne=>no(ne.locator)).join("\u2192")}: +${VB(t)}`)}let De=Oj(le);for(let ce of De)if(Pe.has(ce)){let ne=we.get(ce);if((a.get(ce.name)===ce.ident||!le.reasons.has(ce.name))&&ne.isHoistable!==0&&le.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&ye.indexOf(CQ(ce))<0){E.add(le);let Ie=gIe(le,ce);b([...U,le],Ae,ye,Ie,T),E.delete(le)}}},C,T=new Set(Oj(h)),L=Array.from(e).map(U=>CQ(U));do{C=T,T=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=gIe(h,U);b([],Array.from(r),L,J,T)}}while(T.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},yIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${T}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${T} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},mIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Uj(r,a),ident:hIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:b,identName:C,reference:T,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:b,references:new Set([T]),locator:Uj(C,T),ident:hIe(C,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let b=new Set,C=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let L of T.dependencies.values())T.peerNames.has(L.name)||C(L)}};C(I)}else for(let b of h.dependencies)p(b,I)};for(let h of t.dependencies)p(h,u);return u},Hj=t=>t.substring(0,t.indexOf("@",1)),yIt=t=>{let e={name:t.name,identName:Hj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Hj(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},EIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},dIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>dIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +`,p+=r(E,n,`${u}${hdIe?` +Tree is too large, part of the tree has been dunped +`:"")};var KB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(KB||{}),EIe="node_modules",B0="$wsroot$";var JB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=wIt(t,e),u=null;if(a.length===0){let A=mIe(r,{hoistingLimits:o});u=BIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,qj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(K.delimiter).length,u=a.split(K.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},CIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},jj=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return K.contains(o,a)===null},CIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,b)=>{let C=gA(v);if(p.has(C))return;p.add(C);let T=t.getPackageInformation(v);if(T){let L=b?gA(b):"";if(gA(v)!==L&&T.linkType==="SOFT"&&!jj(T,v,t,o)){let U=wIe(T,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of T.packageDependencies)J!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(K.sep);for(let v of A.values()){let b=t.getPackageInformation(v),T=ue.toPortablePath(b.packageLocation.slice(0,-1)).split(K.sep).slice(E.length),L=n;for(let U of T){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,b)=>{if(v.workspaceLocator){let C=gA(b),T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||b)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},wIt=(t,e)=>{let r=[],o=!1,a=new Map,n=CIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(b,C)=>`${gA(C)}:${b}`,v=(b,C,T,L,U,J,te,le)=>{let pe=I(b,T),Ae=E.get(pe),ye=!!Ae;!ye&&T.name===A.name&&T.reference===A.reference&&(Ae=h,E.set(pe,h));let ae=jj(C,T,t,p);if(!Ae){let ce=0;ae?ce=2:C.linkType==="SOFT"&&T.name.endsWith(B0)&&(ce=1),Ae={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:ce===1?new Set:C.packagePeers,dependencyKind:ce},E.set(pe,Ae)}let we;if(ae?we=2:U.linkType==="SOFT"?we=1:we=0,Ae.hoistPriority=Math.max(Ae.hoistPriority||0,we),le&&!ae){let ce=gA({name:L.identName,reference:L.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(Ae.name)}let Pe=new Map(C.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Pe.has(ee)||(Pe.set(ee,J.get(ee)||null),Ae.peerNames.add(ee))}}let g=gA({name:T.name.replace(B0,""),reference:T.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)Pe.set(`${ce.name}${B0}`,ce.reference);(C!==U||C.linkType!=="SOFT"||!ae&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(Ae);let De=T!==A&&C.linkType==="SOFT"&&!T.name.endsWith(B0)&&!ae;if(!ye&&!De){let ce=new Map;for(let[ne,ee]of Pe)if(ee!==null){let Ie=t.getLocator(ne,ee),ke=t.getLocator(ne.replace(B0,""),ee),ht=t.getPackageInformation(ke);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=jj(ht,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[_e,Te]of ht.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${_e}@${Te}`);if(gA(Je)!==gA(Ie)){let He=Pe.get(_e);if(He){let x=W.parseLocator(Array.isArray(He)?`${He[0]}@${He[1]}`:`${_e}@${He}`);CIe(x,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,x)}`})}else{let x=ce.get(_e);if(x){let w=x.target,S=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${_e}@${w}`);CIe(S,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,S)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(x.portal.name))}`})}else ce.set(_e,{target:Je.reference,portal:Ie})}}}}let lt=e.hoistingLimitsByCwd?.get(te),Re=H?te:K.relative(p,ue.toPortablePath(ht.packageLocation))||Bt.dot,Qe=e.hoistingLimitsByCwd?.get(Re);v(ne,ht,Ie,Ae,C,Pe,Re,lt==="dependencies"||Qe==="dependencies"||Qe==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function wIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function IIt(t,e,r){let o=e.getLocator(t.name.replace(B0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:wIe(a,t,e)}}var BIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:b,target:C}=IIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:b,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let b=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let T=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(B0,"")&&T===b)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),le=te?[te,J]:[J],pe=K.join(I,EIe),Ae=K.join(pe,...le),ye=`${v}/${U.name}`,ae=a(U,v,L.slice(1)),we=!1;if(ae.linkType==="SOFT"&&r.project){let Pe=r.project.workspacesByCwd.get(ae.target.slice(0,-1));we=!!(Pe&&!Pe.manifest.name)}if(!C.name.endsWith(B0)&&!we){let Pe=o.get(Ae);if(Pe){if(Pe.dirList)throw new Error(`Assertion failed: ${Ae} cannot merge dir node with leaf node`);{let De=W.parseLocator(Pe.locator),ce=W.parseLocator(ae.locator);if(Pe.linkType!==ae.linkType)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different link types ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/${W.stringifyLocator(ce)}`);if(De.identHash!==ce.identHash)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different idents ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/s${W.stringifyLocator(ce)}`);ae.aliases=[...ae.aliases,...Pe.aliases,W.parseLocator(Pe.locator).reference]}}o.set(Ae,ae);let g=Ae.split("/"),Ee=g.indexOf(EIe);for(let De=g.length-1;Ee>=0&&De>Ee;De--){let ce=ue.toPortablePath(g.slice(0,De).join(K.sep)),ne=g[De],ee=o.get(ce);if(!ee)o.set(ce,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,ae.linkType==="SOFT"?ae.target:Ae,ye)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();nA();Nl();var lq={};Kt(lq,{PnpInstaller:()=>dm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>$It,getPnpPath:()=>S0,jsInstallUtils:()=>mA,pnpUtils:()=>av,quotePathIfNeeded:()=>s1e});Pt();var i1e=Be("url");Ye();Ye();Pt();Pt();var IIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function vIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=wQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function SIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=wQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function wQ(t,e,r,o){let{next:a}=IIe[r],n=a[t]||a["*"];return BIe(e,n,o)}function BIe(t,e,r){let{collapsed:o}=IIe[e];return Array.isArray(t)?o?vIt(t,e,r):DIt(t,e,r):typeof t=="object"&&t!==null?o?PIt(t,e,r):SIt(t,e,r):JSON.stringify(t)}function vIe(t){return BIe(t,"TOP_LEVEL","")}function zB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function xIt(t){let e=new Map,r=zB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function bIt(t){return zB(t.fallbackPool||[],([e])=>e)}function kIt(t){let e=[];for(let[r,o]of zB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of zB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,T]of zB(A.entries(),([L])=>L))I.push([C,T]);let v=p&&p.size>0?Array.from(p):void 0,b=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:b}])}}return e}function XB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:xIt(t),fallbackPool:bIt(t),packageRegistryData:kIt(t)}}var SIe=$e(PIe());function xIe(t,e){return[t?`${t} +`:"",`/* eslint-disable */ +`,`"use strict"; +`,` +`,e,` +`,(0,SIe.default)()].join("")}function QIt(t){return JSON.stringify(t,null,2)}function FIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function TIt(t){return[`const RAW_RUNTIME_STATE = +`,`${FIt(vIe(t))}; + +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +`,`} +`].join("")}function RIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` const fs = require('fs'); +`,` const path = require('path'); +`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); +`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); +`,`} +`].join("")}function bIe(t){let e=XB(t),r=TIt(e);return xIe(t.shebang,r)}function kIe(t){let e=XB(t),r=RIt(),o=xIe(t.shebang,r);return{dataFile:QIt(e),loaderFile:o}}Pt();function Yj(t,{basePath:e}){let r=ue.toPortablePath(e),o=K.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([b,C])=>{if(I===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=C.discardFromLookup??!1,L={name:I,reference:b},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:T});let J=null;return[b,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:T,get packageLocation(){return J||(J=K.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var rp=Be("module"),gm=Be("url"),tq=Be("util");var Oo=Be("url");var RIe=$e(Be("assert"));var Wj=Array.isArray,ZB=JSON.stringify,$B=Object.getOwnPropertyNames,pm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Vj=(t,e)=>RegExp.prototype.exec.call(t,e),Kj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),v0=(t,...e)=>String.prototype.endsWith.apply(t,e),Jj=(t,...e)=>String.prototype.includes.apply(t,e),zj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ev=(t,...e)=>String.prototype.indexOf.apply(t,e),QIe=(t,...e)=>String.prototype.replace.apply(t,e),D0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),FIe=Map,TIe=JSON.parse;function tv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var NIe=tv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Xj=tv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),LIe=tv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,RIe.default)(o===!1),`Invalid "exports" main target ${ZB(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ZB(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),rv=tv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),MIe=tv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var BQ=Be("url");function OIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}nv(r,t,o,u,a)}Vj(_Ie,D0(t,2))!==null&&nv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||nv(r,t,o,u,a),e==="")return p;if(Vj(_Ie,e)!==null){let I=n?QIe(r,"*",()=>e):r+e;MIt(I,o,u,a)}return n?new URL(Kj(HIe,p.href,()=>e)):new URL(e,p)}function UIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return OIt(e,r,o,t,a,n,u,A);if(Wj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function _It(t,e,r){if(typeof t=="string"||Wj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=$B(t),a=!1,n=0;for(let u=0;u=h.length&&v0(e,I)&&qIe(n,h)===1&&zj(h,"*")===E&&(n=h,u=D0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Zj(e,t,o),h}Zj(e,t,o)}function YIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||v0(t,"/")){let u="is not a valid internal imports specifier name";throw new Xj(t,u,(0,Oo.fileURLToPath)(e))}let a,n=UIe(e,o);if(n.exists){a=(0,Oo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(pm(u,t)&&!Jj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=$B(u);for(let E=0;E=I.length&&v0(t,b)&&qIe(A,I)===1&&zj(I,"*")===v&&(A=I,p=D0(t,v,t.length-b.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}LIt(t,a,e)}Pt();var jIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=jIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var JIe=$e(VIe());function zIe(t){return qIt(),eq[t]}var eq;function qIt(){eq||(eq={"--conditions":[],...KIe(GIt()),...KIe(process.execArgv)})}function KIe(t){return(0,JIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function GIt(){let t=[],e=YIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function YIt(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),XIe=hm>19||hm===19&&sv>=2||hm===18&&sv>=13,Bzt=hm===20&&sv<6||hm===19&&sv>=3,vzt=hm>19||hm===19&&sv>=6;function ZIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),XIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function rq(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let Qe=t.packageRegistry.get(Re);if(Qe)for(let be of Qe.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:be})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:b}=t;function C(Re,Qe){return{fn:Re,args:Qe,error:null,result:null}}function T(Re){let Qe=process.stderr?.hasColors?.()??process.stdout.isTTY,be=(Je,He)=>`\x1B[${Je}m${He}\x1B[0m`,_e=Re.error;console.error(_e?be("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${be("37;1","In \u2190")} ${(0,tq.inspect)(Je,{colors:Qe,compact:!0})}`);Re.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,tq.inspect)(Re.result,{colors:Qe,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${be("38;5;244",Je)}`)}console.error()}function L(Re,Qe){if(e.allowDebug===!1)return Qe;if(Number.isFinite(o)){if(o>=2)return(...be)=>{let _e=C(Re,be);try{return _e.result=Qe(...be)}catch(Te){throw _e.error=Te}finally{T(_e)}};if(o>=1)return(...be)=>{try{return Qe(...be)}catch(_e){let Te=C(Re,be);throw Te.error=_e,T(Te),_e}}}return Qe}function U(Re){let Qe=g(Re);if(!Qe)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Qe}function J(Re){if(Re.name===null)return!0;for(let Qe of t.dependencyTreeRoots)if(Qe.name===Re.name&&Qe.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function le(Re,Qe=te,be){let _e=ce(K.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(_e===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(_e),Je=K.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let He=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(He.exports==null)return null;let x=K.contains(Te,Re);if(x===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let w=GIe({packageJSONUrl:(0,gm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:x,exports:He.exports,base:be?(0,gm.pathToFileURL)(ue.fromPortablePath(be)):null,conditions:Qe});return ue.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:_e,pkgJson:He,subpath:au(x),conditions:Qe},w.code)}}function pe(Re,Qe,{extensions:be}){let _e;try{Qe.push(Re),_e=e.fakeFs.statSync(Re)}catch{}if(_e&&!_e.isDirectory())return e.fakeFs.realpathSync(Re);if(_e&&_e.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(K.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=K.resolve(Re,Te.main)),Je&&Je!==Re){let He=pe(Je,Qe,{extensions:be});if(He!==null)return He}}for(let Te=0,Je=be.length;Te{let x=JSON.stringify(He.name);if(_e.has(x))return;_e.add(x);let w=Ee(He);for(let S of w)if(U(S).packagePeers.has(Re))Te(S);else{let F=be.get(S.name);typeof F>"u"&&be.set(S.name,F=new Set),F.add(S.reference)}};Te(Qe);let Je=[];for(let He of[...be.keys()].sort())for(let x of[...be.get(He)].sort())Je.push({name:He,reference:x});return Je}function ce(Re,{resolveIgnored:Qe=!1,includeDiscardFromLookup:be=!1}={}){if(ae(Re)&&!Qe)return null;let _e=K.relative(t.basePath,Re);_e.match(n)||(_e=`./${_e}`),_e.endsWith("/")||(_e=`${_e}/`);do{let Te=b.get(_e);if(typeof Te>"u"||Te.discardFromLookup&&!be){_e=_e.substring(0,_e.lastIndexOf("/",_e.length-2)+1);continue}return Te.locator}while(_e!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(Qe){if(Qe.code==="ENOENT")return;throw Qe}}function ee(Re,Qe,{considerBuiltins:be=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(be&&(0,rp.isBuiltin)(Re))return null;let _e=au(Re),Te=Qe&&au(Qe);if(Qe&&ae(Qe)&&(!K.isAbsolute(Re)||ce(Re)===null)){let x=ye(Re,Qe);if(x===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${_e}" +Required by: ${Te} +`,{request:_e,issuer:Te});return ue.toPortablePath(x)}let Je,He=Re.match(a);if(He){if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let[,x,w]=He,S=ce(Qe);if(!S){let Ne=ye(Re,Qe);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${_e}" +Required by: ${Te} +`,{request:_e,issuer:Te});return ue.toPortablePath(Ne)}let F=U(S).packageDependencies.get(x),z=null;if(F==null&&S.name!==null){let Ne=t.fallbackExclusionList.get(S.name);if(!Ne||!Ne.has(S.reference)){for(let dt=0,jt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) + +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne})}else F===void 0&&(!be&&(0,rp.isBuiltin)(Re)?J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}):J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${Z.name}@${Z.reference}${Z.name!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +`,{request:_e,issuer:Te,dependencyLocator:Object.assign({},Z)});let Se=ie.packageLocation;w?Je=K.join(Se,w):Je=Se}else if(K.isAbsolute(Re))Je=K.normalize(Re);else{if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let x=K.resolve(Qe);Qe.match(u)?Je=K.normalize(K.join(x,Re)):Je=K.normalize(K.join(K.dirname(x),Re))}return K.normalize(Je)}function Ie(Re,Qe,be=te,_e){if(n.test(Re))return Qe;let Te=le(Qe,be,_e);return Te?K.normalize(Te):Qe}function ke(Re,{extensions:Qe=Object.keys(rp.Module._extensions)}={}){let be=[],_e=pe(Re,be,{extensions:Qe});if(_e)return K.normalize(_e);{ZIe(be.map(He=>ue.fromPortablePath(He)));let Te=au(Re),Je=ce(Re);if(Je){let{packageLocation:He}=U(Je),x=!0;try{e.fakeFs.accessSync(He)}catch(w){if(w?.code==="ENOENT")x=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(He)} +`,{unqualifiedPath:Te,extensions:Qe})}}if(!x){let w=He.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(He)} +`,{unqualifiedPath:Te,extensions:Qe})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${Te} +${be.map(He=>`Not found: ${au(He)} +`).join("")}`,{unqualifiedPath:Te,extensions:Qe})}}function ht(Re,Qe,be){if(!Qe)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let _e=YIe({name:Re,base:(0,gm.pathToFileURL)(ue.fromPortablePath(Qe)),conditions:be.conditions??te,readFileSyncFn:ne});if(_e instanceof URL)return ke(ue.toPortablePath((0,gm.fileURLToPath)(_e)),{extensions:be.extensions});if(_e.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(_e,Qe,be)}function H(Re,Qe,be={}){try{if(Re.startsWith("#"))return ht(Re,Qe,be);let{considerBuiltins:_e,extensions:Te,conditions:Je}=be,He=ee(Re,Qe,{considerBuiltins:_e});if(Re==="pnpapi")return He;if(He===null)return null;let x=()=>Qe!==null?ae(Qe):!1,w=(!_e||!(0,rp.isBuiltin)(Re))&&!x()?Ie(Re,He,Je,Qe):He;return ke(w,{extensions:Te})}catch(_e){throw Object.hasOwn(_e,"pnpCode")&&Object.assign(_e.data,{request:au(Re),issuer:Qe&&au(Qe)}),_e}}function lt(Re){let Qe=K.normalize(Re),be=mi.resolveVirtual(Qe);return be!==Qe?be:null}return{VERSIONS:we,topLevel:Pe,getLocator:(Re,Qe)=>Array.isArray(Qe)?{name:Qe[0],reference:Qe[1]}:{name:Re,reference:Qe},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[Qe,be]of v)for(let _e of be.keys())Qe!==null&&_e!==null&&Re.push({name:Qe,reference:_e});return Re},getPackageInformation:Re=>{let Qe=g(Re);if(Qe===null)return null;let be=ue.fromPortablePath(Qe.packageLocation);return{...Qe,packageLocation:be}},findPackageLocator:Re=>ce(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=ee(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,Qe)=>ue.fromPortablePath(ke(ue.toPortablePath(Re),Qe))),resolveRequest:L("resolveRequest",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=H(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let Qe=lt(ue.toPortablePath(Re));return Qe!==null?ue.fromPortablePath(Qe):null})}}Pt();var $Ie=(t,e,r)=>{let o=XB(t),a=Yj(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return rq(a,{fakeFs:r,pnpapiResolution:n})};var iq=$e(t1e());qt();var mA={};Kt(mA,{checkManifestCompatibility:()=>r1e,extractBuildRequest:()=>vQ,getExtractHint:()=>sq,hasBindingGyp:()=>oq});Ye();Pt();function r1e(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function vQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:r1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var VIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function sq(t){return t.packageFs.getExtractHint({relevantExtensions:VIt})}function oq(t){let e=K.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Kt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return K.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var KIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=S0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=S0(r.project).cjs;if(!oe.existsSync(o))return null;let n=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await JIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let b=h?vQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(K.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let T=K.resolve(C.getRealPath(),r.prefixPath),L=aq(this.opts.project.cwd,T),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:aq(this.opts.project.cwd,mi.resolveVirtual(T)),locator:te})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=S0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=S0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=bIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=kIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,iq.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=K.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=K.join(a.cwd,"node_modules");if(o&&o.test(K.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(K.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:KIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(vQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:K}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=K.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=je.getMapWithDefault(this.packageRegistry,"@@disk"),o=aq(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function aq(t,e){let r=K.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function JIt(t){let e=await Mt.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Mt,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:sq(t),hasBindingGyp:oq(t)}}}Ye();Ye();qt();var n1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let C=W.parseDescriptor(b),T=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(T.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,T)})`);return L=>{let U=W.stringifyIdent(L);return!n1e.default.isMatch(U,W.stringifyIdent(T))||L.version&&!kr.satisfiesWithPrereleases(L.version,T.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(T=>T(C))&&b.push(C);return b},h=b=>{let C=new Set,T=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&T.push(U),!(J>0&&!this.recursive)))for(let le of U.dependencies.values()){let pe=o.storedResolutions.get(le.descriptorHash);if(!pe)throw new Error("Assertion failed: The resolution should have been registered");let Ae=o.storedPackages.get(pe);if(!Ae)throw new Error("Assertion failed: The package should have been registered");L(Ae,J+1)}};for(let U of b)L(U.anchoredPackage,0);return T},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=je.sortMap(E,b=>W.stringifyLocator(b));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let C of E){let T=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,T));L.unplugged=!0,b.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),b.reportJson({locator:W.stringifyLocator(C),version:T})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var S0=t=>({cjs:K.join(t.cwd,dr.pnpCjs),data:K.join(t.cwd,dr.pnpData),esmLoader:K.join(t.cwd,dr.pnpEsmLoader)}),s1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function zIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=S0(t),A=`--require ${s1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,i1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function XIt(t,e){let r=S0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var ZIt={hooks:{populateYarnPaths:XIt,setupScriptEnvironment:zIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},$It=ZIt;var p1e=$e(u1e());qt();var gq=$e(Be("crypto")),h1e=$e(Be("fs")),g1e=1,Pi="node_modules",DQ=".bin",d1e=".yarn-state.yml",d1t=1e3,dq=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(dq||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(K.sep).length-h.split(K.sep).length),A=K.join(r.project.configuration.startingCwd,Pi);return u.find(p=>K.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=PQ(K.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new pq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},pq=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=K.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await m1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await hq(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=je.validateEnum(KB,v.manifest.installConfig?.hoistingLimits??b)}catch{let T=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${T}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(KB).join(", ")}, using default: "${b}"`)}return[v.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=v.manifest.installConfig?.selfReferences??b,[v.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:v,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let b=v.anchoredLocator;return{name:W.stringifyIdent(b),reference:b.reference}}),getPackageInformation:v=>{let b=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let b=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(b!==null){let C=b.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=JB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:b}of p)this.opts.report.reportError(v,b);return}let E=qj(A);await B1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let b=W.parseLocator(v),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,b]of E.entries()){if(C1e(v))continue;let C=W.parseLocator(v),T=this.localStore.get(C.locatorHash);if(typeof T>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(T.pkg))continue;let L=mA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:b.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function m1t(t,e){let r=await Mt.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Mt,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function y1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +`,n+=`# cause your node_modules installation to become invalidated. +`,n+=` +`,n+=`__metadata: +`,n+=` version: ${g1e} +`,n+=` nmMode: ${o.value} +`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` +`,n+=`${JSON.stringify(E)}: +`,n+=` locations: +`;for(let v of I.locations){let b=K.contains(t.cwd,v);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(b)} +`}if(I.aliases.length>0){n+=` aliases: +`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} +`}if(E===A&&r.size>0){n+=` bin: +`;for(let[v,b]of r){let C=K.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: +`;for(let[T,L]of b){let U=K.relative(K.join(v,Pi),L);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=K.join(p,Pi,d1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function hq(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=K.join(r,Pi,d1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Vi(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>g1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(b=>K.join(r,b)),v=E.bin;if(v)for(let[b,C]of Object.entries(v)){let T=K.join(r,ue.toPortablePath(b)),L=je.getMapWithDefault(p,T);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([T,Pi,J].join(K.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:C,name:T}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,T),b),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:m1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var YC=async(t,e)=>{if(t.split(K.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=K.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await YC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},A1e=4,PQ=(t,{skipPrefix:e})=>{let r=K.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(K.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(K.sep),u=K.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},m1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&K.contains(e,n.target)!==null){let A=je.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=PQ(u,{skipPrefix:e}),h=je.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(K.relative(K.dirname(e),t),e)};async function y1e(t,e,r){let o=K.join(t,`${gq.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function E1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===E1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=K.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(E1e||{}),C1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=K.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),b=new Map;for(let C of v){let T=K.join(E,C.name),L,U=K.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(T,L),C.isDirectory()&&T!==Pi){let J=await A(T);for(let[te,le]of J)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=K.join(e,E),b=K.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(b,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await E1t({srcPath:v,dstPath:b,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await mq(K.resolve(K.dirname(b),I.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await y1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function w1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,b)=>{let C=!0,T=K.join(h,E),L=new Set;if(E===Pi||E.startsWith("@")){let J;try{J=oe.statSync(T)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(T))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=K.join(h,Pi,DQ),pe;try{pe=oe.statSync(le)}catch{}if(!pe)A=!0;else if(pe.mtimeMs>r){A=!0;let Ae=new Set(oe.readdirSync(le)),ye=new Map;n.set(h,ye);for(let[ae,we]of te)Ae.has(ae)&&ye.set(ae,we)}else n.set(h,te)}}else C=b.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,le={children:new Map,linkType:J,locator:te};if(v.children.set(E,le),te){let pe=je.getSetWithDefault(u,te);pe.add(T),u.set(te,pe)}for(let pe of U.children.keys())p(T,pe,U,le,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,b={children:new Map,linkType:I,locator:v};if(a.set(h,b),v){let C=je.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Pi)&&p(h,Pi,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function C1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function I1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=C1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let b=K.join(p[0],v);v!==""&&oe.existsSync(b)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=K.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[b,C]of v){let T=K.join(A,ue.toPortablePath(C));E.set(b,T)}for(let[b,C]of h.children){let T=K.join(A,b),L=u(T,T,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,b]of h.children){let C=u(K.join(A,v),p,b);for(let[T,L]of C)E.set(T,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var f1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function yq(t){return K.join(t.get("globalFolder"),"store")}async function B1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=K.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=w1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=m1e(e,{skipPrefix:o.cwd}),b=[],C=async({srcDir:we,dstDir:Pe,linkType:g,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(K.dirname(Pe),{recursive:!0}),await mq(K.resolve(we),Pe,ce)):await C1t(Pe,we,{baseFs:r,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${we} -> ${Pe} ${Ie.message}`,Ie}finally{le.tick()}})().then(()=>b.splice(b.indexOf(ee),1));b.push(ee),b.length>A1e&&await Promise.race(b)},T=async(we,Pe,g)=>{let Ee=(async()=>{let De=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(ce,{withFileTypes:!0});for(let ke of Ie){if(!ee.innerLoop&&ke.name===DQ)continue;let ht=K.join(ce,ke.name),H=K.join(ne,ke.name);ke.isDirectory()?(ke.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):ye.value==="hardlinks-local"||ye.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,h1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${ce} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||le.tick()}};await De(we,Pe,g)})().then(()=>b.splice(b.indexOf(Ee),1));b.push(Ee),b.length>A1e&&await Promise.race(b)},L=async(we,Pe,g)=>{if(g)for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await L(K.join(we,Ee),De,ce)}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!1});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:we===A,allowSymlink:Ee})}};for(let[we,Pe]of p){let g=v.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=K.join(we,Ee);await L(ne,De,ce)}}let U=async(we,Pe,g)=>{if(g){f1e(Pe.locator,g.locator)||await YC(we,{contentsOnly:Pe.linkType==="HARD"});for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!0});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:Pe.linkType==="HARD",allowSymlink:Ee})}};for(let[we,Pe]of v){let g=p.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}let J=new Map,te=[];for(let[we,Pe]of E)for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of De)if(ne=K.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=f1e(ce.locator,we),Ie=e.get(ce.locator),ke=Ie.target,ht=ne,H=Ie.linkType;if(ee)J.has(ke)||J.set(ke,ht);else if(ke!==ht){let lt=W.parseLocator(ce.locator);W.isVirtualLocator(lt)&&(lt=W.devirtualizeLocator(lt)),te.push({srcDir:ke,dstDir:ht,linkType:H,realLocatorHash:lt.locatorHash})}}}}for(let[we,{locations:Pe}]of e.entries())for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(we),ke=W.parseLocator(we);W.isVirtualLocator(ke)&&(ke=W.devirtualizeLocator(ke));let ht=ke.locatorHash,H=Ie.target,lt=g;if(H===lt)continue;let Re=Ie.linkType;for(let Qe of De)ne=ne.children.get(Qe);if(!ce)te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});else for(let Qe of De)if(ee=K.join(ee,Qe),ce=ce.children.get(Qe),!ce){te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),pe=a.reportProgress(le),Ae=o.configuration.get("nmMode"),ye={value:Ae},ae=o.configuration.get("winLinkType");try{let we=ye.value==="hardlinks-global"?`${yq(o.configuration)}/v1`:null;if(we&&!await oe.existsPromise(we)){await oe.mkdirpPromise(we);for(let g=0;g<256;g++)await oe.mkdirPromise(K.join(we,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:ae,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await T(Ee,g.dstDir,{nmMode:ye})}await Promise.all(b),await oe.mkdirPromise(A,{recursive:!0});let Pe=await I1t(e,v,o.cwd,{loadManifest:n});await v1t(h,Pe,o.cwd,ae),await y1t(o,e,Pe,ye,{installChangedByUser:I}),Ae=="hardlinks-global"&&ye.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{pe.stop()}}async function v1t(t,e,r,o){for(let a of t.keys()){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=K.join(a,Pi,DQ);await oe.removePromise(n)}}for(let[a,n]of e){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=K.join(a,Pi,DQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(K.join(u,p)),process.platform==="win32"&&await oe.removePromise(K.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=K.join(u,p);E!==h&&(process.platform==="win32"?await(0,p1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await mq(h,I,o),K.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new Eq(r)}},Eq=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=$Ie(r,this.opts.project.cwd,o),{tree:n,errors:u}=JB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let b=W.parseLocator(v.locator),C=W.stringifyIdent(b);C===I?A.set(I,b.reference):A.set(I,[C,b.reference])},h=K.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=K.join(h,I),b=n.get(v);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(I,b);else for(let C of b.dirList){let T=K.join(v,C),L=n.get(T);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var D1t={hooks:{cleanGlobalArtifacts:async t=>{let e=yq(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},P1t=D1t;var EG={};Kt(EG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Ovt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>on,npmPublishUtils:()=>sw});Ye();var x1e=$e(zn());var Wn="npm:";var on={};Kt(on,{AuthType:()=>P1e,customPackageError:()=>mm,del:()=>N1t,get:()=>ym,getIdentUrl:()=>SQ,getPackageMetadata:()=>KC,handleInvalidAuthenticationError:()=>b0,post:()=>T1t,put:()=>R1t});Ye();Ye();Pt();var Bq=$e(A2()),v1e=$e(S_()),D1e=$e(zn()),vq=Be("url");var Zn={};Kt(Zn,{RegistryType:()=>w1e,getAuditRegistry:()=>S1t,getAuthConfiguration:()=>Iq,getDefaultRegistry:()=>uv,getPublishRegistry:()=>x1t,getRegistryConfiguration:()=>I1e,getScopeConfiguration:()=>wq,getScopeRegistry:()=>WC,normalizeRegistry:()=>oc});var w1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(w1e||{});function oc(t){return t.replace(/\/$/,"")}function S1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function x1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?WC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function WC(t,{configuration:e,type:r="npmRegistryServer"}){let o=wq(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function I1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function wq(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Iq(t,{configuration:e,ident:r}){let o=r&&wq(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:I1e(t,{configuration:e})||e}var P1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(P1e||{});async function b0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(bQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await M1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function SQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map;async function KC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){return await je.getFactoryWithDefault(B1e,t.identHash,async()=>{let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=Q1t(A,o),h=K.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh){try{E=await oe.readJsonPromise(h)}catch{}if(E){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let T=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(T);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let b=I["dist-tags"].latest;if(v.has(b)){let C=Object.keys(E.metadata.versions).sort(D1e.default.compare),T=C.indexOf(b);for(;v.has(C[T])&&T>=0;)T-=1;T>=0?I["dist-tags"].latest=C[T]:delete I["dist-tags"].latest}}return I}}}return await ym(SQ(t),{...u,customErrorMessage:mm,configuration:A,registry:o,ident:t,headers:{...a,["If-None-Match"]:E?.etag,["If-Modified-Since"]:E?.lastModified},wrapNetworkRequest:async I=>async()=>{let v=await I();if(v.statusCode===304){if(E===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...v,body:E.metadata}}let b=b1t(JSON.parse(v.body.toString()));B1e.set(t.identHash,b);let C={metadata:b,etag:v.headers.etag,lastModified:v.headers["last-modified"]},T=`${h}-${process.pid}.tmp`;return await oe.mkdirPromise(p,{recursive:!0}),await oe.writeJsonPromise(T,C,{compact:!0}),await oe.renamePromise(T,h),{...v,body:b}}})})}var S1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function b1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,v1e.default)(r,S1e)]))}}var k1t=wn.makeHash(...S1e).slice(0,6);function Q1t(t,e){let r=F1t(t),o=new vq.URL(e);return K.join(r,k1t,o.hostname)}function F1t(t){return K.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await xQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await rn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await b0(p,{registry:n,configuration:e,headers:r}),p}}async function T1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I)||p)throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function R1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I))throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function N1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await xQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await rn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!bQ(E)||A)throw await b0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Dq(E,{configuration:r});let I={...o,...VC(A)};try{return await rn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await b0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return WC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function xQ(t,{authType:e=2,configuration:r,ident:o}){let a=Iq(t,{configuration:r,ident:o}),n=L1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function L1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function M1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await rn.get(new vq.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Dq(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,Bq.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,Bq.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function bQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!x1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var b1e=$e(zn()),k1e=Be("url");var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new k1e.URL(e.reference);return!(!b1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(dl.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=WC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${SQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Pq=$e(zn());var kQ=W.makeIdent(null,"node-gyp"),O1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Pq.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Pq.default.valid(a.raw)?a.raw:void 0}),u=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return je.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:je.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return je.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await KC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Mt;if(u.load(n.versions[a]),!u.dependencies.has(kQ.identHash)&&!u.peerDependencies.has(kQ.identHash)){for(let A of u.scripts.values())if(A.match(O1t)){u.dependencies.set(kQ.identHash,W.makeDescriptor(kQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var Q1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!QE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!Q1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var sw={};Kt(sw,{getGitHead:()=>Lvt,getPublishAccess:()=>wBe,getReadmeContent:()=>IBe,makePublishBody:()=>Nvt});Ye();Ye();Pt();var hG={};Kt(hG,{PackCommand:()=>O0,default:()=>mvt,packUtils:()=>CA});Ye();Ye();Ye();Pt();qt();var CA={};Kt(CA,{genPackList:()=>$Q,genPackStream:()=>pG,genPackageManifest:()=>lBe,hasPackScripts:()=>AG,prepareForPack:()=>fG});Ye();Pt();var uG=$e(Zo()),oBe=$e(rBe()),aBe=Be("zlib"),ovt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],avt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function AG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function fG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=K.join(t.cwd,Mt.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function pG(t,e){typeof e>"u"&&(e=await $Q(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(K.normalize(n));for(let n of t.manifest.bin.values())r.add(K.normalize(n));let o=oBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=K.normalize(n),A=K.resolve(t.cwd,u),p=K.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,b,C=new Promise((L,U)=>{v=L,b=U}),T=L=>{L?b(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await lBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,T)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},T):T(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,aBe.createGzip)();return o.pipe(a),a}async function lBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function $Q(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of avt)o.reject.push(I);for(let I of ovt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=K.relative(t.cwd,I),b=K.resolve(Bt.root,v);o.reject.push(b)};a(K.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=K.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(K.resolve(Bt.root,u)),A!=null&&n.accept.push(K.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(K.resolve(Bt.root,p));for(let I of h.values())n.accept.push(K.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(K.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(K.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)cBe(n.accept,I,{cwd:Bt.root})}return await lvt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function lvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!iBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let T of E)I=I||T===".gitignore",v=v||T===".npmignore";let b=v?await nBe(n,A,".npmignore"):I?await nBe(n,A,".gitignore"):null,C=b!==null?[b].concat(p):p;iBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)u.push([K.resolve(A,T),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(K.relative(Bt.root,A))}return a.sort()}async function nBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(K.join(e,r),"utf8");for(let n of a.split(/\n/g))cBe(o.reject,n,{cwd:e});return o}function cvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=K.resolve(e,t)),r&&(t=`!${t}`),t}function cBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(cvt(o,{cwd:r}))}function iBe(t,{globalList:e,ignoreLists:r}){let o=ZQ(t,e.accept);if(o!==0)return o===2;let a=ZQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=ZQ(t,n.accept);if(u!==0)return u===2;let A=ZQ(t,n.reject);if(A!==0)return A===1}return!1}function ZQ(t,e){let r=e,o=[];for(let a=0;a{await fG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await $Q(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await pG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};O0.paths=[["pack"]],O0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function uvt(t,{workspace:e}){let r=t.replace("%s",Avt(e)).replace("%v",fvt(e));return ue.toPortablePath(r)}function Avt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function fvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var pvt=["dependencies","devDependencies","peerDependencies"],hvt="workspace:",gvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of pvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===hvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},dvt={hooks:{beforeWorkspacePacking:gvt},commands:[O0]},mvt=dvt;var yBe=Be("crypto"),EBe=$e(mBe()),CBe=Be("url");async function Nvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,yBe.createHash)("sha1").update(e).digest("hex"),E=EBe.default.fromData(e).toString(),I=r??wBe(t,u),v=await IBe(t),b=await CA.genPackageManifest(t),C=`${p}-${A}.tgz`,T=new CBe.URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:T.toString()}}},readme:v}}async function Lvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function wBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function IBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var yG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},BBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Mvt={configuration:{...yG,...BBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...yG,...BBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...yG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Ovt=Mvt;var xG={};Kt(xG,{NpmAuditCommand:()=>_0,NpmInfoCommand:()=>H0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>q0,NpmPublishCommand:()=>G0,NpmTagAddCommand:()=>W0,NpmTagListCommand:()=>Y0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>K0,default:()=>Gvt,npmAuditTypes:()=>Tv,npmAuditUtils:()=>eF});Ye();Ye();qt();var vG=$e(Zo());Za();var Tv={};Kt(Tv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var eF={};Kt(eF,{allSeverities:()=>ow,getPackages:()=>BG,getReportTree:()=>wG,getSeverityInclusions:()=>CG,getTopLevelDependencies:()=>IG});Ye();var vBe=$e(zn());var ow=["info","low","moderate","high","critical"];function CG(t){if(typeof t>"u")return new Set(ow);let e=ow.indexOf(t),r=ow.slice(e);return new Set(r)}function wG(t){let e={},r={children:e};for(let[o,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(vBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function IG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function BG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),b=je.getMapWithDefault(o,v);je.getArrayWithDefault(b,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var _0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Vs(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Vs(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=IG(o,a,{all:this.all,environment:this.environment}),u=BG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>vG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=on.post("/-/npm/v1/security/advisories/bulk",p,{authType:on.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let pe=await on.getPackageMetadata(W.parseIdent(te),{project:o});return je.mapAndFilter(le,Ae=>{let{deprecated:ye}=pe.versions[Ae];return ye?[te,Ae,ye]:je.mapAndFilter.skip})})),J=await L;for(let[te,le,pe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(Ae=>kr.satisfiesWithPrereleases(le,Ae.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:pe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=J});if(I.hasErrors())return I.exitCode();let v=CG(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!vG.default.isMatch(`${te.id}`,b)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let le=u.get(L);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let pe=[...le.keys()].filter(ye=>kr.satisfiesWithPrereleases(ye,te.vulnerable_versions)),Ae=new Map;for(let ye of pe)for(let ae of le.get(ye))Ae.set(ae.locatorHash,ae);return{...te,versions:pe,dependents:[...Ae.values()]}}))}let T=Object.keys(C).length>0;return T?($s.emitTree(wG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),T?1:0)}};_0.paths=[["npm","audit"]],_0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` + This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). + + For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. + + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${ow.map(r=>`\`${r}\``).join(", ")}. + + If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. + + If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. + + If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();Pt();qt();var DG=$e(zn()),PG=Be("util"),H0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(K.join(le.cwd,dr.manifest))}`);E=W.makeDescriptor(le.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=on.getIdentUrl(E),v=SG(await on.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:on.customPackageError})),b=Object.keys(v.versions).sort(DG.default.compareLoose),T=v["dist-tags"].latest||b[b.length-1],L=kr.validRange(E.range);if(L){let le=DG.default.maxSatisfying(b,L);le!==null?T=le:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?T=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[T],J={...v,...U,version:T,versions:b},te;if(a!==null){te={};for(let le of a){let pe=J[le];if(typeof pe<"u")te[le]=pe;else{p.reportWarning(1,`The ${de.pretty(r,le,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});PG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,PG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};H0.paths=[["npm","info"]],H0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function SG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=SG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=SG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var DBe=$e(A2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await _vt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=`/-/user/org.couchdb.user:${encodeURIComponent(u.name)}`,p=await on.put(A,u,{attemptedAs:u.name,configuration:r,registry:o,jsonResponse:!0,authType:on.AuthType.NO_AUTH});return await Uvt(o,p.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function tF({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await AC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Uvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=je.isIndexableObject(A)?A:{},h=p[u],E=je.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ve.updateHomeConfiguration(n)}async function _vt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let{username:u,password:A}=await(0,DBe.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),{name:u,password:A}}Ye();Ye();qt();var aw=new Set(["npmAuthIdent","npmAuthToken"]),q0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ve.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await jvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await PBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish});await PBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};q0.paths=[["npm","logout"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function Hvt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...aw].every(n=>!o.has(n)))return!1;for(let n of aw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of aw)delete a[n];return t[e]=a,!0}async function jvt(){let t=e=>{let r=!1,o=je.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Hvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ve.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function PBe(t,e){return await Ve.updateHomeConfiguration({[t]:r=>{let o=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=je.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...aw].every(p=>!u.has(p)))return r;for(let p of aw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of aw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var G0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await on.get(on.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await CA.prepareForPack(a,{report:h},async()=>{let E=await CA.genPackList(a);for(let T of E)h.reportInfo(null,T);let I=await CA.genPackStream(a,E),v=await je.bufferStream(I),b=await sw.getGitHead(a.cwd),C=await sw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:b});await on.put(on.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};G0.paths=[["npm","publish"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var SBe=$e(zn());Ye();Pt();qt();var Y0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(K.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Rv(n,r),p={children:je.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};Y0.paths=[["npm","tag","list"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + This command will list all tags of a package from the npm registry. + + If the package is not specified, Yarn will default to the current workspace. + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Rv(t,e){let r=`/-/package${on.getIdentUrl(t)}/dist-tags`;return on.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:on.customPackageError})}var W0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!SBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let b=await Rv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};W0.paths=[["npm","tag","add"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Rv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + This command will remove a tag from a package from the npm registry. + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var K0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await AC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await on.get("/-/whoami",{configuration:r,registry:o,authType:on.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};K0.paths=[["npm","whoami"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[_0,H0,j0,q0,G0,W0,Y0,V0,K0]},Gvt=qvt;var NG={};Kt(NG,{PatchCommand:()=>X0,PatchCommitCommand:()=>z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>lDt,patchUtils:()=>Dm});Ye();Ye();Pt();nA();var Dm={};Kt(Dm,{applyPatchFile:()=>nF,diffFolders:()=>TG,ensureUnpatchedDescriptor:()=>bG,ensureUnpatchedLocator:()=>sF,extractPackageToDisk:()=>FG,extractPatchFlags:()=>RBe,isParentRequired:()=>QG,isPatchDescriptor:()=>iF,isPatchLocator:()=>J0,loadPatchFiles:()=>Ov,makeDescriptor:()=>oF,makeLocator:()=>kG,makePatchHash:()=>RG,parseDescriptor:()=>Lv,parseLocator:()=>Mv,parsePatchFile:()=>Nv,unpatchDescriptor:()=>sDt,unpatchLocator:()=>oDt});Ye();Pt();Ye();Pt();var Yvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function lw(t){return K.relative(Bt.root,K.resolve(Bt.root,ue.toPortablePath(t)))}function Wvt(t){let e=t.trim().match(Yvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Vvt=420,Kvt=493;var xBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Jvt=t=>({header:Wvt(t),parts:[]}),zvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Xvt(t){let e=[],r=xBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=xBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:lw(E),toPath:lw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(p),hash:v})}break;case"file creation":{let te=n||T;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(h),hash:b})}break;case"patch":case"mode change":J=T||n;break;default:je.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:lw(J),oldMode:rF(u),newMode:rF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:lw(J),hunks:L,beforeHash:v,afterHash:b})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function rF(t){let e=parseInt(t,8)&511;if(e!==Vvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Zvt(Xvt(e))}function $vt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var cw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function uw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function nF(t,{baseFs:e=new Rn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await uw(e,K.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await uw(e,K.dirname(a.fromPath),async()=>{await uw(e,K.dirname(a.toPath),async()=>{await uw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` +`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(K.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await uw(e,a.path,async()=>{await rDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(bBe(a.newMode)!==bBe(u))continue;await uw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function bBe(t){return(t&64)>0}function kBe(t){return t.replace(/\s+$/,"")}function tDt(t,e){return kBe(t)===kBe(e)}async function rDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),b=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),T=Math.max(b,C),L=0,U=0,J=null;for(;L<=T;){if(L<=b&&(U=v-L,J=QBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=QBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new cw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let b=v.index+E;u.splice(b,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:je.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function QBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!tDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:je.assertNever(a.type);break}return o}var iDt=/^builtin<([^>]+)>$/;function Aw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function iF(t){return t.range.startsWith("patch:")}function J0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=Aw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Mv(t){let{sourceItem:e,...r}=Aw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function sDt(t){let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function oDt(t){let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function bG(t){if(!iF(t))return t;let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function sF(t){if(!J0(t))return t;let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function FBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function oF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,FBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function kG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,FBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function TBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(iDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):K.isAbsolute(a)?t(a):e(a)}function RBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function QG(t){return TBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Ov(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=RBe(u),p=await TBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(K.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(K.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function FG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=sF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=K.join(A,"source"),h=K.join(A,"user"),E=K.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let b,C;if(t.locatorHash===a.locatorHash){let T=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>T.releaseFs?.()),b=T,C=T}else b=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>b.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let b of v)b()}return oe.detachTemp(A),h}async function TG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +The following error was reported by 'git': +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${o}/`),"g"),"")}function RG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function NBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:je.assertNever(o.type)}}var Uv=class{supports(e,r){return!!J0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Mv(e),A=await Ov(o,u,r),p=await oe.mktempPromise(),h=K.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:b,optional:C}of A){if(b===null)continue;let T=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(K.resolve(Bt.root,I),{baseFs:T});try{await nF(Nv(b),{baseFs:L,version:n})}catch(U){if(!(U instanceof cw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",le=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,pe=Ae=>{!J||NBe(U.hunk,{configuration:r.project.configuration,report:Ae})};if(T.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:pe});continue}else throw new zt(66,le,pe)}T.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!iF(e)}supportsLocator(e,r){return!!J0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!QG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Ov(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=RG(u,A.version);return[kG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Mv(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=K.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=K.join(n,"../source"),A=K.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await TG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=K.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let b=[],C=new Map;for(let T of o.storedPackages.values()){if(W.isVirtualLocator(T))continue;let L=T.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=bG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let pe=o.tryWorkspaceByLocator(T);if(pe)b.push(pe);else{let Ae=o.originalPackages.get(T.locatorHash);if(!Ae)throw new Error("Assertion failed: Expected the original package to have been registered");let ye=Ae.dependencies.get(L.identHash);if(!ye)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(ye.descriptorHash,ye)}}for(let T of b)for(let L of Mt.hardDependencies){let U=T.manifest[L].get(E.identHash);if(!U)continue;let J=oF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});T.manifest[L].set(U.identHash,J)}for(let T of C.values()){let L=oF(T,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:T.range}},reference:L.range})}await o.persist()}};z0.paths=[["patch-commit"]],z0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();Pt();qt();var X0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=je.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?je.mapAndFilter.skip:W.isVirtualLocator(p)?je.mapAndFilter.skip:J0(p)!==this.update?je.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${A.map(p=>` +- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=sF(u),h=await FG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};X0.paths=[["patch"]],X0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var aDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[z0,X0],fetchers:[Uv],resolvers:[_v]},lDt=aDt;var OG={};Kt(OG,{PnpmLinker:()=>Hv,default:()=>pDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=K.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new LG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},LG=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:K.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=K.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?K.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=cDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Mt.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Mt,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!LBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await uDt(a),A=new Map(u),p=[n],h=(I,v)=>{let b=v;LBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(b.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let T=W.stringifyIdent(I),L=K.join(a,T),U=K.relative(K.dirname(L),C.packageLocation),J=A.get(T);A.delete(T),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(K.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(ADt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=OBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=K.contains(e,o);if(a===null)continue;let[n]=a.split(K.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(K.join(e,o))}))}return await this.asyncActions.wait(),await MG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await MG(MBe(this.opts.project)),{customData:this.customData}}};function MBe(t){return K.join(t.cwd,dr.nodeModules)}function OBe(t){return K.join(MBe(t),".store")}function cDt(t,{project:e}){let r=W.slugifyLocator(t),o=OBe(e),a=K.join(o,r,"package"),n=K.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function LBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function uDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(K.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function ADt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(K.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>MG(K.join(t,a)))))}async function MG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var fDt={linkers:[Hv]},pDt=fDt;var YG={};Kt(YG,{StageCommand:()=>Z0,default:()=>vDt,stageUtils:()=>lF});Ye();Pt();qt();Ye();Pt();var lF={};Kt(lF,{ActionType:()=>UG,checkConsensus:()=>aF,expandDirectory:()=>jG,findConsensus:()=>qG,findVcsRoot:()=>_G,genCommitMessage:()=>GG,getCommitPrefix:()=>UBe,isYarnFile:()=>HG});Pt();var UG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(UG||{});async function _G(t,{marker:e}){do if(!oe.existsSync(K.join(t,e)))t=K.dirname(t);else return t;while(t!=="/");return null}function HG(t,{roots:e,names:r}){if(r.has(K.basename(t)))return!0;do if(!e.has(t))t=K.dirname(t);else return!0;while(t!=="/");return!1}function jG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=K.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function aF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function qG(t){let e=aF(t,/^(\w\(\w+\):\s*)?\w+s/),r=aF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=aF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function UBe(t){return t.useComponent?"chore(yarn): ":""}var hDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function GG(t,e){let r=UBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=hDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var gDt="Commit generated via `yarn stage`",dDt=11;async function _Be(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function mDt(t,e){let r=[],o=e.filter(h=>K.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=K.relative(t,E);if(h===4){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b),T=await Mt.fromFile(E),L=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let le=W.stringifyIdent(te),pe=L.get(J);pe?pe.range!==te.range&&r.push([4,`${le} to ${pe.range}`]):r.push([3,le])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Mt.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${dDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=qG(u);return GG(A,r)}var yDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},EDt={[0]:["A "],[4]:["M "],[1]:["D "]},HBe={async findRoot(t){return await _G(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?EDt:yDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=K.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return jG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(b=>u[b].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>HG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await mDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} + +${gDt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var CDt=[HBe],Z0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await wDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of IDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};Z0.paths=[["stage"]],Z0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function wDt(t){let e=null,r=null;for(let o of CDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function IDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=K.resolve(K.dirname(e),oe.readlinkSync(e));else break}return r}var BDt={commands:[Z0]},vDt=BDt;var WG={};Kt(WG,{default:()=>FDt});Ye();Ye();Pt();var GBe=$e(zn());Ye();var jBe=$e(ZH()),DDt="e8e1bd300d860104bb8c58453ffa1eb4",PDt="OFCNCOG2CU",qBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,jBe.default)(PDt,DDt,{requester:{async send(r){try{let o=await rn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var YBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,xDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(K.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await qBe(r,n))return;let E=YBe(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=GBe.default.coerce(I);if(v===null)return;let b=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),b),T=je.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return je.mapAndFind.skip;let te=[];for(let le of Mt.allDependencies){let pe=L.manifest[le].get(C.identHash);typeof pe>"u"||te.push([le,pe])}return te.length===0?je.mapAndFind.skip:te});if(typeof T<"u")for(let[L,U]of T)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(K.join(o.cwd,"tsconfig.json"))))return;let u=YBe(r),A=W.makeIdent("types",u);for(let p of Mt.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},kDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},QDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:xDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:kDt}},FDt=QDt;var XG={};Kt(XG,{VersionApplyCommand:()=>$0,VersionCheckCommand:()=>eg,VersionCommand:()=>tg,default:()=>XDt,versionUtils:()=>gw});Ye();Ye();qt();var gw={};Kt(gw,{Decision:()=>pw,applyPrerelease:()=>XBe,applyReleases:()=>zG,applyStrategy:()=>uF,clearVersionFiles:()=>VG,getUndecidedDependentWorkspaces:()=>qv,getUndecidedWorkspaces:()=>cF,openVersionFile:()=>hw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>JG,updateVersionFiles:()=>KG,validateReleaseDecision:()=>fw});Ye();Pt();Nl();qt();var zBe=$e(JBe()),BA=$e(zn()),VDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,pw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(pw||{});function fw(t){let e=BA.default.valid(t);return e||je.validateEnum((0,zBe.default)(pw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${K.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let b=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),T=uF(b,fw(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let L=typeof C<"u"?BA.default.gt(T,C)?T:C:T;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,XBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function VG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function KG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function hw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>K.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(b=>ue.fromPortablePath(b)).join(` +- `)}`);let p=new Set(je.mapAndFilter(n,b=>{let C=t.tryWorkspaceByFilePath(b);return C===null?je.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:K.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Vi(E),v=new Map;for(let b of I.declined||[]){let C=W.parseIdent(b),T=t.getWorkspaceByIdent(C);v.set(T,"decline")}for(let[b,C]of Object.entries(I.releases||{})){let T=W.parseIdent(b),L=t.getWorkspaceByIdent(T);v.set(L,fw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:v,async saveAll(){let b={},C=[],T=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?b[U]=fw(J):p.has(L)&&T.push(U)}await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:C.length>0?C:void 0,undecided:T.length>0?T:void 0})))}}}function KDt(t){return cF(t).size>0||qv(t).length>0}function cF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function qv(t,{include:e=new Set}={}){let r=[],o=new Map(je.mapAndFilter([...t.releases],([n,u])=>u==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Mt.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function JG(t,e){let r=BA.default.clean(e);for(let o of Object.values(pw))if(o!=="undecided"&&o!=="decline"&&BA.default.inc(t,o)===r)return o;return null}function uF(t,e){if(BA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!BA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=BA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function zG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Mt.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;je.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,BA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let b=v.range,C=!1;if(b.startsWith(Xn.protocol)&&(b=b.slice(Xn.protocol.length),C=!0,b===a.relativeCwd))continue;let T=b.match(VDt);if(!T){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${T[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var JDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function XBe(t,{current:e,prerelease:r}){let o=new BA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=JDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var $0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let b=h.get(v);typeof b<"u"&&E.set(v,b)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}zG(o,E,{report:A}),this.dryRun||(p||(this.all?await VG(o):await KG(o,[...E.keys()])),A.reportSeparator())});return u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};$0.paths=[["version","apply"]],$0.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` + This command will apply the deferred version changes and remove their definitions from the repository. + + Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. + + By default only the current workspace will be bumped, but you can configure this behavior by using one of: + + - \`--recursive\` to also apply the version bump on its dependencies + - \`--all\` to apply the version bump on all packages in the repository + + Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();Pt();qt();var AF=$e(zn());var eg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){SC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Sj(),Xwe)),{useListInput:n}=await Promise.resolve().then(()=>(pQ(),Zwe)),{renderForm:u}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await hw(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:ye,active:ae,decision:we,setDecision:Pe})=>{let g=ye.manifest.raw.stableVersion??ye.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,ye.anchoredLocator)})`);if(AF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(we,Ee,{active:ae,minus:"left",plus:"right",set:Pe});let De=we==="undecided"?h.createElement(p,{color:"yellow"},g):we==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},AF.default.valid(we)?we:AF.default.inc(g,we)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,ye.anchoredLocator)," - ",De)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===we})," ",ce)))))},J=ye=>{let ae=new Set(T.releaseRoots),we=new Map([...ye].filter(([Pe])=>ae.has(Pe)));for(;;){let Pe=qv({project:T.project,releases:we}),g=!1;if(Pe.length>0){for(let[Ee]of Pe)if(!ae.has(Ee)){ae.add(Ee),g=!0;let De=ye.get(Ee);typeof De<"u"&&we.set(Ee,De)}}if(!g)break}return{relevantWorkspaces:ae,relevantReleases:we}},te=()=>{let[ye,ae]=I(()=>new Map(T.releases)),we=E((Pe,g)=>{let Ee=new Map(ye);g!=="undecided"?Ee.set(Pe,g):Ee.delete(Pe);let{relevantReleases:De}=J(Ee);ae(De)},[ye,ae]);return[ye,we]},le=({workspaces:ye,releases:ae})=>{let we=[];we.push(`${ye.size} total`);let Pe=0,g=0;for(let Ee of ye){let De=ae.get(Ee);typeof De>"u"?g+=1:De!=="decline"&&(Pe+=1)}return we.push(`${Pe} release${Pe===1?"":"s"}`),we.push(`${g} remaining`),h.createElement(p,{color:"yellow"},we.join(", "))},Ae=await u(({useSubmit:ye})=>{let[ae,we]=te();ye(ae);let{relevantWorkspaces:Pe}=J(ae),g=new Set([...Pe].filter(ne=>!T.releaseRoots.has(ne))),[Ee,De]=I(0),ce=E(ne=>{switch(ne){case a.BEFORE:De(Ee-1);break;case a.AFTER:De(Ee+1);break}},[Ee,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(T.root)),ue.sep,ue.relative(ue.fromPortablePath(T.root),ue.fromPortablePath(ne)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:T.releaseRoots,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...T.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ae>"u")return 1;T.releases.clear();for(let[ye,ae]of Ae)T.releases.set(ye,ae);await T.saveAll()}async executeStandard(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await hw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=cF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=qv(A);for(let[v,b]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};eg.paths=[["version","check"]],eg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var fF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=fF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=JG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!fF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=fw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=uF(a.manifest.version,p);if(fF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await hw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};tg.paths=[["version"]],tg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var zDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[$0,eg,tg]},XDt=zDt;var ZG={};Kt(ZG,{WorkspacesFocusCommand:()=>rg,WorkspacesForeachCommand:()=>op,default:()=>ePt});Ye();Ye();qt();var rg=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Mt.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};rg.paths=[["workspaces","focus"]],rg.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var dw=$e(Zo()),$Be=$e(nd());Za();var op=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Boolean("-v,--verbose",{description:"Prefix each output line with the name of the originating workspace"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:LR([Vs(["unlimited"]),oI(NR(),[OR(),MR(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=ae=>{!this.dryRun||this.context.stdout.write(`${ae} +`)},p=()=>{let ae=this.from.map(we=>dw.default.matcher(we));return o.workspaces.filter(we=>{let Pe=W.stringifyIdent(we.anchoredLocator),g=we.relativeCwd;return ae.some(Ee=>Ee(Pe)||Ee(g))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let ae of h)A(` +- ${ae.relativeCwd} + ${W.prettyLocator(r,ae.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let ae of E)A(` +- ${ae.relativeCwd} + ${W.prettyLocator(r,ae.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let ae of o.workspaces)if(ae.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let ae of h){if(u&&!ae.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(ae)).has(u)){A(`Excluding ${ae.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&ae.cwd===a.cwd)){if(this.include.length>0&&!dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.include)&&!dw.default.isMatch(ae.relativeCwd,this.include)){A(`Excluding ${ae.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.exclude)||dw.default.isMatch(ae.relativeCwd,this.exclude))){A(`Excluding ${ae.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&ae.manifest.private===!0){A(`Excluding ${ae.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(ae)}}if(this.dryRun)return 0;let b=this.verbose??this.context.stdout.isTTY,C=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,T=C===1?!1:this.parallel,L=T?this.interlaced:!0,U=(0,$Be.default)(C),J=new Map,te=new Set,le=0,pe=null,Ae=!1,ye=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async ae=>{let we=async(Pe,{commandIndex:g})=>{if(Ae)return-1;!T&&b&&g>1&&ae.reportSeparator();let Ee=ZDt(Pe,{configuration:r,verbose:b,commandIndex:g}),[De,ce]=ZBe(ae,{prefix:Ee,interlaced:L}),[ne,ee]=ZBe(ae,{prefix:Ee,interlaced:L});try{b&&ae.reportInfo(null,`${Ee} Process started`);let Ie=Date.now(),ke=await this.cli.run([this.commandName,...this.args],{cwd:Pe.cwd,stdout:De,stderr:ne})||0;De.end(),ne.end(),await ce,await ee;let ht=Date.now();if(b){let H=r.get("enableTimers")?`, completed in ${de.pretty(r,ht-Ie,de.Type.DURATION)}`:"";ae.reportInfo(null,`${Ee} Process exited (exit code ${ke})${H}`)}return ke===130&&(Ae=!0,pe=ke),ke}catch(Ie){throw De.end(),ne.end(),await ce,await ee,Ie}};for(let Pe of I)J.set(Pe.anchoredLocator.locatorHash,Pe);for(;J.size>0&&!ae.hasErrors();){let Pe=[];for(let[De,ce]of J){if(te.has(ce.anchoredDescriptor.descriptorHash))continue;let ne=!0;if(this.topological||this.topologicalDev){let ee=this.topologicalDev?new Map([...ce.manifest.dependencies,...ce.manifest.devDependencies]):ce.manifest.dependencies;for(let Ie of ee.values()){let ke=o.tryWorkspaceByDescriptor(Ie);if(ne=ke===null||!J.has(ke.anchoredLocator.locatorHash),!ne)break}}if(!!ne&&(te.add(ce.anchoredDescriptor.descriptorHash),Pe.push(U(async()=>{let ee=await we(ce,{commandIndex:++le});return J.delete(De),te.delete(ce.anchoredDescriptor.descriptorHash),ee})),!T))break}if(Pe.length===0){let De=Array.from(J.values()).map(ce=>W.prettyLocator(r,ce.anchoredLocator)).join(", ");ae.reportError(3,`Dependency cycle detected (${De})`);return}let Ee=(await Promise.all(Pe)).find(De=>De!==0);pe===null&&(pe=typeof Ee<"u"?1:pe),(this.topological||this.topologicalDev)&&typeof Ee<"u"&&ae.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return pe!==null?pe:ye.exitCode()}};op.paths=[["workspaces","foreach"]],op.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag (automatically enabled in interactive terminal environments) will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),op.schema=[lI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),UR(["all","recursive","since","worktree"],{missingIf:"undefined"})];function ZBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new je.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function ZDt(t,{configuration:e,commandIndex:r,verbose:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var $Dt={commands:[rg,op]},ePt=$Dt;var fC=()=>({modules:new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",tPt],["typanion",Ko],["@yarnpkg/plugin-essentials",tH],["@yarnpkg/plugin-compat",oH],["@yarnpkg/plugin-constraints",BH],["@yarnpkg/plugin-dlx",vH],["@yarnpkg/plugin-exec",SH],["@yarnpkg/plugin-file",bH],["@yarnpkg/plugin-git",eH],["@yarnpkg/plugin-github",FH],["@yarnpkg/plugin-http",TH],["@yarnpkg/plugin-init",RH],["@yarnpkg/plugin-interactive-tools",Lj],["@yarnpkg/plugin-link",Mj],["@yarnpkg/plugin-nm",Cq],["@yarnpkg/plugin-npm",EG],["@yarnpkg/plugin-npm-cli",xG],["@yarnpkg/plugin-pack",hG],["@yarnpkg/plugin-patch",NG],["@yarnpkg/plugin-pnp",lq],["@yarnpkg/plugin-pnpm",OG],["@yarnpkg/plugin-stage",YG],["@yarnpkg/plugin-typescript",WG],["@yarnpkg/plugin-version",XG],["@yarnpkg/plugin-workspace-tools",ZG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function rve({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:tn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function rPt(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function nve({selfPath:t,pluginConfiguration:e}){return await Ve.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function nPt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,eve.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function iPt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?K.resolve(r):K.cwd(),o}function sPt(t,{configuration:e}){if(!e.get("enableTelemetry")||tve.isCI||!process.stdout.isTTY)return;Ve.telemetry=new cC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())uC.has(a.match(o)?.[1]??"")&&Ve.telemetry?.reportPluginName(a);t.binaryVersion&&Ve.telemetry.reportVersion(t.binaryVersion)}function ive(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function oPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!rPt(t))return 1;let a=await nve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return nPt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=iPt(t,e);sPt(t,{configuration:a}),ive(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ve.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function the({cwd:t=K.cwd(),pluginConfiguration:e=fC()}={}){let r=rve({cwd:t,pluginConfiguration:e}),o=await nve({pluginConfiguration:e,selfPath:null});return ive(r,{configuration:o}),r}async function sk(t,{cwd:e=K.cwd(),selfPath:r,pluginConfiguration:o}){let a=rve({cwd:e,pluginConfiguration:o});try{process.exitCode=await oPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}sk(process.argv.slice(2),{cwd:K.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:fC()});})(); +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + */ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ +/** + @license + Copyright (c) 2015, Rebecca Turner + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + */ +/** + @license + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/** @license React v0.18.0 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v0.24.0 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v16.13.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/tgui/.yarn/sdks/eslint/bin/eslint.js b/tgui/.yarn/sdks/eslint/bin/eslint.js new file mode 100644 index 000000000000..9ef98e400b47 --- /dev/null +++ b/tgui/.yarn/sdks/eslint/bin/eslint.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/bin/eslint.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint/bin/eslint.js your application uses +module.exports = absRequire(`eslint/bin/eslint.js`); diff --git a/tgui/.yarn/sdks/eslint/lib/api.js b/tgui/.yarn/sdks/eslint/lib/api.js new file mode 100644 index 000000000000..653b22bae06f --- /dev/null +++ b/tgui/.yarn/sdks/eslint/lib/api.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint your application uses +module.exports = absRequire(`eslint`); diff --git a/tgui/.yarn/sdks/eslint/lib/unsupported-api.js b/tgui/.yarn/sdks/eslint/lib/unsupported-api.js new file mode 100644 index 000000000000..30fdf158b475 --- /dev/null +++ b/tgui/.yarn/sdks/eslint/lib/unsupported-api.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/use-at-your-own-risk + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint/use-at-your-own-risk your application uses +module.exports = absRequire(`eslint/use-at-your-own-risk`); diff --git a/tgui/.yarn/sdks/eslint/package.json b/tgui/.yarn/sdks/eslint/package.json new file mode 100644 index 000000000000..f9672f35449d --- /dev/null +++ b/tgui/.yarn/sdks/eslint/package.json @@ -0,0 +1,14 @@ +{ + "name": "eslint", + "version": "8.56.0-sdk", + "main": "./lib/api.js", + "type": "commonjs", + "bin": { + "eslint": "./bin/eslint.js" + }, + "exports": { + "./package.json": "./package.json", + ".": "./lib/api.js", + "./use-at-your-own-risk": "./lib/unsupported-api.js" + } +} diff --git a/tgui/.yarn/sdks/integrations.yml b/tgui/.yarn/sdks/integrations.yml new file mode 100644 index 000000000000..aa9d0d0ad81a --- /dev/null +++ b/tgui/.yarn/sdks/integrations.yml @@ -0,0 +1,5 @@ +# This file is automatically generated by @yarnpkg/sdks. +# Manual changes might be lost! + +integrations: + - vscode diff --git a/tgui/.yarn/sdks/prettier/bin/prettier.cjs b/tgui/.yarn/sdks/prettier/bin/prettier.cjs new file mode 100644 index 000000000000..5efad688e739 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/bin/prettier.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/bin/prettier.cjs + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier/bin/prettier.cjs your application uses +module.exports = absRequire(`prettier/bin/prettier.cjs`); diff --git a/tgui/.yarn/sdks/prettier/index.cjs b/tgui/.yarn/sdks/prettier/index.cjs new file mode 100644 index 000000000000..8758e367a725 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/index.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier your application uses +module.exports = absRequire(`prettier`); diff --git a/tgui/.yarn/sdks/prettier/package.json b/tgui/.yarn/sdks/prettier/package.json new file mode 100644 index 000000000000..d2b89e5f34b1 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/package.json @@ -0,0 +1,7 @@ +{ + "name": "prettier", + "version": "3.1.1-sdk", + "main": "./index.cjs", + "type": "commonjs", + "bin": "./bin/prettier.cjs" +} diff --git a/tgui/.yarn/sdks/typescript/bin/tsc b/tgui/.yarn/sdks/typescript/bin/tsc new file mode 100644 index 000000000000..454b950b7e8f --- /dev/null +++ b/tgui/.yarn/sdks/typescript/bin/tsc @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsc + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/bin/tsc your application uses +module.exports = absRequire(`typescript/bin/tsc`); diff --git a/tgui/.yarn/sdks/typescript/bin/tsserver b/tgui/.yarn/sdks/typescript/bin/tsserver new file mode 100644 index 000000000000..d7a605684df9 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/bin/tsserver @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsserver + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/bin/tsserver your application uses +module.exports = absRequire(`typescript/bin/tsserver`); diff --git a/tgui/.yarn/sdks/typescript/lib/tsc.js b/tgui/.yarn/sdks/typescript/lib/tsc.js new file mode 100644 index 000000000000..2f62fc96c0a0 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsc.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsc.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsc.js your application uses +module.exports = absRequire(`typescript/lib/tsc.js`); diff --git a/tgui/.yarn/sdks/typescript/lib/tsserver.js b/tgui/.yarn/sdks/typescript/lib/tsserver.js new file mode 100644 index 000000000000..bbb1e46501b5 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsserver.js @@ -0,0 +1,225 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +const moduleWrapper = tsserver => { + if (!process.versions.pnp) { + return tsserver; + } + + const {isAbsolute} = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; + + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } + }); + + return tsserver; +}; + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserver.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsserver.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`)); diff --git a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js new file mode 100644 index 000000000000..a68f028fe197 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -0,0 +1,225 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +const moduleWrapper = tsserver => { + if (!process.versions.pnp) { + return tsserver; + } + + const {isAbsolute} = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; + + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } + }); + + return tsserver; +}; + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserverlibrary.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsserverlibrary.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`)); diff --git a/tgui/.yarn/sdks/typescript/lib/typescript.js b/tgui/.yarn/sdks/typescript/lib/typescript.js new file mode 100644 index 000000000000..b5f4db25bee6 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/typescript.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript your application uses +module.exports = absRequire(`typescript`); diff --git a/tgui/.yarn/sdks/typescript/package.json b/tgui/.yarn/sdks/typescript/package.json new file mode 100644 index 000000000000..eb7dd745bc83 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/package.json @@ -0,0 +1,10 @@ +{ + "name": "typescript", + "version": "5.3.3-sdk", + "main": "./lib/typescript.js", + "type": "commonjs", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + } +} diff --git a/tgui/.yarnrc.yml b/tgui/.yarnrc.yml new file mode 100644 index 000000000000..299c4cc4c072 --- /dev/null +++ b/tgui/.yarnrc.yml @@ -0,0 +1,22 @@ +compressionLevel: mixed + +enableGlobalCache: false + +enableScripts: false + +logFilters: + - code: YN0004 + level: discard + - code: YN0062 + level: discard + +packageExtensions: + babel-plugin-inferno@*: + dependencies: + "@babel/core": "*" + +pnpEnableEsmLoader: false + +preferInteractive: true + +yarnPath: .yarn/releases/yarn-4.0.2.cjs diff --git a/tgui/README.md b/tgui/README.md index 66e4868a0832..17f89d2ea844 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -27,7 +27,7 @@ API to React. Take your time to read these guides: - [React guide](https://reactjs.org/docs/hello-world.html) - [Inferno documentation](https://infernojs.org/docs/guides/components) - - highlights differences with React. +highlights differences with React. If you were already familiar with an older, Ractive-based tgui, and want to translate concepts between old and new tgui, read this @@ -37,68 +37,69 @@ to translate concepts between old and new tgui, read this You will need these programs to start developing in tgui: -- [Node v12.13+](https://nodejs.org/en/download/) -- [Yarn v1.19+](https://yarnpkg.com/en/docs/install) -- [MSys2](https://www.msys2.org/) (optional) +- [Node v20](https://nodejs.org/en/download/) +- [Yarn v1.19+](https://yarnpkg.com/en/docs/install) (optional) +- [Git Bash](https://git-scm.com/downloads) + or [MSys2](https://www.msys2.org/) (optional) -> MSys2 closely replicates a unix-like environment which is necessary for -> the `bin/tgui` script to run. It comes with a robust "mintty" terminal -> emulator which is better than any standard Windows shell, it supports -> "git" out of the box (almost like Git for Windows, but better), has -> a "pacman" package manager, and you can install a text editor like "vim" -> for a full boomer experience. +**DO NOT install Chocolatey if Node installer asks you to!** ## Usage -**For MSys2, Git Bash, WSL, Linux or macOS users:** +**For Git Bash, MSys2, WSL, Linux or macOS users:** -First and foremost, change your directory to `tgui`. +Change your directory to `tgui`. -Run `bin/tgui --install-git-hooks` (optional) to install merge drivers -which will assist you in conflict resolution when rebasing your branches. +Run `bin/tgui --install-git-hooks` to install merge drivers which will +assist you in conflict resolution when rebasing your branches. Only has +to be done once. -Run one of the following: +Run `bin/tgui` with any of the options listed below. -- `bin/tgui` - build the project in production mode. -- `bin/tgui --dev` - launch a development server. - - tgui development server provides you with incremental compilation, - hot module replacement and logging facilities in all running instances - of tgui. In short, this means that you will instantly see changes in the - game as you code it. Very useful, highly recommended. - - In order to use it, you should start the game server first, connect to it - and wait until the world has been properly loaded and you are no longer - in the lobby. Start tgui dev server. You'll know that it's hooked correctly - if data gets dumped to the log when tgui windows are opened. -- `bin/tgui --dev --reload` - reload byond cache once. -- `bin/tgui --dev --debug` - run server with debug logging enabled. -- `bin/tgui --dev --no-hot` - disable hot module replacement (helps when - doing development on IE8). -- `bin/tgui --lint` - show problems with the code. -- `bin/tgui --lint --fix` - auto-fix problems with the code. -- `bin/tgui --analyze` - run a bundle analyzer. -- `bin/tgui --clean` - clean up project repo. -- `bin/tgui [webpack options]` - build the project with custom webpack - options. - -**For everyone else:** +**For Windows CMD or PowerShell users:** If you haven't opened the console already, you can do that by holding Shift and right clicking on the `tgui` folder, then pressing either `Open command window here` or `Open PowerShell window here`. -Run `yarn install` to install npm dependencies, then one of the following: +Run `.\bin\tgui.bat` with any of the options listed below. + +> If using PowerShell, you will receive errors if trying to run +> `.\bin\tgui.ps1`, because default Windows policy does not allow direct +> execution of PS1 scripts. Run `.\bin\tgui.bat` instead. + +**Available commands:** -- `yarn run build` - build the project in production mode. -- `yarn run watch` - launch a development server. -- `yarn run lint` - show problems with the code. -- `yarn run lint --fix` - auto-fix problems with the code. -- `yarn run analyze` - run a bundle analyzer. +- `bin/tgui` - Build the project in production mode. +- `bin/tgui --dev` - Launch a development server. + - tgui development server provides you with incremental compilation, + hot module replacement and logging facilities in all running instances + of tgui. In short, this means that you will instantly see changes in the + game as you code it. Very useful, highly recommended. + - In order to use it, you should start the game server first, connect to it + and wait until the world has been properly loaded and you are no longer + in the lobby. Start tgui dev server, and once it has finished building, + press F5 on any tgui window. You'll know that it's hooked correctly if + you see a green bug icon in titlebar and data gets dumped to the console. +- `bin/tgui --dev --reload` - Reload byond cache once. +- `bin/tgui --dev --debug` - Run server with debug logging enabled. +- `bin/tgui --dev --no-hot` - Disable hot module replacement (helps when +doing development on IE8). +- `bin/tgui --lint` - Show problems with the code. +- `bin/tgui --fix` - Auto-fix problems with the code. +- `bin/tgui --test` - Run tests. +- `bin/tgui --analyze` - Run a bundle analyzer. +- `bin/tgui --clean` - Clean up project repo. +- `bin/tgui --tgui-polyfill` - Build polyfills. You need to run it when updating any of the static (numbered) polyfills. +- `bin/tgui [webpack options]` - Build the project with custom webpack +options. + +**For everyone else:** -We also got some batch files in store, for those who don't like fiddling -with the console: +You can double-click these batch files to achieve the same thing: -- `bin/tgui-build.bat` - build the project in production mode. -- `bin/tgui-dev-server.bat` - launch a development server. +- `bin\tgui.bat` - Build the project in production mode. +- `bin\tgui-dev-server.bat` - Launch a development server. > Remember to always run a full build before submitting a PR. It creates > a compressed javascript bundle which is then referenced from DM code. @@ -110,18 +111,24 @@ with the console: **Development server doesn't find my BYOND cache!** This happens if your Documents folder in Windows has a custom location, for -example in `E:\Libraries\Documents`. Development server has no knowledge -of these non-standard locations, therefore you have to run the dev server -with an additional environmental variable, with a full path to BYOND cache. +example in `E:\Libraries\Documents`. Development server tries its best to find +this non-standard location (searches for a Windows Registry key), but it can +fail. You have to run the dev server with an additional environmental +variable, with a full path to BYOND cache. ``` -export BYOND_CACHE="E:/Libraries/Documents/BYOND/cache" -bin/tgui --dev +BYOND_CACHE="E:/Libraries/Documents/BYOND/cache" ``` -Note that in Windows, you have to go through Advanced System Settings, -System Properties and then open Environment Variables window to do the -same thing. You may need to reboot after this. +**Webpack errors out with some cryptic messages!** + +> Example: `No template for dependency: PureExpressionDependency` +Webpack stores its cache on disk since tgui 4.3, and it is very sensitive +to build configuration. So if you update webpack, or share the same cache +directory between development and production build, it will start +hallucinating. + +To fix this kind of problem, run `bin/tgui --clean` and try again. ## Developer Tools @@ -134,11 +141,11 @@ logs and time spent on rendering. Use this information to optimize your code, and try to keep re-renders below 16ms. **Kitchen Sink.** -Press `Ctrl+Alt+=` to open the KitchenSink interface. This interface is a +Press `F12` to open the KitchenSink interface. This interface is a playground to test various tgui components. **Layout Debugger.** -Press `Ctrl+Alt+-` to toggle the _layout debugger_. It will show outlines of +Press `F11` to toggle the *layout debugger*. It will show outlines of all tgui elements, which makes it easy to understand how everything comes together, and can reveal certain layout bugs which are not normally visible. @@ -149,30 +156,30 @@ together, and can reveal certain layout bugs which are not normally visible. - `/packages/tgui/index.js` - Application entry point. - `/packages/tgui/components` - Basic UI building blocks. - `/packages/tgui/interfaces` - Actual in-game interfaces. - Interface takes data via the `state` prop and outputs an html-like stucture, - which you can build using existing UI components. +Interface takes data via the `state` prop and outputs an html-like stucture, +which you can build using existing UI components. - `/packages/tgui/layouts` - Root level UI components, that affect the final - look and feel of the browser window. They usually hold various window - elements, like the titlebar and resize handlers, and control the UI theme. +look and feel of the browser window. They usually hold various window +elements, like the titlebar and resize handlers, and control the UI theme. - `/packages/tgui/routes.js` - This is where tgui decides which interface to - pull and render. +pull and render. - `/packages/tgui/layout.js` - A root-level component, holding the - window elements, like the titlebar, buttons, resize handlers. Calls - `routes.js` to decide which component to render. +window elements, like the titlebar, buttons, resize handlers. Calls +`routes.js` to decide which component to render. - `/packages/tgui/styles/main.scss` - CSS entry point. - `/packages/tgui/styles/functions.scss` - Useful SASS functions. - Stuff like `lighten`, `darken`, `luminance` are defined here. +Stuff like `lighten`, `darken`, `luminance` are defined here. - `/packages/tgui/styles/atomic` - Atomic CSS classes. - These are very simple, tiny, reusable CSS classes which you can use and - combine to change appearance of your elements. Keep them small. +These are very simple, tiny, reusable CSS classes which you can use and +combine to change appearance of your elements. Keep them small. - `/packages/tgui/styles/components` - CSS classes which are used - in UI components. These stylesheets closely follow the - [BEM](https://en.bem.info/methodology/) methodology. +in UI components. These stylesheets closely follow the +[BEM](https://en.bem.info/methodology/) methodology. - `/packages/tgui/styles/interfaces` - Custom stylesheets for your interfaces. - Add stylesheets here if you really need a fine control over your UI styles. +Add stylesheets here if you really need a fine control over your UI styles. - `/packages/tgui/styles/layouts` - Layout-related styles. - `/packages/tgui/styles/themes` - Contains all the various themes you can - use in tgui. Each theme must be registered in `webpack.config.js` file. +use in tgui. Each theme must be registered in `webpack.config.js` file. ## Component Reference @@ -180,8 +187,11 @@ See: [Component Reference](docs/component-reference.md). ## License -All code is licensed with the parent license of _tgstation_, **AGPL-3.0**. +Source code is covered by /tg/station's parent license - **AGPL-3.0** +(see the main [README](../README.md)), unless otherwise indicated. -See the main [README](../README.md) for more details. +Some files are annotated with a copyright header, which explicitly states +the copyright holder and license of the file. Most of the core tgui +source code is available under the **MIT** license. The Authors retain all copyright to their respective work here submitted. diff --git a/tgui/babel.config.js b/tgui/babel.config.js index 8b32d3ce491d..2dfafa259add 100644 --- a/tgui/babel.config.js +++ b/tgui/babel.config.js @@ -4,40 +4,37 @@ * @license MIT */ -const createBabelConfig = (options) => { - const { presets = [], plugins = [], removeConsole } = options; +const createBabelConfig = options => { + const { mode, presets = [], plugins = [] } = options; return { presets: [ - [ - require.resolve('@babel/preset-env'), - { - modules: 'commonjs', - useBuiltIns: 'entry', - corejs: '3', - spec: false, - loose: true, - targets: [], - }, - ], - require.resolve('@babel/preset-react'), + [require.resolve('@babel/preset-typescript'), { + allowDeclareFields: true, + }], + [require.resolve('@babel/preset-env'), { + modules: 'commonjs', + useBuiltIns: 'entry', + corejs: '3', + spec: false, + loose: true, + targets: [], + }], ...presets, - ].filter(Boolean), + ], plugins: [ - [ - require.resolve('@babel/plugin-proposal-class-properties'), - { - loose: true, - }, - ], + [require.resolve('@babel/plugin-transform-class-properties'), { + loose: true, + }], require.resolve('@babel/plugin-transform-jscript'), require.resolve('babel-plugin-inferno'), - removeConsole && require.resolve('babel-plugin-transform-remove-console'), + require.resolve('babel-plugin-transform-remove-console'), + require.resolve('common/string.babel-plugin.cjs'), ...plugins, - ].filter(Boolean), + ], }; }; -module.exports = (api) => { +module.exports = api => { api.cache(true); const mode = process.env.NODE_ENV; return createBabelConfig({ mode }); diff --git a/tgui/bin/tgui b/tgui/bin/tgui index eb1f200b31ea..30e59c052133 100755 --- a/tgui/bin/tgui +++ b/tgui/bin/tgui @@ -1,4 +1,7 @@ #!/bin/bash +## Copyright (c) 2020 Aleksej Komarov +## SPDX-License-Identifier: MIT + set -e shopt -s globstar shopt -s expand_aliases @@ -23,8 +26,14 @@ fi base_dir="$(dirname "$(tgui-realpath "${0}")")/.." base_dir="$(tgui-realpath "${base_dir}")" -## Add locally installed node programs to path -PATH="${PATH}:node_modules/.bin" +## Fall back to running Yarn from the repo +if ! hash yarn 2>/dev/null; then + yarn_releases=("${base_dir}"/.yarn/releases/yarn-*.cjs) + yarn_release="${yarn_releases[0]}" + yarn() { + node "${yarn_release}" "${@}" + } +fi ## Functions @@ -38,35 +47,68 @@ task-install() { ## Runs webpack task-webpack() { - cd "${base_dir}/packages/tgui" - webpack "${@}" + cd "${base_dir}" + yarn run webpack-cli "${@}" } ## Runs a development server task-dev-server() { - cd "${base_dir}/packages/tgui-dev-server" - exec node --experimental-modules index.js "${@}" + cd "${base_dir}" + yarn node --experimental-modules packages/tgui-dev-server/index.js "${@}" } ## Run a linter through all packages -task-eslint() { +task-lint() { + cd "${base_dir}" + yarn run tsc + echo "tgui: type check passed" + yarn run eslint packages --ext .js,.jsx,.ts,.tsx,.cjs,.mjs "${@}" + echo "tgui: eslint check passed" +} + +task-test() { + cd "${base_dir}" + yarn run jest +} + +task-prettier() { cd "${base_dir}" - eslint ./packages "${@}" + npx prettier --check packages --write "${@}" +} + +task-polyfill() { + cd "${base_dir}" + yarn tgui-polyfill:build } ## Mr. Proper task-clean() { cd "${base_dir}" - rm -rf packages/tgui/public/.tmp + echo "tgui: cleaning build artifacts" + ## Build artifacts + rm -rf public/.tmp + rm -f public/*.map + rm -f public/*.hot-update.* + echo "tgui: cleaning Yarn artifacts" + ## Yarn artifacts + rm -rf .yarn/cache + rm -rf .yarn/unplugged + rm -rf .yarn/webpack + rm -rf .yarn/build-state.yml + rm -rf .yarn/install-state.gz + rm -f .pnp.* + echo "tgui: cleaning NPM artifacts" + ## NPM artifacts rm -rf **/node_modules rm -f **/package-lock.json + echo "tgui: All artifacts cleaned" } ## Validates current build against the build stored in git task-validate-build() { cd "${base_dir}" local diff - diff="$(git diff packages/tgui/public/tgui.bundle.*)" + diff="$(git diff --text public/*)" if [[ -n ${diff} ]]; then echo "Error: our build differs from the build committed into git." echo "Please rebuild tgui." @@ -117,16 +159,6 @@ if [[ ${1} == "--install-git-hooks" ]]; then exit 0 fi -## Continuous integration scenario -if [[ ${1} == "--ci" ]]; then - task-clean - task-install - task-eslint - task-webpack --mode=production - task-validate-build - exit 0 -fi - if [[ ${1} == "--clean" ]]; then task-clean exit 0 @@ -142,14 +174,14 @@ fi if [[ ${1} == '--lint' ]]; then shift 1 task-install - task-eslint "${@}" + task-lint "${@}" exit 0 fi -if [[ ${1} == '--lint-harder' ]]; then +if [[ ${1} == '--fix' ]]; then shift 1 task-install - task-eslint -c .eslintrc-harder.yml "${@}" + task-lint --fix "${@}" exit 0 fi @@ -160,10 +192,46 @@ if [[ ${1} == '--analyze' ]]; then exit 0 fi +## Jest test +if [[ ${1} == '--test' ]]; then + shift 1 + task-install + task-test "${@}" + exit 0 +fi + +## Continuous integration scenario +if [[ ${1} == "--ci" ]]; then + task-clean + task-install + task-prettier + task-test "${@}" + task-lint + task-webpack --mode=production + task-validate-build + exit 0 +fi + +## Run prettier +if [[ ${1} == '--prettier' ]]; then + shift 1 + task-prettier "${@}" + exit 0 +fi + +## Run prettier +if [[ ${1} == '--tgui-polyfill' ]]; then + shift 1 + task-install + task-polyfill "${@}" + exit 0 +fi + ## Make a production webpack build if [[ -z ${1} ]]; then task-install - task-eslint + task-lint --fix + task-prettier task-webpack --mode=production exit 0 fi diff --git a/tgui/bin/tgui-build.bat b/tgui/bin/tgui-build.bat deleted file mode 100644 index b22d9bf5c724..000000000000 --- a/tgui/bin/tgui-build.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -cd "%~dp0\.." -call yarn install -call yarn prettier --write -call yarn run build -timeout /t 9 diff --git a/tgui/bin/tgui-clean.bat b/tgui/bin/tgui-clean.bat new file mode 100644 index 000000000000..70b9ba73721c --- /dev/null +++ b/tgui/bin/tgui-clean.bat @@ -0,0 +1,9 @@ +@echo off +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --clean %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui-dev-server.bat b/tgui/bin/tgui-dev-server.bat index 1b5bdcfb1db9..21b2ea4e962b 100644 --- a/tgui/bin/tgui-dev-server.bat +++ b/tgui/bin/tgui-dev-server.bat @@ -1,4 +1,9 @@ @echo off -cd "%~dp0\.." -call yarn install -call yarn run watch +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --dev %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui-formatting.bat b/tgui/bin/tgui-formatting.bat deleted file mode 100644 index 1fe87c1bf4c8..000000000000 --- a/tgui/bin/tgui-formatting.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off -cd "%~dp0\.." -call yarn install -call yarn prettier --write -timeout /t 9 diff --git a/tgui/bin/tgui-inspect-dev-tools.bat b/tgui/bin/tgui-inspect-dev-tools.bat new file mode 100644 index 000000000000..633dc3377f41 --- /dev/null +++ b/tgui/bin/tgui-inspect-dev-tools.bat @@ -0,0 +1,2 @@ +@echo off +start %systemroot%\system32\f12\IEChooser.exe diff --git a/tgui/bin/tgui.bat b/tgui/bin/tgui.bat new file mode 100644 index 000000000000..39aa279dcaa2 --- /dev/null +++ b/tgui/bin/tgui.bat @@ -0,0 +1,9 @@ +@echo off +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui_.ps1 b/tgui/bin/tgui_.ps1 new file mode 100644 index 000000000000..c310007a70a6 --- /dev/null +++ b/tgui/bin/tgui_.ps1 @@ -0,0 +1,192 @@ +## Copyright (c) 2020 Aleksej Komarov +## SPDX-License-Identifier: MIT + +## Initial set-up +## -------------------------------------------------------- + +## Enable strict mode and stop of first cmdlet error +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" +$PSDefaultParameterValues['*:ErrorAction'] = 'Stop' + +## Validates exit code of external commands +function Throw-On-Native-Failure { + if (-not $?) { + exit 1 + } +} + +## Normalize current directory +$basedir = Split-Path $MyInvocation.MyCommand.Path +$basedir = Resolve-Path "$($basedir)\.." +Set-Location $basedir +[Environment]::CurrentDirectory = $basedir + + +## Functions +## -------------------------------------------------------- + +function yarn { + $YarnRelease = Get-ChildItem -Filter ".yarn\releases\yarn-*.cjs" | Select-Object -First 1 + node ".yarn\releases\$YarnRelease" @Args + Throw-On-Native-Failure +} + +function Remove-Quiet { + Remove-Item -ErrorAction SilentlyContinue @Args +} + +function task-install { + yarn install +} + +## Runs webpack +function task-webpack { + yarn run webpack-cli @Args +} + +## Runs a development server +function task-dev-server { + yarn node --experimental-modules "packages/tgui-dev-server/index.js" @Args +} + +## Run a linter through all packages +function task-lint { + yarn run tsc + Write-Output "tgui: type check passed" + yarn run eslint packages --ext ".js,.jsx,.ts,.tsx,.cjs,.mjs" @Args + Write-Output "tgui: eslint check passed" +} + +function task-test { + yarn run jest +} + +function task-prettier { + npx prettier --check packages --write @Args +} + +function task-polyfill { + yarn tgui-polyfill:build +} + +## Mr. Proper +function task-clean { + ## Build artifacts + Write-Output "tgui: cleaning build artifacts" + Remove-Quiet -Recurse -Force "public\.tmp" + Remove-Quiet -Force "public\*.map" + Remove-Quiet -Force "public\*.hot-update.*" + Write-Output "tgui: cleaning Yarn artifacts" + ## Yarn artifacts + Remove-Quiet -Recurse -Force ".yarn\cache" + Remove-Quiet -Recurse -Force ".yarn\unplugged" + Remove-Quiet -Recurse -Force ".yarn\webpack" + Remove-Quiet -Force ".yarn\build-state.yml" + Remove-Quiet -Force ".yarn\install-state.gz" + Remove-Quiet -Force ".yarn\install-target" + Remove-Quiet -Force ".pnp.*" + Write-Output "tgui: cleaning NPM artifacts" + ## NPM artifacts + Get-ChildItem -Path "." -Include "node_modules" -Recurse -File:$false | Remove-Item -Recurse -Force + Remove-Quiet -Force "package-lock.json" + Write-Output "tgui: All artifacts cleaned" +} + +## Validates current build against the build stored in git +function task-validate-build { + $diff = git diff --text public/* + if ($diff) { + Write-Output "Error: our build differs from the build committed into git." + Write-Output "Please rebuild tgui." + exit 1 + } + Write-Output "tgui: build is ok" +} + +## Main +## -------------------------------------------------------- + +if ($Args.Length -gt 0) { + if ($Args[0] -eq "--clean") { + task-clean + exit 0 + } + + if ($Args[0] -eq "--dev") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-dev-server @Rest + exit 0 + } + + if ($Args[0] -eq "--lint") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-lint @Rest + exit 0 + } + + if ($Args[0] -eq "--fix") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-lint --fix @Rest + exit 0 + } + + ## Analyze the bundle + if ($Args[0] -eq "--analyze") { + task-install + task-webpack --mode=production --analyze + exit 0 + } + + ## Jest test + if ($Args[0] -eq "--test") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-test @Rest + exit 0 + } + + ## Continuous integration scenario + if ($Args[0] -eq "--ci") { + $Rest = $Args | Select-Object -Skip 1 + task-clean + task-install + task-prettier + task-test @Rest + task-lint + task-webpack --mode=production + task-validate-build + exit 0 + } + + ## ## Run prettier + if ($Args[0] -eq "--prettier") { + $Rest = $Args | Select-Object -Skip 1 + task-prettier @Rest + exit 0 + } + + ## ## Run prettier + if ($Args[0] -eq "--tgui-polyfill") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-polyfill @Rest + exit 0 + } +} + +## Make a production webpack build +if ($Args.Length -eq 0) { + task-install + task-lint --fix + task-prettier + task-webpack --mode=production + exit 0 +} + +## Run webpack with custom flags +task-install +task-webpack @Args diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index c892cb628be9..02af4e3aee99 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -28,6 +28,7 @@ Make sure to add new items to this list if you document new components. - [`Grid`](#grid) - [`Grid.Column`](#gridcolumn) - [`Icon`](#icon) + - [`Icon.Stack`](#iconstack) - [`Input`](#input) - [`Knob`](#knob) - [`LabeledControls`](#labeledcontrols) @@ -39,8 +40,10 @@ Make sure to add new items to this list if you document new components. - [`NoticeBox`](#noticebox) - [`NumberInput`](#numberinput) - [`ProgressBar`](#progressbar) + - [`RoundGauge`](#roundgauge) - [`Section`](#section) - [`Slider`](#slider) + - [`Stack`](#stack) - [`Table`](#table) - [`Table.Row`](#tablerow) - [`Table.Cell`](#tablecell) @@ -65,16 +68,16 @@ Event handlers are callbacks that you can attack to various element to listen for browser events. Inferno supports camelcase (`onClick`) and lowercase (`onclick`) event names. -- Camel case names are what's called _synthetic_ events, and are the - **preferred way** of handling events in React, for efficiency and - performance reasons. Please read - [Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) - to understand what this is about. +- Camel case names are what's called *synthetic* events, and are the +**preferred way** of handling events in React, for efficiency and +performance reasons. Please read +[Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) +to understand what this is about. - Lower case names are native browser events and should be used sparingly, - for example when you need an explicit IE8 support. **DO NOT** use - lowercase event handlers unless you really know what you are doing. +for example when you need an explicit IE8 support. **DO NOT** use +lowercase event handlers unless you really know what you are doing. - [Button](#button) component does not support the lowercase `onclick` event. - Use the camel case `onClick` instead. +Use the camel case `onClick` instead. ## `tgui/components` @@ -86,13 +89,13 @@ This component provides animations for numeric values. - `value: number` - Value to animate. - `initial: number` - Initial value to use in animation when element - first appears. If you set initial to `0` for example, number will always - animate starting from `0`, and if omitted, it will not play an initial - animation. +first appears. If you set initial to `0` for example, number will always +animate starting from `0`, and if omitted, it will not play an initial +animation. - `format: value => value` - Output formatter. - Example: `value => Math.round(value)`. - `children: (formattedValue, rawValue) => any` - Pull the animated number to - animate more complex things deeper in the DOM tree. +animate more complex things deeper in the DOM tree. - Example: `(_, value) => ` ### `BlockQuote` @@ -128,7 +131,9 @@ To workaround this problem, the Box children accept a render props function. This way, `Button` can pull out the `className` generated by the `Box`. ```jsx -{(props) => ``` -Flex item with `grow` property serves as a "filler", to separate the other -two flex items as far as possible from each other. +Flex item with `grow` property will grow to take all available empty space, +while flex items without grow will take the minimum amount of space. This +effectively places the last flex item to the very end of the flex container. **Props:** - See inherited props: [Box](#box) -- `spacing: number` - Spacing between flex items, in integer units - (1 unit - 0.5em). Does not directly relate to a flex css property - (adds a modifier class under the hood), and only integer numbers are - supported. +- ~~`spacing: number`~~ - **Removed in tgui 4.3**, +use [Stack](#stack) instead. - `inline: boolean` - Makes flexbox container inline, with similar behavior - to an `inline` property on a `Box`. +to an `inline` property on a `Box`. - `direction: string` - This establishes the main-axis, thus defining the - direction flex items are placed in the flex container. +direction flex items are placed in the flex container. - `row` (default) - left to right. - `row-reverse` - right to left. - `column` - top to bottom. - `column-reverse` - bottom to top. - `wrap: string` - By default, flex items will all try to fit onto one line. - You can change that and allow the items to wrap as needed with this property. +You can change that and allow the items to wrap as needed with this property. - `nowrap` (default) - all flex items will be on one line - `wrap` - flex items will wrap onto multiple lines, from top to bottom. - `wrap-reverse` - flex items will wrap onto multiple lines from bottom to top. @@ -421,22 +426,22 @@ two flex items as far as possible from each other. - `center` - items are centered on the cross axis. - `baseline` - items are aligned such as their baselines align. - `justify: string` - This defines the alignment along the main axis. - It helps distribute extra free space leftover when either all the flex - items on a line are inflexible, or are flexible but have reached their - maximum size. It also exerts some control over the alignment of items - when they overflow the line. +It helps distribute extra free space leftover when either all the flex +items on a line are inflexible, or are flexible but have reached their +maximum size. It also exerts some control over the alignment of items +when they overflow the line. - `flex-start` (default) - items are packed toward the start of the - flex-direction. + flex-direction. - `flex-end` - items are packed toward the end of the flex-direction. - `space-between` - items are evenly distributed in the line; first item is - on the start line, last item on the end line + on the start line, last item on the end line - `space-around` - items are evenly distributed in the line with equal space - around them. Note that visually the spaces aren't equal, since all the items - have equal space on both sides. The first item will have one unit of space - against the container edge, but two units of space between the next item - because that next item has its own spacing that applies. + around them. Note that visually the spaces aren't equal, since all the items + have equal space on both sides. The first item will have one unit of space + against the container edge, but two units of space between the next item + because that next item has its own spacing that applies. - `space-evenly` - items are distributed so that the spacing between any two - items (and the space to the edges) is equal. + items (and the space to the edges) is equal. - TBD (not all properties are supported in IE11). ### `Flex.Item` @@ -445,24 +450,24 @@ two flex items as far as possible from each other. - See inherited props: [Box](#box) - `order: number` - By default, flex items are laid out in the source order. - However, the order property controls the order in which they appear in the - flex container. -- `grow: number` - This defines the ability for a flex item to grow if - necessary. It accepts a unitless value that serves as a proportion. It - dictates what amount of the available space inside the flex container the - item should take up. This number is unit-less and is relative to other - siblings. -- `shrink: number` - This defines the ability for a flex item to shrink - if necessary. Inverse of `grow`. -- `basis: string` - This defines the default size of an element before any - flex-related calculations are done. Has to be a length (e.g. `20%`, `5rem`), - an `auto` or `content` keyword. +However, the order property controls the order in which they appear in the +flex container. +- `grow: number | boolean` - This defines the ability for a flex item to grow +if necessary. It accepts a unitless value that serves as a proportion. It +dictates what amount of the available space inside the flex container the +item should take up. This number is unit-less and is relative to other +siblings. +- `shrink: number | boolean` - This defines the ability for a flex item to +shrink if necessary. Inverse of `grow`. +- `basis: number | string` - This defines the default size of an element +before any flex-related calculations are done. Has to be a length +(e.g. `20%`, `5rem`), an `auto` or `content` keyword. - **Important:** IE11 flex is buggy, and auto width/height calculations - can sometimes end up in a circular dependency. This usually happens, when - working with tables inside flex (they have wacky internal widths and such). - Setting basis to `0` breaks the loop and fixes all of the problems. + can sometimes end up in a circular dependency. This usually happens, when + working with tables inside flex (they have wacky internal widths and such). + Setting basis to `0` breaks the loop and fixes all of the problems. - `align: string` - This allows the default alignment (or the one specified by - align-items) to be overridden for individual flex items. See: [Flex](#flex). +align-items) to be overridden for individual flex items. See: [Flex](#flex). ### `Grid` @@ -478,10 +483,14 @@ Example: ```jsx -
        Hello world!
        +
        + Hello world! +
        -
        Hello world!
        +
        + Hello world! +
        ``` @@ -507,7 +516,6 @@ Renders one of the FontAwesome icons of your choice. To smoothen the transition from v4 to v5, we have added a v4 semantic to transform names with `-o` suffixes to FA Regular icons. For example: - - `square` will get transformed to `fas square` - `square-o` will get transformed to `far square` @@ -516,10 +524,26 @@ transform names with `-o` suffixes to FA Regular icons. For example: - See inherited props: [Box](#box) - `name: string` - Icon name. - `size: number` - Icon size. `1` is normal size, `2` is two times bigger. - Fractional numbers are supported. +Fractional numbers are supported. - `rotation: number` - Icon rotation, in degrees. - `spin: boolean` - Whether an icon should be spinning. Good for load - indicators. +indicators. + +### `Icon.Stack` + +Renders children icons on top of each other in order to make your own icon. + +```jsx + + + + +``` + +**Props:** + +- See inherited props: [Box](#box) +- `children: Icon` - Icons to stack. ### `Input` @@ -533,12 +557,12 @@ A basic text input, which allow users to enter text into a UI. - See inherited props: [Box](#box) - `value: string` - Value of an input. - `placeholder: string` - Text placed into Input box when it's empty, - otherwise nothing. Clears automatically when focused. +otherwise nothing. Clears automatically when focused. - `fluid: boolean` - Fill all available horizontal space. - `selfClear: boolean` - Clear after hitting enter, as well as remain focused - when this happens. Useful for things like chat inputs. +when this happens. Useful for things like chat inputs. - `onChange: (e, value) => void` - An event, which fires when you commit - the text by either unfocusing the input box, or by pressing the Enter key. +the text by either unfocusing the input box, or by pressing the Enter key. - `onInput: (e, value) => void` - An event, which fires on every keypress. ### `Knob` @@ -554,30 +578,40 @@ Single click opens an input box to manually type in a number. - `animated: boolean` - Animates the value if it was changed externally. - `bipolar: boolean` - Knob can be bipolar or unipolar. - `size: number` - Relative size of the knob. `1` is normal size, `2` is two - times bigger. Fractional numbers are supported. +times bigger. Fractional numbers are supported. - `color: string` - Color of the outer ring around the knob. - `value: number` - Value itself, controls the position of the cursor. - `unit: string` - Unit to display to the right of value. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `fillValue: number` - If set, this value will be used to set the fill - percentage of the outer ring independently of the main value. +percentage of the outer ring independently of the main value. - `ranges: { color: [from, to] }` - Applies a `color` to the outer ring around - the knob based on whether the value lands in the range between `from` and `to`. - See an example of this prop in [ProgressBar](#progressbar). +the knob based on whether the value lands in the range between `from` and `to`. +See an example of this prop in [ProgressBar](#progressbar). - `step: number` (default: 1) - Adjust value by this amount when - dragging the input. +dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs - to travel to adjust value by one `step`. +to travel to adjust value by one `step`. - `format: value => value` - Format value using this function before - displaying it. +displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input - will hold off from updating while events propagate through the backend. - Default is about 250ms, increase it if you still see flickering. +will hold off from updating while events propagate through the backend. +Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release - the input, or successfully enter a number. +the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms - when you drag the input up and down, on release and on manual editing. +when you drag the input up and down, on release and on manual editing. + +### `Popper` + +Popper lets you position elements so that they don't go out of the bounds of the window. See [popper.js](https://popper.js.org/) for more information. + +**Props:** + +- `popperContent: InfernoNode` - The content that will be put inside the popper. +- `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options], but the one you want most is `placement`. Valid placements are "bottom", "top", "left", and "right". You can affix "-start" and "-end" to achieve something like top left or top right respectively. You can also use "auto" (with an optional "-start" or "-end"), where a best fit will be chosen. +- `additionalStyles: { ... }` - A map of CSS styles to add to the element that will contain the popper. ### `LabeledControls` @@ -605,7 +639,9 @@ column is labels, and second column is content. ```jsx - Content + + Content + ``` @@ -614,7 +650,13 @@ to perform some sort of action), there is a way to do that: ```jsx - }> + + Click me! + + )}> Content @@ -631,7 +673,7 @@ to perform some sort of action), there is a way to do that: - `label: string` - Item label. - `color: string` - Sets the color of the text. - `buttons: any` - Buttons to render aside the content. -- `content/children: any` - Content of this labeled item. +- `children: any` - Content of this labeled item. ### `LabeledList.Divider` @@ -641,7 +683,9 @@ Example: ```jsx - Content + + Content + ``` @@ -687,22 +731,22 @@ to fine tune the value, or single click it to manually type a number. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `step: number` (default: 1) - Adjust value by this amount when - dragging the input. +dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs - to travel to adjust value by one `step`. +to travel to adjust value by one `step`. - `width: string|number` - Width of the element, in `Box` units or pixels. - `height: string|numer` - Height of the element, in `Box` units or pixels. - `lineHeight: string|number` - lineHeight of the element, in `Box` units or pixels. - `fontSize: string|number` - fontSize of the element, in `Box` units or pixels. - `format: value => value` - Format value using this function before - displaying it. +displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input - will hold off from updating while events propagate through the backend. - Default is about 250ms, increase it if you still see flickering. +will hold off from updating while events propagate through the backend. +Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release - the input, or successfully enter a number. +the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms - when you drag the input up and down, on release and on manual editing. +when you drag the input up and down, on release and on manual editing. ### `ProgressBar` @@ -721,21 +765,52 @@ Usage of `ranges` prop: average: [0.25, 0.5], bad: [-Infinity, 0.25], }} - value={0.6} -/> + value={0.6} /> ``` **Props:** - `value: number` - Current progress as a floating point number between - `minValue` (default: 0) and `maxValue` (default: 1). Determines the - percentage and how filled the bar is. +`minValue` (default: 0) and `maxValue` (default: 1). Determines the +percentage and how filled the bar is. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `ranges: { color: [from, to] }` - Applies a `color` to the progress bar - based on whether the value lands in the range between `from` and `to`. +based on whether the value lands in the range between `from` and `to`. - `color: string` - Color of the progress bar. -- `content/children: any` - Content to render inside the progress bar. +- `children: any` - Content to render inside the progress bar. + +### `RoundGauge` + +The RoundGauge component provides a visual representation of a single metric, as well as being capable of showing informational or cautionary boundaries related to that metric. + +```jsx + +``` + +The alert on the gauge is optional, and will only be shown if the `alertAfter` prop is defined. When defined, the alert will begin to flash the respective color upon which the needle currently rests, as defined in the `ranges` prop. + +**Props:** + +- See inherited props: [Box](#box) +- `value: number` - The current value of the metric. +- `minValue: number` (default: 0) - The lower bound of the guage. +- `maxValue: number` (default: 1) - The upper bound of the guage. +- `ranges: { color: [from, to] }` (default: `{ "good": [0, 1] }`) - Provide regions of the guage to color between two specified values of the metric. +- `alertAfter: number` (optional) - When provided, will cause an alert symbol on the gauge to begin flashing in the color upon which the needle currently rest, as defined in `ranges`. +- `format: function(value) => string` (optional) - When provided, will be used to format the value of the metric for display. +- `size: number` (default: 1) - When provided scales the gauge. ### `Section` @@ -748,14 +823,22 @@ clearly indicates hierarchy. Section can also be titled to clearly define its purpose. ```jsx -
        Here you can order supply crates.
        +
        + Here you can order supply crates. +
        ``` If you want to have a button on the right side of an section title (for example, to perform some sort of action), there is a way to do that: ```jsx -
        }> +
        + Send shuttle + + )}> Here you can order supply crates.
        ``` @@ -763,9 +846,12 @@ If you want to have a button on the right side of an section title - See inherited props: [Box](#box) - `title: string` - Title of the section. - `level: number` - Section level in hierarchy. Default is 1, higher number - means deeper level of nesting. Must be an integer number. +means deeper level of nesting. Must be an integer number. - `buttons: any` - Buttons to render aside the section title. -- `content/children: any` - Content of this section. +- `fill: boolean` - If true, fills all available vertical space. +- `fitted: boolean` - If true, removes all section padding. +- `scrollable: boolean` - Shows or hides the scrollbar. +- `children: any` - Content of this section. ### `Slider` @@ -784,23 +870,93 @@ Single click opens an input box to manually type in a number. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `fillValue: number` - If set, this value will be used to set the fill - percentage of the progress bar filler independently of the main value. +percentage of the progress bar filler independently of the main value. - `ranges: { color: [from, to] }` - Applies a `color` to the slider - based on whether the value lands in the range between `from` and `to`. - See an example of this prop in [ProgressBar](#progressbar). +based on whether the value lands in the range between `from` and `to`. +See an example of this prop in [ProgressBar](#progressbar). - `step: number` (default: 1) - Adjust value by this amount when - dragging the input. +dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs - to travel to adjust value by one `step`. +to travel to adjust value by one `step`. - `format: value => value` - Format value using this function before - displaying it. +displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input - will hold off from updating while events propagate through the backend. - Default is about 250ms, increase it if you still see flickering. +will hold off from updating while events propagate through the backend. +Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release - the input, or successfully enter a number. +the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms - when you drag the input up and down, on release and on manual editing. +when you drag the input up and down, on release and on manual editing. + +### `Stack` + +A higher-level component, that is based on [Flex](#flex). The main difference +from `Flex`, is that this component automatically adds spacing between +all stack items, reducing the boilerplate that you have to write! + +Consists of two elements: `` and ``. + +Stacks can be vertical by adding a `vertical` property. + +**Example:** + +```jsx + + + Button description + + + + + +``` + +**Example of a high-level window layout:** + +Stacks can be used for high level window layout. +Make sure to use the `fill` property. + +```jsx + + + + +
        + Sidebar +
        +
        + + + +
        + Main content +
        +
        + +
        + Bottom pane +
        +
        +
        +
        +
        +
        +
        +``` + +**Props:** + +- See inherited props: [Flex](#flex) +- `fill: boolean` - If set, stack will fill all available height. +- `vertical: boolean` - If set, stack will work in vertical mode. + +### `Stack.Item` + +**Props:** + +- See inherited props: [Flex.Item](#flexitem) ### `Table` @@ -813,7 +969,9 @@ Example: ```jsx - Hello world! + + Hello world! + Label @@ -842,7 +1000,7 @@ A straight forward mapping to `
        ` element. - See inherited props: [Box](#box) - `collapsing: boolean` - Collapses table cell to the smallest possible size, - and stops any text inside from wrapping. +and stops any text inside from wrapping. ### `Tabs` @@ -878,7 +1036,9 @@ Tabs also support a vertical configuration. This is usually paired with a ```jsx - ... + + ... + Tab content. @@ -890,7 +1050,7 @@ Tabs also support a vertical configuration. This is usually paired with a - See inherited props: [Box](#box) - `vertical: boolean` - Use a vertical configuration, where tabs will be - stacked vertically. +stacked vertically. - `children: Tab[]` - This component only accepts tabs as its children. ### `Tabs.Tab` @@ -902,8 +1062,8 @@ a lot of `Button` props. - See inherited props: [Button](#button) - `altSelection` - Whether the tab buttons select via standard select (color - change) or by adding a white indicator to the selected tab. - Intended for usage on interfaces where tab color has relevance. +change) or by adding a white indicator to the selected tab. +Intended for usage on interfaces where tab color has relevance. - `icon: string` - Tab icon. - `children: any` - Tab text. - `onClick: function` - Called when element is clicked. @@ -919,17 +1079,18 @@ it is recommended to use that prop instead. Usage: ```jsx - - Sample text. - - + + + Sample text. + + ``` **Props:** -- `position: string` - Tooltip position. -- `content/children: string` - Content of the tooltip. Must be a plain string. - Fragments or other elements are **not** supported. +- `position?: string` - Tooltip position. See [`Popper`](#Popper) for valid options. Defaults to "auto". +- `content: string` - Content of the tooltip. Must be a plain string. +Fragments or other elements are **not** supported. ## `tgui/layouts` @@ -942,21 +1103,27 @@ it in one way or another. Example: ```jsx - - Hello, world! + + + Hello, world! + ``` **Props:** +- See inherited props: [Box](#box) - `className: string` - Applies a CSS class to the element. - `theme: string` - A name of the theme. - For a list of themes, see `packages/tgui/styles/themes`. -- `resizable: boolean` - Controls resizability of the window. +- `title: string` - Window title. +- `width: number` - Window width. +- `height: number` - Window height. +- `noClose: boolean` - Controls the ability to close the window. - `children: any` - Child elements, which are rendered directly inside the - window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, - they should be put as direct childs of a Window, otherwise you should be - putting your content into [Window.Content](#windowcontent). +window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, +they should be put as direct childs of a Window, otherwise you should be +putting your content into [Window.Content](#windowcontent). ### `Window.Content` @@ -965,6 +1132,8 @@ Can be scrollable. **Props:** +- See inherited props: [Box](#box) - `className: string` - Applies a CSS class to the element. +- `fitted: boolean` - If true, removes all padding. - `scrollable: boolean` - Shows or hides the scrollbar. - `children: any` - Main content of your window. diff --git a/tgui/docs/migration-to-v4-from-v3.md b/tgui/docs/migration-to-v4-from-v3.md new file mode 100644 index 000000000000..6f047a6cc7ef --- /dev/null +++ b/tgui/docs/migration-to-v4-from-v3.md @@ -0,0 +1,91 @@ +# tgui Migration Guide to v4 from v3 + +## The Easy Part + +- Copy and replace the following files in bulk: + - `code/__DEFINES/tgui.dm` + - `code/controllers/subsystem/tgui.dm` + - `code/modules/tgui/**` + - `tgui/**` + - Except: `tgui/packages/tgui/interfaces` + - Manually resolve conflicts for files that were touched outside the + `interfaces` folder. +- Copy the updated `log_tgui` proc from: + - `code/__HELPERS/_logging.dm` + +If you have a dual nano/tgui setup, then make sure to rename all ui procs +on `/datum`, such as `ui_interact` to `tgui_interact`, to avoid namespace +clashing. Usual stuff. + +## Update `ui_interact` proc signatures + +First of all, tgui states need to move from `ui_interact` to `ui_state`. + +One way of doing it, is to just cherry pick those procs from upstream. + +If you want to search and replace manually, search for `state = GLOB`, and +extract those things into `ui_state` procs like so: + +```dm +.../ui_state(mob/user) + return GLOB.default_state +``` + +Then reduce `ui_interact` until you finish with something like this: + +```dm +.../ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "FooBar", "Foo Bar UI", 600, 400) + ui.open() +``` + +## Update asset delivery code + +Remove all asset code that injects stylesheets by modifying tgui's `basehtml`. +You no longer need to do that. + +Find all occurences of `asset.send(user)` in `ui_interact`, and refactor those +snippets to the following proc: + +```dm +.../ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/foobar), + ) +``` + +## Check `ui_act` for new bugs + +Code behind `ui_act` was recently refactored to use JSON-encoded payloads +instead of just strings. Since it can now carry numbers and other complex +types, you should check that the code is type agnostic and does not break +due to an assumption that every parameter is a string. + +One of such offenders is the personal crafting interface, where it needlessly +compares parameters to `""` and `"0"`. You can now replace this code with +simple assignments, because an empty category will now be properly `null` +instead of an empty string. + +## Backend data changes + +Interfaces that relied on `config.window.id`, must now use +`window.__windowId__`, which is a global constant unique for the page +the script is running on (so you can be sure it never changes). + +In case of `ByondUi`, this parameter can be completely omitted, because +parent will always default to the current window id. + +Affected interfaces: + +- `CameraConsole` +- Any interface that uses the `ByondUi` component + +--- + +That's all folks! + +There is a lot of stuff that was refactored under the hood, but normal UI +stuff wouldn't and shouldn't touch it, so you should be good with just +going through the checklist above. diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index aeda9b57330d..dea1ede59452 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -5,23 +5,23 @@ Basic tgui backend code consists of the following vars and procs: ``` -ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, - datum/tgui/master_ui, datum/ui_state/state) +ui_interact(mob/user, datum/tgui/ui) ui_data(mob/user) ui_act(action, params) +ui_state() ``` - `src_object` - The atom, which UI corresponds to in the game world. - `ui_interact` - The proc where you will handle a request to open an - interface. Typically, you would update an existing UI (if it exists), - or set up a new instance of UI by calling the `SStgui` subsystem. +interface. Typically, you would update an existing UI (if it exists), +or set up a new instance of UI by calling the `SStgui` subsystem. - `ui_data` - In this proc you munges whatever complex data your `src_object` - has into an associative list, which will then be sent to UI as a JSON string. +has into an associative list, which will then be sent to UI as a JSON string. - `ui_act` - This proc receives user actions and reacts to them by changing - the state of the game. -- `ui_state` (set in `ui_interact`) - This var dictates under what conditions - a UI may be interacted with. This may be the standard checks that check if - you are in range and conscious, or more. +the state of the game. +- `ui_state` - This proc dictates under what conditions a UI may be interacted +with. This may be the standard checks that check if you are in range and +conscious, or more. Once backend is complete, you create an new interface component on the frontend, which will receive this JSON data and render it on screen. @@ -37,10 +37,10 @@ powerful interactions for embedded objects or remote access. Let's start with a very basic hello world. ```dm -/obj/machinery/my_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/my_machine/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "my_machine", name, 300, 300, master_ui, state) + ui = new(user, src, "MyMachine") ui.open() ``` @@ -48,9 +48,7 @@ This is the proc that defines our interface. There's a bit going on here, so let's break it down. First, we override the ui_interact proc on our object. This will be called by `interact` for you, which is in turn called by `attack_hand` (or `attack_self` for items). `ui_interact` is also called to update a UI (hence -the `try_update_ui`), so we accept an existing UI to update. The `state` is a -default argument so that a caller can overload it with named arguments -(`ui_interact(state = overloaded_state)`) if needed. +the `try_update_ui`), so we accept an existing UI to update. Inside the `if(!ui)` block (which means we are creating a new UI), we choose our template, title, and size; we can also set various options like `style` (for @@ -124,19 +122,25 @@ import { Window } from '../layouts'; export const SampleInterface = (props, context) => { const { act, data } = useBackend(context); // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; + const { + health, + color, + } = data; return (
        - {health} - {color} + + {health} + + + {color} +
        @@ -149,22 +153,22 @@ export const SampleInterface = (props, context) => { Here are the key variables you get from a `useBackend(context)` function: - `config` is part of core tgui. It contains meta-information about the - interface and who uses it, BYOND refs to various objects, and so forth. - You are rarely going to use it, but sometimes it can be used to your - advantage when doing complex UIs. +interface and who uses it, BYOND refs to various objects, and so forth. +You are rarely going to use it, but sometimes it can be used to your +advantage when doing complex UIs. - `data` is the data returned from `ui_data` and `ui_static_data` procs in - your DM code. Pretty straight forward. +your DM code. Pretty straight forward. - Note, that javascript doesn't have associative arrays, so when you - return an associative list from DM, it will be available in `data` as a - javascript object instead of an array. You can use it normally - like so: `object.key`, so it's not a problem if it's representing a - data structure, but common `Array` methods, such as `array.map(item => ...)`, - are not available on it. Always prefer returning clean arrays from your - code, since arrays are easier to work with in javascript! + return an associative list from DM, it will be available in `data` as a + javascript object instead of an array. You can use it normally + like so: `object.key`, so it's not a problem if it's representing a + data structure, but common `Array` methods, such as `array.map(item => ...)`, + are not available on it. Always prefer returning clean arrays from your + code, since arrays are easier to work with in javascript! - `act(name, params)` is a function, which you can call to dispatch an action - to your DM code. It will be processed in `ui_act` proc. Action name will be - available in `params["action"]`, mixed together with the rest of parameters - you have passed in `params` object. +to your DM code. It will be processed in `ui_act` proc. Action name will be +available in `params["action"]`, mixed together with the rest of parameters +you have passed in `params` object. **Let's talk about the syntax.** @@ -175,19 +179,17 @@ expressions that look like html, and turns them into function calls. Take a look at this example: ```jsx -
        You are in {status} condition!
        +
        + You are in {status} condition! +
        ``` After compiling the code above, this is what it becomes: ```js -createElement( - 'div', +createElement('div', { className: 'color-' + status }, - 'You are in ', - status, - ' condition!' -); + 'You are in ', status, ' condition!'); ``` It is very important to remember, that JSX is just a javascript expression @@ -208,7 +210,11 @@ to a `` element. If `showProgress` is `false`, the whole expression evaluates to `false`, and `false` is not rendered by React. ```jsx -{showProgress && } + + {showProgress && ( + + )} + ``` You can also use the `||` operator (the logical OR), which works the same way, @@ -221,8 +227,10 @@ and builds a new array based on what was returned by that function. ```jsx - {items.map((item) => ( - + {items.map(item => ( + {item.content} ))} @@ -255,13 +263,22 @@ export const SampleInterface = (props, context) => { const HealthStatus = (props, context) => { const { act, data } = useBackend(context); - const { user } = props; - const { health, color } = data; + const { + user, + } = props; + const { + health, + color, + } = data; return ( -
        +
        - {health} - {color} + + {health} + + + {color} +
        ); @@ -275,10 +292,10 @@ here's what you need (note that you'll probably be forced to clean your shit up upon code review): ```dm -/obj/copypasta/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) // Remember to use the appropriate state. - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/copypasta/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "copypasta", name, 300, 300, master_ui, state) + ui = new(user, src, "copypasta") ui.open() /obj/copypasta/ui_data(mob/user) @@ -308,19 +325,25 @@ import { Window } from '../layouts'; export const SampleInterface = (props, context) => { const { act, data } = useBackend(context); // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; + const { + health, + color, + } = data; return (
        - {health} - {color} + + {health} + + + {color} +
        diff --git a/tgui/docs/writing-tests.md b/tgui/docs/writing-tests.md new file mode 100644 index 000000000000..99cb39e158a9 --- /dev/null +++ b/tgui/docs/writing-tests.md @@ -0,0 +1,23 @@ +## Jest + +You can now write and run unit tests in tgui. + +It's quite simple: create a file ending in `.test.ts` or `.spec.ts` (usually with the same filename as the file you're testing), and create a test case: + +```js +test('something', () => { + expect('a').toBe('a'); +}); +``` + +To run the tests, type the following into the terminal: + +``` +bin/tgui --test +``` + +There is an example test in `packages/common/react.spec.ts`. + +You can read more about Jest here: https://jestjs.io/docs/en/getting-started + +Note, that there is still no real solution to test UIs for now, even though a lot of the support is here (jest + jsdom). That will come later. diff --git a/tgui/global.d.ts b/tgui/global.d.ts new file mode 100644 index 000000000000..542788717ab6 --- /dev/null +++ b/tgui/global.d.ts @@ -0,0 +1,203 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +// Webpack asset modules. +// Should match extensions used in webpack config. +declare module '*.png' { + const content: string; + export default content; +} + +declare module '*.jpg' { + const content: string; + export default content; +} + +declare module '*.svg' { + const content: string; + export default content; +} + +namespace JSX { + interface IntrinsicElements { + marquee: any; + blink: any; + } +} + +type TguiMessage = { + type: string; + payload?: any; + [key: string]: any; +}; + +type ByondType = { + /** + * ID of the Byond window this script is running on. + * Can be used as a parameter to winget/winset. + */ + windowId: string; + + /** + * True if javascript is running in BYOND. + */ + IS_BYOND: boolean; + + /** + * Version of Trident engine of Internet Explorer. Null if N/A. + */ + TRIDENT: number | null; + + /** + * True if browser is IE8 or lower. + */ + IS_LTE_IE8: boolean; + + /** + * True if browser is IE9 or lower. + */ + IS_LTE_IE9: boolean; + + /** + * True if browser is IE10 or lower. + */ + IS_LTE_IE10: boolean; + + /** + * True if browser is IE11 or lower. + */ + IS_LTE_IE11: boolean; + + /** + * If `true`, unhandled errors and common mistakes result in a blue screen + * of death, which stops this window from handling incoming messages and + * closes the active instance of tgui datum if there was one. + * + * It can be defined in window.initialize() in DM, or changed in runtime + * here via this property to `true` or `false`. + * + * It is recommended that you keep this ON to detect hard to find bugs. + */ + strictMode: boolean; + + /** + * Makes a BYOND call. + * + * If path is empty, this will trigger a Topic call. + * You can reference a specific object by setting the "src" parameter. + * + * See: https://secure.byond.com/docs/ref/skinparams.html + */ + call(path: string, params: object): void; + + /** + * Makes an asynchronous BYOND call. Returns a promise. + */ + callAsync(path: string, params: object): Promise; + + /** + * Makes a Topic call. + * + * You can reference a specific object by setting the "src" parameter. + */ + topic(params: object): void; + + /** + * Runs a command or a verb. + */ + command(command: string): void; + + /** + * Retrieves all properties of the BYOND skin element. + * + * Returns a promise with a key-value object containing all properties. + */ + winget(id: string | null): Promise; + + /** + * Retrieves all properties of the BYOND skin element. + * + * Returns a promise with a key-value object containing all properties. + */ + winget(id: string | null, propName: '*'): Promise; + + /** + * Retrieves an exactly one property of the BYOND skin element, + * as defined in `propName`. + * + * Returns a promise with the value of that property. + */ + winget(id: string | null, propName: string): Promise; + + /** + * Retrieves multiple properties of the BYOND skin element, + * as defined in the `propNames` array. + * + * Returns a promise with a key-value object containing listed properties. + */ + winget(id: string | null, propNames: string[]): Promise; + + /** + * Assigns properties to BYOND skin elements in bulk. + */ + winset(props: object): void; + + /** + * Assigns properties to the BYOND skin element. + */ + winset(id: string | null, props: object): void; + + /** + * Sets a property on the BYOND skin element to a certain value. + */ + winset(id: string | null, propName: string, propValue: any): void; + + /** + * Parses BYOND JSON. + * + * Uses a special encoding to preserve `Infinity` and `NaN`. + */ + parseJson(text: string): any; + + /** + * Sends a message to `/datum/tgui_window` which hosts this window instance. + */ + sendMessage(type: string, payload?: any): void; + sendMessage(message: TguiMessage): void; + + /** + * Subscribe to incoming messages that were sent from `/datum/tgui_window`. + */ + subscribe(listener: (type: string, payload: any) => void): void; + + /** + * Subscribe to incoming messages *of some specific type* + * that were sent from `/datum/tgui_window`. + */ + subscribeTo(type: string, listener: (payload: any) => void): void; + + /** + * Loads a stylesheet into the document. + */ + loadCss(url: string): void; + + /** + * Loads a script into the document. + */ + loadJs(url: string): void; +}; + +/** + * Object that provides access to Byond Skin API and is available in + * any tgui application. + */ +const Byond: ByondType; + +interface Window { + Byond: ByondType; + __store__: Store; + __augmentStack__: (store: Store) => StackAugmentor; +} diff --git a/tgui/jest.config.js b/tgui/jest.config.js new file mode 100644 index 000000000000..5802332817f1 --- /dev/null +++ b/tgui/jest.config.js @@ -0,0 +1,14 @@ +module.exports = { + roots: ['/packages'], + testMatch: [ + '/packages/**/__tests__/*.{js,ts,tsx}', + '/packages/**/*.{spec,test}.{js,ts,tsx}', + ], + testEnvironment: 'jsdom', + testRunner: require.resolve('jest-circus/runner'), + transform: { + '^.+\\.(js|cjs|ts|tsx)$': require.resolve('babel-jest'), + }, + moduleFileExtensions: ['js', 'cjs', 'ts', 'tsx', 'json'], + resetMocks: true, +}; diff --git a/tgui/package.json b/tgui/package.json index 70f17d094752..d06d8edeb95b 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,31 +1,50 @@ { "private": true, - "name": "tgui", - "version": "3.0.0", + "name": "tgui-workspace", + "version": "4.4.0", + "packageManager": "yarn@4.0.2", "workspaces": [ "packages/*" ], - "scripts": { - "build": "eslint packages && cd packages/tgui && npx webpack --mode=production", - "watch": "cd packages/tgui-dev-server && set NODE_OPTIONS=--openssl-legacy-provider --no-experimental-fetch && node --experimental-modules index.js", - "analyze": "cd packages/tgui && npx webpack --mode=production --env.analyze=1", - "lint": "eslint packages", - "prettier": "prettier --check packages", - "prettier-write": "prettier --check packages --write" - }, "dependencies": { - "@babel/eslint-parser": "^7.22.15", - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-react": "^7.22.15", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-jscript": "^7.22.5", - "babel-plugin-inferno": "^6.7.0", + "@babel/core": "^7.23.3", + "@babel/eslint-parser": "^7.23.3", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-jscript": "^7.23.3", + "@babel/preset-env": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "@types/jest": "^29.5.11", + "@types/jsdom": "^21.1.6", + "@types/node": "^20.10.6", + "@types/webpack": "^5.28.5", + "@types/webpack-env": "^1.18.4", + "@typescript-eslint/parser": "^6.18.0", + "babel-jest": "^29.7.0", + "babel-loader": "^8.3.0", + "babel-plugin-inferno": "^6.7.1", "babel-plugin-transform-remove-console": "^6.9.4", - "eslint": "^8.49.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", + "common": "workspace:*", + "css-loader": "^6.8.1", + "esbuild-loader": "^4.0.2", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "5.1.2", "eslint-plugin-react": "^7.33.2", - "prettier": "^3.0.3" + "eslint-plugin-unused-imports": "^3.0.0", + "file-loader": "^6.2.0", + "jest": "^29.7.0", + "jest-circus": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jsdom": "^23.1.0", + "mini-css-extract-plugin": "^2.7.6", + "prettier": "3.1.1", + "sass": "^1.69.7", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "terser-webpack-plugin": "^5.3.10", + "typescript": "^5.3.3", + "webpack": "^5.89.0", + "webpack-bundle-analyzer": "^4.10.1", + "webpack-cli": "^5.1.4" } } diff --git a/tgui/packages/common/collections.spec.ts b/tgui/packages/common/collections.spec.ts new file mode 100644 index 000000000000..ef35a95cb3ea --- /dev/null +++ b/tgui/packages/common/collections.spec.ts @@ -0,0 +1,20 @@ +import { range, zip } from './collections'; + +// Type assertions, these will lint if the types are wrong. +const _zip1: [string, number] = zip(['a'], [1])[0]; + +describe('range', () => { + test('range(0, 5)', () => { + expect(range(0, 5)).toEqual([0, 1, 2, 3, 4]); + }); +}); + +describe('zip', () => { + test("zip(['a', 'b', 'c'], [1, 2, 3, 4])", () => { + expect(zip(['a', 'b', 'c'], [1, 2, 3, 4])).toEqual([ + ['a', 1], + ['b', 2], + ['c', 3], + ]); + }); +}); diff --git a/tgui/packages/common/collections.js b/tgui/packages/common/collections.ts similarity index 75% rename from tgui/packages/common/collections.js rename to tgui/packages/common/collections.ts index 315e39d4a147..1f0fb2d57958 100644 --- a/tgui/packages/common/collections.js +++ b/tgui/packages/common/collections.ts @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Converts a given collection to an array. * @@ -67,7 +73,7 @@ export const toKeyedArray = (obj, keyProp = 'key') => { * @returns {any[]} */ export const filter = (iterateeFn) => (collection) => { - if (collection === null && collection === undefined) { + if (collection === null || collection === undefined) { return collection; } if (Array.isArray(collection)) { @@ -94,7 +100,7 @@ export const filter = (iterateeFn) => (collection) => { * @returns {any[]} */ export const map = (iterateeFn) => (collection) => { - if (collection === null && collection === undefined) { + if (collection === null || collection === undefined) { return collection; } if (Array.isArray(collection)) { @@ -117,6 +123,26 @@ export const map = (iterateeFn) => (collection) => { throw new Error(`map() can't iterate on type ${typeof collection}`); }; +/** + * Given a collection, will run each element through an iteratee function. + * Will then filter out undefined values. + */ +export const filterMap = ( + collection: T[], + iterateeFn: (value: T) => U | undefined +): U[] => { + const finalCollection: U[] = []; + + for (const value of collection) { + const output = iterateeFn(value); + if (output !== undefined) { + finalCollection.push(output); + } + } + + return finalCollection; +}; + const COMPARATOR = (objA, objB) => { const criteriaA = objA.criteria; const criteriaB = objB.criteria; @@ -167,6 +193,15 @@ export const sortBy = return mappedArray; }; +export const sort = sortBy(); + +/** + * Returns a range of numbers from start to end, exclusively. + * For example, range(0, 5) will return [0, 1, 2, 3, 4]. + */ +export const range = (start: number, end: number): number[] => + new Array(end - start).fill(null).map((_, index) => index + start); + /** * A fast implementation of reduce. */ @@ -198,44 +233,52 @@ export const reduce = (reducerFn, initialValue) => (array) => { * is determined by the order they occur in the array. The iteratee is * invoked with one argument: value. */ -export const uniqBy = (iterateeFn) => (array) => { - const { length } = array; - const result = []; - const seen = iterateeFn ? [] : result; - let index = -1; - outer: while (++index < length) { - let value = array[index]; - const computed = iterateeFn ? iterateeFn(value) : value; - value = value !== 0 ? value : 0; - if (computed === computed) { - let seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; +/* eslint-disable indent */ +export const uniqBy = + (iterateeFn?: (value: T) => unknown) => + (array: T[]) => { + const { length } = array; + const result = []; + const seen = iterateeFn ? [] : result; + let index = -1; + outer: while (++index < length) { + let value: T | 0 = array[index]; + const computed = iterateeFn ? iterateeFn(value) : value; + value = value !== 0 ? value : 0; + if (computed === computed) { + let seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } } + if (iterateeFn) { + seen.push(computed); + } + result.push(value); + } else if (!seen.includes(computed)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); } - if (iterateeFn) { - seen.push(computed); - } - result.push(value); - } else if (!seen.includes(computed)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); } - } - return result; -}; + return result; + }; +/* eslint-enable indent */ + +export const uniq = uniqBy(); + +type Zip = { + [I in keyof T]: T[I] extends (infer U)[] ? U : never; +}[]; /** * Creates an array of grouped elements, the first of which contains * the first elements of the given arrays, the second of which contains * the second elements of the given arrays, and so on. - * - * @returns {any[]} */ -export const zip = (...arrays) => { +export const zip = (...arrays: T): Zip => { if (arrays.length === 0) { return; } diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js new file mode 100644 index 000000000000..913f50747afb --- /dev/null +++ b/tgui/packages/common/color.js @@ -0,0 +1,62 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const EPSILON = 0.0001; + +export class Color { + constructor(r = 0, g = 0, b = 0, a = 1) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + toString() { + return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${this.a | 0})`; + } +} + +/** + * Creates a color from the CSS hex color notation. + */ +Color.fromHex = (hex) => + new Color( + parseInt(hex.substr(1, 2), 16), + parseInt(hex.substr(3, 2), 16), + parseInt(hex.substr(5, 2), 16) + ); + +/** + * Linear interpolation of two colors. + */ +Color.lerp = (c1, c2, n) => + new Color( + (c2.r - c1.r) * n + c1.r, + (c2.g - c1.g) * n + c1.g, + (c2.b - c1.b) * n + c1.b, + (c2.a - c1.a) * n + c1.a + ); + +/** + * Loops up the color in the provided list of colors + * with linear interpolation. + */ +Color.lookup = (value, colors = []) => { + const len = colors.length; + if (len < 2) { + throw new Error('Needs at least two colors!'); + } + const scaled = value * (len - 1); + if (value < EPSILON) { + return colors[0]; + } + if (value >= 1 - EPSILON) { + return colors[len - 1]; + } + const ratio = scaled % 1; + const index = scaled | 0; + return Color.lerp(colors[index], colors[index + 1], ratio); +}; diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.js new file mode 100644 index 000000000000..7eeff511aa56 --- /dev/null +++ b/tgui/packages/common/events.js @@ -0,0 +1,41 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export class EventEmitter { + constructor() { + this.listeners = {}; + } + + on(name, listener) { + this.listeners[name] = this.listeners[name] || []; + this.listeners[name].push(listener); + } + + off(name, listener) { + const listeners = this.listeners[name]; + if (!listeners) { + throw new Error(`There is no listeners for "${name}"`); + } + this.listeners[name] = listeners.filter((existingListener) => { + return existingListener !== listener; + }); + } + + emit(name, ...params) { + const listeners = this.listeners[name]; + if (!listeners) { + return; + } + for (let i = 0, len = listeners.length; i < len; i += 1) { + const listener = listeners[i]; + listener(...params); + } + } + + clear() { + this.listeners = {}; + } +} diff --git a/tgui/packages/tgui/interfaces/common/exhaustive.js b/tgui/packages/common/exhaustive.ts similarity index 89% rename from tgui/packages/tgui/interfaces/common/exhaustive.js rename to tgui/packages/common/exhaustive.ts index 99848610d116..bc41757515b0 100644 --- a/tgui/packages/tgui/interfaces/common/exhaustive.js +++ b/tgui/packages/common/exhaustive.ts @@ -14,6 +14,6 @@ * exhaustiveCheck(color); * } */ -export const exhaustiveCheck = (input) => { +export const exhaustiveCheck = (input: never) => { throw new Error(`Unhandled case: ${input}`); }; diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js index 6b0bb531fdf6..990c7c53c510 100644 --- a/tgui/packages/common/fp.js +++ b/tgui/packages/common/fp.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Creates a function that returns the result of invoking the given * functions, where each successive invocation is supplied the return diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.js new file mode 100644 index 000000000000..19cfb302da41 --- /dev/null +++ b/tgui/packages/common/keycodes.js @@ -0,0 +1,96 @@ +/** + * All possible browser keycodes, in one file. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const KEY_BACKSPACE = 8; +export const KEY_TAB = 9; +export const KEY_ENTER = 13; +export const KEY_SHIFT = 16; +export const KEY_CTRL = 17; +export const KEY_ALT = 18; +export const KEY_PAUSE = 19; +export const KEY_CAPSLOCK = 20; +export const KEY_ESCAPE = 27; +export const KEY_SPACE = 32; +export const KEY_PAGEUP = 33; +export const KEY_PAGEDOWN = 34; +export const KEY_END = 35; +export const KEY_HOME = 36; +export const KEY_LEFT = 37; +export const KEY_UP = 38; +export const KEY_RIGHT = 39; +export const KEY_DOWN = 40; +export const KEY_INSERT = 45; +export const KEY_DELETE = 46; +export const KEY_0 = 48; +export const KEY_1 = 49; +export const KEY_2 = 50; +export const KEY_3 = 51; +export const KEY_4 = 52; +export const KEY_5 = 53; +export const KEY_6 = 54; +export const KEY_7 = 55; +export const KEY_8 = 56; +export const KEY_9 = 57; +export const KEY_A = 65; +export const KEY_B = 66; +export const KEY_C = 67; +export const KEY_D = 68; +export const KEY_E = 69; +export const KEY_F = 70; +export const KEY_G = 71; +export const KEY_H = 72; +export const KEY_I = 73; +export const KEY_J = 74; +export const KEY_K = 75; +export const KEY_L = 76; +export const KEY_M = 77; +export const KEY_N = 78; +export const KEY_O = 79; +export const KEY_P = 80; +export const KEY_Q = 81; +export const KEY_R = 82; +export const KEY_S = 83; +export const KEY_T = 84; +export const KEY_U = 85; +export const KEY_V = 86; +export const KEY_W = 87; +export const KEY_X = 88; +export const KEY_Y = 89; +export const KEY_Z = 90; +export const KEY_NUMPAD_0 = 96; +export const KEY_NUMPAD_1 = 97; +export const KEY_NUMPAD_2 = 98; +export const KEY_NUMPAD_3 = 99; +export const KEY_NUMPAD_4 = 100; +export const KEY_NUMPAD_5 = 101; +export const KEY_NUMPAD_6 = 102; +export const KEY_NUMPAD_7 = 103; +export const KEY_NUMPAD_8 = 104; +export const KEY_NUMPAD_9 = 105; +export const KEY_F1 = 112; +export const KEY_F2 = 113; +export const KEY_F3 = 114; +export const KEY_F4 = 115; +export const KEY_F5 = 116; +export const KEY_F6 = 117; +export const KEY_F7 = 118; +export const KEY_F8 = 119; +export const KEY_F9 = 120; +export const KEY_F10 = 121; +export const KEY_F11 = 122; +export const KEY_F12 = 123; +export const KEY_SEMICOLON = 186; +export const KEY_EQUAL = 187; +export const KEY_COMMA = 188; +export const KEY_MINUS = 189; +export const KEY_PERIOD = 190; +export const KEY_SLASH = 191; +export const KEY_LEFT_BRACKET = 219; +export const KEY_BACKSLASH = 220; +export const KEY_RIGHT_BRACKET = 221; +export const KEY_QUOTE = 222; diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts new file mode 100644 index 000000000000..61b79992b486 --- /dev/null +++ b/tgui/packages/common/keys.ts @@ -0,0 +1,39 @@ +/** + * ### Key codes. + * event.keyCode is deprecated, use this reference instead. + * + * Handles modifier keys (Shift, Alt, Control) and arrow keys. + * + * For alphabetical keys, use the actual character (e.g. 'a') instead of the key code. + * + * Something isn't here that you want? Just add it: + * @url https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values + * @usage + * ```ts + * import { KEY } from 'tgui/common/keys'; + * + * if (event.key === KEY.Enter) { + * // do something + * } + * ``` + */ +export enum KEY { + Alt = 'Alt', + Backspace = 'Backspace', + Control = 'Control', + Delete = 'Delete', + Down = 'Down', + End = 'End', + Enter = 'Enter', + Escape = 'Esc', + Home = 'Home', + Insert = 'Insert', + Left = 'Left', + PageDown = 'PageDown', + PageUp = 'PageUp', + Right = 'Right', + Shift = 'Shift', + Space = ' ', + Tab = 'Tab', + Up = 'Up', +} diff --git a/tgui/packages/common/math.js b/tgui/packages/common/math.js index f87c3c971b49..0efd846ae0fe 100644 --- a/tgui/packages/common/math.js +++ b/tgui/packages/common/math.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Limits a number to the range between 'min' and 'max'. */ diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json index fbd255ababce..c0e9b78c778f 100644 --- a/tgui/packages/common/package.json +++ b/tgui/packages/common/package.json @@ -1,6 +1,5 @@ { "private": true, "name": "common", - "version": "3.0.0", - "type": "module" + "version": "4.4.0" } diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.js new file mode 100644 index 000000000000..c2d6cb27db15 --- /dev/null +++ b/tgui/packages/common/perf.js @@ -0,0 +1,65 @@ +/** + * Ghetto performance measurement tools. + * + * Uses NODE_ENV to remove itself from production builds. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const FPS = 60; +const FRAME_DURATION = 1000 / FPS; + +// True if Performance API is supported +const supportsPerf = !!window.performance?.now; +// High precision markers +let hpMarkersByName = {}; +// Low precision markers +let lpMarkersByName = {}; + +/** + * Marks a certain spot in the code for later measurements. + */ +const mark = (name, timestamp) => { + if (process.env.NODE_ENV !== 'production') { + if (supportsPerf && !timestamp) { + hpMarkersByName[name] = performance.now(); + } + lpMarkersByName[name] = timestamp || Date.now(); + } +}; + +/** + * Calculates and returns the difference between two markers as a string. + * + * Use logger.log() to print the measurement. + */ +const measure = (markerNameA, markerNameB) => { + if (process.env.NODE_ENV !== 'production') { + let markerA = hpMarkersByName[markerNameA]; + let markerB = hpMarkersByName[markerNameB]; + if (!markerA || !markerB) { + markerA = lpMarkersByName[markerNameA]; + markerB = lpMarkersByName[markerNameB]; + } + const duration = Math.abs(markerB - markerA); + return formatDuration(duration); + } +}; + +const formatDuration = (duration) => { + const durationInFrames = duration / FRAME_DURATION; + return ( + duration.toFixed(duration < 10 ? 1 : 0) + + 'ms ' + + '(' + + durationInFrames.toFixed(2) + + ' frames)' + ); +}; + +export const perf = { + mark, + measure, +}; diff --git a/tgui/packages/common/react.spec.ts b/tgui/packages/common/react.spec.ts new file mode 100644 index 000000000000..44102fdc9710 --- /dev/null +++ b/tgui/packages/common/react.spec.ts @@ -0,0 +1,20 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { classes } from './react'; + +describe('classes', () => { + test('empty', () => { + expect(classes([])).toBe(''); + }); + + test('result contains inputs', () => { + const output = classes(['foo', 'bar', false, true, 0, 1, 'baz']); + expect(output).toContain('foo'); + expect(output).toContain('bar'); + expect(output).toContain('baz'); + }); +}); diff --git a/tgui/packages/common/react.js b/tgui/packages/common/react.ts similarity index 58% rename from tgui/packages/common/react.js rename to tgui/packages/common/react.ts index a742f716a311..6789bb4edc65 100644 --- a/tgui/packages/common/react.js +++ b/tgui/packages/common/react.ts @@ -1,10 +1,13 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Helper for conditionally adding/removing classes in React - * - * @param {any[]} classNames - * @return {string} */ -export const classes = (classNames) => { +export const classes = (classNames: (string | BooleanLike)[]) => { let className = ''; for (let i = 0; i < classNames.length; i++) { const part = classNames[i]; @@ -19,9 +22,9 @@ export const classes = (classNames) => { * Normalizes children prop, so that it is always an array of VDom * elements. */ -export const normalizeChildren = (children) => { +export const normalizeChildren = (children: T | T[]) => { if (Array.isArray(children)) { - return children.flat().filter((value) => value); + return children.flat().filter((value) => value) as T[]; } if (typeof children === 'object') { return [children]; @@ -33,7 +36,7 @@ export const normalizeChildren = (children) => { * Shallowly checks if two objects are different. * Credit: https://github.com/developit/preact-compat */ -export const shallowDiffers = (a, b) => { +export const shallowDiffers = (a: object, b: object) => { let i; for (i in a) { if (!(i in b)) { @@ -58,8 +61,14 @@ export const pureComponentHooks = { }; /** - * A helper to determine whether to render an item. + * A helper to determine whether the object is renderable by React. */ -export const isFalsy = (value) => { - return value === undefined || value === null || value === false; +export const canRender = (value: unknown) => { + return value !== undefined && value !== null && typeof value !== 'boolean'; }; + +/** + * A common case in tgui, when you pass a value conditionally, these are + * the types that can fall through the condition. + */ +export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.js b/tgui/packages/common/redux.js index 8922044adbd9..7d3b27afbbe8 100644 --- a/tgui/packages/common/redux.js +++ b/tgui/packages/common/redux.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import { compose } from './fp'; /** @@ -20,7 +26,9 @@ export const createStore = (reducer, enhancer) => { const dispatch = (action) => { currentState = reducer(currentState, action); - listeners.forEach((fn) => fn()); + for (let i = 0; i < listeners.length; i++) { + listeners[i](); + } }; // This creates the initial store by causing each reducer to be called @@ -65,3 +73,80 @@ export const applyMiddleware = (...middlewares) => { }; }; }; + +/** + * Combines reducers by running them in their own object namespaces as + * defined in reducersObj paramter. + * + * Main difference from redux/combineReducers is that it preserves keys + * in the state that are not present in the reducers object. This function + * is also more flexible than the redux counterpart. + */ +export const combineReducers = (reducersObj) => { + const keys = Object.keys(reducersObj); + let hasChanged = false; + return (prevState = {}, action) => { + const nextState = { ...prevState }; + for (let key of keys) { + const reducer = reducersObj[key]; + const prevDomainState = prevState[key]; + const nextDomainState = reducer(prevDomainState, action); + if (prevDomainState !== nextDomainState) { + hasChanged = true; + nextState[key] = nextDomainState; + } + } + return hasChanged ? nextState : prevState; + }; +}; + +/** + * A utility function to create an action creator for the given action + * type string. The action creator accepts a single argument, which will + * be included in the action object as a field called payload. The action + * creator function will also have its toString() overriden so that it + * returns the action type, allowing it to be used in reducer logic that + * is looking for that action type. + * + * @param {string} type The action type to use for created actions. + * @param {any} prepare (optional) a method that takes any number of arguments + * and returns { payload } or { payload, meta }. If this is given, the + * resulting action creator will pass it's arguments to this method to + * calculate payload & meta. + * + * @public + */ +export const createAction = (type, prepare = null) => { + const actionCreator = (...args) => { + if (!prepare) { + return { type, payload: args[0] }; + } + const prepared = prepare(...args); + if (!prepared) { + throw new Error('prepare function did not return an object'); + } + const action = { type }; + if ('payload' in prepared) { + action.payload = prepared.payload; + } + if ('meta' in prepared) { + action.meta = prepared.meta; + } + return action; + }; + actionCreator.toString = () => '' + type; + actionCreator.type = type; + actionCreator.match = (action) => action.type === type; + return actionCreator; +}; + +// Implementation specific +// -------------------------------------------------------- + +export const useDispatch = (context) => { + return context.store.dispatch; +}; + +export const useSelector = (context, selector) => { + return selector(context.store.getState()); +}; diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js new file mode 100644 index 000000000000..7a08cbb2920b --- /dev/null +++ b/tgui/packages/common/storage.js @@ -0,0 +1,195 @@ +/** + * Browser-agnostic abstraction of key-value web storage. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const IMPL_MEMORY = 0; +export const IMPL_LOCAL_STORAGE = 1; +export const IMPL_INDEXED_DB = 2; + +const INDEXED_DB_VERSION = 1; +const INDEXED_DB_NAME = 'para-tgui'; +const INDEXED_DB_STORE_NAME = 'storage-v1'; + +const READ_ONLY = 'readonly'; +const READ_WRITE = 'readwrite'; + +const testGeneric = (testFn) => () => { + try { + return Boolean(testFn()); + } catch { + return false; + } +}; + +// Localstorage can sometimes throw an error, even if DOM storage is not +// disabled in IE11 settings. +// See: https://superuser.com/questions/1080011 +// prettier-ignore +const testLocalStorage = testGeneric(() => ( + window.localStorage && window.localStorage.getItem +)); + +// prettier-ignore +const testIndexedDb = testGeneric(() => ( + (window.indexedDB || window.msIndexedDB) + && (window.IDBTransaction || window.msIDBTransaction) +)); + +class MemoryBackend { + constructor() { + this.impl = IMPL_MEMORY; + this.store = {}; + } + + get(key) { + return this.store[key]; + } + + set(key, value) { + this.store[key] = value; + } + + remove(key) { + this.store[key] = undefined; + } + + clear() { + this.store = {}; + } +} + +class LocalStorageBackend { + constructor() { + this.impl = IMPL_LOCAL_STORAGE; + } + + get(key) { + const value = localStorage.getItem(key); + if (typeof value === 'string') { + return JSON.parse(value); + } + } + + set(key, value) { + localStorage.setItem(key, JSON.stringify(value)); + } + + remove(key) { + localStorage.removeItem(key); + } + + clear() { + localStorage.clear(); + } +} + +class IndexedDbBackend { + constructor() { + this.impl = IMPL_INDEXED_DB; + /** @type {Promise} */ + this.dbPromise = new Promise((resolve, reject) => { + const indexedDB = window.indexedDB || window.msIndexedDB; + const req = indexedDB.open(INDEXED_DB_NAME, INDEXED_DB_VERSION); + req.onupgradeneeded = () => { + try { + req.result.createObjectStore(INDEXED_DB_STORE_NAME); + } catch (err) { + reject(new Error('Failed to upgrade IDB: ' + req.error)); + } + }; + req.onsuccess = () => resolve(req.result); + req.onerror = () => { + reject(new Error('Failed to open IDB: ' + req.error)); + }; + }); + } + + getStore(mode) { + // prettier-ignore + return this.dbPromise.then((db) => db + .transaction(INDEXED_DB_STORE_NAME, mode) + .objectStore(INDEXED_DB_STORE_NAME)); + } + + async get(key) { + const store = await this.getStore(READ_ONLY); + return new Promise((resolve, reject) => { + const req = store.get(key); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); + } + + async set(key, value) { + // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + if (value === null) { + value = undefined; + } + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.put(value, key); + } + + async remove(key) { + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.delete(key); + } + + async clear() { + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.clear(); + } +} + +/** + * Web Storage Proxy object, which selects the best backend available + * depending on the environment. + */ +class StorageProxy { + constructor() { + this.backendPromise = (async () => { + if (testIndexedDb()) { + try { + const backend = new IndexedDbBackend(); + await backend.dbPromise; + return backend; + } catch {} + } + if (testLocalStorage()) { + return new LocalStorageBackend(); + } + return new MemoryBackend(); + })(); + } + + async get(key) { + const backend = await this.backendPromise; + return backend.get(key); + } + + async set(key, value) { + const backend = await this.backendPromise; + return backend.set(key, value); + } + + async remove(key) { + const backend = await this.backendPromise; + return backend.remove(key); + } + + async clear() { + const backend = await this.backendPromise; + return backend.clear(); + } +} + +export const storage = new StorageProxy(); diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs index 65b2be097353..97ca67c6ea4c 100644 --- a/tgui/packages/common/string.babel-plugin.cjs +++ b/tgui/packages/common/string.babel-plugin.cjs @@ -1,5 +1,7 @@ /** - * @file + * This plugin saves overall about 10KB on the final bundle size, so it's + * sort of worth it. + * * We are using a .cjs extension because: * * 1. Webpack CLI only supports CommonJS modules; @@ -9,8 +11,9 @@ * We need to copy-paste the whole "multiline" function because we can't * synchronously import an ES module from a CommonJS module. * - * This plugin saves overall about 10KB on the final bundle size, so it's - * sort of worth it. + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT */ /** diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js index 43411211b69e..161e7a8a9c6f 100644 --- a/tgui/packages/common/string.js +++ b/tgui/packages/common/string.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Removes excess whitespace and indentation from the string. */ diff --git a/tgui/packages/common/target/npmlist.json b/tgui/packages/common/target/npmlist.json deleted file mode 100644 index 7c3764b28c51..000000000000 --- a/tgui/packages/common/target/npmlist.json +++ /dev/null @@ -1 +0,0 @@ -{ "name": "common", "version": "3.0.0" } diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.js deleted file mode 100644 index e3feb69ca9ca..000000000000 --- a/tgui/packages/common/timer.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Returns a function, that, as long as it continues to be invoked, will - * not be triggered. The function will be called after it stops being - * called for N milliseconds. If `immediate` is passed, trigger the - * function on the leading edge, instead of the trailing. - */ -export const debounce = (fn, time, immediate = false) => { - let timeout; - return (...args) => { - const later = () => { - timeout = null; - if (!immediate) { - fn(...args); - } - }; - const callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, time); - if (callNow) { - fn(...args); - } - }; -}; diff --git a/tgui/packages/common/timer.ts b/tgui/packages/common/timer.ts new file mode 100644 index 000000000000..21c433110104 --- /dev/null +++ b/tgui/packages/common/timer.ts @@ -0,0 +1,68 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Returns a function, that, as long as it continues to be invoked, will + * not be triggered. The function will be called after it stops being + * called for N milliseconds. If `immediate` is passed, trigger the + * function on the leading edge, instead of the trailing. + */ +export const debounce = any>( + fn: F, + time: number, + immediate = false +): ((...args: Parameters) => void) => { + let timeout: ReturnType | null; + return (...args: Parameters) => { + const later = () => { + timeout = null; + if (!immediate) { + fn(...args); + } + }; + const callNow = immediate && !timeout; + clearTimeout(timeout!); + timeout = setTimeout(later, time); + if (callNow) { + fn(...args); + } + }; +}; + +/** + * Suspends an asynchronous function for N milliseconds. + * + * @param {number} time + */ +export const sleep = (time: number): Promise => + new Promise((resolve) => setTimeout(resolve, time)); + +/** + * Returns a function, that, when invoked, will only be triggered at most once + * during a given window of time. + */ +export const throttle = any>( + fn: F, + time: number +): ((...args: Parameters) => void) => { + let previouslyRun: number | null, + queuedToRun: ReturnType | null; + return function invokeFn(...args: Parameters) { + const now = Date.now(); + if (queuedToRun) { + clearTimeout(queuedToRun); + } + if (!previouslyRun || now - previouslyRun >= time) { + fn.apply(null, args); + previouslyRun = now; + } else { + queuedToRun = setTimeout( + () => invokeFn(...args), + time - (now - (previouslyRun ?? 0)) + ); + } + }; +}; diff --git a/tgui/packages/common/types.ts b/tgui/packages/common/types.ts new file mode 100644 index 000000000000..e68aadbdb11c --- /dev/null +++ b/tgui/packages/common/types.ts @@ -0,0 +1,8 @@ +/** + * Returns the arguments of a function F as an array. + */ +export type ArgumentsOf = F extends ( + ...args: infer A +) => unknown + ? A + : never; diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.js new file mode 100644 index 000000000000..f2eb4bb98f4e --- /dev/null +++ b/tgui/packages/common/uuid.js @@ -0,0 +1,19 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Creates a UUID v4 string + * + * @return {string} + */ +export const createUuid = () => { + let d = new Date().getTime(); + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16); + }); +}; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js index d9538e6e7029..b1f85f7429db 100644 --- a/tgui/packages/common/vector.js +++ b/tgui/packages/common/vector.js @@ -1,14 +1,14 @@ -import { map, reduce, zipWith } from './collections'; - /** - * Creates a vector, with as many dimensions are there are arguments. + * N-dimensional vector manipulation functions. + * + * Vectors are plain number arrays, i.e. [x, y, z]. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT */ -export const vecCreate = (...components) => { - if (Array.isArray(components[0])) { - return [...components[0]]; - } - return components; -}; + +import { map, reduce, zipWith } from './collections'; const ADD = (a, b) => a + b; const SUB = (a, b) => a - b; diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js new file mode 100644 index 000000000000..d1ca2a9ac539 --- /dev/null +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -0,0 +1,102 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { exec } from 'child_process'; +import { promisify } from 'util'; + +import { createLogger } from './logging.js'; +import { require } from './require.js'; + +const axios = require('axios'); +const logger = createLogger('dreamseeker'); + +const instanceByPid = new Map(); + +export class DreamSeeker { + constructor(pid, addr) { + this.pid = pid; + this.addr = addr; + this.client = axios.create({ + baseURL: `http://${addr}/`, + }); + } + + topic(params = {}) { + // prettier-ignore + const query = Object.keys(params) + .map(key => encodeURIComponent(key) + + '=' + encodeURIComponent(params[key])) + .join('&'); + logger.log( + `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, + ); + return this.client.get('/dummy?' + query); + } +} + +/** + * @param {number[]} pids + * @returns {DreamSeeker[]} + */ +DreamSeeker.getInstancesByPids = async (pids) => { + if (process.platform !== 'win32') { + return []; + } + const instances = []; + const pidsToResolve = []; + for (let pid of pids) { + const instance = instanceByPid.get(pid); + if (instance) { + instances.push(instance); + } else { + pidsToResolve.push(pid); + } + } + if (pidsToResolve.length > 0) { + try { + const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; + const { stdout } = await promisify(exec)(command, { + // Max buffer of 1MB (default is 200KB) + maxBuffer: 1024 * 1024, + }); + // Line format: + // proto addr mask mode pid + const entries = []; + const lines = stdout.split('\r\n'); + for (let line of lines) { + const words = line.match(/\S+/g); + if (!words || words.length === 0) { + continue; + } + const entry = { + addr: words[1], + pid: parseInt(words[4], 10), + }; + if (pidsToResolve.includes(entry.pid)) { + entries.push(entry); + } + } + const len = entries.length; + logger.log('found', len, plural('instance', len)); + for (let entry of entries) { + const { pid, addr } = entry; + const instance = new DreamSeeker(pid, addr); + instances.push(instance); + instanceByPid.set(pid, instance); + } + } catch (err) { + if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { + logger.error(err.message, err.code); + } else { + logger.error(err); + } + return []; + } + } + return instances; +}; + +const plural = (word, n) => (n !== 1 ? word + 's' : word); diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js index 1e7683080c8c..85489ebb0499 100644 --- a/tgui/packages/tgui-dev-server/index.js +++ b/tgui/packages/tgui-dev-server/index.js @@ -1,22 +1,30 @@ -import { setupWebpack, getWebpackConfig } from './webpack.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import { reloadByondCache } from './reloader.js'; +import { createCompiler } from './webpack.js'; const noHot = process.argv.includes('--no-hot'); +const noTmp = process.argv.includes('--no-tmp'); const reloadOnce = process.argv.includes('--reload'); const setupServer = async () => { - const config = await getWebpackConfig({ + const compiler = await createCompiler({ mode: 'development', hot: !noHot, + devServer: true, + useTmpFolder: !noTmp, }); // Reload cache once if (reloadOnce) { - const bundleDir = config.output.path; - await reloadByondCache(bundleDir); + await reloadByondCache(compiler.bundleDir); return; } // Run a development server - await setupWebpack(config); + await compiler.watch(); }; setupServer(); diff --git a/tgui/packages/tgui-dev-server/link/client.js b/tgui/packages/tgui-dev-server/link/client.cjs similarity index 64% rename from tgui/packages/tgui-dev-server/link/client.js rename to tgui/packages/tgui-dev-server/link/client.cjs index 941a2e76d38f..b0e6f7bc9d44 100644 --- a/tgui/packages/tgui-dev-server/link/client.js +++ b/tgui/packages/tgui-dev-server/link/client.cjs @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + let socket; const queue = []; const subscribers = []; @@ -25,11 +31,9 @@ const ensureConnection = () => { }; } } -}; -if (process.env.NODE_ENV !== 'production') { window.onunload = () => socket && socket.close(); -} +}; const subscribe = (fn) => subscribers.push(fn); @@ -62,7 +66,11 @@ const serializeObject = (obj) => { } refs.push(value); // Error object - if (value instanceof Error) { + // prettier-ignore + const isError = value instanceof Error || ( + value.code && value.message && value.message.includes('Error') + ); + if (isError) { return { __error__: true, string: String(value), @@ -82,7 +90,7 @@ const serializeObject = (obj) => { return json; }; -const sendRawMessage = (msg) => { +const sendMessage = (msg) => { if (process.env.NODE_ENV !== 'production') { const json = serializeObject(msg); // Send message using WebSocket @@ -91,8 +99,8 @@ const sendRawMessage = (msg) => { if (socket.readyState === WebSocket.OPEN) { socket.send(json); } else { - // Keep only 10 latest messages in the queue - if (queue.length > 10) { + // Keep only 100 latest messages in the queue + if (queue.length > 100) { queue.shift(); } queue.push(json); @@ -102,17 +110,17 @@ const sendRawMessage = (msg) => { else { const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; const req = new XMLHttpRequest(); - req.open('POST', `http://${DEV_SERVER_IP}:3001`); - req.timeout = 500; + req.open('POST', `http://${DEV_SERVER_IP}:3001`, true); + req.timeout = 250; req.send(json); } } }; -export const sendLogEntry = (level, ns, ...args) => { +const sendLogEntry = (level, ns, ...args) => { if (process.env.NODE_ENV !== 'production') { try { - sendRawMessage({ + sendMessage({ type: 'log', payload: { level, @@ -124,38 +132,46 @@ export const sendLogEntry = (level, ns, ...args) => { } }; -export const setupHotReloading = () => { +const setupHotReloading = () => { if ( - process.env.NODE_ENV !== 'production' && - process.env.WEBPACK_HMR_ENABLED && - window.WebSocket + process.env.NODE_ENV === 'production' || + !process.env.WEBPACK_HMR_ENABLED || + !window.WebSocket ) { - if (module.hot) { - ensureConnection(); - sendLogEntry(0, null, 'setting up hot reloading'); - subscribe((msg) => { - const { type } = msg; - sendLogEntry(0, null, 'received', type); - if (type === 'hotUpdate') { - const status = module.hot.status(); - if (status !== 'idle') { - sendLogEntry(0, null, 'hot reload status:', status); - return; - } - module.hot - .check({ - ignoreUnaccepted: true, - ignoreDeclined: true, - ignoreErrored: true, - }) - .then((modules) => { - sendLogEntry(0, null, 'outdated modules', modules); - }) - .catch((err) => { - sendLogEntry(0, null, 'reload error', err); - }); + return; + } + if (module.hot) { + ensureConnection(); + sendLogEntry(0, null, 'setting up hot reloading'); + subscribe((msg) => { + const { type } = msg; + sendLogEntry(0, null, 'received', type); + if (type === 'hotUpdate') { + const status = module.hot.status(); + if (status !== 'idle') { + sendLogEntry(0, null, 'hot reload status:', status); + return; } - }); - } + module.hot + .check({ + ignoreUnaccepted: true, + ignoreDeclined: true, + ignoreErrored: true, + }) + .then((modules) => { + sendLogEntry(0, null, 'outdated modules', modules); + }) + .catch((err) => { + sendLogEntry(0, null, 'reload error', err); + }); + } + }); } }; + +module.exports = { + subscribe, + sendMessage, + sendLogEntry, + setupHotReloading, +}; diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js index 0b0372d23f4e..083ddb37d1c1 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -1,10 +1,19 @@ -import { createLogger } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; import { basename } from 'path'; -import SourceMap from 'source-map'; -import StackTraceParser from 'stacktrace-parser'; + +import { createLogger } from '../logging.js'; +import { require } from '../require.js'; import { resolveGlob } from '../util.js'; +const SourceMap = require('source-map'); +const { parse: parseStackTrace } = require('stacktrace-parser'); + const logger = createLogger('retrace'); const { SourceMapConsumer } = SourceMap; @@ -22,7 +31,7 @@ export const loadSourceMaps = async (bundleDir) => { try { const file = basename(path).replace('.map', ''); const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8')) + JSON.parse(fs.readFileSync(path, 'utf8')), ); sourceMaps.push({ file, consumer }); } catch (err) { @@ -33,8 +42,12 @@ export const loadSourceMaps = async (bundleDir) => { }; export const retrace = (stack) => { + if (typeof stack !== 'string') { + logger.log('ERROR: Stack is not a string!', stack); + return stack; + } const header = stack.split(/\n\s.*at/)[0]; - const mappedStack = StackTraceParser.parse(stack) + const mappedStack = parseStackTrace(stack) .map((frame) => { if (!frame.file) { return frame; diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js index b12760785991..2a1f551bf6eb 100644 --- a/tgui/packages/tgui-dev-server/link/server.js +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -1,8 +1,17 @@ -import { createLogger, directLog } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import http from 'http'; import { inspect } from 'util'; -import WebSocket from 'ws'; -import { retrace, loadSourceMaps } from './retrace.js'; + +import { createLogger, directLog } from '../logging.js'; +import { require } from '../require.js'; +import { loadSourceMaps, retrace } from './retrace.js'; + +const WebSocket = require('ws'); const logger = createLogger('link'); @@ -10,62 +19,66 @@ const DEBUG = process.argv.includes('--debug'); export { loadSourceMaps }; -export const setupLink = () => { - logger.log('setting up'); - const wss = setupWebSocketLink(); - setupHttpLink(); - return { - wss, - }; -}; +export const setupLink = () => new LinkServer(); -export const broadcastMessage = (link, msg) => { - const { wss } = link; - const clients = [...wss.clients]; - logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); - for (let client of clients) { - const json = JSON.stringify(msg); - client.send(json); +class LinkServer { + constructor() { + logger.log('setting up'); + this.wss = null; + this.setupWebSocketLink(); + this.setupHttpLink(); } -}; -const deserializeObject = (str) => { - return JSON.parse(str, (key, value) => { - if (typeof value === 'object' && value !== null) { - if (value.__error__) { - if (!value.stack) { - return value.string; - } - return retrace(value.stack); - } - if (value.__number__) { - return parseFloat(value.__number__); - } - if (value.__undefined__) { - // NOTE: You should not rely on deserialized object's undefined, - // this is purely for inspection purposes. - return { - [inspect.custom]: () => undefined, - }; - } - return value; - } - return value; - }); -}; + // WebSocket-based client link + setupWebSocketLink() { + const port = 3000; + this.wss = new WebSocket.Server({ port }); + this.wss.on('connection', (ws) => { + logger.log('client connected'); + ws.on('message', (json) => { + const msg = deserializeObject(json); + this.handleLinkMessage(ws, msg); + }); + ws.on('close', () => { + logger.log('client disconnected'); + }); + }); + logger.log(`listening on port ${port} (WebSocket)`); + } -const handleLinkMessage = (msg) => { - const { type, payload } = msg; + // One way HTTP-based client link for IE8 + setupHttpLink() { + const port = 3001; + this.httpServer = http.createServer((req, res) => { + if (req.method === 'POST') { + let body = ''; + req.on('data', (chunk) => { + body += chunk.toString(); + }); + req.on('end', () => { + const msg = deserializeObject(body); + this.handleLinkMessage(null, msg); + res.end(); + }); + return; + } + res.write('Hello'); + res.end(); + }); + this.httpServer.listen(port); + logger.log(`listening on port ${port} (HTTP)`); + } - if (type === 'log') { - const { level, ns, args } = payload; - // Skip debug messages - if (level <= 0 && !DEBUG) { - return; - } - directLog( - ns, - ...args.map((arg) => { + handleLinkMessage(ws, msg) { + const { type, payload } = msg; + if (type === 'log') { + const { level, ns, args } = payload; + // Skip debug messages + if (level <= 0 && !DEBUG) { + return; + } + // prettier-ignore + directLog(ns, ...args.map(arg => { if (typeof arg === 'object') { return inspect(arg, { depth: Infinity, @@ -74,57 +87,59 @@ const handleLinkMessage = (msg) => { }); } return arg; - }) - ); - return; + })); + return; + } + if (type === 'relay') { + for (let client of this.wss.clients) { + if (client === ws) { + continue; + } + this.sendMessage(client, msg); + } + return; + } + logger.log('unhandled message', msg); } - logger.log('unhandled message', msg); -}; - -// WebSocket-based client link -const setupWebSocketLink = () => { - const port = 3000; - const wss = new WebSocket.Server({ port }); - - wss.on('connection', (ws) => { - logger.log('client connected'); - - ws.on('message', (json) => { - const msg = deserializeObject(json); - handleLinkMessage(msg); - }); - - ws.on('close', () => { - logger.log('client disconnected'); - }); - }); - - logger.log(`listening on port ${port} (WebSocket)`); - return wss; -}; - -// One way HTTP-based client link for IE8 -const setupHttpLink = () => { - const port = 3001; + sendMessage(ws, msg) { + ws.send(JSON.stringify(msg)); + } - const server = http.createServer((req, res) => { - if (req.method === 'POST') { - let body = ''; - req.on('data', (chunk) => { - body += chunk.toString(); - }); - req.on('end', () => { - const msg = deserializeObject(body); - handleLinkMessage(msg); - res.end(); - }); + broadcastMessage(msg) { + const clients = [...this.wss.clients]; + if (clients.length === 0) { return; } - res.write('Hello'); - res.end(); - }); + logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); + for (let client of clients) { + const json = JSON.stringify(msg); + client.send(json); + } + } +} - server.listen(port); - logger.log(`listening on port ${port} (HTTP)`); +const deserializeObject = (str) => { + return JSON.parse(str, (key, value) => { + if (typeof value === 'object' && value !== null) { + if (value.__undefined__) { + // NOTE: You should not rely on deserialized object's undefined, + // this is purely for inspection purposes. + return { + [inspect.custom]: () => undefined, + }; + } + if (value.__number__) { + return parseFloat(value.__number__); + } + if (value.__error__) { + if (!value.stack) { + return value.string; + } + return retrace(value.stack); + } + return value; + } + return value; + }); }; diff --git a/tgui/packages/common/logging.js b/tgui/packages/tgui-dev-server/logging.js similarity index 91% rename from tgui/packages/common/logging.js rename to tgui/packages/tgui-dev-server/logging.js index ba3ae75d0246..4ec09008ff50 100644 --- a/tgui/packages/common/logging.js +++ b/tgui/packages/tgui-dev-server/logging.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + const inception = Date.now(); // Runtime detection @@ -41,7 +47,10 @@ const getPrefix = (() => { styles.bright, ]; } - return (ns) => [`${getTimestamp()} ${ns}`]; + // prettier-ignore + return ns => [ + `${getTimestamp()} ${ns}`, + ]; })(); /** diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index 18fcd54a417b..496e25c6c184 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,12 +1,13 @@ { "private": true, "name": "tgui-dev-server", - "version": "3.0.0", + "version": "5.0.0", "type": "module", "dependencies": { - "glob": "^7.1.4", - "source-map": "^0.7.3", - "stacktrace-parser": "^0.1.7", - "ws": "^7.4.6" + "axios": "^1.6.2", + "glob": "^7.2.0", + "source-map": "^0.7.4", + "stacktrace-parser": "^0.1.10", + "ws": "^8.14.2" } } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index ca650be4b5e7..cb477a6523b0 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -1,8 +1,15 @@ -import { createLogger } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; import os from 'os'; import { basename } from 'path'; -import { promisify } from 'util'; + +import { DreamSeeker } from './dreamseeker.js'; +import { createLogger } from './logging.js'; import { resolveGlob, resolvePath } from './util.js'; import { regQuery } from './winreg.js'; @@ -37,7 +44,7 @@ export const findCacheRoot = async () => { const paths = await resolveGlob(pattern); if (paths.length > 0) { cacheRoot = paths[0]; - logger.log(`found cache at '${cacheRoot}'`); + onCacheRootFound(cacheRoot); return cacheRoot; } } @@ -46,14 +53,24 @@ export const findCacheRoot = async () => { logger.log('querying windows registry'); let userpath = await regQuery('HKCU\\Software\\Dantom\\BYOND', 'userpath'); if (userpath) { - cacheRoot = userpath.replace(/\\$/, '').replace(/\\/g, '/') + '/cache'; - logger.log(`found cache at '${cacheRoot}'`); + // prettier-ignore + cacheRoot = userpath + .replace(/\\$/, '') + .replace(/\\/g, '/') + + '/cache'; + onCacheRootFound(cacheRoot); return cacheRoot; } } logger.log('found no cache directories'); }; +const onCacheRootFound = (cacheRoot) => { + logger.log(`found cache at '${cacheRoot}'`); + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. + fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); +}; + export const reloadByondCache = async (bundleDir) => { const cacheRoot = await findCacheRoot(); if (!cacheRoot) { @@ -65,18 +82,49 @@ export const reloadByondCache = async (bundleDir) => { logger.log('found no tmp folder in cache'); return; } - const assets = await resolveGlob(bundleDir, './*.+(bundle|hot-update).*'); + // Get dreamseeker instances + const pids = cacheDirs.map((cacheDir) => + parseInt(cacheDir.split('/cache/tmp').pop(), 10), + ); + const dssPromise = DreamSeeker.getInstancesByPids(pids); + // Copy assets + const assets = await resolveGlob( + bundleDir, + './*.+(bundle|chunk|hot-update).*', + ); for (let cacheDir of cacheDirs) { // Clear garbage - const garbage = await resolveGlob(cacheDir, './*.+(bundle|hot-update).*'); - for (let file of garbage) { - await promisify(fs.unlink)(file); + const garbage = await resolveGlob( + cacheDir, + './*.+(bundle|chunk|hot-update).*', + ); + try { + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. + fs.closeSync(fs.openSync(cacheDir + '/dummy', 'w')); + + for (let file of garbage) { + fs.unlinkSync(file); + } + // Copy assets + for (let asset of assets) { + const destination = resolvePath(cacheDir, basename(asset)); + fs.writeFileSync(destination, fs.readFileSync(asset)); + } + logger.log(`copied ${assets.length} files to '${cacheDir}'`); + } catch (err) { + logger.error(`failed copying to '${cacheDir}'`); + logger.error(err); } - // Copy assets - for (let asset of assets) { - const destination = resolvePath(cacheDir, basename(asset)); - await promisify(fs.copyFile)(asset, destination); + } + // Notify dreamseeker + const dss = await dssPromise; + if (dss.length > 0) { + logger.log(`notifying dreamseeker`); + for (let dreamseeker of dss) { + dreamseeker.topic({ + tgui: 1, + type: 'cacheReloaded', + }); } - logger.log(`copied ${assets.length} files to '${cacheDir}'`); } }; diff --git a/tgui/packages/tgui-dev-server/require.js b/tgui/packages/tgui-dev-server/require.js new file mode 100644 index 000000000000..0551d630fc68 --- /dev/null +++ b/tgui/packages/tgui-dev-server/require.js @@ -0,0 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { createRequire } from 'module'; + +export const require = createRequire(import.meta.url); diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js index 21214172963d..79190fe189a4 100644 --- a/tgui/packages/tgui-dev-server/util.js +++ b/tgui/packages/tgui-dev-server/util.js @@ -1,22 +1,30 @@ -import glob from 'glob'; -import { resolve as resolvePath } from 'path'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; -import { promisify } from 'util'; +import path from 'path'; + +import { require } from './require.js'; + +const globPkg = require('glob'); -export { resolvePath }; +export const resolvePath = path.resolve; /** * Combines path.resolve with glob patterns. */ -export const resolveGlob = async (...sections) => { - const unsafePaths = await promisify(glob)(resolvePath(...sections), { +export const resolveGlob = (...sections) => { + const unsafePaths = globPkg.sync(path.resolve(...sections), { strict: false, silent: true, }); const safePaths = []; for (let path of unsafePaths) { try { - await promisify(fs.stat)(path); + fs.statSync(path); safePaths.push(path); } catch {} } diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js index 77b4659ff385..e4fbdeb9f1e2 100644 --- a/tgui/packages/tgui-dev-server/webpack.js +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -1,54 +1,84 @@ -import { createLogger } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; import { createRequire } from 'module'; -import { promisify } from 'util'; -import webpack from 'webpack'; -import { broadcastMessage, loadSourceMaps, setupLink } from './link/server.js'; +import { dirname } from 'path'; + +import { loadSourceMaps, setupLink } from './link/server.js'; +import { createLogger } from './logging.js'; import { reloadByondCache } from './reloader.js'; import { resolveGlob } from './util.js'; const logger = createLogger('webpack'); -export const getWebpackConfig = async (options) => { - const require = createRequire(import.meta.url); - const createConfig = await require('../tgui/webpack.config.js'); - return createConfig({}, options); +/** + * @param {any} config + * @return {WebpackCompiler} + */ +export const createCompiler = async (options) => { + const compiler = new WebpackCompiler(); + await compiler.setup(options); + return compiler; }; -export const setupWebpack = async (config) => { - logger.log('setting up'); - const bundleDir = config.output.path; - // Setup link - const link = setupLink(); - // Instantiate the compiler - const compiler = webpack(config); - // Clear garbage before compiling - compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { - const files = await resolveGlob(bundleDir, './*.hot-update.*'); - logger.log(`clearing garbage (${files.length} files)`); - for (let file of files) { - await promisify(fs.unlink)(file); +class WebpackCompiler { + async setup(options) { + // Create a require context that is relative to project root + // and retrieve all necessary dependencies. + const requireFromRoot = createRequire(dirname(import.meta.url) + '/../..'); + const webpack = await requireFromRoot('webpack'); + const createConfig = await requireFromRoot('./webpack.config.js'); + const config = createConfig({}, options); + // Inject the HMR plugin into the config if we're using it + if (options.hot) { + config.plugins.push(new webpack.HotModuleReplacementPlugin()); } - logger.log('compiling'); - }); - // Start reloading when it's finished - compiler.hooks.done.tap('tgui-dev-server', async (stats) => { - // Load source maps - await loadSourceMaps(bundleDir); - // Reload cache - await reloadByondCache(bundleDir); - // Notify all clients that update has happened - broadcastMessage(link, { - type: 'hotUpdate', + this.webpack = webpack; + this.config = config; + this.bundleDir = config.output.path; + } + + async watch() { + logger.log('setting up'); + // Setup link + const link = setupLink(); + // Instantiate the compiler + const compiler = this.webpack.webpack(this.config); + // Clear garbage before compiling + compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { + const files = await resolveGlob(this.bundleDir, './*.hot-update.*'); + logger.log(`clearing garbage (${files.length} files)`); + for (let file of files) { + fs.unlinkSync(file); + } + logger.log('compiling'); }); - }); - // Start watching - logger.log('watching for changes'); - compiler.watch({}, (err, stats) => { - if (err) { - logger.error('compilation error', err); - return; - } - logger.log(stats.toString(config.devServer.stats)); - }); -}; + // Start reloading when it's finished + compiler.hooks.done.tap('tgui-dev-server', async (stats) => { + // Load source maps + await loadSourceMaps(this.bundleDir); + // Reload cache + await reloadByondCache(this.bundleDir); + // Notify all clients that update has happened + link.broadcastMessage({ + type: 'hotUpdate', + }); + }); + // Start watching + logger.log('watching for changes'); + compiler.watch({}, (err, stats) => { + if (err) { + logger.error('compilation error', err); + return; + } + stats + .toString(this.config.devServer.stats) + .split('\n') + .forEach((line) => logger.log(line)); + }); + } +} diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js index a8f755bb32d9..43a417019071 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -1,11 +1,16 @@ /** - * @file * Tools for dealing with Windows Registry bullshit. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT */ + import { exec } from 'child_process'; -import { createLogger } from 'common/logging.js'; import { promisify } from 'util'; +import { createLogger } from './logging.js'; + const logger = createLogger('winreg'); export const regQuery = async (path, key) => { @@ -31,8 +36,8 @@ export const regQuery = async (path, key) => { logger.error('could not find the start of the key value'); return null; } - const value = stdout.substring(indexOfValue + 4, indexOfEol); - return value; + + return stdout.substring(indexOfValue + 4, indexOfEol); } catch (err) { logger.error(err); return null; diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.js new file mode 100644 index 000000000000..2b92995287fa --- /dev/null +++ b/tgui/packages/tgui-panel/Notifications.js @@ -0,0 +1,28 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Flex } from 'tgui/components'; + +export const Notifications = (props) => { + const { children } = props; + return
        {children}
        ; +}; + +const NotificationsItem = (props) => { + const { rightSlot, children } = props; + return ( + + + {children} + + {rightSlot && ( + {rightSlot} + )} + + ); +}; + +Notifications.Item = NotificationsItem; diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.js new file mode 100644 index 000000000000..f32c0ed69beb --- /dev/null +++ b/tgui/packages/tgui-panel/Panel.js @@ -0,0 +1,130 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Button, Section, Stack } from 'tgui/components'; +import { Pane } from 'tgui/layouts'; +import { NowPlayingWidget, useAudio } from './audio'; +import { ChatPanel, ChatTabs } from './chat'; +import { useGame } from './game'; +import { Notifications } from './Notifications'; +import { PingIndicator } from './ping'; +import { ReconnectButton } from './reconnect'; +import { SettingsPanel, useSettings } from './settings'; + +export const Panel = (props, context) => { + // IE8-10: Needs special treatment due to missing Flex support + if (Byond.IS_LTE_IE10) { + return ; + } + const audio = useAudio(context); + const settings = useSettings(context); + const game = useGame(context); + if (process.env.NODE_ENV !== 'production') { + const { useDebug, KitchenSink } = require('tgui/debug'); + const debug = useDebug(context); + if (debug.kitchenSink) { + return ; + } + } + return ( + + + +
        + + + + + + + + +
        +
        + {audio.visible && ( + +
        + +
        +
        + )} + {settings.visible && ( + + + + )} + +
        + + + + + {game.connectionLostAt && ( + }> + You are either AFK, experiencing lag or the connection has + closed. + + )} + {game.roundRestartedAt && ( + + The connection has been closed because the server is + restarting.
        Please wait while you automatically + reconnect. +
        + )} +
        +
        +
        +
        +
        + ); +}; + +const HoboPanel = (props, context) => { + const settings = useSettings(context); + return ( + + + + {(settings.visible && ) || ( + + )} + + + ); +}; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js new file mode 100644 index 000000000000..6670fe0d5522 --- /dev/null +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js @@ -0,0 +1,72 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { toFixed } from 'common/math'; +import { useDispatch, useSelector } from 'common/redux'; +import { Button, Flex, Knob } from 'tgui/components'; +import { useSettings } from '../settings'; +import { selectAudio } from './selectors'; + +export const NowPlayingWidget = (props, context) => { + const audio = useSelector(context, selectAudio); + const dispatch = useDispatch(context); + const settings = useSettings(context); + const title = audio.meta?.title; + return ( + + {(audio.playing && ( + <> + + Now playing: + + + {title || 'Unknown Track'} + + + )) || ( + + Nothing to play. + + )} + {audio.playing && ( + + + )} + + ); + } +} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.js new file mode 100644 index 000000000000..02590dfd912a --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatTabs.js @@ -0,0 +1,71 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useDispatch, useSelector } from 'common/redux'; +import { Box, Tabs, Flex, Button } from 'tgui/components'; +import { changeChatPage, addChatPage } from './actions'; +import { selectChatPages, selectCurrentChatPage } from './selectors'; +import { openChatSettings } from '../settings/actions'; + +const UnreadCountWidget = ({ value }) => ( + + {Math.min(value, 99)} + +); + +export const ChatTabs = (props, context) => { + const pages = useSelector(context, selectChatPages); + const currentPage = useSelector(context, selectCurrentChatPage); + const dispatch = useDispatch(context); + return ( + + + + {pages.map((page) => ( + 0 && ( + + ) + } + onClick={() => + dispatch( + changeChatPage({ + pageId: page.id, + }) + ) + } + > + {page.name} + + ))} + + + + + + Can freeze the chat for a while. + + + + ); +}; + +const TextHighlightSetting = (props, context) => { + const { id, ...rest } = props; + const highlightSettingById = useSelector(context, selectHighlightSettingById); + const dispatch = useDispatch(context); + const { + highlightColor, + highlightText, + highlightWholeMessage, + matchWord, + matchCase, + } = highlightSettingById[id]; + return ( + + + +